@elizaos/client 1.6.3-alpha.9 → 1.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/dist/assets/{_basePickBy-D1VwWj4y.js → _basePickBy-CF7u0JoM.js} +2 -2
  2. package/dist/assets/{_basePickBy-D1VwWj4y.js.map → _basePickBy-CF7u0JoM.js.map} +1 -1
  3. package/dist/assets/{_baseUniq-BqneJ7vC.js → _baseUniq-C01nKZPU.js} +2 -2
  4. package/dist/assets/{_baseUniq-BqneJ7vC.js.map → _baseUniq-C01nKZPU.js.map} +1 -1
  5. package/dist/assets/{arc-B41HBJYw.js → arc-CvfPh49h.js} +2 -2
  6. package/dist/assets/{arc-B41HBJYw.js.map → arc-CvfPh49h.js.map} +1 -1
  7. package/dist/assets/{architectureDiagram-VXUJARFQ-DTblZJPk.js → architectureDiagram-VXUJARFQ-Cx-DJdd9.js} +2 -2
  8. package/dist/assets/{architectureDiagram-VXUJARFQ-DTblZJPk.js.map → architectureDiagram-VXUJARFQ-Cx-DJdd9.js.map} +1 -1
  9. package/dist/assets/{blockDiagram-VD42YOAC-BMM1ENpW.js → blockDiagram-VD42YOAC-CjZi8L8b.js} +2 -2
  10. package/dist/assets/{blockDiagram-VD42YOAC-BMM1ENpW.js.map → blockDiagram-VD42YOAC-CjZi8L8b.js.map} +1 -1
  11. package/dist/assets/{c4Diagram-YG6GDRKO-0_tm3K4y.js → c4Diagram-YG6GDRKO-C7VSQCDP.js} +2 -2
  12. package/dist/assets/{c4Diagram-YG6GDRKO-0_tm3K4y.js.map → c4Diagram-YG6GDRKO-C7VSQCDP.js.map} +1 -1
  13. package/dist/assets/{channel-CzviH7wi.js → channel-jS3fITDG.js} +2 -2
  14. package/dist/assets/{channel-CzviH7wi.js.map → channel-jS3fITDG.js.map} +1 -1
  15. package/dist/assets/{chunk-4BX2VUAB-BdiEiQKw.js → chunk-4BX2VUAB-BzqE3lym.js} +2 -2
  16. package/dist/assets/{chunk-4BX2VUAB-BdiEiQKw.js.map → chunk-4BX2VUAB-BzqE3lym.js.map} +1 -1
  17. package/dist/assets/{chunk-55IACEB6-o-GxTW9D.js → chunk-55IACEB6-DxGUJrft.js} +2 -2
  18. package/dist/assets/{chunk-55IACEB6-o-GxTW9D.js.map → chunk-55IACEB6-DxGUJrft.js.map} +1 -1
  19. package/dist/assets/{chunk-B4BG7PRW-qIW-HouX.js → chunk-B4BG7PRW-8qRdtArO.js} +2 -2
  20. package/dist/assets/{chunk-B4BG7PRW-qIW-HouX.js.map → chunk-B4BG7PRW-8qRdtArO.js.map} +1 -1
  21. package/dist/assets/{chunk-DI55MBZ5-CUalBYtH.js → chunk-DI55MBZ5-Ux1QOzUy.js} +2 -2
  22. package/dist/assets/{chunk-DI55MBZ5-CUalBYtH.js.map → chunk-DI55MBZ5-Ux1QOzUy.js.map} +1 -1
  23. package/dist/assets/{chunk-FMBD7UC4-DvTLIOqx.js → chunk-FMBD7UC4-CuR8eQbP.js} +2 -2
  24. package/dist/assets/{chunk-FMBD7UC4-DvTLIOqx.js.map → chunk-FMBD7UC4-CuR8eQbP.js.map} +1 -1
  25. package/dist/assets/{chunk-QN33PNHL-IzRCZEG_.js → chunk-QN33PNHL-B8CCHcFQ.js} +2 -2
  26. package/dist/assets/{chunk-QN33PNHL-IzRCZEG_.js.map → chunk-QN33PNHL-B8CCHcFQ.js.map} +1 -1
  27. package/dist/assets/{chunk-QZHKN3VN-Ce2AFs__.js → chunk-QZHKN3VN-59ReDUUS.js} +2 -2
  28. package/dist/assets/{chunk-QZHKN3VN-Ce2AFs__.js.map → chunk-QZHKN3VN-59ReDUUS.js.map} +1 -1
  29. package/dist/assets/{chunk-TZMSLE5B-BJW4UVSc.js → chunk-TZMSLE5B-yB8S-MoI.js} +2 -2
  30. package/dist/assets/{chunk-TZMSLE5B-BJW4UVSc.js.map → chunk-TZMSLE5B-yB8S-MoI.js.map} +1 -1
  31. package/dist/assets/classDiagram-2ON5EDUG-CX-ma-72.js +2 -0
  32. package/dist/assets/{classDiagram-2ON5EDUG-B0ASNnbX.js.map → classDiagram-2ON5EDUG-CX-ma-72.js.map} +1 -1
  33. package/dist/assets/classDiagram-v2-WZHVMYZB-CX-ma-72.js +2 -0
  34. package/dist/assets/{classDiagram-v2-WZHVMYZB-B0ASNnbX.js.map → classDiagram-v2-WZHVMYZB-CX-ma-72.js.map} +1 -1
  35. package/dist/assets/{clone-DuI60JlF.js → clone-B1cS_P1m.js} +2 -2
  36. package/dist/assets/{clone-DuI60JlF.js.map → clone-B1cS_P1m.js.map} +1 -1
  37. package/dist/assets/{cose-bilkent-S5V4N54A-BFURzd3k.js → cose-bilkent-S5V4N54A-WaA6My8T.js} +2 -2
  38. package/dist/assets/{cose-bilkent-S5V4N54A-BFURzd3k.js.map → cose-bilkent-S5V4N54A-WaA6My8T.js.map} +1 -1
  39. package/dist/assets/{dagre-6UL2VRFP-2NloE4Yi.js → dagre-6UL2VRFP-WTXafpU6.js} +2 -2
  40. package/dist/assets/{dagre-6UL2VRFP-2NloE4Yi.js.map → dagre-6UL2VRFP-WTXafpU6.js.map} +1 -1
  41. package/dist/assets/{diagram-PSM6KHXK-7x7Qnd4X.js → diagram-PSM6KHXK-CoH6fjzQ.js} +2 -2
  42. package/dist/assets/{diagram-PSM6KHXK-7x7Qnd4X.js.map → diagram-PSM6KHXK-CoH6fjzQ.js.map} +1 -1
  43. package/dist/assets/{diagram-QEK2KX5R-B0NXXuOV.js → diagram-QEK2KX5R-Oljv-_39.js} +2 -2
  44. package/dist/assets/{diagram-QEK2KX5R-B0NXXuOV.js.map → diagram-QEK2KX5R-Oljv-_39.js.map} +1 -1
  45. package/dist/assets/{diagram-S2PKOQOG-a74j2Pdd.js → diagram-S2PKOQOG-Gg4hR71b.js} +2 -2
  46. package/dist/assets/{diagram-S2PKOQOG-a74j2Pdd.js.map → diagram-S2PKOQOG-Gg4hR71b.js.map} +1 -1
  47. package/dist/assets/{erDiagram-Q2GNP2WA-k-KyHPId.js → erDiagram-Q2GNP2WA-DB7tjULu.js} +2 -2
  48. package/dist/assets/{erDiagram-Q2GNP2WA-k-KyHPId.js.map → erDiagram-Q2GNP2WA-DB7tjULu.js.map} +1 -1
  49. package/dist/assets/{flowDiagram-NV44I4VS-Dl-K34yG.js → flowDiagram-NV44I4VS-DzT5xRq3.js} +2 -2
  50. package/dist/assets/{flowDiagram-NV44I4VS-Dl-K34yG.js.map → flowDiagram-NV44I4VS-DzT5xRq3.js.map} +1 -1
  51. package/dist/assets/{ganttDiagram-LVOFAZNH-B6eaVPpp.js → ganttDiagram-LVOFAZNH-D2NBbgM6.js} +2 -2
  52. package/dist/assets/{ganttDiagram-LVOFAZNH-B6eaVPpp.js.map → ganttDiagram-LVOFAZNH-D2NBbgM6.js.map} +1 -1
  53. package/dist/assets/{gitGraphDiagram-NY62KEGX-BdOMe-oh.js → gitGraphDiagram-NY62KEGX-BzXJHLw9.js} +2 -2
  54. package/dist/assets/{gitGraphDiagram-NY62KEGX-BdOMe-oh.js.map → gitGraphDiagram-NY62KEGX-BzXJHLw9.js.map} +1 -1
  55. package/dist/assets/{graph-BCeOLFp6.js → graph-DNJkdAax.js} +2 -2
  56. package/dist/assets/{graph-BCeOLFp6.js.map → graph-DNJkdAax.js.map} +1 -1
  57. package/dist/assets/{infoDiagram-F6ZHWCRC-DLB1jYji.js → infoDiagram-F6ZHWCRC-Bt1j9OBZ.js} +2 -2
  58. package/dist/assets/{infoDiagram-F6ZHWCRC-DLB1jYji.js.map → infoDiagram-F6ZHWCRC-Bt1j9OBZ.js.map} +1 -1
  59. package/dist/assets/{journeyDiagram-XKPGCS4Q-CEkRszjc.js → journeyDiagram-XKPGCS4Q-CpBwKMO2.js} +2 -2
  60. package/dist/assets/{journeyDiagram-XKPGCS4Q-CEkRszjc.js.map → journeyDiagram-XKPGCS4Q-CpBwKMO2.js.map} +1 -1
  61. package/dist/assets/{kanban-definition-3W4ZIXB7-DvGzdmFz.js → kanban-definition-3W4ZIXB7-BM-_9-8C.js} +2 -2
  62. package/dist/assets/{kanban-definition-3W4ZIXB7-DvGzdmFz.js.map → kanban-definition-3W4ZIXB7-BM-_9-8C.js.map} +1 -1
  63. package/dist/assets/{layout-DqFGgFXM.js → layout-C9Bg2dBa.js} +2 -2
  64. package/dist/assets/{layout-DqFGgFXM.js.map → layout-C9Bg2dBa.js.map} +1 -1
  65. package/dist/assets/{linear-oKTGuyqU.js → linear-BTJsW5AR.js} +2 -2
  66. package/dist/assets/{linear-oKTGuyqU.js.map → linear-BTJsW5AR.js.map} +1 -1
  67. package/dist/assets/{main-B_rmFN-P.css → main-BGaTIf-Q.css} +1 -1
  68. package/dist/assets/{main-Chbvf6JP.js → main-BaebWasr.js} +4 -4
  69. package/dist/assets/{main-Chbvf6JP.js.map → main-BaebWasr.js.map} +1 -1
  70. package/dist/assets/{main-C81Et7oP.js → main-CWkZDH4r.js} +3 -3
  71. package/dist/assets/{main-C81Et7oP.js.map → main-CWkZDH4r.js.map} +1 -1
  72. package/dist/assets/{mermaid.core-rWg6JcoC.js → mermaid.core-BymI4HJS.js} +6 -6
  73. package/dist/assets/{mermaid.core-rWg6JcoC.js.map → mermaid.core-BymI4HJS.js.map} +1 -1
  74. package/dist/assets/{mindmap-definition-VGOIOE7T-CHrK3W4B.js → mindmap-definition-VGOIOE7T-CLTEnp2P.js} +2 -2
  75. package/dist/assets/{mindmap-definition-VGOIOE7T-CHrK3W4B.js.map → mindmap-definition-VGOIOE7T-CLTEnp2P.js.map} +1 -1
  76. package/dist/assets/{pieDiagram-ADFJNKIX-BL-nn_b4.js → pieDiagram-ADFJNKIX-Bw0donk2.js} +2 -2
  77. package/dist/assets/{pieDiagram-ADFJNKIX-BL-nn_b4.js.map → pieDiagram-ADFJNKIX-Bw0donk2.js.map} +1 -1
  78. package/dist/assets/{quadrantDiagram-AYHSOK5B-Cxy4jxbg.js → quadrantDiagram-AYHSOK5B-Cm8mUfGa.js} +2 -2
  79. package/dist/assets/{quadrantDiagram-AYHSOK5B-Cxy4jxbg.js.map → quadrantDiagram-AYHSOK5B-Cm8mUfGa.js.map} +1 -1
  80. package/dist/assets/{requirementDiagram-UZGBJVZJ-Cza4HxEz.js → requirementDiagram-UZGBJVZJ-C_f1ywi-.js} +2 -2
  81. package/dist/assets/{requirementDiagram-UZGBJVZJ-Cza4HxEz.js.map → requirementDiagram-UZGBJVZJ-C_f1ywi-.js.map} +1 -1
  82. package/dist/assets/{sankeyDiagram-TZEHDZUN-qwIj1xsG.js → sankeyDiagram-TZEHDZUN-DTNFZCdJ.js} +2 -2
  83. package/dist/assets/{sankeyDiagram-TZEHDZUN-qwIj1xsG.js.map → sankeyDiagram-TZEHDZUN-DTNFZCdJ.js.map} +1 -1
  84. package/dist/assets/{sequenceDiagram-WL72ISMW-C9_twmEc.js → sequenceDiagram-WL72ISMW-TGqxh1eL.js} +2 -2
  85. package/dist/assets/{sequenceDiagram-WL72ISMW-C9_twmEc.js.map → sequenceDiagram-WL72ISMW-TGqxh1eL.js.map} +1 -1
  86. package/dist/assets/{stateDiagram-FKZM4ZOC-B33VNknZ.js → stateDiagram-FKZM4ZOC-BI4QdIXS.js} +2 -2
  87. package/dist/assets/{stateDiagram-FKZM4ZOC-B33VNknZ.js.map → stateDiagram-FKZM4ZOC-BI4QdIXS.js.map} +1 -1
  88. package/dist/assets/stateDiagram-v2-4FDKWEC3-DSN57ySy.js +2 -0
  89. package/dist/assets/{stateDiagram-v2-4FDKWEC3-DOXH6dJF.js.map → stateDiagram-v2-4FDKWEC3-DSN57ySy.js.map} +1 -1
  90. package/dist/assets/{timeline-definition-IT6M3QCI-BU2GcjD5.js → timeline-definition-IT6M3QCI-PXMMkiNk.js} +2 -2
  91. package/dist/assets/{timeline-definition-IT6M3QCI-BU2GcjD5.js.map → timeline-definition-IT6M3QCI-PXMMkiNk.js.map} +1 -1
  92. package/dist/assets/{treemap-KMMF4GRG-C2Sf7oH-.js → treemap-KMMF4GRG-DZ3dLkt9.js} +2 -2
  93. package/dist/assets/{treemap-KMMF4GRG-C2Sf7oH-.js.map → treemap-KMMF4GRG-DZ3dLkt9.js.map} +1 -1
  94. package/dist/assets/{xychartDiagram-PRI3JC2R-CJQGMN6m.js → xychartDiagram-PRI3JC2R-DQlXFKme.js} +2 -2
  95. package/dist/assets/{xychartDiagram-PRI3JC2R-CJQGMN6m.js.map → xychartDiagram-PRI3JC2R-DQlXFKme.js.map} +1 -1
  96. package/dist/index.html +1 -1
  97. package/package.json +4 -4
  98. package/src/components/ai-elements/__tests__/response.test.tsx +157 -158
  99. package/src/components/ai-elements/response.tsx +7 -10
  100. package/src/components/chat.tsx +7 -7
  101. package/src/index.css +1 -1
  102. package/dist/assets/classDiagram-2ON5EDUG-B0ASNnbX.js +0 -2
  103. package/dist/assets/classDiagram-v2-WZHVMYZB-B0ASNnbX.js +0 -2
  104. package/dist/assets/stateDiagram-v2-4FDKWEC3-DOXH6dJF.js +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"cose-bilkent-S5V4N54A-BFURzd3k.js","sources":["../../../../node_modules/layout-base/layout-base.js","../../../../node_modules/cose-base/cose-base.js","../../../../node_modules/cytoscape-cose-bilkent/cytoscape-cose-bilkent.js","../../../../node_modules/mermaid/dist/chunks/mermaid.core/cose-bilkent-S5V4N54A.mjs"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"layoutBase\"] = factory();\n\telse\n\t\troot[\"layoutBase\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 26);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction LayoutConstants() {}\n\n/**\r\n * Layout Quality: 0:draft, 1:default, 2:proof\r\n */\nLayoutConstants.QUALITY = 1;\n\n/**\r\n * Default parameters\r\n */\nLayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED = false;\nLayoutConstants.DEFAULT_INCREMENTAL = false;\nLayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT = true;\nLayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT = false;\nLayoutConstants.DEFAULT_ANIMATION_PERIOD = 50;\nLayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES = false;\n\n// -----------------------------------------------------------------------------\n// Section: General other constants\n// -----------------------------------------------------------------------------\n/*\r\n * Margins of a graph to be applied on bouding rectangle of its contents. We\r\n * assume margins on all four sides to be uniform.\r\n */\nLayoutConstants.DEFAULT_GRAPH_MARGIN = 15;\n\n/*\r\n * Whether to consider labels in node dimensions or not\r\n */\nLayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = false;\n\n/*\r\n * Default dimension of a non-compound node.\r\n */\nLayoutConstants.SIMPLE_NODE_SIZE = 40;\n\n/*\r\n * Default dimension of a non-compound node.\r\n */\nLayoutConstants.SIMPLE_NODE_HALF_SIZE = LayoutConstants.SIMPLE_NODE_SIZE / 2;\n\n/*\r\n * Empty compound node size. When a compound node is empty, its both\r\n * dimensions should be of this value.\r\n */\nLayoutConstants.EMPTY_COMPOUND_NODE_SIZE = 40;\n\n/*\r\n * Minimum length that an edge should take during layout\r\n */\nLayoutConstants.MIN_EDGE_LENGTH = 1;\n\n/*\r\n * World boundaries that layout operates on\r\n */\nLayoutConstants.WORLD_BOUNDARY = 1000000;\n\n/*\r\n * World boundaries that random positioning can be performed with\r\n */\nLayoutConstants.INITIAL_WORLD_BOUNDARY = LayoutConstants.WORLD_BOUNDARY / 1000;\n\n/*\r\n * Coordinates of the world center\r\n */\nLayoutConstants.WORLD_CENTER_X = 1200;\nLayoutConstants.WORLD_CENTER_Y = 900;\n\nmodule.exports = LayoutConstants;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LGraphObject = __webpack_require__(2);\nvar IGeometry = __webpack_require__(8);\nvar IMath = __webpack_require__(9);\n\nfunction LEdge(source, target, vEdge) {\n LGraphObject.call(this, vEdge);\n\n this.isOverlapingSourceAndTarget = false;\n this.vGraphObject = vEdge;\n this.bendpoints = [];\n this.source = source;\n this.target = target;\n}\n\nLEdge.prototype = Object.create(LGraphObject.prototype);\n\nfor (var prop in LGraphObject) {\n LEdge[prop] = LGraphObject[prop];\n}\n\nLEdge.prototype.getSource = function () {\n return this.source;\n};\n\nLEdge.prototype.getTarget = function () {\n return this.target;\n};\n\nLEdge.prototype.isInterGraph = function () {\n return this.isInterGraph;\n};\n\nLEdge.prototype.getLength = function () {\n return this.length;\n};\n\nLEdge.prototype.isOverlapingSourceAndTarget = function () {\n return this.isOverlapingSourceAndTarget;\n};\n\nLEdge.prototype.getBendpoints = function () {\n return this.bendpoints;\n};\n\nLEdge.prototype.getLca = function () {\n return this.lca;\n};\n\nLEdge.prototype.getSourceInLca = function () {\n return this.sourceInLca;\n};\n\nLEdge.prototype.getTargetInLca = function () {\n return this.targetInLca;\n};\n\nLEdge.prototype.getOtherEnd = function (node) {\n if (this.source === node) {\n return this.target;\n } else if (this.target === node) {\n return this.source;\n } else {\n throw \"Node is not incident with this edge\";\n }\n};\n\nLEdge.prototype.getOtherEndInGraph = function (node, graph) {\n var otherEnd = this.getOtherEnd(node);\n var root = graph.getGraphManager().getRoot();\n\n while (true) {\n if (otherEnd.getOwner() == graph) {\n return otherEnd;\n }\n\n if (otherEnd.getOwner() == root) {\n break;\n }\n\n otherEnd = otherEnd.getOwner().getParent();\n }\n\n return null;\n};\n\nLEdge.prototype.updateLength = function () {\n var clipPointCoordinates = new Array(4);\n\n this.isOverlapingSourceAndTarget = IGeometry.getIntersection(this.target.getRect(), this.source.getRect(), clipPointCoordinates);\n\n if (!this.isOverlapingSourceAndTarget) {\n this.lengthX = clipPointCoordinates[0] - clipPointCoordinates[2];\n this.lengthY = clipPointCoordinates[1] - clipPointCoordinates[3];\n\n if (Math.abs(this.lengthX) < 1.0) {\n this.lengthX = IMath.sign(this.lengthX);\n }\n\n if (Math.abs(this.lengthY) < 1.0) {\n this.lengthY = IMath.sign(this.lengthY);\n }\n\n this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY);\n }\n};\n\nLEdge.prototype.updateLengthSimple = function () {\n this.lengthX = this.target.getCenterX() - this.source.getCenterX();\n this.lengthY = this.target.getCenterY() - this.source.getCenterY();\n\n if (Math.abs(this.lengthX) < 1.0) {\n this.lengthX = IMath.sign(this.lengthX);\n }\n\n if (Math.abs(this.lengthY) < 1.0) {\n this.lengthY = IMath.sign(this.lengthY);\n }\n\n this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY);\n};\n\nmodule.exports = LEdge;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction LGraphObject(vGraphObject) {\n this.vGraphObject = vGraphObject;\n}\n\nmodule.exports = LGraphObject;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LGraphObject = __webpack_require__(2);\nvar Integer = __webpack_require__(10);\nvar RectangleD = __webpack_require__(13);\nvar LayoutConstants = __webpack_require__(0);\nvar RandomSeed = __webpack_require__(16);\nvar PointD = __webpack_require__(4);\n\nfunction LNode(gm, loc, size, vNode) {\n //Alternative constructor 1 : LNode(LGraphManager gm, Point loc, Dimension size, Object vNode)\n if (size == null && vNode == null) {\n vNode = loc;\n }\n\n LGraphObject.call(this, vNode);\n\n //Alternative constructor 2 : LNode(Layout layout, Object vNode)\n if (gm.graphManager != null) gm = gm.graphManager;\n\n this.estimatedSize = Integer.MIN_VALUE;\n this.inclusionTreeDepth = Integer.MAX_VALUE;\n this.vGraphObject = vNode;\n this.edges = [];\n this.graphManager = gm;\n\n if (size != null && loc != null) this.rect = new RectangleD(loc.x, loc.y, size.width, size.height);else this.rect = new RectangleD();\n}\n\nLNode.prototype = Object.create(LGraphObject.prototype);\nfor (var prop in LGraphObject) {\n LNode[prop] = LGraphObject[prop];\n}\n\nLNode.prototype.getEdges = function () {\n return this.edges;\n};\n\nLNode.prototype.getChild = function () {\n return this.child;\n};\n\nLNode.prototype.getOwner = function () {\n // if (this.owner != null) {\n // if (!(this.owner == null || this.owner.getNodes().indexOf(this) > -1)) {\n // throw \"assert failed\";\n // }\n // }\n\n return this.owner;\n};\n\nLNode.prototype.getWidth = function () {\n return this.rect.width;\n};\n\nLNode.prototype.setWidth = function (width) {\n this.rect.width = width;\n};\n\nLNode.prototype.getHeight = function () {\n return this.rect.height;\n};\n\nLNode.prototype.setHeight = function (height) {\n this.rect.height = height;\n};\n\nLNode.prototype.getCenterX = function () {\n return this.rect.x + this.rect.width / 2;\n};\n\nLNode.prototype.getCenterY = function () {\n return this.rect.y + this.rect.height / 2;\n};\n\nLNode.prototype.getCenter = function () {\n return new PointD(this.rect.x + this.rect.width / 2, this.rect.y + this.rect.height / 2);\n};\n\nLNode.prototype.getLocation = function () {\n return new PointD(this.rect.x, this.rect.y);\n};\n\nLNode.prototype.getRect = function () {\n return this.rect;\n};\n\nLNode.prototype.getDiagonal = function () {\n return Math.sqrt(this.rect.width * this.rect.width + this.rect.height * this.rect.height);\n};\n\n/**\n * This method returns half the diagonal length of this node.\n */\nLNode.prototype.getHalfTheDiagonal = function () {\n return Math.sqrt(this.rect.height * this.rect.height + this.rect.width * this.rect.width) / 2;\n};\n\nLNode.prototype.setRect = function (upperLeft, dimension) {\n this.rect.x = upperLeft.x;\n this.rect.y = upperLeft.y;\n this.rect.width = dimension.width;\n this.rect.height = dimension.height;\n};\n\nLNode.prototype.setCenter = function (cx, cy) {\n this.rect.x = cx - this.rect.width / 2;\n this.rect.y = cy - this.rect.height / 2;\n};\n\nLNode.prototype.setLocation = function (x, y) {\n this.rect.x = x;\n this.rect.y = y;\n};\n\nLNode.prototype.moveBy = function (dx, dy) {\n this.rect.x += dx;\n this.rect.y += dy;\n};\n\nLNode.prototype.getEdgeListToNode = function (to) {\n var edgeList = [];\n var edge;\n var self = this;\n\n self.edges.forEach(function (edge) {\n\n if (edge.target == to) {\n if (edge.source != self) throw \"Incorrect edge source!\";\n\n edgeList.push(edge);\n }\n });\n\n return edgeList;\n};\n\nLNode.prototype.getEdgesBetween = function (other) {\n var edgeList = [];\n var edge;\n\n var self = this;\n self.edges.forEach(function (edge) {\n\n if (!(edge.source == self || edge.target == self)) throw \"Incorrect edge source and/or target\";\n\n if (edge.target == other || edge.source == other) {\n edgeList.push(edge);\n }\n });\n\n return edgeList;\n};\n\nLNode.prototype.getNeighborsList = function () {\n var neighbors = new Set();\n\n var self = this;\n self.edges.forEach(function (edge) {\n\n if (edge.source == self) {\n neighbors.add(edge.target);\n } else {\n if (edge.target != self) {\n throw \"Incorrect incidency!\";\n }\n\n neighbors.add(edge.source);\n }\n });\n\n return neighbors;\n};\n\nLNode.prototype.withChildren = function () {\n var withNeighborsList = new Set();\n var childNode;\n var children;\n\n withNeighborsList.add(this);\n\n if (this.child != null) {\n var nodes = this.child.getNodes();\n for (var i = 0; i < nodes.length; i++) {\n childNode = nodes[i];\n children = childNode.withChildren();\n children.forEach(function (node) {\n withNeighborsList.add(node);\n });\n }\n }\n\n return withNeighborsList;\n};\n\nLNode.prototype.getNoOfChildren = function () {\n var noOfChildren = 0;\n var childNode;\n\n if (this.child == null) {\n noOfChildren = 1;\n } else {\n var nodes = this.child.getNodes();\n for (var i = 0; i < nodes.length; i++) {\n childNode = nodes[i];\n\n noOfChildren += childNode.getNoOfChildren();\n }\n }\n\n if (noOfChildren == 0) {\n noOfChildren = 1;\n }\n return noOfChildren;\n};\n\nLNode.prototype.getEstimatedSize = function () {\n if (this.estimatedSize == Integer.MIN_VALUE) {\n throw \"assert failed\";\n }\n return this.estimatedSize;\n};\n\nLNode.prototype.calcEstimatedSize = function () {\n if (this.child == null) {\n return this.estimatedSize = (this.rect.width + this.rect.height) / 2;\n } else {\n this.estimatedSize = this.child.calcEstimatedSize();\n this.rect.width = this.estimatedSize;\n this.rect.height = this.estimatedSize;\n\n return this.estimatedSize;\n }\n};\n\nLNode.prototype.scatter = function () {\n var randomCenterX;\n var randomCenterY;\n\n var minX = -LayoutConstants.INITIAL_WORLD_BOUNDARY;\n var maxX = LayoutConstants.INITIAL_WORLD_BOUNDARY;\n randomCenterX = LayoutConstants.WORLD_CENTER_X + RandomSeed.nextDouble() * (maxX - minX) + minX;\n\n var minY = -LayoutConstants.INITIAL_WORLD_BOUNDARY;\n var maxY = LayoutConstants.INITIAL_WORLD_BOUNDARY;\n randomCenterY = LayoutConstants.WORLD_CENTER_Y + RandomSeed.nextDouble() * (maxY - minY) + minY;\n\n this.rect.x = randomCenterX;\n this.rect.y = randomCenterY;\n};\n\nLNode.prototype.updateBounds = function () {\n if (this.getChild() == null) {\n throw \"assert failed\";\n }\n if (this.getChild().getNodes().length != 0) {\n // wrap the children nodes by re-arranging the boundaries\n var childGraph = this.getChild();\n childGraph.updateBounds(true);\n\n this.rect.x = childGraph.getLeft();\n this.rect.y = childGraph.getTop();\n\n this.setWidth(childGraph.getRight() - childGraph.getLeft());\n this.setHeight(childGraph.getBottom() - childGraph.getTop());\n\n // Update compound bounds considering its label properties \n if (LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS) {\n\n var width = childGraph.getRight() - childGraph.getLeft();\n var height = childGraph.getBottom() - childGraph.getTop();\n\n if (this.labelWidth > width) {\n this.rect.x -= (this.labelWidth - width) / 2;\n this.setWidth(this.labelWidth);\n }\n\n if (this.labelHeight > height) {\n if (this.labelPos == \"center\") {\n this.rect.y -= (this.labelHeight - height) / 2;\n } else if (this.labelPos == \"top\") {\n this.rect.y -= this.labelHeight - height;\n }\n this.setHeight(this.labelHeight);\n }\n }\n }\n};\n\nLNode.prototype.getInclusionTreeDepth = function () {\n if (this.inclusionTreeDepth == Integer.MAX_VALUE) {\n throw \"assert failed\";\n }\n return this.inclusionTreeDepth;\n};\n\nLNode.prototype.transform = function (trans) {\n var left = this.rect.x;\n\n if (left > LayoutConstants.WORLD_BOUNDARY) {\n left = LayoutConstants.WORLD_BOUNDARY;\n } else if (left < -LayoutConstants.WORLD_BOUNDARY) {\n left = -LayoutConstants.WORLD_BOUNDARY;\n }\n\n var top = this.rect.y;\n\n if (top > LayoutConstants.WORLD_BOUNDARY) {\n top = LayoutConstants.WORLD_BOUNDARY;\n } else if (top < -LayoutConstants.WORLD_BOUNDARY) {\n top = -LayoutConstants.WORLD_BOUNDARY;\n }\n\n var leftTop = new PointD(left, top);\n var vLeftTop = trans.inverseTransformPoint(leftTop);\n\n this.setLocation(vLeftTop.x, vLeftTop.y);\n};\n\nLNode.prototype.getLeft = function () {\n return this.rect.x;\n};\n\nLNode.prototype.getRight = function () {\n return this.rect.x + this.rect.width;\n};\n\nLNode.prototype.getTop = function () {\n return this.rect.y;\n};\n\nLNode.prototype.getBottom = function () {\n return this.rect.y + this.rect.height;\n};\n\nLNode.prototype.getParent = function () {\n if (this.owner == null) {\n return null;\n }\n\n return this.owner.getParent();\n};\n\nmodule.exports = LNode;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction PointD(x, y) {\n if (x == null && y == null) {\n this.x = 0;\n this.y = 0;\n } else {\n this.x = x;\n this.y = y;\n }\n}\n\nPointD.prototype.getX = function () {\n return this.x;\n};\n\nPointD.prototype.getY = function () {\n return this.y;\n};\n\nPointD.prototype.setX = function (x) {\n this.x = x;\n};\n\nPointD.prototype.setY = function (y) {\n this.y = y;\n};\n\nPointD.prototype.getDifference = function (pt) {\n return new DimensionD(this.x - pt.x, this.y - pt.y);\n};\n\nPointD.prototype.getCopy = function () {\n return new PointD(this.x, this.y);\n};\n\nPointD.prototype.translate = function (dim) {\n this.x += dim.width;\n this.y += dim.height;\n return this;\n};\n\nmodule.exports = PointD;\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LGraphObject = __webpack_require__(2);\nvar Integer = __webpack_require__(10);\nvar LayoutConstants = __webpack_require__(0);\nvar LGraphManager = __webpack_require__(6);\nvar LNode = __webpack_require__(3);\nvar LEdge = __webpack_require__(1);\nvar RectangleD = __webpack_require__(13);\nvar Point = __webpack_require__(12);\nvar LinkedList = __webpack_require__(11);\n\nfunction LGraph(parent, obj2, vGraph) {\n LGraphObject.call(this, vGraph);\n this.estimatedSize = Integer.MIN_VALUE;\n this.margin = LayoutConstants.DEFAULT_GRAPH_MARGIN;\n this.edges = [];\n this.nodes = [];\n this.isConnected = false;\n this.parent = parent;\n\n if (obj2 != null && obj2 instanceof LGraphManager) {\n this.graphManager = obj2;\n } else if (obj2 != null && obj2 instanceof Layout) {\n this.graphManager = obj2.graphManager;\n }\n}\n\nLGraph.prototype = Object.create(LGraphObject.prototype);\nfor (var prop in LGraphObject) {\n LGraph[prop] = LGraphObject[prop];\n}\n\nLGraph.prototype.getNodes = function () {\n return this.nodes;\n};\n\nLGraph.prototype.getEdges = function () {\n return this.edges;\n};\n\nLGraph.prototype.getGraphManager = function () {\n return this.graphManager;\n};\n\nLGraph.prototype.getParent = function () {\n return this.parent;\n};\n\nLGraph.prototype.getLeft = function () {\n return this.left;\n};\n\nLGraph.prototype.getRight = function () {\n return this.right;\n};\n\nLGraph.prototype.getTop = function () {\n return this.top;\n};\n\nLGraph.prototype.getBottom = function () {\n return this.bottom;\n};\n\nLGraph.prototype.isConnected = function () {\n return this.isConnected;\n};\n\nLGraph.prototype.add = function (obj1, sourceNode, targetNode) {\n if (sourceNode == null && targetNode == null) {\n var newNode = obj1;\n if (this.graphManager == null) {\n throw \"Graph has no graph mgr!\";\n }\n if (this.getNodes().indexOf(newNode) > -1) {\n throw \"Node already in graph!\";\n }\n newNode.owner = this;\n this.getNodes().push(newNode);\n\n return newNode;\n } else {\n var newEdge = obj1;\n if (!(this.getNodes().indexOf(sourceNode) > -1 && this.getNodes().indexOf(targetNode) > -1)) {\n throw \"Source or target not in graph!\";\n }\n\n if (!(sourceNode.owner == targetNode.owner && sourceNode.owner == this)) {\n throw \"Both owners must be this graph!\";\n }\n\n if (sourceNode.owner != targetNode.owner) {\n return null;\n }\n\n // set source and target\n newEdge.source = sourceNode;\n newEdge.target = targetNode;\n\n // set as intra-graph edge\n newEdge.isInterGraph = false;\n\n // add to graph edge list\n this.getEdges().push(newEdge);\n\n // add to incidency lists\n sourceNode.edges.push(newEdge);\n\n if (targetNode != sourceNode) {\n targetNode.edges.push(newEdge);\n }\n\n return newEdge;\n }\n};\n\nLGraph.prototype.remove = function (obj) {\n var node = obj;\n if (obj instanceof LNode) {\n if (node == null) {\n throw \"Node is null!\";\n }\n if (!(node.owner != null && node.owner == this)) {\n throw \"Owner graph is invalid!\";\n }\n if (this.graphManager == null) {\n throw \"Owner graph manager is invalid!\";\n }\n // remove incident edges first (make a copy to do it safely)\n var edgesToBeRemoved = node.edges.slice();\n var edge;\n var s = edgesToBeRemoved.length;\n for (var i = 0; i < s; i++) {\n edge = edgesToBeRemoved[i];\n\n if (edge.isInterGraph) {\n this.graphManager.remove(edge);\n } else {\n edge.source.owner.remove(edge);\n }\n }\n\n // now the node itself\n var index = this.nodes.indexOf(node);\n if (index == -1) {\n throw \"Node not in owner node list!\";\n }\n\n this.nodes.splice(index, 1);\n } else if (obj instanceof LEdge) {\n var edge = obj;\n if (edge == null) {\n throw \"Edge is null!\";\n }\n if (!(edge.source != null && edge.target != null)) {\n throw \"Source and/or target is null!\";\n }\n if (!(edge.source.owner != null && edge.target.owner != null && edge.source.owner == this && edge.target.owner == this)) {\n throw \"Source and/or target owner is invalid!\";\n }\n\n var sourceIndex = edge.source.edges.indexOf(edge);\n var targetIndex = edge.target.edges.indexOf(edge);\n if (!(sourceIndex > -1 && targetIndex > -1)) {\n throw \"Source and/or target doesn't know this edge!\";\n }\n\n edge.source.edges.splice(sourceIndex, 1);\n\n if (edge.target != edge.source) {\n edge.target.edges.splice(targetIndex, 1);\n }\n\n var index = edge.source.owner.getEdges().indexOf(edge);\n if (index == -1) {\n throw \"Not in owner's edge list!\";\n }\n\n edge.source.owner.getEdges().splice(index, 1);\n }\n};\n\nLGraph.prototype.updateLeftTop = function () {\n var top = Integer.MAX_VALUE;\n var left = Integer.MAX_VALUE;\n var nodeTop;\n var nodeLeft;\n var margin;\n\n var nodes = this.getNodes();\n var s = nodes.length;\n\n for (var i = 0; i < s; i++) {\n var lNode = nodes[i];\n nodeTop = lNode.getTop();\n nodeLeft = lNode.getLeft();\n\n if (top > nodeTop) {\n top = nodeTop;\n }\n\n if (left > nodeLeft) {\n left = nodeLeft;\n }\n }\n\n // Do we have any nodes in this graph?\n if (top == Integer.MAX_VALUE) {\n return null;\n }\n\n if (nodes[0].getParent().paddingLeft != undefined) {\n margin = nodes[0].getParent().paddingLeft;\n } else {\n margin = this.margin;\n }\n\n this.left = left - margin;\n this.top = top - margin;\n\n // Apply the margins and return the result\n return new Point(this.left, this.top);\n};\n\nLGraph.prototype.updateBounds = function (recursive) {\n // calculate bounds\n var left = Integer.MAX_VALUE;\n var right = -Integer.MAX_VALUE;\n var top = Integer.MAX_VALUE;\n var bottom = -Integer.MAX_VALUE;\n var nodeLeft;\n var nodeRight;\n var nodeTop;\n var nodeBottom;\n var margin;\n\n var nodes = this.nodes;\n var s = nodes.length;\n for (var i = 0; i < s; i++) {\n var lNode = nodes[i];\n\n if (recursive && lNode.child != null) {\n lNode.updateBounds();\n }\n nodeLeft = lNode.getLeft();\n nodeRight = lNode.getRight();\n nodeTop = lNode.getTop();\n nodeBottom = lNode.getBottom();\n\n if (left > nodeLeft) {\n left = nodeLeft;\n }\n\n if (right < nodeRight) {\n right = nodeRight;\n }\n\n if (top > nodeTop) {\n top = nodeTop;\n }\n\n if (bottom < nodeBottom) {\n bottom = nodeBottom;\n }\n }\n\n var boundingRect = new RectangleD(left, top, right - left, bottom - top);\n if (left == Integer.MAX_VALUE) {\n this.left = this.parent.getLeft();\n this.right = this.parent.getRight();\n this.top = this.parent.getTop();\n this.bottom = this.parent.getBottom();\n }\n\n if (nodes[0].getParent().paddingLeft != undefined) {\n margin = nodes[0].getParent().paddingLeft;\n } else {\n margin = this.margin;\n }\n\n this.left = boundingRect.x - margin;\n this.right = boundingRect.x + boundingRect.width + margin;\n this.top = boundingRect.y - margin;\n this.bottom = boundingRect.y + boundingRect.height + margin;\n};\n\nLGraph.calculateBounds = function (nodes) {\n var left = Integer.MAX_VALUE;\n var right = -Integer.MAX_VALUE;\n var top = Integer.MAX_VALUE;\n var bottom = -Integer.MAX_VALUE;\n var nodeLeft;\n var nodeRight;\n var nodeTop;\n var nodeBottom;\n\n var s = nodes.length;\n\n for (var i = 0; i < s; i++) {\n var lNode = nodes[i];\n nodeLeft = lNode.getLeft();\n nodeRight = lNode.getRight();\n nodeTop = lNode.getTop();\n nodeBottom = lNode.getBottom();\n\n if (left > nodeLeft) {\n left = nodeLeft;\n }\n\n if (right < nodeRight) {\n right = nodeRight;\n }\n\n if (top > nodeTop) {\n top = nodeTop;\n }\n\n if (bottom < nodeBottom) {\n bottom = nodeBottom;\n }\n }\n\n var boundingRect = new RectangleD(left, top, right - left, bottom - top);\n\n return boundingRect;\n};\n\nLGraph.prototype.getInclusionTreeDepth = function () {\n if (this == this.graphManager.getRoot()) {\n return 1;\n } else {\n return this.parent.getInclusionTreeDepth();\n }\n};\n\nLGraph.prototype.getEstimatedSize = function () {\n if (this.estimatedSize == Integer.MIN_VALUE) {\n throw \"assert failed\";\n }\n return this.estimatedSize;\n};\n\nLGraph.prototype.calcEstimatedSize = function () {\n var size = 0;\n var nodes = this.nodes;\n var s = nodes.length;\n\n for (var i = 0; i < s; i++) {\n var lNode = nodes[i];\n size += lNode.calcEstimatedSize();\n }\n\n if (size == 0) {\n this.estimatedSize = LayoutConstants.EMPTY_COMPOUND_NODE_SIZE;\n } else {\n this.estimatedSize = size / Math.sqrt(this.nodes.length);\n }\n\n return this.estimatedSize;\n};\n\nLGraph.prototype.updateConnected = function () {\n var self = this;\n if (this.nodes.length == 0) {\n this.isConnected = true;\n return;\n }\n\n var queue = new LinkedList();\n var visited = new Set();\n var currentNode = this.nodes[0];\n var neighborEdges;\n var currentNeighbor;\n var childrenOfNode = currentNode.withChildren();\n childrenOfNode.forEach(function (node) {\n queue.push(node);\n visited.add(node);\n });\n\n while (queue.length !== 0) {\n currentNode = queue.shift();\n\n // Traverse all neighbors of this node\n neighborEdges = currentNode.getEdges();\n var size = neighborEdges.length;\n for (var i = 0; i < size; i++) {\n var neighborEdge = neighborEdges[i];\n currentNeighbor = neighborEdge.getOtherEndInGraph(currentNode, this);\n\n // Add unvisited neighbors to the list to visit\n if (currentNeighbor != null && !visited.has(currentNeighbor)) {\n var childrenOfNeighbor = currentNeighbor.withChildren();\n\n childrenOfNeighbor.forEach(function (node) {\n queue.push(node);\n visited.add(node);\n });\n }\n }\n }\n\n this.isConnected = false;\n\n if (visited.size >= this.nodes.length) {\n var noOfVisitedInThisGraph = 0;\n\n visited.forEach(function (visitedNode) {\n if (visitedNode.owner == self) {\n noOfVisitedInThisGraph++;\n }\n });\n\n if (noOfVisitedInThisGraph == this.nodes.length) {\n this.isConnected = true;\n }\n }\n};\n\nmodule.exports = LGraph;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LGraph;\nvar LEdge = __webpack_require__(1);\n\nfunction LGraphManager(layout) {\n LGraph = __webpack_require__(5); // It may be better to initilize this out of this function but it gives an error (Right-hand side of 'instanceof' is not callable) now.\n this.layout = layout;\n\n this.graphs = [];\n this.edges = [];\n}\n\nLGraphManager.prototype.addRoot = function () {\n var ngraph = this.layout.newGraph();\n var nnode = this.layout.newNode(null);\n var root = this.add(ngraph, nnode);\n this.setRootGraph(root);\n return this.rootGraph;\n};\n\nLGraphManager.prototype.add = function (newGraph, parentNode, newEdge, sourceNode, targetNode) {\n //there are just 2 parameters are passed then it adds an LGraph else it adds an LEdge\n if (newEdge == null && sourceNode == null && targetNode == null) {\n if (newGraph == null) {\n throw \"Graph is null!\";\n }\n if (parentNode == null) {\n throw \"Parent node is null!\";\n }\n if (this.graphs.indexOf(newGraph) > -1) {\n throw \"Graph already in this graph mgr!\";\n }\n\n this.graphs.push(newGraph);\n\n if (newGraph.parent != null) {\n throw \"Already has a parent!\";\n }\n if (parentNode.child != null) {\n throw \"Already has a child!\";\n }\n\n newGraph.parent = parentNode;\n parentNode.child = newGraph;\n\n return newGraph;\n } else {\n //change the order of the parameters\n targetNode = newEdge;\n sourceNode = parentNode;\n newEdge = newGraph;\n var sourceGraph = sourceNode.getOwner();\n var targetGraph = targetNode.getOwner();\n\n if (!(sourceGraph != null && sourceGraph.getGraphManager() == this)) {\n throw \"Source not in this graph mgr!\";\n }\n if (!(targetGraph != null && targetGraph.getGraphManager() == this)) {\n throw \"Target not in this graph mgr!\";\n }\n\n if (sourceGraph == targetGraph) {\n newEdge.isInterGraph = false;\n return sourceGraph.add(newEdge, sourceNode, targetNode);\n } else {\n newEdge.isInterGraph = true;\n\n // set source and target\n newEdge.source = sourceNode;\n newEdge.target = targetNode;\n\n // add edge to inter-graph edge list\n if (this.edges.indexOf(newEdge) > -1) {\n throw \"Edge already in inter-graph edge list!\";\n }\n\n this.edges.push(newEdge);\n\n // add edge to source and target incidency lists\n if (!(newEdge.source != null && newEdge.target != null)) {\n throw \"Edge source and/or target is null!\";\n }\n\n if (!(newEdge.source.edges.indexOf(newEdge) == -1 && newEdge.target.edges.indexOf(newEdge) == -1)) {\n throw \"Edge already in source and/or target incidency list!\";\n }\n\n newEdge.source.edges.push(newEdge);\n newEdge.target.edges.push(newEdge);\n\n return newEdge;\n }\n }\n};\n\nLGraphManager.prototype.remove = function (lObj) {\n if (lObj instanceof LGraph) {\n var graph = lObj;\n if (graph.getGraphManager() != this) {\n throw \"Graph not in this graph mgr\";\n }\n if (!(graph == this.rootGraph || graph.parent != null && graph.parent.graphManager == this)) {\n throw \"Invalid parent node!\";\n }\n\n // first the edges (make a copy to do it safely)\n var edgesToBeRemoved = [];\n\n edgesToBeRemoved = edgesToBeRemoved.concat(graph.getEdges());\n\n var edge;\n var s = edgesToBeRemoved.length;\n for (var i = 0; i < s; i++) {\n edge = edgesToBeRemoved[i];\n graph.remove(edge);\n }\n\n // then the nodes (make a copy to do it safely)\n var nodesToBeRemoved = [];\n\n nodesToBeRemoved = nodesToBeRemoved.concat(graph.getNodes());\n\n var node;\n s = nodesToBeRemoved.length;\n for (var i = 0; i < s; i++) {\n node = nodesToBeRemoved[i];\n graph.remove(node);\n }\n\n // check if graph is the root\n if (graph == this.rootGraph) {\n this.setRootGraph(null);\n }\n\n // now remove the graph itself\n var index = this.graphs.indexOf(graph);\n this.graphs.splice(index, 1);\n\n // also reset the parent of the graph\n graph.parent = null;\n } else if (lObj instanceof LEdge) {\n edge = lObj;\n if (edge == null) {\n throw \"Edge is null!\";\n }\n if (!edge.isInterGraph) {\n throw \"Not an inter-graph edge!\";\n }\n if (!(edge.source != null && edge.target != null)) {\n throw \"Source and/or target is null!\";\n }\n\n // remove edge from source and target nodes' incidency lists\n\n if (!(edge.source.edges.indexOf(edge) != -1 && edge.target.edges.indexOf(edge) != -1)) {\n throw \"Source and/or target doesn't know this edge!\";\n }\n\n var index = edge.source.edges.indexOf(edge);\n edge.source.edges.splice(index, 1);\n index = edge.target.edges.indexOf(edge);\n edge.target.edges.splice(index, 1);\n\n // remove edge from owner graph manager's inter-graph edge list\n\n if (!(edge.source.owner != null && edge.source.owner.getGraphManager() != null)) {\n throw \"Edge owner graph or owner graph manager is null!\";\n }\n if (edge.source.owner.getGraphManager().edges.indexOf(edge) == -1) {\n throw \"Not in owner graph manager's edge list!\";\n }\n\n var index = edge.source.owner.getGraphManager().edges.indexOf(edge);\n edge.source.owner.getGraphManager().edges.splice(index, 1);\n }\n};\n\nLGraphManager.prototype.updateBounds = function () {\n this.rootGraph.updateBounds(true);\n};\n\nLGraphManager.prototype.getGraphs = function () {\n return this.graphs;\n};\n\nLGraphManager.prototype.getAllNodes = function () {\n if (this.allNodes == null) {\n var nodeList = [];\n var graphs = this.getGraphs();\n var s = graphs.length;\n for (var i = 0; i < s; i++) {\n nodeList = nodeList.concat(graphs[i].getNodes());\n }\n this.allNodes = nodeList;\n }\n return this.allNodes;\n};\n\nLGraphManager.prototype.resetAllNodes = function () {\n this.allNodes = null;\n};\n\nLGraphManager.prototype.resetAllEdges = function () {\n this.allEdges = null;\n};\n\nLGraphManager.prototype.resetAllNodesToApplyGravitation = function () {\n this.allNodesToApplyGravitation = null;\n};\n\nLGraphManager.prototype.getAllEdges = function () {\n if (this.allEdges == null) {\n var edgeList = [];\n var graphs = this.getGraphs();\n var s = graphs.length;\n for (var i = 0; i < graphs.length; i++) {\n edgeList = edgeList.concat(graphs[i].getEdges());\n }\n\n edgeList = edgeList.concat(this.edges);\n\n this.allEdges = edgeList;\n }\n return this.allEdges;\n};\n\nLGraphManager.prototype.getAllNodesToApplyGravitation = function () {\n return this.allNodesToApplyGravitation;\n};\n\nLGraphManager.prototype.setAllNodesToApplyGravitation = function (nodeList) {\n if (this.allNodesToApplyGravitation != null) {\n throw \"assert failed\";\n }\n\n this.allNodesToApplyGravitation = nodeList;\n};\n\nLGraphManager.prototype.getRoot = function () {\n return this.rootGraph;\n};\n\nLGraphManager.prototype.setRootGraph = function (graph) {\n if (graph.getGraphManager() != this) {\n throw \"Root not in this graph mgr!\";\n }\n\n this.rootGraph = graph;\n // root graph must have a root node associated with it for convenience\n if (graph.parent == null) {\n graph.parent = this.layout.newNode(\"Root node\");\n }\n};\n\nLGraphManager.prototype.getLayout = function () {\n return this.layout;\n};\n\nLGraphManager.prototype.isOneAncestorOfOther = function (firstNode, secondNode) {\n if (!(firstNode != null && secondNode != null)) {\n throw \"assert failed\";\n }\n\n if (firstNode == secondNode) {\n return true;\n }\n // Is second node an ancestor of the first one?\n var ownerGraph = firstNode.getOwner();\n var parentNode;\n\n do {\n parentNode = ownerGraph.getParent();\n\n if (parentNode == null) {\n break;\n }\n\n if (parentNode == secondNode) {\n return true;\n }\n\n ownerGraph = parentNode.getOwner();\n if (ownerGraph == null) {\n break;\n }\n } while (true);\n // Is first node an ancestor of the second one?\n ownerGraph = secondNode.getOwner();\n\n do {\n parentNode = ownerGraph.getParent();\n\n if (parentNode == null) {\n break;\n }\n\n if (parentNode == firstNode) {\n return true;\n }\n\n ownerGraph = parentNode.getOwner();\n if (ownerGraph == null) {\n break;\n }\n } while (true);\n\n return false;\n};\n\nLGraphManager.prototype.calcLowestCommonAncestors = function () {\n var edge;\n var sourceNode;\n var targetNode;\n var sourceAncestorGraph;\n var targetAncestorGraph;\n\n var edges = this.getAllEdges();\n var s = edges.length;\n for (var i = 0; i < s; i++) {\n edge = edges[i];\n\n sourceNode = edge.source;\n targetNode = edge.target;\n edge.lca = null;\n edge.sourceInLca = sourceNode;\n edge.targetInLca = targetNode;\n\n if (sourceNode == targetNode) {\n edge.lca = sourceNode.getOwner();\n continue;\n }\n\n sourceAncestorGraph = sourceNode.getOwner();\n\n while (edge.lca == null) {\n edge.targetInLca = targetNode;\n targetAncestorGraph = targetNode.getOwner();\n\n while (edge.lca == null) {\n if (targetAncestorGraph == sourceAncestorGraph) {\n edge.lca = targetAncestorGraph;\n break;\n }\n\n if (targetAncestorGraph == this.rootGraph) {\n break;\n }\n\n if (edge.lca != null) {\n throw \"assert failed\";\n }\n edge.targetInLca = targetAncestorGraph.getParent();\n targetAncestorGraph = edge.targetInLca.getOwner();\n }\n\n if (sourceAncestorGraph == this.rootGraph) {\n break;\n }\n\n if (edge.lca == null) {\n edge.sourceInLca = sourceAncestorGraph.getParent();\n sourceAncestorGraph = edge.sourceInLca.getOwner();\n }\n }\n\n if (edge.lca == null) {\n throw \"assert failed\";\n }\n }\n};\n\nLGraphManager.prototype.calcLowestCommonAncestor = function (firstNode, secondNode) {\n if (firstNode == secondNode) {\n return firstNode.getOwner();\n }\n var firstOwnerGraph = firstNode.getOwner();\n\n do {\n if (firstOwnerGraph == null) {\n break;\n }\n var secondOwnerGraph = secondNode.getOwner();\n\n do {\n if (secondOwnerGraph == null) {\n break;\n }\n\n if (secondOwnerGraph == firstOwnerGraph) {\n return secondOwnerGraph;\n }\n secondOwnerGraph = secondOwnerGraph.getParent().getOwner();\n } while (true);\n\n firstOwnerGraph = firstOwnerGraph.getParent().getOwner();\n } while (true);\n\n return firstOwnerGraph;\n};\n\nLGraphManager.prototype.calcInclusionTreeDepths = function (graph, depth) {\n if (graph == null && depth == null) {\n graph = this.rootGraph;\n depth = 1;\n }\n var node;\n\n var nodes = graph.getNodes();\n var s = nodes.length;\n for (var i = 0; i < s; i++) {\n node = nodes[i];\n node.inclusionTreeDepth = depth;\n\n if (node.child != null) {\n this.calcInclusionTreeDepths(node.child, depth + 1);\n }\n }\n};\n\nLGraphManager.prototype.includesInvalidEdge = function () {\n var edge;\n\n var s = this.edges.length;\n for (var i = 0; i < s; i++) {\n edge = this.edges[i];\n\n if (this.isOneAncestorOfOther(edge.source, edge.target)) {\n return true;\n }\n }\n return false;\n};\n\nmodule.exports = LGraphManager;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LayoutConstants = __webpack_require__(0);\n\nfunction FDLayoutConstants() {}\n\n//FDLayoutConstants inherits static props in LayoutConstants\nfor (var prop in LayoutConstants) {\n FDLayoutConstants[prop] = LayoutConstants[prop];\n}\n\nFDLayoutConstants.MAX_ITERATIONS = 2500;\n\nFDLayoutConstants.DEFAULT_EDGE_LENGTH = 50;\nFDLayoutConstants.DEFAULT_SPRING_STRENGTH = 0.45;\nFDLayoutConstants.DEFAULT_REPULSION_STRENGTH = 4500.0;\nFDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = 0.4;\nFDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = 1.0;\nFDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = 3.8;\nFDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = 1.5;\nFDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION = true;\nFDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION = true;\nFDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = 0.3;\nFDLayoutConstants.COOLING_ADAPTATION_FACTOR = 0.33;\nFDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT = 1000;\nFDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT = 5000;\nFDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL = 100.0;\nFDLayoutConstants.MAX_NODE_DISPLACEMENT = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL * 3;\nFDLayoutConstants.MIN_REPULSION_DIST = FDLayoutConstants.DEFAULT_EDGE_LENGTH / 10.0;\nFDLayoutConstants.CONVERGENCE_CHECK_PERIOD = 100;\nFDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = 0.1;\nFDLayoutConstants.MIN_EDGE_LENGTH = 1;\nFDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD = 10;\n\nmodule.exports = FDLayoutConstants;\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * This class maintains a list of static geometry related utility methods.\n *\n *\n * Copyright: i-Vis Research Group, Bilkent University, 2007 - present\n */\n\nvar Point = __webpack_require__(12);\n\nfunction IGeometry() {}\n\n/**\n * This method calculates *half* the amount in x and y directions of the two\n * input rectangles needed to separate them keeping their respective\n * positioning, and returns the result in the input array. An input\n * separation buffer added to the amount in both directions. We assume that\n * the two rectangles do intersect.\n */\nIGeometry.calcSeparationAmount = function (rectA, rectB, overlapAmount, separationBuffer) {\n if (!rectA.intersects(rectB)) {\n throw \"assert failed\";\n }\n\n var directions = new Array(2);\n\n this.decideDirectionsForOverlappingNodes(rectA, rectB, directions);\n\n overlapAmount[0] = Math.min(rectA.getRight(), rectB.getRight()) - Math.max(rectA.x, rectB.x);\n overlapAmount[1] = Math.min(rectA.getBottom(), rectB.getBottom()) - Math.max(rectA.y, rectB.y);\n\n // update the overlapping amounts for the following cases:\n if (rectA.getX() <= rectB.getX() && rectA.getRight() >= rectB.getRight()) {\n /* Case x.1:\n *\n * rectA\n * \t| |\n * \t| _________ |\n * \t| | | |\n * \t|________|_______|______|\n * \t\t\t | |\n * | |\n * rectB\n */\n overlapAmount[0] += Math.min(rectB.getX() - rectA.getX(), rectA.getRight() - rectB.getRight());\n } else if (rectB.getX() <= rectA.getX() && rectB.getRight() >= rectA.getRight()) {\n /* Case x.2:\n *\n * rectB\n * \t| |\n * \t| _________ |\n * \t| | | |\n * \t|________|_______|______|\n * \t\t\t | |\n * | |\n * rectA\n */\n overlapAmount[0] += Math.min(rectA.getX() - rectB.getX(), rectB.getRight() - rectA.getRight());\n }\n if (rectA.getY() <= rectB.getY() && rectA.getBottom() >= rectB.getBottom()) {\n /* Case y.1:\n * ________ rectA\n * |\n * |\n * ______|____ rectB\n * | |\n * | |\n * ______|____|\n * |\n * |\n * |________\n *\n */\n overlapAmount[1] += Math.min(rectB.getY() - rectA.getY(), rectA.getBottom() - rectB.getBottom());\n } else if (rectB.getY() <= rectA.getY() && rectB.getBottom() >= rectA.getBottom()) {\n /* Case y.2:\n * ________ rectB\n * |\n * |\n * ______|____ rectA\n * | |\n * | |\n * ______|____|\n * |\n * |\n * |________\n *\n */\n overlapAmount[1] += Math.min(rectA.getY() - rectB.getY(), rectB.getBottom() - rectA.getBottom());\n }\n\n // find slope of the line passes two centers\n var slope = Math.abs((rectB.getCenterY() - rectA.getCenterY()) / (rectB.getCenterX() - rectA.getCenterX()));\n // if centers are overlapped\n if (rectB.getCenterY() === rectA.getCenterY() && rectB.getCenterX() === rectA.getCenterX()) {\n // assume the slope is 1 (45 degree)\n slope = 1.0;\n }\n\n var moveByY = slope * overlapAmount[0];\n var moveByX = overlapAmount[1] / slope;\n if (overlapAmount[0] < moveByX) {\n moveByX = overlapAmount[0];\n } else {\n moveByY = overlapAmount[1];\n }\n // return half the amount so that if each rectangle is moved by these\n // amounts in opposite directions, overlap will be resolved\n overlapAmount[0] = -1 * directions[0] * (moveByX / 2 + separationBuffer);\n overlapAmount[1] = -1 * directions[1] * (moveByY / 2 + separationBuffer);\n};\n\n/**\n * This method decides the separation direction of overlapping nodes\n *\n * if directions[0] = -1, then rectA goes left\n * if directions[0] = 1, then rectA goes right\n * if directions[1] = -1, then rectA goes up\n * if directions[1] = 1, then rectA goes down\n */\nIGeometry.decideDirectionsForOverlappingNodes = function (rectA, rectB, directions) {\n if (rectA.getCenterX() < rectB.getCenterX()) {\n directions[0] = -1;\n } else {\n directions[0] = 1;\n }\n\n if (rectA.getCenterY() < rectB.getCenterY()) {\n directions[1] = -1;\n } else {\n directions[1] = 1;\n }\n};\n\n/**\n * This method calculates the intersection (clipping) points of the two\n * input rectangles with line segment defined by the centers of these two\n * rectangles. The clipping points are saved in the input double array and\n * whether or not the two rectangles overlap is returned.\n */\nIGeometry.getIntersection2 = function (rectA, rectB, result) {\n //result[0-1] will contain clipPoint of rectA, result[2-3] will contain clipPoint of rectB\n var p1x = rectA.getCenterX();\n var p1y = rectA.getCenterY();\n var p2x = rectB.getCenterX();\n var p2y = rectB.getCenterY();\n\n //if two rectangles intersect, then clipping points are centers\n if (rectA.intersects(rectB)) {\n result[0] = p1x;\n result[1] = p1y;\n result[2] = p2x;\n result[3] = p2y;\n return true;\n }\n //variables for rectA\n var topLeftAx = rectA.getX();\n var topLeftAy = rectA.getY();\n var topRightAx = rectA.getRight();\n var bottomLeftAx = rectA.getX();\n var bottomLeftAy = rectA.getBottom();\n var bottomRightAx = rectA.getRight();\n var halfWidthA = rectA.getWidthHalf();\n var halfHeightA = rectA.getHeightHalf();\n //variables for rectB\n var topLeftBx = rectB.getX();\n var topLeftBy = rectB.getY();\n var topRightBx = rectB.getRight();\n var bottomLeftBx = rectB.getX();\n var bottomLeftBy = rectB.getBottom();\n var bottomRightBx = rectB.getRight();\n var halfWidthB = rectB.getWidthHalf();\n var halfHeightB = rectB.getHeightHalf();\n\n //flag whether clipping points are found\n var clipPointAFound = false;\n var clipPointBFound = false;\n\n // line is vertical\n if (p1x === p2x) {\n if (p1y > p2y) {\n result[0] = p1x;\n result[1] = topLeftAy;\n result[2] = p2x;\n result[3] = bottomLeftBy;\n return false;\n } else if (p1y < p2y) {\n result[0] = p1x;\n result[1] = bottomLeftAy;\n result[2] = p2x;\n result[3] = topLeftBy;\n return false;\n } else {\n //not line, return null;\n }\n }\n // line is horizontal\n else if (p1y === p2y) {\n if (p1x > p2x) {\n result[0] = topLeftAx;\n result[1] = p1y;\n result[2] = topRightBx;\n result[3] = p2y;\n return false;\n } else if (p1x < p2x) {\n result[0] = topRightAx;\n result[1] = p1y;\n result[2] = topLeftBx;\n result[3] = p2y;\n return false;\n } else {\n //not valid line, return null;\n }\n } else {\n //slopes of rectA's and rectB's diagonals\n var slopeA = rectA.height / rectA.width;\n var slopeB = rectB.height / rectB.width;\n\n //slope of line between center of rectA and center of rectB\n var slopePrime = (p2y - p1y) / (p2x - p1x);\n var cardinalDirectionA = void 0;\n var cardinalDirectionB = void 0;\n var tempPointAx = void 0;\n var tempPointAy = void 0;\n var tempPointBx = void 0;\n var tempPointBy = void 0;\n\n //determine whether clipping point is the corner of nodeA\n if (-slopeA === slopePrime) {\n if (p1x > p2x) {\n result[0] = bottomLeftAx;\n result[1] = bottomLeftAy;\n clipPointAFound = true;\n } else {\n result[0] = topRightAx;\n result[1] = topLeftAy;\n clipPointAFound = true;\n }\n } else if (slopeA === slopePrime) {\n if (p1x > p2x) {\n result[0] = topLeftAx;\n result[1] = topLeftAy;\n clipPointAFound = true;\n } else {\n result[0] = bottomRightAx;\n result[1] = bottomLeftAy;\n clipPointAFound = true;\n }\n }\n\n //determine whether clipping point is the corner of nodeB\n if (-slopeB === slopePrime) {\n if (p2x > p1x) {\n result[2] = bottomLeftBx;\n result[3] = bottomLeftBy;\n clipPointBFound = true;\n } else {\n result[2] = topRightBx;\n result[3] = topLeftBy;\n clipPointBFound = true;\n }\n } else if (slopeB === slopePrime) {\n if (p2x > p1x) {\n result[2] = topLeftBx;\n result[3] = topLeftBy;\n clipPointBFound = true;\n } else {\n result[2] = bottomRightBx;\n result[3] = bottomLeftBy;\n clipPointBFound = true;\n }\n }\n\n //if both clipping points are corners\n if (clipPointAFound && clipPointBFound) {\n return false;\n }\n\n //determine Cardinal Direction of rectangles\n if (p1x > p2x) {\n if (p1y > p2y) {\n cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 4);\n cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 2);\n } else {\n cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 3);\n cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 1);\n }\n } else {\n if (p1y > p2y) {\n cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 1);\n cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 3);\n } else {\n cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 2);\n cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 4);\n }\n }\n //calculate clipping Point if it is not found before\n if (!clipPointAFound) {\n switch (cardinalDirectionA) {\n case 1:\n tempPointAy = topLeftAy;\n tempPointAx = p1x + -halfHeightA / slopePrime;\n result[0] = tempPointAx;\n result[1] = tempPointAy;\n break;\n case 2:\n tempPointAx = bottomRightAx;\n tempPointAy = p1y + halfWidthA * slopePrime;\n result[0] = tempPointAx;\n result[1] = tempPointAy;\n break;\n case 3:\n tempPointAy = bottomLeftAy;\n tempPointAx = p1x + halfHeightA / slopePrime;\n result[0] = tempPointAx;\n result[1] = tempPointAy;\n break;\n case 4:\n tempPointAx = bottomLeftAx;\n tempPointAy = p1y + -halfWidthA * slopePrime;\n result[0] = tempPointAx;\n result[1] = tempPointAy;\n break;\n }\n }\n if (!clipPointBFound) {\n switch (cardinalDirectionB) {\n case 1:\n tempPointBy = topLeftBy;\n tempPointBx = p2x + -halfHeightB / slopePrime;\n result[2] = tempPointBx;\n result[3] = tempPointBy;\n break;\n case 2:\n tempPointBx = bottomRightBx;\n tempPointBy = p2y + halfWidthB * slopePrime;\n result[2] = tempPointBx;\n result[3] = tempPointBy;\n break;\n case 3:\n tempPointBy = bottomLeftBy;\n tempPointBx = p2x + halfHeightB / slopePrime;\n result[2] = tempPointBx;\n result[3] = tempPointBy;\n break;\n case 4:\n tempPointBx = bottomLeftBx;\n tempPointBy = p2y + -halfWidthB * slopePrime;\n result[2] = tempPointBx;\n result[3] = tempPointBy;\n break;\n }\n }\n }\n return false;\n};\n\n/**\n * This method returns in which cardinal direction does input point stays\n * 1: North\n * 2: East\n * 3: South\n * 4: West\n */\nIGeometry.getCardinalDirection = function (slope, slopePrime, line) {\n if (slope > slopePrime) {\n return line;\n } else {\n return 1 + line % 4;\n }\n};\n\n/**\n * This method calculates the intersection of the two lines defined by\n * point pairs (s1,s2) and (f1,f2).\n */\nIGeometry.getIntersection = function (s1, s2, f1, f2) {\n if (f2 == null) {\n return this.getIntersection2(s1, s2, f1);\n }\n\n var x1 = s1.x;\n var y1 = s1.y;\n var x2 = s2.x;\n var y2 = s2.y;\n var x3 = f1.x;\n var y3 = f1.y;\n var x4 = f2.x;\n var y4 = f2.y;\n var x = void 0,\n y = void 0; // intersection point\n var a1 = void 0,\n a2 = void 0,\n b1 = void 0,\n b2 = void 0,\n c1 = void 0,\n c2 = void 0; // coefficients of line eqns.\n var denom = void 0;\n\n a1 = y2 - y1;\n b1 = x1 - x2;\n c1 = x2 * y1 - x1 * y2; // { a1*x + b1*y + c1 = 0 is line 1 }\n\n a2 = y4 - y3;\n b2 = x3 - x4;\n c2 = x4 * y3 - x3 * y4; // { a2*x + b2*y + c2 = 0 is line 2 }\n\n denom = a1 * b2 - a2 * b1;\n\n if (denom === 0) {\n return null;\n }\n\n x = (b1 * c2 - b2 * c1) / denom;\n y = (a2 * c1 - a1 * c2) / denom;\n\n return new Point(x, y);\n};\n\n/**\n * This method finds and returns the angle of the vector from the + x-axis\n * in clockwise direction (compatible w/ Java coordinate system!).\n */\nIGeometry.angleOfVector = function (Cx, Cy, Nx, Ny) {\n var C_angle = void 0;\n\n if (Cx !== Nx) {\n C_angle = Math.atan((Ny - Cy) / (Nx - Cx));\n\n if (Nx < Cx) {\n C_angle += Math.PI;\n } else if (Ny < Cy) {\n C_angle += this.TWO_PI;\n }\n } else if (Ny < Cy) {\n C_angle = this.ONE_AND_HALF_PI; // 270 degrees\n } else {\n C_angle = this.HALF_PI; // 90 degrees\n }\n\n return C_angle;\n};\n\n/**\n * This method checks whether the given two line segments (one with point\n * p1 and p2, the other with point p3 and p4) intersect at a point other\n * than these points.\n */\nIGeometry.doIntersect = function (p1, p2, p3, p4) {\n var a = p1.x;\n var b = p1.y;\n var c = p2.x;\n var d = p2.y;\n var p = p3.x;\n var q = p3.y;\n var r = p4.x;\n var s = p4.y;\n var det = (c - a) * (s - q) - (r - p) * (d - b);\n\n if (det === 0) {\n return false;\n } else {\n var lambda = ((s - q) * (r - a) + (p - r) * (s - b)) / det;\n var gamma = ((b - d) * (r - a) + (c - a) * (s - b)) / det;\n return 0 < lambda && lambda < 1 && 0 < gamma && gamma < 1;\n }\n};\n\n// -----------------------------------------------------------------------------\n// Section: Class Constants\n// -----------------------------------------------------------------------------\n/**\n * Some useful pre-calculated constants\n */\nIGeometry.HALF_PI = 0.5 * Math.PI;\nIGeometry.ONE_AND_HALF_PI = 1.5 * Math.PI;\nIGeometry.TWO_PI = 2.0 * Math.PI;\nIGeometry.THREE_PI = 3.0 * Math.PI;\n\nmodule.exports = IGeometry;\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction IMath() {}\n\n/**\n * This method returns the sign of the input value.\n */\nIMath.sign = function (value) {\n if (value > 0) {\n return 1;\n } else if (value < 0) {\n return -1;\n } else {\n return 0;\n }\n};\n\nIMath.floor = function (value) {\n return value < 0 ? Math.ceil(value) : Math.floor(value);\n};\n\nIMath.ceil = function (value) {\n return value < 0 ? Math.floor(value) : Math.ceil(value);\n};\n\nmodule.exports = IMath;\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction Integer() {}\n\nInteger.MAX_VALUE = 2147483647;\nInteger.MIN_VALUE = -2147483648;\n\nmodule.exports = Integer;\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar nodeFrom = function nodeFrom(value) {\n return { value: value, next: null, prev: null };\n};\n\nvar add = function add(prev, node, next, list) {\n if (prev !== null) {\n prev.next = node;\n } else {\n list.head = node;\n }\n\n if (next !== null) {\n next.prev = node;\n } else {\n list.tail = node;\n }\n\n node.prev = prev;\n node.next = next;\n\n list.length++;\n\n return node;\n};\n\nvar _remove = function _remove(node, list) {\n var prev = node.prev,\n next = node.next;\n\n\n if (prev !== null) {\n prev.next = next;\n } else {\n list.head = next;\n }\n\n if (next !== null) {\n next.prev = prev;\n } else {\n list.tail = prev;\n }\n\n node.prev = node.next = null;\n\n list.length--;\n\n return node;\n};\n\nvar LinkedList = function () {\n function LinkedList(vals) {\n var _this = this;\n\n _classCallCheck(this, LinkedList);\n\n this.length = 0;\n this.head = null;\n this.tail = null;\n\n if (vals != null) {\n vals.forEach(function (v) {\n return _this.push(v);\n });\n }\n }\n\n _createClass(LinkedList, [{\n key: \"size\",\n value: function size() {\n return this.length;\n }\n }, {\n key: \"insertBefore\",\n value: function insertBefore(val, otherNode) {\n return add(otherNode.prev, nodeFrom(val), otherNode, this);\n }\n }, {\n key: \"insertAfter\",\n value: function insertAfter(val, otherNode) {\n return add(otherNode, nodeFrom(val), otherNode.next, this);\n }\n }, {\n key: \"insertNodeBefore\",\n value: function insertNodeBefore(newNode, otherNode) {\n return add(otherNode.prev, newNode, otherNode, this);\n }\n }, {\n key: \"insertNodeAfter\",\n value: function insertNodeAfter(newNode, otherNode) {\n return add(otherNode, newNode, otherNode.next, this);\n }\n }, {\n key: \"push\",\n value: function push(val) {\n return add(this.tail, nodeFrom(val), null, this);\n }\n }, {\n key: \"unshift\",\n value: function unshift(val) {\n return add(null, nodeFrom(val), this.head, this);\n }\n }, {\n key: \"remove\",\n value: function remove(node) {\n return _remove(node, this);\n }\n }, {\n key: \"pop\",\n value: function pop() {\n return _remove(this.tail, this).value;\n }\n }, {\n key: \"popNode\",\n value: function popNode() {\n return _remove(this.tail, this);\n }\n }, {\n key: \"shift\",\n value: function shift() {\n return _remove(this.head, this).value;\n }\n }, {\n key: \"shiftNode\",\n value: function shiftNode() {\n return _remove(this.head, this);\n }\n }, {\n key: \"get_object_at\",\n value: function get_object_at(index) {\n if (index <= this.length()) {\n var i = 1;\n var current = this.head;\n while (i < index) {\n current = current.next;\n i++;\n }\n return current.value;\n }\n }\n }, {\n key: \"set_object_at\",\n value: function set_object_at(index, value) {\n if (index <= this.length()) {\n var i = 1;\n var current = this.head;\n while (i < index) {\n current = current.next;\n i++;\n }\n current.value = value;\n }\n }\n }]);\n\n return LinkedList;\n}();\n\nmodule.exports = LinkedList;\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/*\r\n *This class is the javascript implementation of the Point.java class in jdk\r\n */\nfunction Point(x, y, p) {\n this.x = null;\n this.y = null;\n if (x == null && y == null && p == null) {\n this.x = 0;\n this.y = 0;\n } else if (typeof x == 'number' && typeof y == 'number' && p == null) {\n this.x = x;\n this.y = y;\n } else if (x.constructor.name == 'Point' && y == null && p == null) {\n p = x;\n this.x = p.x;\n this.y = p.y;\n }\n}\n\nPoint.prototype.getX = function () {\n return this.x;\n};\n\nPoint.prototype.getY = function () {\n return this.y;\n};\n\nPoint.prototype.getLocation = function () {\n return new Point(this.x, this.y);\n};\n\nPoint.prototype.setLocation = function (x, y, p) {\n if (x.constructor.name == 'Point' && y == null && p == null) {\n p = x;\n this.setLocation(p.x, p.y);\n } else if (typeof x == 'number' && typeof y == 'number' && p == null) {\n //if both parameters are integer just move (x,y) location\n if (parseInt(x) == x && parseInt(y) == y) {\n this.move(x, y);\n } else {\n this.x = Math.floor(x + 0.5);\n this.y = Math.floor(y + 0.5);\n }\n }\n};\n\nPoint.prototype.move = function (x, y) {\n this.x = x;\n this.y = y;\n};\n\nPoint.prototype.translate = function (dx, dy) {\n this.x += dx;\n this.y += dy;\n};\n\nPoint.prototype.equals = function (obj) {\n if (obj.constructor.name == \"Point\") {\n var pt = obj;\n return this.x == pt.x && this.y == pt.y;\n }\n return this == obj;\n};\n\nPoint.prototype.toString = function () {\n return new Point().constructor.name + \"[x=\" + this.x + \",y=\" + this.y + \"]\";\n};\n\nmodule.exports = Point;\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction RectangleD(x, y, width, height) {\n this.x = 0;\n this.y = 0;\n this.width = 0;\n this.height = 0;\n\n if (x != null && y != null && width != null && height != null) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n}\n\nRectangleD.prototype.getX = function () {\n return this.x;\n};\n\nRectangleD.prototype.setX = function (x) {\n this.x = x;\n};\n\nRectangleD.prototype.getY = function () {\n return this.y;\n};\n\nRectangleD.prototype.setY = function (y) {\n this.y = y;\n};\n\nRectangleD.prototype.getWidth = function () {\n return this.width;\n};\n\nRectangleD.prototype.setWidth = function (width) {\n this.width = width;\n};\n\nRectangleD.prototype.getHeight = function () {\n return this.height;\n};\n\nRectangleD.prototype.setHeight = function (height) {\n this.height = height;\n};\n\nRectangleD.prototype.getRight = function () {\n return this.x + this.width;\n};\n\nRectangleD.prototype.getBottom = function () {\n return this.y + this.height;\n};\n\nRectangleD.prototype.intersects = function (a) {\n if (this.getRight() < a.x) {\n return false;\n }\n\n if (this.getBottom() < a.y) {\n return false;\n }\n\n if (a.getRight() < this.x) {\n return false;\n }\n\n if (a.getBottom() < this.y) {\n return false;\n }\n\n return true;\n};\n\nRectangleD.prototype.getCenterX = function () {\n return this.x + this.width / 2;\n};\n\nRectangleD.prototype.getMinX = function () {\n return this.getX();\n};\n\nRectangleD.prototype.getMaxX = function () {\n return this.getX() + this.width;\n};\n\nRectangleD.prototype.getCenterY = function () {\n return this.y + this.height / 2;\n};\n\nRectangleD.prototype.getMinY = function () {\n return this.getY();\n};\n\nRectangleD.prototype.getMaxY = function () {\n return this.getY() + this.height;\n};\n\nRectangleD.prototype.getWidthHalf = function () {\n return this.width / 2;\n};\n\nRectangleD.prototype.getHeightHalf = function () {\n return this.height / 2;\n};\n\nmodule.exports = RectangleD;\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction UniqueIDGeneretor() {}\n\nUniqueIDGeneretor.lastID = 0;\n\nUniqueIDGeneretor.createID = function (obj) {\n if (UniqueIDGeneretor.isPrimitive(obj)) {\n return obj;\n }\n if (obj.uniqueID != null) {\n return obj.uniqueID;\n }\n obj.uniqueID = UniqueIDGeneretor.getString();\n UniqueIDGeneretor.lastID++;\n return obj.uniqueID;\n};\n\nUniqueIDGeneretor.getString = function (id) {\n if (id == null) id = UniqueIDGeneretor.lastID;\n return \"Object#\" + id + \"\";\n};\n\nUniqueIDGeneretor.isPrimitive = function (arg) {\n var type = typeof arg === \"undefined\" ? \"undefined\" : _typeof(arg);\n return arg == null || type != \"object\" && type != \"function\";\n};\n\nmodule.exports = UniqueIDGeneretor;\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar LayoutConstants = __webpack_require__(0);\nvar LGraphManager = __webpack_require__(6);\nvar LNode = __webpack_require__(3);\nvar LEdge = __webpack_require__(1);\nvar LGraph = __webpack_require__(5);\nvar PointD = __webpack_require__(4);\nvar Transform = __webpack_require__(17);\nvar Emitter = __webpack_require__(27);\n\nfunction Layout(isRemoteUse) {\n Emitter.call(this);\n\n //Layout Quality: 0:draft, 1:default, 2:proof\n this.layoutQuality = LayoutConstants.QUALITY;\n //Whether layout should create bendpoints as needed or not\n this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED;\n //Whether layout should be incremental or not\n this.incremental = LayoutConstants.DEFAULT_INCREMENTAL;\n //Whether we animate from before to after layout node positions\n this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT;\n //Whether we animate the layout process or not\n this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT;\n //Number iterations that should be done between two successive animations\n this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD;\n /**\r\n * Whether or not leaf nodes (non-compound nodes) are of uniform sizes. When\r\n * they are, both spring and repulsion forces between two leaf nodes can be\r\n * calculated without the expensive clipping point calculations, resulting\r\n * in major speed-up.\r\n */\n this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES;\n /**\r\n * This is used for creation of bendpoints by using dummy nodes and edges.\r\n * Maps an LEdge to its dummy bendpoint path.\r\n */\n this.edgeToDummyNodes = new Map();\n this.graphManager = new LGraphManager(this);\n this.isLayoutFinished = false;\n this.isSubLayout = false;\n this.isRemoteUse = false;\n\n if (isRemoteUse != null) {\n this.isRemoteUse = isRemoteUse;\n }\n}\n\nLayout.RANDOM_SEED = 1;\n\nLayout.prototype = Object.create(Emitter.prototype);\n\nLayout.prototype.getGraphManager = function () {\n return this.graphManager;\n};\n\nLayout.prototype.getAllNodes = function () {\n return this.graphManager.getAllNodes();\n};\n\nLayout.prototype.getAllEdges = function () {\n return this.graphManager.getAllEdges();\n};\n\nLayout.prototype.getAllNodesToApplyGravitation = function () {\n return this.graphManager.getAllNodesToApplyGravitation();\n};\n\nLayout.prototype.newGraphManager = function () {\n var gm = new LGraphManager(this);\n this.graphManager = gm;\n return gm;\n};\n\nLayout.prototype.newGraph = function (vGraph) {\n return new LGraph(null, this.graphManager, vGraph);\n};\n\nLayout.prototype.newNode = function (vNode) {\n return new LNode(this.graphManager, vNode);\n};\n\nLayout.prototype.newEdge = function (vEdge) {\n return new LEdge(null, null, vEdge);\n};\n\nLayout.prototype.checkLayoutSuccess = function () {\n return this.graphManager.getRoot() == null || this.graphManager.getRoot().getNodes().length == 0 || this.graphManager.includesInvalidEdge();\n};\n\nLayout.prototype.runLayout = function () {\n this.isLayoutFinished = false;\n\n if (this.tilingPreLayout) {\n this.tilingPreLayout();\n }\n\n this.initParameters();\n var isLayoutSuccessfull;\n\n if (this.checkLayoutSuccess()) {\n isLayoutSuccessfull = false;\n } else {\n isLayoutSuccessfull = this.layout();\n }\n\n if (LayoutConstants.ANIMATE === 'during') {\n // If this is a 'during' layout animation. Layout is not finished yet. \n // We need to perform these in index.js when layout is really finished.\n return false;\n }\n\n if (isLayoutSuccessfull) {\n if (!this.isSubLayout) {\n this.doPostLayout();\n }\n }\n\n if (this.tilingPostLayout) {\n this.tilingPostLayout();\n }\n\n this.isLayoutFinished = true;\n\n return isLayoutSuccessfull;\n};\n\n/**\r\n * This method performs the operations required after layout.\r\n */\nLayout.prototype.doPostLayout = function () {\n //assert !isSubLayout : \"Should not be called on sub-layout!\";\n // Propagate geometric changes to v-level objects\n if (!this.incremental) {\n this.transform();\n }\n this.update();\n};\n\n/**\r\n * This method updates the geometry of the target graph according to\r\n * calculated layout.\r\n */\nLayout.prototype.update2 = function () {\n // update bend points\n if (this.createBendsAsNeeded) {\n this.createBendpointsFromDummyNodes();\n\n // reset all edges, since the topology has changed\n this.graphManager.resetAllEdges();\n }\n\n // perform edge, node and root updates if layout is not called\n // remotely\n if (!this.isRemoteUse) {\n // update all edges\n var edge;\n var allEdges = this.graphManager.getAllEdges();\n for (var i = 0; i < allEdges.length; i++) {\n edge = allEdges[i];\n // this.update(edge);\n }\n\n // recursively update nodes\n var node;\n var nodes = this.graphManager.getRoot().getNodes();\n for (var i = 0; i < nodes.length; i++) {\n node = nodes[i];\n // this.update(node);\n }\n\n // update root graph\n this.update(this.graphManager.getRoot());\n }\n};\n\nLayout.prototype.update = function (obj) {\n if (obj == null) {\n this.update2();\n } else if (obj instanceof LNode) {\n var node = obj;\n if (node.getChild() != null) {\n // since node is compound, recursively update child nodes\n var nodes = node.getChild().getNodes();\n for (var i = 0; i < nodes.length; i++) {\n update(nodes[i]);\n }\n }\n\n // if the l-level node is associated with a v-level graph object,\n // then it is assumed that the v-level node implements the\n // interface Updatable.\n if (node.vGraphObject != null) {\n // cast to Updatable without any type check\n var vNode = node.vGraphObject;\n\n // call the update method of the interface\n vNode.update(node);\n }\n } else if (obj instanceof LEdge) {\n var edge = obj;\n // if the l-level edge is associated with a v-level graph object,\n // then it is assumed that the v-level edge implements the\n // interface Updatable.\n\n if (edge.vGraphObject != null) {\n // cast to Updatable without any type check\n var vEdge = edge.vGraphObject;\n\n // call the update method of the interface\n vEdge.update(edge);\n }\n } else if (obj instanceof LGraph) {\n var graph = obj;\n // if the l-level graph is associated with a v-level graph object,\n // then it is assumed that the v-level object implements the\n // interface Updatable.\n\n if (graph.vGraphObject != null) {\n // cast to Updatable without any type check\n var vGraph = graph.vGraphObject;\n\n // call the update method of the interface\n vGraph.update(graph);\n }\n }\n};\n\n/**\r\n * This method is used to set all layout parameters to default values\r\n * determined at compile time.\r\n */\nLayout.prototype.initParameters = function () {\n if (!this.isSubLayout) {\n this.layoutQuality = LayoutConstants.QUALITY;\n this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT;\n this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD;\n this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT;\n this.incremental = LayoutConstants.DEFAULT_INCREMENTAL;\n this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED;\n this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES;\n }\n\n if (this.animationDuringLayout) {\n this.animationOnLayout = false;\n }\n};\n\nLayout.prototype.transform = function (newLeftTop) {\n if (newLeftTop == undefined) {\n this.transform(new PointD(0, 0));\n } else {\n // create a transformation object (from Eclipse to layout). When an\n // inverse transform is applied, we get upper-left coordinate of the\n // drawing or the root graph at given input coordinate (some margins\n // already included in calculation of left-top).\n\n var trans = new Transform();\n var leftTop = this.graphManager.getRoot().updateLeftTop();\n\n if (leftTop != null) {\n trans.setWorldOrgX(newLeftTop.x);\n trans.setWorldOrgY(newLeftTop.y);\n\n trans.setDeviceOrgX(leftTop.x);\n trans.setDeviceOrgY(leftTop.y);\n\n var nodes = this.getAllNodes();\n var node;\n\n for (var i = 0; i < nodes.length; i++) {\n node = nodes[i];\n node.transform(trans);\n }\n }\n }\n};\n\nLayout.prototype.positionNodesRandomly = function (graph) {\n\n if (graph == undefined) {\n //assert !this.incremental;\n this.positionNodesRandomly(this.getGraphManager().getRoot());\n this.getGraphManager().getRoot().updateBounds(true);\n } else {\n var lNode;\n var childGraph;\n\n var nodes = graph.getNodes();\n for (var i = 0; i < nodes.length; i++) {\n lNode = nodes[i];\n childGraph = lNode.getChild();\n\n if (childGraph == null) {\n lNode.scatter();\n } else if (childGraph.getNodes().length == 0) {\n lNode.scatter();\n } else {\n this.positionNodesRandomly(childGraph);\n lNode.updateBounds();\n }\n }\n }\n};\n\n/**\r\n * This method returns a list of trees where each tree is represented as a\r\n * list of l-nodes. The method returns a list of size 0 when:\r\n * - The graph is not flat or\r\n * - One of the component(s) of the graph is not a tree.\r\n */\nLayout.prototype.getFlatForest = function () {\n var flatForest = [];\n var isForest = true;\n\n // Quick reference for all nodes in the graph manager associated with\n // this layout. The list should not be changed.\n var allNodes = this.graphManager.getRoot().getNodes();\n\n // First be sure that the graph is flat\n var isFlat = true;\n\n for (var i = 0; i < allNodes.length; i++) {\n if (allNodes[i].getChild() != null) {\n isFlat = false;\n }\n }\n\n // Return empty forest if the graph is not flat.\n if (!isFlat) {\n return flatForest;\n }\n\n // Run BFS for each component of the graph.\n\n var visited = new Set();\n var toBeVisited = [];\n var parents = new Map();\n var unProcessedNodes = [];\n\n unProcessedNodes = unProcessedNodes.concat(allNodes);\n\n // Each iteration of this loop finds a component of the graph and\n // decides whether it is a tree or not. If it is a tree, adds it to the\n // forest and continued with the next component.\n\n while (unProcessedNodes.length > 0 && isForest) {\n toBeVisited.push(unProcessedNodes[0]);\n\n // Start the BFS. Each iteration of this loop visits a node in a\n // BFS manner.\n while (toBeVisited.length > 0 && isForest) {\n //pool operation\n var currentNode = toBeVisited[0];\n toBeVisited.splice(0, 1);\n visited.add(currentNode);\n\n // Traverse all neighbors of this node\n var neighborEdges = currentNode.getEdges();\n\n for (var i = 0; i < neighborEdges.length; i++) {\n var currentNeighbor = neighborEdges[i].getOtherEnd(currentNode);\n\n // If BFS is not growing from this neighbor.\n if (parents.get(currentNode) != currentNeighbor) {\n // We haven't previously visited this neighbor.\n if (!visited.has(currentNeighbor)) {\n toBeVisited.push(currentNeighbor);\n parents.set(currentNeighbor, currentNode);\n }\n // Since we have previously visited this neighbor and\n // this neighbor is not parent of currentNode, given\n // graph contains a component that is not tree, hence\n // it is not a forest.\n else {\n isForest = false;\n break;\n }\n }\n }\n }\n\n // The graph contains a component that is not a tree. Empty\n // previously found trees. The method will end.\n if (!isForest) {\n flatForest = [];\n }\n // Save currently visited nodes as a tree in our forest. Reset\n // visited and parents lists. Continue with the next component of\n // the graph, if any.\n else {\n var temp = [].concat(_toConsumableArray(visited));\n flatForest.push(temp);\n //flatForest = flatForest.concat(temp);\n //unProcessedNodes.removeAll(visited);\n for (var i = 0; i < temp.length; i++) {\n var value = temp[i];\n var index = unProcessedNodes.indexOf(value);\n if (index > -1) {\n unProcessedNodes.splice(index, 1);\n }\n }\n visited = new Set();\n parents = new Map();\n }\n }\n\n return flatForest;\n};\n\n/**\r\n * This method creates dummy nodes (an l-level node with minimal dimensions)\r\n * for the given edge (one per bendpoint). The existing l-level structure\r\n * is updated accordingly.\r\n */\nLayout.prototype.createDummyNodesForBendpoints = function (edge) {\n var dummyNodes = [];\n var prev = edge.source;\n\n var graph = this.graphManager.calcLowestCommonAncestor(edge.source, edge.target);\n\n for (var i = 0; i < edge.bendpoints.length; i++) {\n // create new dummy node\n var dummyNode = this.newNode(null);\n dummyNode.setRect(new Point(0, 0), new Dimension(1, 1));\n\n graph.add(dummyNode);\n\n // create new dummy edge between prev and dummy node\n var dummyEdge = this.newEdge(null);\n this.graphManager.add(dummyEdge, prev, dummyNode);\n\n dummyNodes.add(dummyNode);\n prev = dummyNode;\n }\n\n var dummyEdge = this.newEdge(null);\n this.graphManager.add(dummyEdge, prev, edge.target);\n\n this.edgeToDummyNodes.set(edge, dummyNodes);\n\n // remove real edge from graph manager if it is inter-graph\n if (edge.isInterGraph()) {\n this.graphManager.remove(edge);\n }\n // else, remove the edge from the current graph\n else {\n graph.remove(edge);\n }\n\n return dummyNodes;\n};\n\n/**\r\n * This method creates bendpoints for edges from the dummy nodes\r\n * at l-level.\r\n */\nLayout.prototype.createBendpointsFromDummyNodes = function () {\n var edges = [];\n edges = edges.concat(this.graphManager.getAllEdges());\n edges = [].concat(_toConsumableArray(this.edgeToDummyNodes.keys())).concat(edges);\n\n for (var k = 0; k < edges.length; k++) {\n var lEdge = edges[k];\n\n if (lEdge.bendpoints.length > 0) {\n var path = this.edgeToDummyNodes.get(lEdge);\n\n for (var i = 0; i < path.length; i++) {\n var dummyNode = path[i];\n var p = new PointD(dummyNode.getCenterX(), dummyNode.getCenterY());\n\n // update bendpoint's location according to dummy node\n var ebp = lEdge.bendpoints.get(i);\n ebp.x = p.x;\n ebp.y = p.y;\n\n // remove the dummy node, dummy edges incident with this\n // dummy node is also removed (within the remove method)\n dummyNode.getOwner().remove(dummyNode);\n }\n\n // add the real edge to graph\n this.graphManager.add(lEdge, lEdge.source, lEdge.target);\n }\n }\n};\n\nLayout.transform = function (sliderValue, defaultValue, minDiv, maxMul) {\n if (minDiv != undefined && maxMul != undefined) {\n var value = defaultValue;\n\n if (sliderValue <= 50) {\n var minValue = defaultValue / minDiv;\n value -= (defaultValue - minValue) / 50 * (50 - sliderValue);\n } else {\n var maxValue = defaultValue * maxMul;\n value += (maxValue - defaultValue) / 50 * (sliderValue - 50);\n }\n\n return value;\n } else {\n var a, b;\n\n if (sliderValue <= 50) {\n a = 9.0 * defaultValue / 500.0;\n b = defaultValue / 10.0;\n } else {\n a = 9.0 * defaultValue / 50.0;\n b = -8 * defaultValue;\n }\n\n return a * sliderValue + b;\n }\n};\n\n/**\r\n * This method finds and returns the center of the given nodes, assuming\r\n * that the given nodes form a tree in themselves.\r\n */\nLayout.findCenterOfTree = function (nodes) {\n var list = [];\n list = list.concat(nodes);\n\n var removedNodes = [];\n var remainingDegrees = new Map();\n var foundCenter = false;\n var centerNode = null;\n\n if (list.length == 1 || list.length == 2) {\n foundCenter = true;\n centerNode = list[0];\n }\n\n for (var i = 0; i < list.length; i++) {\n var node = list[i];\n var degree = node.getNeighborsList().size;\n remainingDegrees.set(node, node.getNeighborsList().size);\n\n if (degree == 1) {\n removedNodes.push(node);\n }\n }\n\n var tempList = [];\n tempList = tempList.concat(removedNodes);\n\n while (!foundCenter) {\n var tempList2 = [];\n tempList2 = tempList2.concat(tempList);\n tempList = [];\n\n for (var i = 0; i < list.length; i++) {\n var node = list[i];\n\n var index = list.indexOf(node);\n if (index >= 0) {\n list.splice(index, 1);\n }\n\n var neighbours = node.getNeighborsList();\n\n neighbours.forEach(function (neighbour) {\n if (removedNodes.indexOf(neighbour) < 0) {\n var otherDegree = remainingDegrees.get(neighbour);\n var newDegree = otherDegree - 1;\n\n if (newDegree == 1) {\n tempList.push(neighbour);\n }\n\n remainingDegrees.set(neighbour, newDegree);\n }\n });\n }\n\n removedNodes = removedNodes.concat(tempList);\n\n if (list.length == 1 || list.length == 2) {\n foundCenter = true;\n centerNode = list[0];\n }\n }\n\n return centerNode;\n};\n\n/**\r\n * During the coarsening process, this layout may be referenced by two graph managers\r\n * this setter function grants access to change the currently being used graph manager\r\n */\nLayout.prototype.setGraphManager = function (gm) {\n this.graphManager = gm;\n};\n\nmodule.exports = Layout;\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction RandomSeed() {}\n// adapted from: https://stackoverflow.com/a/19303725\nRandomSeed.seed = 1;\nRandomSeed.x = 0;\n\nRandomSeed.nextDouble = function () {\n RandomSeed.x = Math.sin(RandomSeed.seed++) * 10000;\n return RandomSeed.x - Math.floor(RandomSeed.x);\n};\n\nmodule.exports = RandomSeed;\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar PointD = __webpack_require__(4);\n\nfunction Transform(x, y) {\n this.lworldOrgX = 0.0;\n this.lworldOrgY = 0.0;\n this.ldeviceOrgX = 0.0;\n this.ldeviceOrgY = 0.0;\n this.lworldExtX = 1.0;\n this.lworldExtY = 1.0;\n this.ldeviceExtX = 1.0;\n this.ldeviceExtY = 1.0;\n}\n\nTransform.prototype.getWorldOrgX = function () {\n return this.lworldOrgX;\n};\n\nTransform.prototype.setWorldOrgX = function (wox) {\n this.lworldOrgX = wox;\n};\n\nTransform.prototype.getWorldOrgY = function () {\n return this.lworldOrgY;\n};\n\nTransform.prototype.setWorldOrgY = function (woy) {\n this.lworldOrgY = woy;\n};\n\nTransform.prototype.getWorldExtX = function () {\n return this.lworldExtX;\n};\n\nTransform.prototype.setWorldExtX = function (wex) {\n this.lworldExtX = wex;\n};\n\nTransform.prototype.getWorldExtY = function () {\n return this.lworldExtY;\n};\n\nTransform.prototype.setWorldExtY = function (wey) {\n this.lworldExtY = wey;\n};\n\n/* Device related */\n\nTransform.prototype.getDeviceOrgX = function () {\n return this.ldeviceOrgX;\n};\n\nTransform.prototype.setDeviceOrgX = function (dox) {\n this.ldeviceOrgX = dox;\n};\n\nTransform.prototype.getDeviceOrgY = function () {\n return this.ldeviceOrgY;\n};\n\nTransform.prototype.setDeviceOrgY = function (doy) {\n this.ldeviceOrgY = doy;\n};\n\nTransform.prototype.getDeviceExtX = function () {\n return this.ldeviceExtX;\n};\n\nTransform.prototype.setDeviceExtX = function (dex) {\n this.ldeviceExtX = dex;\n};\n\nTransform.prototype.getDeviceExtY = function () {\n return this.ldeviceExtY;\n};\n\nTransform.prototype.setDeviceExtY = function (dey) {\n this.ldeviceExtY = dey;\n};\n\nTransform.prototype.transformX = function (x) {\n var xDevice = 0.0;\n var worldExtX = this.lworldExtX;\n if (worldExtX != 0.0) {\n xDevice = this.ldeviceOrgX + (x - this.lworldOrgX) * this.ldeviceExtX / worldExtX;\n }\n\n return xDevice;\n};\n\nTransform.prototype.transformY = function (y) {\n var yDevice = 0.0;\n var worldExtY = this.lworldExtY;\n if (worldExtY != 0.0) {\n yDevice = this.ldeviceOrgY + (y - this.lworldOrgY) * this.ldeviceExtY / worldExtY;\n }\n\n return yDevice;\n};\n\nTransform.prototype.inverseTransformX = function (x) {\n var xWorld = 0.0;\n var deviceExtX = this.ldeviceExtX;\n if (deviceExtX != 0.0) {\n xWorld = this.lworldOrgX + (x - this.ldeviceOrgX) * this.lworldExtX / deviceExtX;\n }\n\n return xWorld;\n};\n\nTransform.prototype.inverseTransformY = function (y) {\n var yWorld = 0.0;\n var deviceExtY = this.ldeviceExtY;\n if (deviceExtY != 0.0) {\n yWorld = this.lworldOrgY + (y - this.ldeviceOrgY) * this.lworldExtY / deviceExtY;\n }\n return yWorld;\n};\n\nTransform.prototype.inverseTransformPoint = function (inPoint) {\n var outPoint = new PointD(this.inverseTransformX(inPoint.x), this.inverseTransformY(inPoint.y));\n return outPoint;\n};\n\nmodule.exports = Transform;\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar Layout = __webpack_require__(15);\nvar FDLayoutConstants = __webpack_require__(7);\nvar LayoutConstants = __webpack_require__(0);\nvar IGeometry = __webpack_require__(8);\nvar IMath = __webpack_require__(9);\n\nfunction FDLayout() {\n Layout.call(this);\n\n this.useSmartIdealEdgeLengthCalculation = FDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION;\n this.idealEdgeLength = FDLayoutConstants.DEFAULT_EDGE_LENGTH;\n this.springConstant = FDLayoutConstants.DEFAULT_SPRING_STRENGTH;\n this.repulsionConstant = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH;\n this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH;\n this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH;\n this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR;\n this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR;\n this.displacementThresholdPerNode = 3.0 * FDLayoutConstants.DEFAULT_EDGE_LENGTH / 100;\n this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL;\n this.initialCoolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL;\n this.totalDisplacement = 0.0;\n this.oldTotalDisplacement = 0.0;\n this.maxIterations = FDLayoutConstants.MAX_ITERATIONS;\n}\n\nFDLayout.prototype = Object.create(Layout.prototype);\n\nfor (var prop in Layout) {\n FDLayout[prop] = Layout[prop];\n}\n\nFDLayout.prototype.initParameters = function () {\n Layout.prototype.initParameters.call(this, arguments);\n\n this.totalIterations = 0;\n this.notAnimatedIterations = 0;\n\n this.useFRGridVariant = FDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION;\n\n this.grid = [];\n};\n\nFDLayout.prototype.calcIdealEdgeLengths = function () {\n var edge;\n var lcaDepth;\n var source;\n var target;\n var sizeOfSourceInLca;\n var sizeOfTargetInLca;\n\n var allEdges = this.getGraphManager().getAllEdges();\n for (var i = 0; i < allEdges.length; i++) {\n edge = allEdges[i];\n\n edge.idealLength = this.idealEdgeLength;\n\n if (edge.isInterGraph) {\n source = edge.getSource();\n target = edge.getTarget();\n\n sizeOfSourceInLca = edge.getSourceInLca().getEstimatedSize();\n sizeOfTargetInLca = edge.getTargetInLca().getEstimatedSize();\n\n if (this.useSmartIdealEdgeLengthCalculation) {\n edge.idealLength += sizeOfSourceInLca + sizeOfTargetInLca - 2 * LayoutConstants.SIMPLE_NODE_SIZE;\n }\n\n lcaDepth = edge.getLca().getInclusionTreeDepth();\n\n edge.idealLength += FDLayoutConstants.DEFAULT_EDGE_LENGTH * FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR * (source.getInclusionTreeDepth() + target.getInclusionTreeDepth() - 2 * lcaDepth);\n }\n }\n};\n\nFDLayout.prototype.initSpringEmbedder = function () {\n\n var s = this.getAllNodes().length;\n if (this.incremental) {\n if (s > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) {\n this.coolingFactor = Math.max(this.coolingFactor * FDLayoutConstants.COOLING_ADAPTATION_FACTOR, this.coolingFactor - (s - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * this.coolingFactor * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR));\n }\n this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL;\n } else {\n if (s > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) {\n this.coolingFactor = Math.max(FDLayoutConstants.COOLING_ADAPTATION_FACTOR, 1.0 - (s - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR));\n } else {\n this.coolingFactor = 1.0;\n }\n this.initialCoolingFactor = this.coolingFactor;\n this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT;\n }\n\n this.maxIterations = Math.max(this.getAllNodes().length * 5, this.maxIterations);\n\n this.totalDisplacementThreshold = this.displacementThresholdPerNode * this.getAllNodes().length;\n\n this.repulsionRange = this.calcRepulsionRange();\n};\n\nFDLayout.prototype.calcSpringForces = function () {\n var lEdges = this.getAllEdges();\n var edge;\n\n for (var i = 0; i < lEdges.length; i++) {\n edge = lEdges[i];\n\n this.calcSpringForce(edge, edge.idealLength);\n }\n};\n\nFDLayout.prototype.calcRepulsionForces = function () {\n var gridUpdateAllowed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var forceToNodeSurroundingUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var i, j;\n var nodeA, nodeB;\n var lNodes = this.getAllNodes();\n var processedNodeSet;\n\n if (this.useFRGridVariant) {\n if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed) {\n this.updateGrid();\n }\n\n processedNodeSet = new Set();\n\n // calculate repulsion forces between each nodes and its surrounding\n for (i = 0; i < lNodes.length; i++) {\n nodeA = lNodes[i];\n this.calculateRepulsionForceOfANode(nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate);\n processedNodeSet.add(nodeA);\n }\n } else {\n for (i = 0; i < lNodes.length; i++) {\n nodeA = lNodes[i];\n\n for (j = i + 1; j < lNodes.length; j++) {\n nodeB = lNodes[j];\n\n // If both nodes are not members of the same graph, skip.\n if (nodeA.getOwner() != nodeB.getOwner()) {\n continue;\n }\n\n this.calcRepulsionForce(nodeA, nodeB);\n }\n }\n }\n};\n\nFDLayout.prototype.calcGravitationalForces = function () {\n var node;\n var lNodes = this.getAllNodesToApplyGravitation();\n\n for (var i = 0; i < lNodes.length; i++) {\n node = lNodes[i];\n this.calcGravitationalForce(node);\n }\n};\n\nFDLayout.prototype.moveNodes = function () {\n var lNodes = this.getAllNodes();\n var node;\n\n for (var i = 0; i < lNodes.length; i++) {\n node = lNodes[i];\n node.move();\n }\n};\n\nFDLayout.prototype.calcSpringForce = function (edge, idealLength) {\n var sourceNode = edge.getSource();\n var targetNode = edge.getTarget();\n\n var length;\n var springForce;\n var springForceX;\n var springForceY;\n\n // Update edge length\n if (this.uniformLeafNodeSizes && sourceNode.getChild() == null && targetNode.getChild() == null) {\n edge.updateLengthSimple();\n } else {\n edge.updateLength();\n\n if (edge.isOverlapingSourceAndTarget) {\n return;\n }\n }\n\n length = edge.getLength();\n\n if (length == 0) return;\n\n // Calculate spring forces\n springForce = this.springConstant * (length - idealLength);\n\n // Project force onto x and y axes\n springForceX = springForce * (edge.lengthX / length);\n springForceY = springForce * (edge.lengthY / length);\n\n // Apply forces on the end nodes\n sourceNode.springForceX += springForceX;\n sourceNode.springForceY += springForceY;\n targetNode.springForceX -= springForceX;\n targetNode.springForceY -= springForceY;\n};\n\nFDLayout.prototype.calcRepulsionForce = function (nodeA, nodeB) {\n var rectA = nodeA.getRect();\n var rectB = nodeB.getRect();\n var overlapAmount = new Array(2);\n var clipPoints = new Array(4);\n var distanceX;\n var distanceY;\n var distanceSquared;\n var distance;\n var repulsionForce;\n var repulsionForceX;\n var repulsionForceY;\n\n if (rectA.intersects(rectB)) // two nodes overlap\n {\n // calculate separation amount in x and y directions\n IGeometry.calcSeparationAmount(rectA, rectB, overlapAmount, FDLayoutConstants.DEFAULT_EDGE_LENGTH / 2.0);\n\n repulsionForceX = 2 * overlapAmount[0];\n repulsionForceY = 2 * overlapAmount[1];\n\n var childrenConstant = nodeA.noOfChildren * nodeB.noOfChildren / (nodeA.noOfChildren + nodeB.noOfChildren);\n\n // Apply forces on the two nodes\n nodeA.repulsionForceX -= childrenConstant * repulsionForceX;\n nodeA.repulsionForceY -= childrenConstant * repulsionForceY;\n nodeB.repulsionForceX += childrenConstant * repulsionForceX;\n nodeB.repulsionForceY += childrenConstant * repulsionForceY;\n } else // no overlap\n {\n // calculate distance\n\n if (this.uniformLeafNodeSizes && nodeA.getChild() == null && nodeB.getChild() == null) // simply base repulsion on distance of node centers\n {\n distanceX = rectB.getCenterX() - rectA.getCenterX();\n distanceY = rectB.getCenterY() - rectA.getCenterY();\n } else // use clipping points\n {\n IGeometry.getIntersection(rectA, rectB, clipPoints);\n\n distanceX = clipPoints[2] - clipPoints[0];\n distanceY = clipPoints[3] - clipPoints[1];\n }\n\n // No repulsion range. FR grid variant should take care of this.\n if (Math.abs(distanceX) < FDLayoutConstants.MIN_REPULSION_DIST) {\n distanceX = IMath.sign(distanceX) * FDLayoutConstants.MIN_REPULSION_DIST;\n }\n\n if (Math.abs(distanceY) < FDLayoutConstants.MIN_REPULSION_DIST) {\n distanceY = IMath.sign(distanceY) * FDLayoutConstants.MIN_REPULSION_DIST;\n }\n\n distanceSquared = distanceX * distanceX + distanceY * distanceY;\n distance = Math.sqrt(distanceSquared);\n\n repulsionForce = this.repulsionConstant * nodeA.noOfChildren * nodeB.noOfChildren / distanceSquared;\n\n // Project force onto x and y axes\n repulsionForceX = repulsionForce * distanceX / distance;\n repulsionForceY = repulsionForce * distanceY / distance;\n\n // Apply forces on the two nodes \n nodeA.repulsionForceX -= repulsionForceX;\n nodeA.repulsionForceY -= repulsionForceY;\n nodeB.repulsionForceX += repulsionForceX;\n nodeB.repulsionForceY += repulsionForceY;\n }\n};\n\nFDLayout.prototype.calcGravitationalForce = function (node) {\n var ownerGraph;\n var ownerCenterX;\n var ownerCenterY;\n var distanceX;\n var distanceY;\n var absDistanceX;\n var absDistanceY;\n var estimatedSize;\n ownerGraph = node.getOwner();\n\n ownerCenterX = (ownerGraph.getRight() + ownerGraph.getLeft()) / 2;\n ownerCenterY = (ownerGraph.getTop() + ownerGraph.getBottom()) / 2;\n distanceX = node.getCenterX() - ownerCenterX;\n distanceY = node.getCenterY() - ownerCenterY;\n absDistanceX = Math.abs(distanceX) + node.getWidth() / 2;\n absDistanceY = Math.abs(distanceY) + node.getHeight() / 2;\n\n if (node.getOwner() == this.graphManager.getRoot()) // in the root graph\n {\n estimatedSize = ownerGraph.getEstimatedSize() * this.gravityRangeFactor;\n\n if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) {\n node.gravitationForceX = -this.gravityConstant * distanceX;\n node.gravitationForceY = -this.gravityConstant * distanceY;\n }\n } else // inside a compound\n {\n estimatedSize = ownerGraph.getEstimatedSize() * this.compoundGravityRangeFactor;\n\n if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) {\n node.gravitationForceX = -this.gravityConstant * distanceX * this.compoundGravityConstant;\n node.gravitationForceY = -this.gravityConstant * distanceY * this.compoundGravityConstant;\n }\n }\n};\n\nFDLayout.prototype.isConverged = function () {\n var converged;\n var oscilating = false;\n\n if (this.totalIterations > this.maxIterations / 3) {\n oscilating = Math.abs(this.totalDisplacement - this.oldTotalDisplacement) < 2;\n }\n\n converged = this.totalDisplacement < this.totalDisplacementThreshold;\n\n this.oldTotalDisplacement = this.totalDisplacement;\n\n return converged || oscilating;\n};\n\nFDLayout.prototype.animate = function () {\n if (this.animationDuringLayout && !this.isSubLayout) {\n if (this.notAnimatedIterations == this.animationPeriod) {\n this.update();\n this.notAnimatedIterations = 0;\n } else {\n this.notAnimatedIterations++;\n }\n }\n};\n\n//This method calculates the number of children (weight) for all nodes\nFDLayout.prototype.calcNoOfChildrenForAllNodes = function () {\n var node;\n var allNodes = this.graphManager.getAllNodes();\n\n for (var i = 0; i < allNodes.length; i++) {\n node = allNodes[i];\n node.noOfChildren = node.getNoOfChildren();\n }\n};\n\n// -----------------------------------------------------------------------------\n// Section: FR-Grid Variant Repulsion Force Calculation\n// -----------------------------------------------------------------------------\n\nFDLayout.prototype.calcGrid = function (graph) {\n\n var sizeX = 0;\n var sizeY = 0;\n\n sizeX = parseInt(Math.ceil((graph.getRight() - graph.getLeft()) / this.repulsionRange));\n sizeY = parseInt(Math.ceil((graph.getBottom() - graph.getTop()) / this.repulsionRange));\n\n var grid = new Array(sizeX);\n\n for (var i = 0; i < sizeX; i++) {\n grid[i] = new Array(sizeY);\n }\n\n for (var i = 0; i < sizeX; i++) {\n for (var j = 0; j < sizeY; j++) {\n grid[i][j] = new Array();\n }\n }\n\n return grid;\n};\n\nFDLayout.prototype.addNodeToGrid = function (v, left, top) {\n\n var startX = 0;\n var finishX = 0;\n var startY = 0;\n var finishY = 0;\n\n startX = parseInt(Math.floor((v.getRect().x - left) / this.repulsionRange));\n finishX = parseInt(Math.floor((v.getRect().width + v.getRect().x - left) / this.repulsionRange));\n startY = parseInt(Math.floor((v.getRect().y - top) / this.repulsionRange));\n finishY = parseInt(Math.floor((v.getRect().height + v.getRect().y - top) / this.repulsionRange));\n\n for (var i = startX; i <= finishX; i++) {\n for (var j = startY; j <= finishY; j++) {\n this.grid[i][j].push(v);\n v.setGridCoordinates(startX, finishX, startY, finishY);\n }\n }\n};\n\nFDLayout.prototype.updateGrid = function () {\n var i;\n var nodeA;\n var lNodes = this.getAllNodes();\n\n this.grid = this.calcGrid(this.graphManager.getRoot());\n\n // put all nodes to proper grid cells\n for (i = 0; i < lNodes.length; i++) {\n nodeA = lNodes[i];\n this.addNodeToGrid(nodeA, this.graphManager.getRoot().getLeft(), this.graphManager.getRoot().getTop());\n }\n};\n\nFDLayout.prototype.calculateRepulsionForceOfANode = function (nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate) {\n\n if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed || forceToNodeSurroundingUpdate) {\n var surrounding = new Set();\n nodeA.surrounding = new Array();\n var nodeB;\n var grid = this.grid;\n\n for (var i = nodeA.startX - 1; i < nodeA.finishX + 2; i++) {\n for (var j = nodeA.startY - 1; j < nodeA.finishY + 2; j++) {\n if (!(i < 0 || j < 0 || i >= grid.length || j >= grid[0].length)) {\n for (var k = 0; k < grid[i][j].length; k++) {\n nodeB = grid[i][j][k];\n\n // If both nodes are not members of the same graph, \n // or both nodes are the same, skip.\n if (nodeA.getOwner() != nodeB.getOwner() || nodeA == nodeB) {\n continue;\n }\n\n // check if the repulsion force between\n // nodeA and nodeB has already been calculated\n if (!processedNodeSet.has(nodeB) && !surrounding.has(nodeB)) {\n var distanceX = Math.abs(nodeA.getCenterX() - nodeB.getCenterX()) - (nodeA.getWidth() / 2 + nodeB.getWidth() / 2);\n var distanceY = Math.abs(nodeA.getCenterY() - nodeB.getCenterY()) - (nodeA.getHeight() / 2 + nodeB.getHeight() / 2);\n\n // if the distance between nodeA and nodeB \n // is less then calculation range\n if (distanceX <= this.repulsionRange && distanceY <= this.repulsionRange) {\n //then add nodeB to surrounding of nodeA\n surrounding.add(nodeB);\n }\n }\n }\n }\n }\n }\n\n nodeA.surrounding = [].concat(_toConsumableArray(surrounding));\n }\n for (i = 0; i < nodeA.surrounding.length; i++) {\n this.calcRepulsionForce(nodeA, nodeA.surrounding[i]);\n }\n};\n\nFDLayout.prototype.calcRepulsionRange = function () {\n return 0.0;\n};\n\nmodule.exports = FDLayout;\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LEdge = __webpack_require__(1);\nvar FDLayoutConstants = __webpack_require__(7);\n\nfunction FDLayoutEdge(source, target, vEdge) {\n LEdge.call(this, source, target, vEdge);\n this.idealLength = FDLayoutConstants.DEFAULT_EDGE_LENGTH;\n}\n\nFDLayoutEdge.prototype = Object.create(LEdge.prototype);\n\nfor (var prop in LEdge) {\n FDLayoutEdge[prop] = LEdge[prop];\n}\n\nmodule.exports = FDLayoutEdge;\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LNode = __webpack_require__(3);\n\nfunction FDLayoutNode(gm, loc, size, vNode) {\n // alternative constructor is handled inside LNode\n LNode.call(this, gm, loc, size, vNode);\n //Spring, repulsion and gravitational forces acting on this node\n this.springForceX = 0;\n this.springForceY = 0;\n this.repulsionForceX = 0;\n this.repulsionForceY = 0;\n this.gravitationForceX = 0;\n this.gravitationForceY = 0;\n //Amount by which this node is to be moved in this iteration\n this.displacementX = 0;\n this.displacementY = 0;\n\n //Start and finish grid coordinates that this node is fallen into\n this.startX = 0;\n this.finishX = 0;\n this.startY = 0;\n this.finishY = 0;\n\n //Geometric neighbors of this node\n this.surrounding = [];\n}\n\nFDLayoutNode.prototype = Object.create(LNode.prototype);\n\nfor (var prop in LNode) {\n FDLayoutNode[prop] = LNode[prop];\n}\n\nFDLayoutNode.prototype.setGridCoordinates = function (_startX, _finishX, _startY, _finishY) {\n this.startX = _startX;\n this.finishX = _finishX;\n this.startY = _startY;\n this.finishY = _finishY;\n};\n\nmodule.exports = FDLayoutNode;\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction DimensionD(width, height) {\n this.width = 0;\n this.height = 0;\n if (width !== null && height !== null) {\n this.height = height;\n this.width = width;\n }\n}\n\nDimensionD.prototype.getWidth = function () {\n return this.width;\n};\n\nDimensionD.prototype.setWidth = function (width) {\n this.width = width;\n};\n\nDimensionD.prototype.getHeight = function () {\n return this.height;\n};\n\nDimensionD.prototype.setHeight = function (height) {\n this.height = height;\n};\n\nmodule.exports = DimensionD;\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar UniqueIDGeneretor = __webpack_require__(14);\n\nfunction HashMap() {\n this.map = {};\n this.keys = [];\n}\n\nHashMap.prototype.put = function (key, value) {\n var theId = UniqueIDGeneretor.createID(key);\n if (!this.contains(theId)) {\n this.map[theId] = value;\n this.keys.push(key);\n }\n};\n\nHashMap.prototype.contains = function (key) {\n var theId = UniqueIDGeneretor.createID(key);\n return this.map[key] != null;\n};\n\nHashMap.prototype.get = function (key) {\n var theId = UniqueIDGeneretor.createID(key);\n return this.map[theId];\n};\n\nHashMap.prototype.keySet = function () {\n return this.keys;\n};\n\nmodule.exports = HashMap;\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar UniqueIDGeneretor = __webpack_require__(14);\n\nfunction HashSet() {\n this.set = {};\n}\n;\n\nHashSet.prototype.add = function (obj) {\n var theId = UniqueIDGeneretor.createID(obj);\n if (!this.contains(theId)) this.set[theId] = obj;\n};\n\nHashSet.prototype.remove = function (obj) {\n delete this.set[UniqueIDGeneretor.createID(obj)];\n};\n\nHashSet.prototype.clear = function () {\n this.set = {};\n};\n\nHashSet.prototype.contains = function (obj) {\n return this.set[UniqueIDGeneretor.createID(obj)] == obj;\n};\n\nHashSet.prototype.isEmpty = function () {\n return this.size() === 0;\n};\n\nHashSet.prototype.size = function () {\n return Object.keys(this.set).length;\n};\n\n//concats this.set to the given list\nHashSet.prototype.addAllTo = function (list) {\n var keys = Object.keys(this.set);\n var length = keys.length;\n for (var i = 0; i < length; i++) {\n list.push(this.set[keys[i]]);\n }\n};\n\nHashSet.prototype.size = function () {\n return Object.keys(this.set).length;\n};\n\nHashSet.prototype.addAll = function (list) {\n var s = list.length;\n for (var i = 0; i < s; i++) {\n var v = list[i];\n this.add(v);\n }\n};\n\nmodule.exports = HashSet;\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * A classic Quicksort algorithm with Hoare's partition\n * - Works also on LinkedList objects\n *\n * Copyright: i-Vis Research Group, Bilkent University, 2007 - present\n */\n\nvar LinkedList = __webpack_require__(11);\n\nvar Quicksort = function () {\n function Quicksort(A, compareFunction) {\n _classCallCheck(this, Quicksort);\n\n if (compareFunction !== null || compareFunction !== undefined) this.compareFunction = this._defaultCompareFunction;\n\n var length = void 0;\n if (A instanceof LinkedList) length = A.size();else length = A.length;\n\n this._quicksort(A, 0, length - 1);\n }\n\n _createClass(Quicksort, [{\n key: '_quicksort',\n value: function _quicksort(A, p, r) {\n if (p < r) {\n var q = this._partition(A, p, r);\n this._quicksort(A, p, q);\n this._quicksort(A, q + 1, r);\n }\n }\n }, {\n key: '_partition',\n value: function _partition(A, p, r) {\n var x = this._get(A, p);\n var i = p;\n var j = r;\n while (true) {\n while (this.compareFunction(x, this._get(A, j))) {\n j--;\n }while (this.compareFunction(this._get(A, i), x)) {\n i++;\n }if (i < j) {\n this._swap(A, i, j);\n i++;\n j--;\n } else return j;\n }\n }\n }, {\n key: '_get',\n value: function _get(object, index) {\n if (object instanceof LinkedList) return object.get_object_at(index);else return object[index];\n }\n }, {\n key: '_set',\n value: function _set(object, index, value) {\n if (object instanceof LinkedList) object.set_object_at(index, value);else object[index] = value;\n }\n }, {\n key: '_swap',\n value: function _swap(A, i, j) {\n var temp = this._get(A, i);\n this._set(A, i, this._get(A, j));\n this._set(A, j, temp);\n }\n }, {\n key: '_defaultCompareFunction',\n value: function _defaultCompareFunction(a, b) {\n return b > a;\n }\n }]);\n\n return Quicksort;\n}();\n\nmodule.exports = Quicksort;\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Needleman-Wunsch algorithm is an procedure to compute the optimal global alignment of two string\n * sequences by S.B.Needleman and C.D.Wunsch (1970).\n *\n * Aside from the inputs, you can assign the scores for,\n * - Match: The two characters at the current index are same.\n * - Mismatch: The two characters at the current index are different.\n * - Insertion/Deletion(gaps): The best alignment involves one letter aligning to a gap in the other string.\n */\n\nvar NeedlemanWunsch = function () {\n function NeedlemanWunsch(sequence1, sequence2) {\n var match_score = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n var mismatch_penalty = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : -1;\n var gap_penalty = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : -1;\n\n _classCallCheck(this, NeedlemanWunsch);\n\n this.sequence1 = sequence1;\n this.sequence2 = sequence2;\n this.match_score = match_score;\n this.mismatch_penalty = mismatch_penalty;\n this.gap_penalty = gap_penalty;\n\n // Just the remove redundancy\n this.iMax = sequence1.length + 1;\n this.jMax = sequence2.length + 1;\n\n // Grid matrix of scores\n this.grid = new Array(this.iMax);\n for (var i = 0; i < this.iMax; i++) {\n this.grid[i] = new Array(this.jMax);\n\n for (var j = 0; j < this.jMax; j++) {\n this.grid[i][j] = 0;\n }\n }\n\n // Traceback matrix (2D array, each cell is an array of boolean values for [`Diag`, `Up`, `Left`] positions)\n this.tracebackGrid = new Array(this.iMax);\n for (var _i = 0; _i < this.iMax; _i++) {\n this.tracebackGrid[_i] = new Array(this.jMax);\n\n for (var _j = 0; _j < this.jMax; _j++) {\n this.tracebackGrid[_i][_j] = [null, null, null];\n }\n }\n\n // The aligned sequences (return multiple possibilities)\n this.alignments = [];\n\n // Final alignment score\n this.score = -1;\n\n // Calculate scores and tracebacks\n this.computeGrids();\n }\n\n _createClass(NeedlemanWunsch, [{\n key: \"getScore\",\n value: function getScore() {\n return this.score;\n }\n }, {\n key: \"getAlignments\",\n value: function getAlignments() {\n return this.alignments;\n }\n\n // Main dynamic programming procedure\n\n }, {\n key: \"computeGrids\",\n value: function computeGrids() {\n // Fill in the first row\n for (var j = 1; j < this.jMax; j++) {\n this.grid[0][j] = this.grid[0][j - 1] + this.gap_penalty;\n this.tracebackGrid[0][j] = [false, false, true];\n }\n\n // Fill in the first column\n for (var i = 1; i < this.iMax; i++) {\n this.grid[i][0] = this.grid[i - 1][0] + this.gap_penalty;\n this.tracebackGrid[i][0] = [false, true, false];\n }\n\n // Fill the rest of the grid\n for (var _i2 = 1; _i2 < this.iMax; _i2++) {\n for (var _j2 = 1; _j2 < this.jMax; _j2++) {\n // Find the max score(s) among [`Diag`, `Up`, `Left`]\n var diag = void 0;\n if (this.sequence1[_i2 - 1] === this.sequence2[_j2 - 1]) diag = this.grid[_i2 - 1][_j2 - 1] + this.match_score;else diag = this.grid[_i2 - 1][_j2 - 1] + this.mismatch_penalty;\n\n var up = this.grid[_i2 - 1][_j2] + this.gap_penalty;\n var left = this.grid[_i2][_j2 - 1] + this.gap_penalty;\n\n // If there exists multiple max values, capture them for multiple paths\n var maxOf = [diag, up, left];\n var indices = this.arrayAllMaxIndexes(maxOf);\n\n // Update Grids\n this.grid[_i2][_j2] = maxOf[indices[0]];\n this.tracebackGrid[_i2][_j2] = [indices.includes(0), indices.includes(1), indices.includes(2)];\n }\n }\n\n // Update alignment score\n this.score = this.grid[this.iMax - 1][this.jMax - 1];\n }\n\n // Gets all possible valid sequence combinations\n\n }, {\n key: \"alignmentTraceback\",\n value: function alignmentTraceback() {\n var inProcessAlignments = [];\n\n inProcessAlignments.push({ pos: [this.sequence1.length, this.sequence2.length],\n seq1: \"\",\n seq2: \"\"\n });\n\n while (inProcessAlignments[0]) {\n var current = inProcessAlignments[0];\n var directions = this.tracebackGrid[current.pos[0]][current.pos[1]];\n\n if (directions[0]) {\n inProcessAlignments.push({ pos: [current.pos[0] - 1, current.pos[1] - 1],\n seq1: this.sequence1[current.pos[0] - 1] + current.seq1,\n seq2: this.sequence2[current.pos[1] - 1] + current.seq2\n });\n }\n if (directions[1]) {\n inProcessAlignments.push({ pos: [current.pos[0] - 1, current.pos[1]],\n seq1: this.sequence1[current.pos[0] - 1] + current.seq1,\n seq2: '-' + current.seq2\n });\n }\n if (directions[2]) {\n inProcessAlignments.push({ pos: [current.pos[0], current.pos[1] - 1],\n seq1: '-' + current.seq1,\n seq2: this.sequence2[current.pos[1] - 1] + current.seq2\n });\n }\n\n if (current.pos[0] === 0 && current.pos[1] === 0) this.alignments.push({ sequence1: current.seq1,\n sequence2: current.seq2\n });\n\n inProcessAlignments.shift();\n }\n\n return this.alignments;\n }\n\n // Helper Functions\n\n }, {\n key: \"getAllIndexes\",\n value: function getAllIndexes(arr, val) {\n var indexes = [],\n i = -1;\n while ((i = arr.indexOf(val, i + 1)) !== -1) {\n indexes.push(i);\n }\n return indexes;\n }\n }, {\n key: \"arrayAllMaxIndexes\",\n value: function arrayAllMaxIndexes(array) {\n return this.getAllIndexes(array, Math.max.apply(null, array));\n }\n }]);\n\n return NeedlemanWunsch;\n}();\n\nmodule.exports = NeedlemanWunsch;\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar layoutBase = function layoutBase() {\n return;\n};\n\nlayoutBase.FDLayout = __webpack_require__(18);\nlayoutBase.FDLayoutConstants = __webpack_require__(7);\nlayoutBase.FDLayoutEdge = __webpack_require__(19);\nlayoutBase.FDLayoutNode = __webpack_require__(20);\nlayoutBase.DimensionD = __webpack_require__(21);\nlayoutBase.HashMap = __webpack_require__(22);\nlayoutBase.HashSet = __webpack_require__(23);\nlayoutBase.IGeometry = __webpack_require__(8);\nlayoutBase.IMath = __webpack_require__(9);\nlayoutBase.Integer = __webpack_require__(10);\nlayoutBase.Point = __webpack_require__(12);\nlayoutBase.PointD = __webpack_require__(4);\nlayoutBase.RandomSeed = __webpack_require__(16);\nlayoutBase.RectangleD = __webpack_require__(13);\nlayoutBase.Transform = __webpack_require__(17);\nlayoutBase.UniqueIDGeneretor = __webpack_require__(14);\nlayoutBase.Quicksort = __webpack_require__(24);\nlayoutBase.LinkedList = __webpack_require__(11);\nlayoutBase.LGraphObject = __webpack_require__(2);\nlayoutBase.LGraph = __webpack_require__(5);\nlayoutBase.LEdge = __webpack_require__(1);\nlayoutBase.LGraphManager = __webpack_require__(6);\nlayoutBase.LNode = __webpack_require__(3);\nlayoutBase.Layout = __webpack_require__(15);\nlayoutBase.LayoutConstants = __webpack_require__(0);\nlayoutBase.NeedlemanWunsch = __webpack_require__(25);\n\nmodule.exports = layoutBase;\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction Emitter() {\n this.listeners = [];\n}\n\nvar p = Emitter.prototype;\n\np.addListener = function (event, callback) {\n this.listeners.push({\n event: event,\n callback: callback\n });\n};\n\np.removeListener = function (event, callback) {\n for (var i = this.listeners.length; i >= 0; i--) {\n var l = this.listeners[i];\n\n if (l.event === event && l.callback === callback) {\n this.listeners.splice(i, 1);\n }\n }\n};\n\np.emit = function (event, data) {\n for (var i = 0; i < this.listeners.length; i++) {\n var l = this.listeners[i];\n\n if (event === l.event) {\n l.callback(data);\n }\n }\n};\n\nmodule.exports = Emitter;\n\n/***/ })\n/******/ ]);\n});","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"layout-base\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"layout-base\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"coseBase\"] = factory(require(\"layout-base\"));\n\telse\n\t\troot[\"coseBase\"] = factory(root[\"layoutBase\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_0__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 7);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_0__;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar FDLayoutConstants = __webpack_require__(0).FDLayoutConstants;\n\nfunction CoSEConstants() {}\n\n//CoSEConstants inherits static props in FDLayoutConstants\nfor (var prop in FDLayoutConstants) {\n CoSEConstants[prop] = FDLayoutConstants[prop];\n}\n\nCoSEConstants.DEFAULT_USE_MULTI_LEVEL_SCALING = false;\nCoSEConstants.DEFAULT_RADIAL_SEPARATION = FDLayoutConstants.DEFAULT_EDGE_LENGTH;\nCoSEConstants.DEFAULT_COMPONENT_SEPERATION = 60;\nCoSEConstants.TILE = true;\nCoSEConstants.TILING_PADDING_VERTICAL = 10;\nCoSEConstants.TILING_PADDING_HORIZONTAL = 10;\nCoSEConstants.TREE_REDUCTION_ON_INCREMENTAL = false; // make this true when cose is used incrementally as a part of other non-incremental layout\n\nmodule.exports = CoSEConstants;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar FDLayoutEdge = __webpack_require__(0).FDLayoutEdge;\n\nfunction CoSEEdge(source, target, vEdge) {\n FDLayoutEdge.call(this, source, target, vEdge);\n}\n\nCoSEEdge.prototype = Object.create(FDLayoutEdge.prototype);\nfor (var prop in FDLayoutEdge) {\n CoSEEdge[prop] = FDLayoutEdge[prop];\n}\n\nmodule.exports = CoSEEdge;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LGraph = __webpack_require__(0).LGraph;\n\nfunction CoSEGraph(parent, graphMgr, vGraph) {\n LGraph.call(this, parent, graphMgr, vGraph);\n}\n\nCoSEGraph.prototype = Object.create(LGraph.prototype);\nfor (var prop in LGraph) {\n CoSEGraph[prop] = LGraph[prop];\n}\n\nmodule.exports = CoSEGraph;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LGraphManager = __webpack_require__(0).LGraphManager;\n\nfunction CoSEGraphManager(layout) {\n LGraphManager.call(this, layout);\n}\n\nCoSEGraphManager.prototype = Object.create(LGraphManager.prototype);\nfor (var prop in LGraphManager) {\n CoSEGraphManager[prop] = LGraphManager[prop];\n}\n\nmodule.exports = CoSEGraphManager;\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar FDLayoutNode = __webpack_require__(0).FDLayoutNode;\nvar IMath = __webpack_require__(0).IMath;\n\nfunction CoSENode(gm, loc, size, vNode) {\n FDLayoutNode.call(this, gm, loc, size, vNode);\n}\n\nCoSENode.prototype = Object.create(FDLayoutNode.prototype);\nfor (var prop in FDLayoutNode) {\n CoSENode[prop] = FDLayoutNode[prop];\n}\n\nCoSENode.prototype.move = function () {\n var layout = this.graphManager.getLayout();\n this.displacementX = layout.coolingFactor * (this.springForceX + this.repulsionForceX + this.gravitationForceX) / this.noOfChildren;\n this.displacementY = layout.coolingFactor * (this.springForceY + this.repulsionForceY + this.gravitationForceY) / this.noOfChildren;\n\n if (Math.abs(this.displacementX) > layout.coolingFactor * layout.maxNodeDisplacement) {\n this.displacementX = layout.coolingFactor * layout.maxNodeDisplacement * IMath.sign(this.displacementX);\n }\n\n if (Math.abs(this.displacementY) > layout.coolingFactor * layout.maxNodeDisplacement) {\n this.displacementY = layout.coolingFactor * layout.maxNodeDisplacement * IMath.sign(this.displacementY);\n }\n\n // a simple node, just move it\n if (this.child == null) {\n this.moveBy(this.displacementX, this.displacementY);\n }\n // an empty compound node, again just move it\n else if (this.child.getNodes().length == 0) {\n this.moveBy(this.displacementX, this.displacementY);\n }\n // non-empty compound node, propogate movement to children as well\n else {\n this.propogateDisplacementToChildren(this.displacementX, this.displacementY);\n }\n\n layout.totalDisplacement += Math.abs(this.displacementX) + Math.abs(this.displacementY);\n\n this.springForceX = 0;\n this.springForceY = 0;\n this.repulsionForceX = 0;\n this.repulsionForceY = 0;\n this.gravitationForceX = 0;\n this.gravitationForceY = 0;\n this.displacementX = 0;\n this.displacementY = 0;\n};\n\nCoSENode.prototype.propogateDisplacementToChildren = function (dX, dY) {\n var nodes = this.getChild().getNodes();\n var node;\n for (var i = 0; i < nodes.length; i++) {\n node = nodes[i];\n if (node.getChild() == null) {\n node.moveBy(dX, dY);\n node.displacementX += dX;\n node.displacementY += dY;\n } else {\n node.propogateDisplacementToChildren(dX, dY);\n }\n }\n};\n\nCoSENode.prototype.setPred1 = function (pred1) {\n this.pred1 = pred1;\n};\n\nCoSENode.prototype.getPred1 = function () {\n return pred1;\n};\n\nCoSENode.prototype.getPred2 = function () {\n return pred2;\n};\n\nCoSENode.prototype.setNext = function (next) {\n this.next = next;\n};\n\nCoSENode.prototype.getNext = function () {\n return next;\n};\n\nCoSENode.prototype.setProcessed = function (processed) {\n this.processed = processed;\n};\n\nCoSENode.prototype.isProcessed = function () {\n return processed;\n};\n\nmodule.exports = CoSENode;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar FDLayout = __webpack_require__(0).FDLayout;\nvar CoSEGraphManager = __webpack_require__(4);\nvar CoSEGraph = __webpack_require__(3);\nvar CoSENode = __webpack_require__(5);\nvar CoSEEdge = __webpack_require__(2);\nvar CoSEConstants = __webpack_require__(1);\nvar FDLayoutConstants = __webpack_require__(0).FDLayoutConstants;\nvar LayoutConstants = __webpack_require__(0).LayoutConstants;\nvar Point = __webpack_require__(0).Point;\nvar PointD = __webpack_require__(0).PointD;\nvar Layout = __webpack_require__(0).Layout;\nvar Integer = __webpack_require__(0).Integer;\nvar IGeometry = __webpack_require__(0).IGeometry;\nvar LGraph = __webpack_require__(0).LGraph;\nvar Transform = __webpack_require__(0).Transform;\n\nfunction CoSELayout() {\n FDLayout.call(this);\n\n this.toBeTiled = {}; // Memorize if a node is to be tiled or is tiled\n}\n\nCoSELayout.prototype = Object.create(FDLayout.prototype);\n\nfor (var prop in FDLayout) {\n CoSELayout[prop] = FDLayout[prop];\n}\n\nCoSELayout.prototype.newGraphManager = function () {\n var gm = new CoSEGraphManager(this);\n this.graphManager = gm;\n return gm;\n};\n\nCoSELayout.prototype.newGraph = function (vGraph) {\n return new CoSEGraph(null, this.graphManager, vGraph);\n};\n\nCoSELayout.prototype.newNode = function (vNode) {\n return new CoSENode(this.graphManager, vNode);\n};\n\nCoSELayout.prototype.newEdge = function (vEdge) {\n return new CoSEEdge(null, null, vEdge);\n};\n\nCoSELayout.prototype.initParameters = function () {\n FDLayout.prototype.initParameters.call(this, arguments);\n if (!this.isSubLayout) {\n if (CoSEConstants.DEFAULT_EDGE_LENGTH < 10) {\n this.idealEdgeLength = 10;\n } else {\n this.idealEdgeLength = CoSEConstants.DEFAULT_EDGE_LENGTH;\n }\n\n this.useSmartIdealEdgeLengthCalculation = CoSEConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION;\n this.springConstant = FDLayoutConstants.DEFAULT_SPRING_STRENGTH;\n this.repulsionConstant = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH;\n this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH;\n this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH;\n this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR;\n this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR;\n\n // variables for tree reduction support\n this.prunedNodesAll = [];\n this.growTreeIterations = 0;\n this.afterGrowthIterations = 0;\n this.isTreeGrowing = false;\n this.isGrowthFinished = false;\n\n // variables for cooling\n this.coolingCycle = 0;\n this.maxCoolingCycle = this.maxIterations / FDLayoutConstants.CONVERGENCE_CHECK_PERIOD;\n this.finalTemperature = FDLayoutConstants.CONVERGENCE_CHECK_PERIOD / this.maxIterations;\n this.coolingAdjuster = 1;\n }\n};\n\nCoSELayout.prototype.layout = function () {\n var createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED;\n if (createBendsAsNeeded) {\n this.createBendpoints();\n this.graphManager.resetAllEdges();\n }\n\n this.level = 0;\n return this.classicLayout();\n};\n\nCoSELayout.prototype.classicLayout = function () {\n this.nodesWithGravity = this.calculateNodesToApplyGravitationTo();\n this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity);\n this.calcNoOfChildrenForAllNodes();\n this.graphManager.calcLowestCommonAncestors();\n this.graphManager.calcInclusionTreeDepths();\n this.graphManager.getRoot().calcEstimatedSize();\n this.calcIdealEdgeLengths();\n\n if (!this.incremental) {\n var forest = this.getFlatForest();\n\n // The graph associated with this layout is flat and a forest\n if (forest.length > 0) {\n this.positionNodesRadially(forest);\n }\n // The graph associated with this layout is not flat or a forest\n else {\n // Reduce the trees when incremental mode is not enabled and graph is not a forest \n this.reduceTrees();\n // Update nodes that gravity will be applied\n this.graphManager.resetAllNodesToApplyGravitation();\n var allNodes = new Set(this.getAllNodes());\n var intersection = this.nodesWithGravity.filter(function (x) {\n return allNodes.has(x);\n });\n this.graphManager.setAllNodesToApplyGravitation(intersection);\n\n this.positionNodesRandomly();\n }\n } else {\n if (CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL) {\n // Reduce the trees in incremental mode if only this constant is set to true \n this.reduceTrees();\n // Update nodes that gravity will be applied\n this.graphManager.resetAllNodesToApplyGravitation();\n var allNodes = new Set(this.getAllNodes());\n var intersection = this.nodesWithGravity.filter(function (x) {\n return allNodes.has(x);\n });\n this.graphManager.setAllNodesToApplyGravitation(intersection);\n }\n }\n\n this.initSpringEmbedder();\n this.runSpringEmbedder();\n\n return true;\n};\n\nCoSELayout.prototype.tick = function () {\n this.totalIterations++;\n\n if (this.totalIterations === this.maxIterations && !this.isTreeGrowing && !this.isGrowthFinished) {\n if (this.prunedNodesAll.length > 0) {\n this.isTreeGrowing = true;\n } else {\n return true;\n }\n }\n\n if (this.totalIterations % FDLayoutConstants.CONVERGENCE_CHECK_PERIOD == 0 && !this.isTreeGrowing && !this.isGrowthFinished) {\n if (this.isConverged()) {\n if (this.prunedNodesAll.length > 0) {\n this.isTreeGrowing = true;\n } else {\n return true;\n }\n }\n\n this.coolingCycle++;\n\n if (this.layoutQuality == 0) {\n // quality - \"draft\"\n this.coolingAdjuster = this.coolingCycle;\n } else if (this.layoutQuality == 1) {\n // quality - \"default\"\n this.coolingAdjuster = this.coolingCycle / 3;\n }\n\n // cooling schedule is based on http://www.btluke.com/simanf1.html -> cooling schedule 3\n this.coolingFactor = Math.max(this.initialCoolingFactor - Math.pow(this.coolingCycle, Math.log(100 * (this.initialCoolingFactor - this.finalTemperature)) / Math.log(this.maxCoolingCycle)) / 100 * this.coolingAdjuster, this.finalTemperature);\n this.animationPeriod = Math.ceil(this.initialAnimationPeriod * Math.sqrt(this.coolingFactor));\n }\n // Operations while tree is growing again \n if (this.isTreeGrowing) {\n if (this.growTreeIterations % 10 == 0) {\n if (this.prunedNodesAll.length > 0) {\n this.graphManager.updateBounds();\n this.updateGrid();\n this.growTree(this.prunedNodesAll);\n // Update nodes that gravity will be applied\n this.graphManager.resetAllNodesToApplyGravitation();\n var allNodes = new Set(this.getAllNodes());\n var intersection = this.nodesWithGravity.filter(function (x) {\n return allNodes.has(x);\n });\n this.graphManager.setAllNodesToApplyGravitation(intersection);\n\n this.graphManager.updateBounds();\n this.updateGrid();\n this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL;\n } else {\n this.isTreeGrowing = false;\n this.isGrowthFinished = true;\n }\n }\n this.growTreeIterations++;\n }\n // Operations after growth is finished\n if (this.isGrowthFinished) {\n if (this.isConverged()) {\n return true;\n }\n if (this.afterGrowthIterations % 10 == 0) {\n this.graphManager.updateBounds();\n this.updateGrid();\n }\n this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL * ((100 - this.afterGrowthIterations) / 100);\n this.afterGrowthIterations++;\n }\n\n var gridUpdateAllowed = !this.isTreeGrowing && !this.isGrowthFinished;\n var forceToNodeSurroundingUpdate = this.growTreeIterations % 10 == 1 && this.isTreeGrowing || this.afterGrowthIterations % 10 == 1 && this.isGrowthFinished;\n\n this.totalDisplacement = 0;\n this.graphManager.updateBounds();\n this.calcSpringForces();\n this.calcRepulsionForces(gridUpdateAllowed, forceToNodeSurroundingUpdate);\n this.calcGravitationalForces();\n this.moveNodes();\n this.animate();\n\n return false; // Layout is not ended yet return false\n};\n\nCoSELayout.prototype.getPositionsData = function () {\n var allNodes = this.graphManager.getAllNodes();\n var pData = {};\n for (var i = 0; i < allNodes.length; i++) {\n var rect = allNodes[i].rect;\n var id = allNodes[i].id;\n pData[id] = {\n id: id,\n x: rect.getCenterX(),\n y: rect.getCenterY(),\n w: rect.width,\n h: rect.height\n };\n }\n\n return pData;\n};\n\nCoSELayout.prototype.runSpringEmbedder = function () {\n this.initialAnimationPeriod = 25;\n this.animationPeriod = this.initialAnimationPeriod;\n var layoutEnded = false;\n\n // If aminate option is 'during' signal that layout is supposed to start iterating\n if (FDLayoutConstants.ANIMATE === 'during') {\n this.emit('layoutstarted');\n } else {\n // If aminate option is 'during' tick() function will be called on index.js\n while (!layoutEnded) {\n layoutEnded = this.tick();\n }\n\n this.graphManager.updateBounds();\n }\n};\n\nCoSELayout.prototype.calculateNodesToApplyGravitationTo = function () {\n var nodeList = [];\n var graph;\n\n var graphs = this.graphManager.getGraphs();\n var size = graphs.length;\n var i;\n for (i = 0; i < size; i++) {\n graph = graphs[i];\n\n graph.updateConnected();\n\n if (!graph.isConnected) {\n nodeList = nodeList.concat(graph.getNodes());\n }\n }\n\n return nodeList;\n};\n\nCoSELayout.prototype.createBendpoints = function () {\n var edges = [];\n edges = edges.concat(this.graphManager.getAllEdges());\n var visited = new Set();\n var i;\n for (i = 0; i < edges.length; i++) {\n var edge = edges[i];\n\n if (!visited.has(edge)) {\n var source = edge.getSource();\n var target = edge.getTarget();\n\n if (source == target) {\n edge.getBendpoints().push(new PointD());\n edge.getBendpoints().push(new PointD());\n this.createDummyNodesForBendpoints(edge);\n visited.add(edge);\n } else {\n var edgeList = [];\n\n edgeList = edgeList.concat(source.getEdgeListToNode(target));\n edgeList = edgeList.concat(target.getEdgeListToNode(source));\n\n if (!visited.has(edgeList[0])) {\n if (edgeList.length > 1) {\n var k;\n for (k = 0; k < edgeList.length; k++) {\n var multiEdge = edgeList[k];\n multiEdge.getBendpoints().push(new PointD());\n this.createDummyNodesForBendpoints(multiEdge);\n }\n }\n edgeList.forEach(function (edge) {\n visited.add(edge);\n });\n }\n }\n }\n\n if (visited.size == edges.length) {\n break;\n }\n }\n};\n\nCoSELayout.prototype.positionNodesRadially = function (forest) {\n // We tile the trees to a grid row by row; first tree starts at (0,0)\n var currentStartingPoint = new Point(0, 0);\n var numberOfColumns = Math.ceil(Math.sqrt(forest.length));\n var height = 0;\n var currentY = 0;\n var currentX = 0;\n var point = new PointD(0, 0);\n\n for (var i = 0; i < forest.length; i++) {\n if (i % numberOfColumns == 0) {\n // Start of a new row, make the x coordinate 0, increment the\n // y coordinate with the max height of the previous row\n currentX = 0;\n currentY = height;\n\n if (i != 0) {\n currentY += CoSEConstants.DEFAULT_COMPONENT_SEPERATION;\n }\n\n height = 0;\n }\n\n var tree = forest[i];\n\n // Find the center of the tree\n var centerNode = Layout.findCenterOfTree(tree);\n\n // Set the staring point of the next tree\n currentStartingPoint.x = currentX;\n currentStartingPoint.y = currentY;\n\n // Do a radial layout starting with the center\n point = CoSELayout.radialLayout(tree, centerNode, currentStartingPoint);\n\n if (point.y > height) {\n height = Math.floor(point.y);\n }\n\n currentX = Math.floor(point.x + CoSEConstants.DEFAULT_COMPONENT_SEPERATION);\n }\n\n this.transform(new PointD(LayoutConstants.WORLD_CENTER_X - point.x / 2, LayoutConstants.WORLD_CENTER_Y - point.y / 2));\n};\n\nCoSELayout.radialLayout = function (tree, centerNode, startingPoint) {\n var radialSep = Math.max(this.maxDiagonalInTree(tree), CoSEConstants.DEFAULT_RADIAL_SEPARATION);\n CoSELayout.branchRadialLayout(centerNode, null, 0, 359, 0, radialSep);\n var bounds = LGraph.calculateBounds(tree);\n\n var transform = new Transform();\n transform.setDeviceOrgX(bounds.getMinX());\n transform.setDeviceOrgY(bounds.getMinY());\n transform.setWorldOrgX(startingPoint.x);\n transform.setWorldOrgY(startingPoint.y);\n\n for (var i = 0; i < tree.length; i++) {\n var node = tree[i];\n node.transform(transform);\n }\n\n var bottomRight = new PointD(bounds.getMaxX(), bounds.getMaxY());\n\n return transform.inverseTransformPoint(bottomRight);\n};\n\nCoSELayout.branchRadialLayout = function (node, parentOfNode, startAngle, endAngle, distance, radialSeparation) {\n // First, position this node by finding its angle.\n var halfInterval = (endAngle - startAngle + 1) / 2;\n\n if (halfInterval < 0) {\n halfInterval += 180;\n }\n\n var nodeAngle = (halfInterval + startAngle) % 360;\n var teta = nodeAngle * IGeometry.TWO_PI / 360;\n\n // Make polar to java cordinate conversion.\n var cos_teta = Math.cos(teta);\n var x_ = distance * Math.cos(teta);\n var y_ = distance * Math.sin(teta);\n\n node.setCenter(x_, y_);\n\n // Traverse all neighbors of this node and recursively call this\n // function.\n var neighborEdges = [];\n neighborEdges = neighborEdges.concat(node.getEdges());\n var childCount = neighborEdges.length;\n\n if (parentOfNode != null) {\n childCount--;\n }\n\n var branchCount = 0;\n\n var incEdgesCount = neighborEdges.length;\n var startIndex;\n\n var edges = node.getEdgesBetween(parentOfNode);\n\n // If there are multiple edges, prune them until there remains only one\n // edge.\n while (edges.length > 1) {\n //neighborEdges.remove(edges.remove(0));\n var temp = edges[0];\n edges.splice(0, 1);\n var index = neighborEdges.indexOf(temp);\n if (index >= 0) {\n neighborEdges.splice(index, 1);\n }\n incEdgesCount--;\n childCount--;\n }\n\n if (parentOfNode != null) {\n //assert edges.length == 1;\n startIndex = (neighborEdges.indexOf(edges[0]) + 1) % incEdgesCount;\n } else {\n startIndex = 0;\n }\n\n var stepAngle = Math.abs(endAngle - startAngle) / childCount;\n\n for (var i = startIndex; branchCount != childCount; i = ++i % incEdgesCount) {\n var currentNeighbor = neighborEdges[i].getOtherEnd(node);\n\n // Don't back traverse to root node in current tree.\n if (currentNeighbor == parentOfNode) {\n continue;\n }\n\n var childStartAngle = (startAngle + branchCount * stepAngle) % 360;\n var childEndAngle = (childStartAngle + stepAngle) % 360;\n\n CoSELayout.branchRadialLayout(currentNeighbor, node, childStartAngle, childEndAngle, distance + radialSeparation, radialSeparation);\n\n branchCount++;\n }\n};\n\nCoSELayout.maxDiagonalInTree = function (tree) {\n var maxDiagonal = Integer.MIN_VALUE;\n\n for (var i = 0; i < tree.length; i++) {\n var node = tree[i];\n var diagonal = node.getDiagonal();\n\n if (diagonal > maxDiagonal) {\n maxDiagonal = diagonal;\n }\n }\n\n return maxDiagonal;\n};\n\nCoSELayout.prototype.calcRepulsionRange = function () {\n // formula is 2 x (level + 1) x idealEdgeLength\n return 2 * (this.level + 1) * this.idealEdgeLength;\n};\n\n// Tiling methods\n\n// Group zero degree members whose parents are not to be tiled, create dummy parents where needed and fill memberGroups by their dummp parent id's\nCoSELayout.prototype.groupZeroDegreeMembers = function () {\n var self = this;\n // array of [parent_id x oneDegreeNode_id]\n var tempMemberGroups = {}; // A temporary map of parent node and its zero degree members\n this.memberGroups = {}; // A map of dummy parent node and its zero degree members whose parents are not to be tiled\n this.idToDummyNode = {}; // A map of id to dummy node \n\n var zeroDegree = []; // List of zero degree nodes whose parents are not to be tiled\n var allNodes = this.graphManager.getAllNodes();\n\n // Fill zero degree list\n for (var i = 0; i < allNodes.length; i++) {\n var node = allNodes[i];\n var parent = node.getParent();\n // If a node has zero degree and its parent is not to be tiled if exists add that node to zeroDegres list\n if (this.getNodeDegreeWithChildren(node) === 0 && (parent.id == undefined || !this.getToBeTiled(parent))) {\n zeroDegree.push(node);\n }\n }\n\n // Create a map of parent node and its zero degree members\n for (var i = 0; i < zeroDegree.length; i++) {\n var node = zeroDegree[i]; // Zero degree node itself\n var p_id = node.getParent().id; // Parent id\n\n if (typeof tempMemberGroups[p_id] === \"undefined\") tempMemberGroups[p_id] = [];\n\n tempMemberGroups[p_id] = tempMemberGroups[p_id].concat(node); // Push node to the list belongs to its parent in tempMemberGroups\n }\n\n // If there are at least two nodes at a level, create a dummy compound for them\n Object.keys(tempMemberGroups).forEach(function (p_id) {\n if (tempMemberGroups[p_id].length > 1) {\n var dummyCompoundId = \"DummyCompound_\" + p_id; // The id of dummy compound which will be created soon\n self.memberGroups[dummyCompoundId] = tempMemberGroups[p_id]; // Add dummy compound to memberGroups\n\n var parent = tempMemberGroups[p_id][0].getParent(); // The parent of zero degree nodes will be the parent of new dummy compound\n\n // Create a dummy compound with calculated id\n var dummyCompound = new CoSENode(self.graphManager);\n dummyCompound.id = dummyCompoundId;\n dummyCompound.paddingLeft = parent.paddingLeft || 0;\n dummyCompound.paddingRight = parent.paddingRight || 0;\n dummyCompound.paddingBottom = parent.paddingBottom || 0;\n dummyCompound.paddingTop = parent.paddingTop || 0;\n\n self.idToDummyNode[dummyCompoundId] = dummyCompound;\n\n var dummyParentGraph = self.getGraphManager().add(self.newGraph(), dummyCompound);\n var parentGraph = parent.getChild();\n\n // Add dummy compound to parent the graph\n parentGraph.add(dummyCompound);\n\n // For each zero degree node in this level remove it from its parent graph and add it to the graph of dummy parent\n for (var i = 0; i < tempMemberGroups[p_id].length; i++) {\n var node = tempMemberGroups[p_id][i];\n\n parentGraph.remove(node);\n dummyParentGraph.add(node);\n }\n }\n });\n};\n\nCoSELayout.prototype.clearCompounds = function () {\n var childGraphMap = {};\n var idToNode = {};\n\n // Get compound ordering by finding the inner one first\n this.performDFSOnCompounds();\n\n for (var i = 0; i < this.compoundOrder.length; i++) {\n\n idToNode[this.compoundOrder[i].id] = this.compoundOrder[i];\n childGraphMap[this.compoundOrder[i].id] = [].concat(this.compoundOrder[i].getChild().getNodes());\n\n // Remove children of compounds\n this.graphManager.remove(this.compoundOrder[i].getChild());\n this.compoundOrder[i].child = null;\n }\n\n this.graphManager.resetAllNodes();\n\n // Tile the removed children\n this.tileCompoundMembers(childGraphMap, idToNode);\n};\n\nCoSELayout.prototype.clearZeroDegreeMembers = function () {\n var self = this;\n var tiledZeroDegreePack = this.tiledZeroDegreePack = [];\n\n Object.keys(this.memberGroups).forEach(function (id) {\n var compoundNode = self.idToDummyNode[id]; // Get the dummy compound\n\n tiledZeroDegreePack[id] = self.tileNodes(self.memberGroups[id], compoundNode.paddingLeft + compoundNode.paddingRight);\n\n // Set the width and height of the dummy compound as calculated\n compoundNode.rect.width = tiledZeroDegreePack[id].width;\n compoundNode.rect.height = tiledZeroDegreePack[id].height;\n });\n};\n\nCoSELayout.prototype.repopulateCompounds = function () {\n for (var i = this.compoundOrder.length - 1; i >= 0; i--) {\n var lCompoundNode = this.compoundOrder[i];\n var id = lCompoundNode.id;\n var horizontalMargin = lCompoundNode.paddingLeft;\n var verticalMargin = lCompoundNode.paddingTop;\n\n this.adjustLocations(this.tiledMemberPack[id], lCompoundNode.rect.x, lCompoundNode.rect.y, horizontalMargin, verticalMargin);\n }\n};\n\nCoSELayout.prototype.repopulateZeroDegreeMembers = function () {\n var self = this;\n var tiledPack = this.tiledZeroDegreePack;\n\n Object.keys(tiledPack).forEach(function (id) {\n var compoundNode = self.idToDummyNode[id]; // Get the dummy compound by its id\n var horizontalMargin = compoundNode.paddingLeft;\n var verticalMargin = compoundNode.paddingTop;\n\n // Adjust the positions of nodes wrt its compound\n self.adjustLocations(tiledPack[id], compoundNode.rect.x, compoundNode.rect.y, horizontalMargin, verticalMargin);\n });\n};\n\nCoSELayout.prototype.getToBeTiled = function (node) {\n var id = node.id;\n //firstly check the previous results\n if (this.toBeTiled[id] != null) {\n return this.toBeTiled[id];\n }\n\n //only compound nodes are to be tiled\n var childGraph = node.getChild();\n if (childGraph == null) {\n this.toBeTiled[id] = false;\n return false;\n }\n\n var children = childGraph.getNodes(); // Get the children nodes\n\n //a compound node is not to be tiled if all of its compound children are not to be tiled\n for (var i = 0; i < children.length; i++) {\n var theChild = children[i];\n\n if (this.getNodeDegree(theChild) > 0) {\n this.toBeTiled[id] = false;\n return false;\n }\n\n //pass the children not having the compound structure\n if (theChild.getChild() == null) {\n this.toBeTiled[theChild.id] = false;\n continue;\n }\n\n if (!this.getToBeTiled(theChild)) {\n this.toBeTiled[id] = false;\n return false;\n }\n }\n this.toBeTiled[id] = true;\n return true;\n};\n\n// Get degree of a node depending of its edges and independent of its children\nCoSELayout.prototype.getNodeDegree = function (node) {\n var id = node.id;\n var edges = node.getEdges();\n var degree = 0;\n\n // For the edges connected\n for (var i = 0; i < edges.length; i++) {\n var edge = edges[i];\n if (edge.getSource().id !== edge.getTarget().id) {\n degree = degree + 1;\n }\n }\n return degree;\n};\n\n// Get degree of a node with its children\nCoSELayout.prototype.getNodeDegreeWithChildren = function (node) {\n var degree = this.getNodeDegree(node);\n if (node.getChild() == null) {\n return degree;\n }\n var children = node.getChild().getNodes();\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n degree += this.getNodeDegreeWithChildren(child);\n }\n return degree;\n};\n\nCoSELayout.prototype.performDFSOnCompounds = function () {\n this.compoundOrder = [];\n this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes());\n};\n\nCoSELayout.prototype.fillCompexOrderByDFS = function (children) {\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n if (child.getChild() != null) {\n this.fillCompexOrderByDFS(child.getChild().getNodes());\n }\n if (this.getToBeTiled(child)) {\n this.compoundOrder.push(child);\n }\n }\n};\n\n/**\n* This method places each zero degree member wrt given (x,y) coordinates (top left).\n*/\nCoSELayout.prototype.adjustLocations = function (organization, x, y, compoundHorizontalMargin, compoundVerticalMargin) {\n x += compoundHorizontalMargin;\n y += compoundVerticalMargin;\n\n var left = x;\n\n for (var i = 0; i < organization.rows.length; i++) {\n var row = organization.rows[i];\n x = left;\n var maxHeight = 0;\n\n for (var j = 0; j < row.length; j++) {\n var lnode = row[j];\n\n lnode.rect.x = x; // + lnode.rect.width / 2;\n lnode.rect.y = y; // + lnode.rect.height / 2;\n\n x += lnode.rect.width + organization.horizontalPadding;\n\n if (lnode.rect.height > maxHeight) maxHeight = lnode.rect.height;\n }\n\n y += maxHeight + organization.verticalPadding;\n }\n};\n\nCoSELayout.prototype.tileCompoundMembers = function (childGraphMap, idToNode) {\n var self = this;\n this.tiledMemberPack = [];\n\n Object.keys(childGraphMap).forEach(function (id) {\n // Get the compound node\n var compoundNode = idToNode[id];\n\n self.tiledMemberPack[id] = self.tileNodes(childGraphMap[id], compoundNode.paddingLeft + compoundNode.paddingRight);\n\n compoundNode.rect.width = self.tiledMemberPack[id].width;\n compoundNode.rect.height = self.tiledMemberPack[id].height;\n });\n};\n\nCoSELayout.prototype.tileNodes = function (nodes, minWidth) {\n var verticalPadding = CoSEConstants.TILING_PADDING_VERTICAL;\n var horizontalPadding = CoSEConstants.TILING_PADDING_HORIZONTAL;\n var organization = {\n rows: [],\n rowWidth: [],\n rowHeight: [],\n width: 0,\n height: minWidth, // assume minHeight equals to minWidth\n verticalPadding: verticalPadding,\n horizontalPadding: horizontalPadding\n };\n\n // Sort the nodes in ascending order of their areas\n nodes.sort(function (n1, n2) {\n if (n1.rect.width * n1.rect.height > n2.rect.width * n2.rect.height) return -1;\n if (n1.rect.width * n1.rect.height < n2.rect.width * n2.rect.height) return 1;\n return 0;\n });\n\n // Create the organization -> tile members\n for (var i = 0; i < nodes.length; i++) {\n var lNode = nodes[i];\n\n if (organization.rows.length == 0) {\n this.insertNodeToRow(organization, lNode, 0, minWidth);\n } else if (this.canAddHorizontal(organization, lNode.rect.width, lNode.rect.height)) {\n this.insertNodeToRow(organization, lNode, this.getShortestRowIndex(organization), minWidth);\n } else {\n this.insertNodeToRow(organization, lNode, organization.rows.length, minWidth);\n }\n\n this.shiftToLastRow(organization);\n }\n\n return organization;\n};\n\nCoSELayout.prototype.insertNodeToRow = function (organization, node, rowIndex, minWidth) {\n var minCompoundSize = minWidth;\n\n // Add new row if needed\n if (rowIndex == organization.rows.length) {\n var secondDimension = [];\n\n organization.rows.push(secondDimension);\n organization.rowWidth.push(minCompoundSize);\n organization.rowHeight.push(0);\n }\n\n // Update row width\n var w = organization.rowWidth[rowIndex] + node.rect.width;\n\n if (organization.rows[rowIndex].length > 0) {\n w += organization.horizontalPadding;\n }\n\n organization.rowWidth[rowIndex] = w;\n // Update compound width\n if (organization.width < w) {\n organization.width = w;\n }\n\n // Update height\n var h = node.rect.height;\n if (rowIndex > 0) h += organization.verticalPadding;\n\n var extraHeight = 0;\n if (h > organization.rowHeight[rowIndex]) {\n extraHeight = organization.rowHeight[rowIndex];\n organization.rowHeight[rowIndex] = h;\n extraHeight = organization.rowHeight[rowIndex] - extraHeight;\n }\n\n organization.height += extraHeight;\n\n // Insert node\n organization.rows[rowIndex].push(node);\n};\n\n//Scans the rows of an organization and returns the one with the min width\nCoSELayout.prototype.getShortestRowIndex = function (organization) {\n var r = -1;\n var min = Number.MAX_VALUE;\n\n for (var i = 0; i < organization.rows.length; i++) {\n if (organization.rowWidth[i] < min) {\n r = i;\n min = organization.rowWidth[i];\n }\n }\n return r;\n};\n\n//Scans the rows of an organization and returns the one with the max width\nCoSELayout.prototype.getLongestRowIndex = function (organization) {\n var r = -1;\n var max = Number.MIN_VALUE;\n\n for (var i = 0; i < organization.rows.length; i++) {\n\n if (organization.rowWidth[i] > max) {\n r = i;\n max = organization.rowWidth[i];\n }\n }\n\n return r;\n};\n\n/**\n* This method checks whether adding extra width to the organization violates\n* the aspect ratio(1) or not.\n*/\nCoSELayout.prototype.canAddHorizontal = function (organization, extraWidth, extraHeight) {\n\n var sri = this.getShortestRowIndex(organization);\n\n if (sri < 0) {\n return true;\n }\n\n var min = organization.rowWidth[sri];\n\n if (min + organization.horizontalPadding + extraWidth <= organization.width) return true;\n\n var hDiff = 0;\n\n // Adding to an existing row\n if (organization.rowHeight[sri] < extraHeight) {\n if (sri > 0) hDiff = extraHeight + organization.verticalPadding - organization.rowHeight[sri];\n }\n\n var add_to_row_ratio;\n if (organization.width - min >= extraWidth + organization.horizontalPadding) {\n add_to_row_ratio = (organization.height + hDiff) / (min + extraWidth + organization.horizontalPadding);\n } else {\n add_to_row_ratio = (organization.height + hDiff) / organization.width;\n }\n\n // Adding a new row for this node\n hDiff = extraHeight + organization.verticalPadding;\n var add_new_row_ratio;\n if (organization.width < extraWidth) {\n add_new_row_ratio = (organization.height + hDiff) / extraWidth;\n } else {\n add_new_row_ratio = (organization.height + hDiff) / organization.width;\n }\n\n if (add_new_row_ratio < 1) add_new_row_ratio = 1 / add_new_row_ratio;\n\n if (add_to_row_ratio < 1) add_to_row_ratio = 1 / add_to_row_ratio;\n\n return add_to_row_ratio < add_new_row_ratio;\n};\n\n//If moving the last node from the longest row and adding it to the last\n//row makes the bounding box smaller, do it.\nCoSELayout.prototype.shiftToLastRow = function (organization) {\n var longest = this.getLongestRowIndex(organization);\n var last = organization.rowWidth.length - 1;\n var row = organization.rows[longest];\n var node = row[row.length - 1];\n\n var diff = node.width + organization.horizontalPadding;\n\n // Check if there is enough space on the last row\n if (organization.width - organization.rowWidth[last] > diff && longest != last) {\n // Remove the last element of the longest row\n row.splice(-1, 1);\n\n // Push it to the last row\n organization.rows[last].push(node);\n\n organization.rowWidth[longest] = organization.rowWidth[longest] - diff;\n organization.rowWidth[last] = organization.rowWidth[last] + diff;\n organization.width = organization.rowWidth[instance.getLongestRowIndex(organization)];\n\n // Update heights of the organization\n var maxHeight = Number.MIN_VALUE;\n for (var i = 0; i < row.length; i++) {\n if (row[i].height > maxHeight) maxHeight = row[i].height;\n }\n if (longest > 0) maxHeight += organization.verticalPadding;\n\n var prevTotal = organization.rowHeight[longest] + organization.rowHeight[last];\n\n organization.rowHeight[longest] = maxHeight;\n if (organization.rowHeight[last] < node.height + organization.verticalPadding) organization.rowHeight[last] = node.height + organization.verticalPadding;\n\n var finalTotal = organization.rowHeight[longest] + organization.rowHeight[last];\n organization.height += finalTotal - prevTotal;\n\n this.shiftToLastRow(organization);\n }\n};\n\nCoSELayout.prototype.tilingPreLayout = function () {\n if (CoSEConstants.TILE) {\n // Find zero degree nodes and create a compound for each level\n this.groupZeroDegreeMembers();\n // Tile and clear children of each compound\n this.clearCompounds();\n // Separately tile and clear zero degree nodes for each level\n this.clearZeroDegreeMembers();\n }\n};\n\nCoSELayout.prototype.tilingPostLayout = function () {\n if (CoSEConstants.TILE) {\n this.repopulateZeroDegreeMembers();\n this.repopulateCompounds();\n }\n};\n\n// -----------------------------------------------------------------------------\n// Section: Tree Reduction methods\n// -----------------------------------------------------------------------------\n// Reduce trees \nCoSELayout.prototype.reduceTrees = function () {\n var prunedNodesAll = [];\n var containsLeaf = true;\n var node;\n\n while (containsLeaf) {\n var allNodes = this.graphManager.getAllNodes();\n var prunedNodesInStepTemp = [];\n containsLeaf = false;\n\n for (var i = 0; i < allNodes.length; i++) {\n node = allNodes[i];\n if (node.getEdges().length == 1 && !node.getEdges()[0].isInterGraph && node.getChild() == null) {\n prunedNodesInStepTemp.push([node, node.getEdges()[0], node.getOwner()]);\n containsLeaf = true;\n }\n }\n if (containsLeaf == true) {\n var prunedNodesInStep = [];\n for (var j = 0; j < prunedNodesInStepTemp.length; j++) {\n if (prunedNodesInStepTemp[j][0].getEdges().length == 1) {\n prunedNodesInStep.push(prunedNodesInStepTemp[j]);\n prunedNodesInStepTemp[j][0].getOwner().remove(prunedNodesInStepTemp[j][0]);\n }\n }\n prunedNodesAll.push(prunedNodesInStep);\n this.graphManager.resetAllNodes();\n this.graphManager.resetAllEdges();\n }\n }\n this.prunedNodesAll = prunedNodesAll;\n};\n\n// Grow tree one step \nCoSELayout.prototype.growTree = function (prunedNodesAll) {\n var lengthOfPrunedNodesInStep = prunedNodesAll.length;\n var prunedNodesInStep = prunedNodesAll[lengthOfPrunedNodesInStep - 1];\n\n var nodeData;\n for (var i = 0; i < prunedNodesInStep.length; i++) {\n nodeData = prunedNodesInStep[i];\n\n this.findPlaceforPrunedNode(nodeData);\n\n nodeData[2].add(nodeData[0]);\n nodeData[2].add(nodeData[1], nodeData[1].source, nodeData[1].target);\n }\n\n prunedNodesAll.splice(prunedNodesAll.length - 1, 1);\n this.graphManager.resetAllNodes();\n this.graphManager.resetAllEdges();\n};\n\n// Find an appropriate position to replace pruned node, this method can be improved\nCoSELayout.prototype.findPlaceforPrunedNode = function (nodeData) {\n\n var gridForPrunedNode;\n var nodeToConnect;\n var prunedNode = nodeData[0];\n if (prunedNode == nodeData[1].source) {\n nodeToConnect = nodeData[1].target;\n } else {\n nodeToConnect = nodeData[1].source;\n }\n var startGridX = nodeToConnect.startX;\n var finishGridX = nodeToConnect.finishX;\n var startGridY = nodeToConnect.startY;\n var finishGridY = nodeToConnect.finishY;\n\n var upNodeCount = 0;\n var downNodeCount = 0;\n var rightNodeCount = 0;\n var leftNodeCount = 0;\n var controlRegions = [upNodeCount, rightNodeCount, downNodeCount, leftNodeCount];\n\n if (startGridY > 0) {\n for (var i = startGridX; i <= finishGridX; i++) {\n controlRegions[0] += this.grid[i][startGridY - 1].length + this.grid[i][startGridY].length - 1;\n }\n }\n if (finishGridX < this.grid.length - 1) {\n for (var i = startGridY; i <= finishGridY; i++) {\n controlRegions[1] += this.grid[finishGridX + 1][i].length + this.grid[finishGridX][i].length - 1;\n }\n }\n if (finishGridY < this.grid[0].length - 1) {\n for (var i = startGridX; i <= finishGridX; i++) {\n controlRegions[2] += this.grid[i][finishGridY + 1].length + this.grid[i][finishGridY].length - 1;\n }\n }\n if (startGridX > 0) {\n for (var i = startGridY; i <= finishGridY; i++) {\n controlRegions[3] += this.grid[startGridX - 1][i].length + this.grid[startGridX][i].length - 1;\n }\n }\n var min = Integer.MAX_VALUE;\n var minCount;\n var minIndex;\n for (var j = 0; j < controlRegions.length; j++) {\n if (controlRegions[j] < min) {\n min = controlRegions[j];\n minCount = 1;\n minIndex = j;\n } else if (controlRegions[j] == min) {\n minCount++;\n }\n }\n\n if (minCount == 3 && min == 0) {\n if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[2] == 0) {\n gridForPrunedNode = 1;\n } else if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[3] == 0) {\n gridForPrunedNode = 0;\n } else if (controlRegions[0] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) {\n gridForPrunedNode = 3;\n } else if (controlRegions[1] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) {\n gridForPrunedNode = 2;\n }\n } else if (minCount == 2 && min == 0) {\n var random = Math.floor(Math.random() * 2);\n if (controlRegions[0] == 0 && controlRegions[1] == 0) {\n ;\n if (random == 0) {\n gridForPrunedNode = 0;\n } else {\n gridForPrunedNode = 1;\n }\n } else if (controlRegions[0] == 0 && controlRegions[2] == 0) {\n if (random == 0) {\n gridForPrunedNode = 0;\n } else {\n gridForPrunedNode = 2;\n }\n } else if (controlRegions[0] == 0 && controlRegions[3] == 0) {\n if (random == 0) {\n gridForPrunedNode = 0;\n } else {\n gridForPrunedNode = 3;\n }\n } else if (controlRegions[1] == 0 && controlRegions[2] == 0) {\n if (random == 0) {\n gridForPrunedNode = 1;\n } else {\n gridForPrunedNode = 2;\n }\n } else if (controlRegions[1] == 0 && controlRegions[3] == 0) {\n if (random == 0) {\n gridForPrunedNode = 1;\n } else {\n gridForPrunedNode = 3;\n }\n } else {\n if (random == 0) {\n gridForPrunedNode = 2;\n } else {\n gridForPrunedNode = 3;\n }\n }\n } else if (minCount == 4 && min == 0) {\n var random = Math.floor(Math.random() * 4);\n gridForPrunedNode = random;\n } else {\n gridForPrunedNode = minIndex;\n }\n\n if (gridForPrunedNode == 0) {\n prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() - nodeToConnect.getHeight() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getHeight() / 2);\n } else if (gridForPrunedNode == 1) {\n prunedNode.setCenter(nodeToConnect.getCenterX() + nodeToConnect.getWidth() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getWidth() / 2, nodeToConnect.getCenterY());\n } else if (gridForPrunedNode == 2) {\n prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() + nodeToConnect.getHeight() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getHeight() / 2);\n } else {\n prunedNode.setCenter(nodeToConnect.getCenterX() - nodeToConnect.getWidth() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getWidth() / 2, nodeToConnect.getCenterY());\n }\n};\n\nmodule.exports = CoSELayout;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar coseBase = {};\n\ncoseBase.layoutBase = __webpack_require__(0);\ncoseBase.CoSEConstants = __webpack_require__(1);\ncoseBase.CoSEEdge = __webpack_require__(2);\ncoseBase.CoSEGraph = __webpack_require__(3);\ncoseBase.CoSEGraphManager = __webpack_require__(4);\ncoseBase.CoSELayout = __webpack_require__(6);\ncoseBase.CoSENode = __webpack_require__(5);\n\nmodule.exports = coseBase;\n\n/***/ })\n/******/ ]);\n});","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"cose-base\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"cose-base\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"cytoscapeCoseBilkent\"] = factory(require(\"cose-base\"));\n\telse\n\t\troot[\"cytoscapeCoseBilkent\"] = factory(root[\"coseBase\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_0__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 1);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_0__;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LayoutConstants = __webpack_require__(0).layoutBase.LayoutConstants;\nvar FDLayoutConstants = __webpack_require__(0).layoutBase.FDLayoutConstants;\nvar CoSEConstants = __webpack_require__(0).CoSEConstants;\nvar CoSELayout = __webpack_require__(0).CoSELayout;\nvar CoSENode = __webpack_require__(0).CoSENode;\nvar PointD = __webpack_require__(0).layoutBase.PointD;\nvar DimensionD = __webpack_require__(0).layoutBase.DimensionD;\n\nvar defaults = {\n // Called on `layoutready`\n ready: function ready() {},\n // Called on `layoutstop`\n stop: function stop() {},\n // 'draft', 'default' or 'proof\" \n // - 'draft' fast cooling rate \n // - 'default' moderate cooling rate \n // - \"proof\" slow cooling rate\n quality: 'default',\n // include labels in node dimensions\n nodeDimensionsIncludeLabels: false,\n // number of ticks per frame; higher is faster but more jerky\n refresh: 30,\n // Whether to fit the network view after when done\n fit: true,\n // Padding on fit\n padding: 10,\n // Whether to enable incremental mode\n randomize: true,\n // Node repulsion (non overlapping) multiplier\n nodeRepulsion: 4500,\n // Ideal edge (non nested) length\n idealEdgeLength: 50,\n // Divisor to compute edge forces\n edgeElasticity: 0.45,\n // Nesting factor (multiplier) to compute ideal edge length for nested edges\n nestingFactor: 0.1,\n // Gravity force (constant)\n gravity: 0.25,\n // Maximum number of iterations to perform\n numIter: 2500,\n // For enabling tiling\n tile: true,\n // Type of layout animation. The option set is {'during', 'end', false}\n animate: 'end',\n // Duration for animate:end\n animationDuration: 500,\n // Represents the amount of the vertical space to put between the zero degree members during the tiling operation(can also be a function)\n tilingPaddingVertical: 10,\n // Represents the amount of the horizontal space to put between the zero degree members during the tiling operation(can also be a function)\n tilingPaddingHorizontal: 10,\n // Gravity range (constant) for compounds\n gravityRangeCompound: 1.5,\n // Gravity force (constant) for compounds\n gravityCompound: 1.0,\n // Gravity range (constant)\n gravityRange: 3.8,\n // Initial cooling factor for incremental layout\n initialEnergyOnIncremental: 0.5\n};\n\nfunction extend(defaults, options) {\n var obj = {};\n\n for (var i in defaults) {\n obj[i] = defaults[i];\n }\n\n for (var i in options) {\n obj[i] = options[i];\n }\n\n return obj;\n};\n\nfunction _CoSELayout(_options) {\n this.options = extend(defaults, _options);\n getUserOptions(this.options);\n}\n\nvar getUserOptions = function getUserOptions(options) {\n if (options.nodeRepulsion != null) CoSEConstants.DEFAULT_REPULSION_STRENGTH = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH = options.nodeRepulsion;\n if (options.idealEdgeLength != null) CoSEConstants.DEFAULT_EDGE_LENGTH = FDLayoutConstants.DEFAULT_EDGE_LENGTH = options.idealEdgeLength;\n if (options.edgeElasticity != null) CoSEConstants.DEFAULT_SPRING_STRENGTH = FDLayoutConstants.DEFAULT_SPRING_STRENGTH = options.edgeElasticity;\n if (options.nestingFactor != null) CoSEConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = options.nestingFactor;\n if (options.gravity != null) CoSEConstants.DEFAULT_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = options.gravity;\n if (options.numIter != null) CoSEConstants.MAX_ITERATIONS = FDLayoutConstants.MAX_ITERATIONS = options.numIter;\n if (options.gravityRange != null) CoSEConstants.DEFAULT_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = options.gravityRange;\n if (options.gravityCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = options.gravityCompound;\n if (options.gravityRangeCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = options.gravityRangeCompound;\n if (options.initialEnergyOnIncremental != null) CoSEConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = options.initialEnergyOnIncremental;\n\n if (options.quality == 'draft') LayoutConstants.QUALITY = 0;else if (options.quality == 'proof') LayoutConstants.QUALITY = 2;else LayoutConstants.QUALITY = 1;\n\n CoSEConstants.NODE_DIMENSIONS_INCLUDE_LABELS = FDLayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = options.nodeDimensionsIncludeLabels;\n CoSEConstants.DEFAULT_INCREMENTAL = FDLayoutConstants.DEFAULT_INCREMENTAL = LayoutConstants.DEFAULT_INCREMENTAL = !options.randomize;\n CoSEConstants.ANIMATE = FDLayoutConstants.ANIMATE = LayoutConstants.ANIMATE = options.animate;\n CoSEConstants.TILE = options.tile;\n CoSEConstants.TILING_PADDING_VERTICAL = typeof options.tilingPaddingVertical === 'function' ? options.tilingPaddingVertical.call() : options.tilingPaddingVertical;\n CoSEConstants.TILING_PADDING_HORIZONTAL = typeof options.tilingPaddingHorizontal === 'function' ? options.tilingPaddingHorizontal.call() : options.tilingPaddingHorizontal;\n};\n\n_CoSELayout.prototype.run = function () {\n var ready;\n var frameId;\n var options = this.options;\n var idToLNode = this.idToLNode = {};\n var layout = this.layout = new CoSELayout();\n var self = this;\n\n self.stopped = false;\n\n this.cy = this.options.cy;\n\n this.cy.trigger({ type: 'layoutstart', layout: this });\n\n var gm = layout.newGraphManager();\n this.gm = gm;\n\n var nodes = this.options.eles.nodes();\n var edges = this.options.eles.edges();\n\n this.root = gm.addRoot();\n this.processChildrenList(this.root, this.getTopMostNodes(nodes), layout);\n\n for (var i = 0; i < edges.length; i++) {\n var edge = edges[i];\n var sourceNode = this.idToLNode[edge.data(\"source\")];\n var targetNode = this.idToLNode[edge.data(\"target\")];\n if (sourceNode !== targetNode && sourceNode.getEdgesBetween(targetNode).length == 0) {\n var e1 = gm.add(layout.newEdge(), sourceNode, targetNode);\n e1.id = edge.id();\n }\n }\n\n var getPositions = function getPositions(ele, i) {\n if (typeof ele === \"number\") {\n ele = i;\n }\n var theId = ele.data('id');\n var lNode = self.idToLNode[theId];\n\n return {\n x: lNode.getRect().getCenterX(),\n y: lNode.getRect().getCenterY()\n };\n };\n\n /*\n * Reposition nodes in iterations animatedly\n */\n var iterateAnimated = function iterateAnimated() {\n // Thigs to perform after nodes are repositioned on screen\n var afterReposition = function afterReposition() {\n if (options.fit) {\n options.cy.fit(options.eles, options.padding);\n }\n\n if (!ready) {\n ready = true;\n self.cy.one('layoutready', options.ready);\n self.cy.trigger({ type: 'layoutready', layout: self });\n }\n };\n\n var ticksPerFrame = self.options.refresh;\n var isDone;\n\n for (var i = 0; i < ticksPerFrame && !isDone; i++) {\n isDone = self.stopped || self.layout.tick();\n }\n\n // If layout is done\n if (isDone) {\n // If the layout is not a sublayout and it is successful perform post layout.\n if (layout.checkLayoutSuccess() && !layout.isSubLayout) {\n layout.doPostLayout();\n }\n\n // If layout has a tilingPostLayout function property call it.\n if (layout.tilingPostLayout) {\n layout.tilingPostLayout();\n }\n\n layout.isLayoutFinished = true;\n\n self.options.eles.nodes().positions(getPositions);\n\n afterReposition();\n\n // trigger layoutstop when the layout stops (e.g. finishes)\n self.cy.one('layoutstop', self.options.stop);\n self.cy.trigger({ type: 'layoutstop', layout: self });\n\n if (frameId) {\n cancelAnimationFrame(frameId);\n }\n\n ready = false;\n return;\n }\n\n var animationData = self.layout.getPositionsData(); // Get positions of layout nodes note that all nodes may not be layout nodes because of tiling\n\n // Position nodes, for the nodes whose id does not included in data (because they are removed from their parents and included in dummy compounds)\n // use position of their ancestors or dummy ancestors\n options.eles.nodes().positions(function (ele, i) {\n if (typeof ele === \"number\") {\n ele = i;\n }\n // If ele is a compound node, then its position will be defined by its children\n if (!ele.isParent()) {\n var theId = ele.id();\n var pNode = animationData[theId];\n var temp = ele;\n // If pNode is undefined search until finding position data of its first ancestor (It may be dummy as well)\n while (pNode == null) {\n pNode = animationData[temp.data('parent')] || animationData['DummyCompound_' + temp.data('parent')];\n animationData[theId] = pNode;\n temp = temp.parent()[0];\n if (temp == undefined) {\n break;\n }\n }\n if (pNode != null) {\n return {\n x: pNode.x,\n y: pNode.y\n };\n } else {\n return {\n x: ele.position('x'),\n y: ele.position('y')\n };\n }\n }\n });\n\n afterReposition();\n\n frameId = requestAnimationFrame(iterateAnimated);\n };\n\n /*\n * Listen 'layoutstarted' event and start animated iteration if animate option is 'during'\n */\n layout.addListener('layoutstarted', function () {\n if (self.options.animate === 'during') {\n frameId = requestAnimationFrame(iterateAnimated);\n }\n });\n\n layout.runLayout(); // Run cose layout\n\n /*\n * If animate option is not 'during' ('end' or false) perform these here (If it is 'during' similar things are already performed)\n */\n if (this.options.animate !== \"during\") {\n self.options.eles.nodes().not(\":parent\").layoutPositions(self, self.options, getPositions); // Use layout positions to reposition the nodes it considers the options parameter\n ready = false;\n }\n\n return this; // chaining\n};\n\n//Get the top most ones of a list of nodes\n_CoSELayout.prototype.getTopMostNodes = function (nodes) {\n var nodesMap = {};\n for (var i = 0; i < nodes.length; i++) {\n nodesMap[nodes[i].id()] = true;\n }\n var roots = nodes.filter(function (ele, i) {\n if (typeof ele === \"number\") {\n ele = i;\n }\n var parent = ele.parent()[0];\n while (parent != null) {\n if (nodesMap[parent.id()]) {\n return false;\n }\n parent = parent.parent()[0];\n }\n return true;\n });\n\n return roots;\n};\n\n_CoSELayout.prototype.processChildrenList = function (parent, children, layout) {\n var size = children.length;\n for (var i = 0; i < size; i++) {\n var theChild = children[i];\n var children_of_children = theChild.children();\n var theNode;\n\n var dimensions = theChild.layoutDimensions({\n nodeDimensionsIncludeLabels: this.options.nodeDimensionsIncludeLabels\n });\n\n if (theChild.outerWidth() != null && theChild.outerHeight() != null) {\n theNode = parent.add(new CoSENode(layout.graphManager, new PointD(theChild.position('x') - dimensions.w / 2, theChild.position('y') - dimensions.h / 2), new DimensionD(parseFloat(dimensions.w), parseFloat(dimensions.h))));\n } else {\n theNode = parent.add(new CoSENode(this.graphManager));\n }\n // Attach id to the layout node\n theNode.id = theChild.data(\"id\");\n // Attach the paddings of cy node to layout node\n theNode.paddingLeft = parseInt(theChild.css('padding'));\n theNode.paddingTop = parseInt(theChild.css('padding'));\n theNode.paddingRight = parseInt(theChild.css('padding'));\n theNode.paddingBottom = parseInt(theChild.css('padding'));\n\n //Attach the label properties to compound if labels will be included in node dimensions \n if (this.options.nodeDimensionsIncludeLabels) {\n if (theChild.isParent()) {\n var labelWidth = theChild.boundingBox({ includeLabels: true, includeNodes: false }).w;\n var labelHeight = theChild.boundingBox({ includeLabels: true, includeNodes: false }).h;\n var labelPos = theChild.css(\"text-halign\");\n theNode.labelWidth = labelWidth;\n theNode.labelHeight = labelHeight;\n theNode.labelPos = labelPos;\n }\n }\n\n // Map the layout node\n this.idToLNode[theChild.data(\"id\")] = theNode;\n\n if (isNaN(theNode.rect.x)) {\n theNode.rect.x = 0;\n }\n\n if (isNaN(theNode.rect.y)) {\n theNode.rect.y = 0;\n }\n\n if (children_of_children != null && children_of_children.length > 0) {\n var theNewGraph;\n theNewGraph = layout.getGraphManager().add(layout.newGraph(), theNode);\n this.processChildrenList(theNewGraph, children_of_children, layout);\n }\n }\n};\n\n/**\n * @brief : called on continuous layouts to stop them before they finish\n */\n_CoSELayout.prototype.stop = function () {\n this.stopped = true;\n\n return this; // chaining\n};\n\nvar register = function register(cytoscape) {\n // var Layout = getLayout( cytoscape );\n\n cytoscape('layout', 'cose-bilkent', _CoSELayout);\n};\n\n// auto reg for globals\nif (typeof cytoscape !== 'undefined') {\n register(cytoscape);\n}\n\nmodule.exports = register;\n\n/***/ })\n/******/ ]);\n});","import {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/rendering-util/layout-algorithms/cose-bilkent/cytoscape-setup.ts\nimport cytoscape from \"cytoscape\";\nimport coseBilkent from \"cytoscape-cose-bilkent\";\nimport { select } from \"d3\";\ncytoscape.use(coseBilkent);\nfunction addNodes(nodes, cy) {\n nodes.forEach((node) => {\n const nodeData = {\n id: node.id,\n labelText: node.label,\n height: node.height,\n width: node.width,\n padding: node.padding ?? 0\n };\n Object.keys(node).forEach((key) => {\n if (![\"id\", \"label\", \"height\", \"width\", \"padding\", \"x\", \"y\"].includes(key)) {\n nodeData[key] = node[key];\n }\n });\n cy.add({\n group: \"nodes\",\n data: nodeData,\n position: {\n x: node.x ?? 0,\n y: node.y ?? 0\n }\n });\n });\n}\n__name(addNodes, \"addNodes\");\nfunction addEdges(edges, cy) {\n edges.forEach((edge) => {\n const edgeData = {\n id: edge.id,\n source: edge.start,\n target: edge.end\n };\n Object.keys(edge).forEach((key) => {\n if (![\"id\", \"start\", \"end\"].includes(key)) {\n edgeData[key] = edge[key];\n }\n });\n cy.add({\n group: \"edges\",\n data: edgeData\n });\n });\n}\n__name(addEdges, \"addEdges\");\nfunction createCytoscapeInstance(data) {\n return new Promise((resolve) => {\n const renderEl = select(\"body\").append(\"div\").attr(\"id\", \"cy\").attr(\"style\", \"display:none\");\n const cy = cytoscape({\n container: document.getElementById(\"cy\"),\n // container to render in\n style: [\n {\n selector: \"edge\",\n style: {\n \"curve-style\": \"bezier\"\n }\n }\n ]\n });\n renderEl.remove();\n addNodes(data.nodes, cy);\n addEdges(data.edges, cy);\n cy.nodes().forEach(function(n) {\n n.layoutDimensions = () => {\n const nodeData = n.data();\n return { w: nodeData.width, h: nodeData.height };\n };\n });\n const layoutConfig = {\n name: \"cose-bilkent\",\n // @ts-ignore Types for cose-bilkent are not correct?\n quality: \"proof\",\n styleEnabled: false,\n animate: false\n };\n cy.layout(layoutConfig).run();\n cy.ready((e) => {\n log.info(\"Cytoscape ready\", e);\n resolve(cy);\n });\n });\n}\n__name(createCytoscapeInstance, \"createCytoscapeInstance\");\nfunction extractPositionedNodes(cy) {\n return cy.nodes().map((node) => {\n const data = node.data();\n const position = node.position();\n const positionedNode = {\n id: data.id,\n x: position.x,\n y: position.y\n };\n Object.keys(data).forEach((key) => {\n if (key !== \"id\") {\n positionedNode[key] = data[key];\n }\n });\n return positionedNode;\n });\n}\n__name(extractPositionedNodes, \"extractPositionedNodes\");\nfunction extractPositionedEdges(cy) {\n return cy.edges().map((edge) => {\n const data = edge.data();\n const rscratch = edge._private.rscratch;\n const positionedEdge = {\n id: data.id,\n source: data.source,\n target: data.target,\n startX: rscratch.startX,\n startY: rscratch.startY,\n midX: rscratch.midX,\n midY: rscratch.midY,\n endX: rscratch.endX,\n endY: rscratch.endY\n };\n Object.keys(data).forEach((key) => {\n if (![\"id\", \"source\", \"target\"].includes(key)) {\n positionedEdge[key] = data[key];\n }\n });\n return positionedEdge;\n });\n}\n__name(extractPositionedEdges, \"extractPositionedEdges\");\n\n// src/rendering-util/layout-algorithms/cose-bilkent/layout.ts\nasync function executeCoseBilkentLayout(data, _config) {\n log.debug(\"Starting cose-bilkent layout algorithm\");\n try {\n validateLayoutData(data);\n const cy = await createCytoscapeInstance(data);\n const positionedNodes = extractPositionedNodes(cy);\n const positionedEdges = extractPositionedEdges(cy);\n log.debug(`Layout completed: ${positionedNodes.length} nodes, ${positionedEdges.length} edges`);\n return {\n nodes: positionedNodes,\n edges: positionedEdges\n };\n } catch (error) {\n log.error(\"Error in cose-bilkent layout algorithm:\", error);\n throw error;\n }\n}\n__name(executeCoseBilkentLayout, \"executeCoseBilkentLayout\");\nfunction validateLayoutData(data) {\n if (!data) {\n throw new Error(\"Layout data is required\");\n }\n if (!data.config) {\n throw new Error(\"Configuration is required in layout data\");\n }\n if (!data.rootNode) {\n throw new Error(\"Root node is required\");\n }\n if (!data.nodes || !Array.isArray(data.nodes)) {\n throw new Error(\"No nodes found in layout data\");\n }\n if (!Array.isArray(data.edges)) {\n throw new Error(\"Edges array is required in layout data\");\n }\n return true;\n}\n__name(validateLayoutData, \"validateLayoutData\");\n\n// src/rendering-util/layout-algorithms/cose-bilkent/render.ts\nvar render = /* @__PURE__ */ __name(async (data4Layout, svg, {\n insertCluster,\n insertEdge,\n insertEdgeLabel,\n insertMarkers,\n insertNode,\n log: log2,\n positionEdgeLabel\n}, { algorithm: _algorithm }) => {\n const nodeDb = {};\n const clusterDb = {};\n const element = svg.select(\"g\");\n insertMarkers(element, data4Layout.markers, data4Layout.type, data4Layout.diagramId);\n const subGraphsEl = element.insert(\"g\").attr(\"class\", \"subgraphs\");\n const edgePaths = element.insert(\"g\").attr(\"class\", \"edgePaths\");\n const edgeLabels = element.insert(\"g\").attr(\"class\", \"edgeLabels\");\n const nodes = element.insert(\"g\").attr(\"class\", \"nodes\");\n log2.debug(\"Inserting nodes into DOM for dimension calculation\");\n await Promise.all(\n data4Layout.nodes.map(async (node) => {\n if (node.isGroup) {\n const clusterNode = { ...node };\n clusterDb[node.id] = clusterNode;\n nodeDb[node.id] = clusterNode;\n await insertCluster(subGraphsEl, node);\n } else {\n const nodeWithPosition = { ...node };\n nodeDb[node.id] = nodeWithPosition;\n const nodeEl = await insertNode(nodes, node, {\n config: data4Layout.config,\n dir: data4Layout.direction || \"TB\"\n });\n const boundingBox = nodeEl.node().getBBox();\n nodeWithPosition.width = boundingBox.width;\n nodeWithPosition.height = boundingBox.height;\n nodeWithPosition.domId = nodeEl;\n log2.debug(`Node ${node.id} dimensions: ${boundingBox.width}x${boundingBox.height}`);\n }\n })\n );\n log2.debug(\"Running cose-bilkent layout algorithm\");\n const updatedLayoutData = {\n ...data4Layout,\n nodes: data4Layout.nodes.map((node) => {\n const nodeWithDimensions = nodeDb[node.id];\n return {\n ...node,\n width: nodeWithDimensions.width,\n height: nodeWithDimensions.height\n };\n })\n };\n const layoutResult = await executeCoseBilkentLayout(updatedLayoutData, data4Layout.config);\n log2.debug(\"Positioning nodes based on layout results\");\n layoutResult.nodes.forEach((positionedNode) => {\n const node = nodeDb[positionedNode.id];\n if (node?.domId) {\n node.domId.attr(\n \"transform\",\n `translate(${positionedNode.x}, ${positionedNode.y})`\n );\n node.x = positionedNode.x;\n node.y = positionedNode.y;\n log2.debug(`Positioned node ${node.id} at center (${positionedNode.x}, ${positionedNode.y})`);\n }\n });\n layoutResult.edges.forEach((positionedEdge) => {\n const edge = data4Layout.edges.find((e) => e.id === positionedEdge.id);\n if (edge) {\n edge.points = [\n { x: positionedEdge.startX, y: positionedEdge.startY },\n { x: positionedEdge.midX, y: positionedEdge.midY },\n { x: positionedEdge.endX, y: positionedEdge.endY }\n ];\n }\n });\n log2.debug(\"Inserting and positioning edges\");\n await Promise.all(\n data4Layout.edges.map(async (edge) => {\n const _edgeLabel = await insertEdgeLabel(edgeLabels, edge);\n const startNode = nodeDb[edge.start ?? \"\"];\n const endNode = nodeDb[edge.end ?? \"\"];\n if (startNode && endNode) {\n const positionedEdge = layoutResult.edges.find((e) => e.id === edge.id);\n if (positionedEdge) {\n log2.debug(\"APA01 positionedEdge\", positionedEdge);\n const edgeWithPath = { ...edge };\n const paths = insertEdge(\n edgePaths,\n edgeWithPath,\n clusterDb,\n data4Layout.type,\n startNode,\n endNode,\n data4Layout.diagramId\n );\n positionEdgeLabel(edgeWithPath, paths);\n } else {\n const edgeWithPath = {\n ...edge,\n points: [\n { x: startNode.x || 0, y: startNode.y || 0 },\n { x: endNode.x || 0, y: endNode.y || 0 }\n ]\n };\n const paths = insertEdge(\n edgePaths,\n edgeWithPath,\n clusterDb,\n data4Layout.type,\n startNode,\n endNode,\n data4Layout.diagramId\n );\n positionEdgeLabel(edgeWithPath, paths);\n }\n }\n })\n );\n log2.debug(\"Cose-bilkent rendering completed\");\n}, \"render\");\n\n// src/rendering-util/layout-algorithms/cose-bilkent/index.ts\nvar render2 = render;\nexport {\n render2 as render\n};\n"],"names":["__name","root","factory","module","this","modules","installedModules","__webpack_require__","moduleId","value","exports","name","getter","object","property","LayoutConstants","LGraphObject","IGeometry","IMath","LEdge","source","target","vEdge","prop","node","graph","otherEnd","clipPointCoordinates","vGraphObject","Integer","RectangleD","RandomSeed","PointD","LNode","gm","loc","size","vNode","width","height","upperLeft","dimension","cx","cy","x","y","dx","dy","to","edgeList","self","edge","other","neighbors","withNeighborsList","childNode","children","nodes","i","noOfChildren","randomCenterX","randomCenterY","minX","maxX","minY","maxY","childGraph","trans","left","top","leftTop","vLeftTop","pt","dim","LGraphManager","Point","LinkedList","LGraph","parent","obj2","vGraph","obj1","sourceNode","targetNode","newNode","newEdge","obj","edgesToBeRemoved","s","index","sourceIndex","targetIndex","nodeTop","nodeLeft","margin","lNode","recursive","right","bottom","nodeRight","nodeBottom","boundingRect","queue","visited","currentNode","neighborEdges","currentNeighbor","childrenOfNode","neighborEdge","childrenOfNeighbor","noOfVisitedInThisGraph","visitedNode","layout","ngraph","nnode","newGraph","parentNode","sourceGraph","targetGraph","lObj","nodesToBeRemoved","nodeList","graphs","firstNode","secondNode","ownerGraph","sourceAncestorGraph","targetAncestorGraph","edges","firstOwnerGraph","secondOwnerGraph","depth","FDLayoutConstants","rectA","rectB","overlapAmount","separationBuffer","directions","slope","moveByY","moveByX","result","p1x","p1y","p2x","p2y","topLeftAx","topLeftAy","topRightAx","bottomLeftAx","bottomLeftAy","bottomRightAx","halfWidthA","halfHeightA","topLeftBx","topLeftBy","topRightBx","bottomLeftBx","bottomLeftBy","bottomRightBx","halfWidthB","halfHeightB","clipPointAFound","clipPointBFound","slopeA","slopeB","slopePrime","cardinalDirectionA","cardinalDirectionB","tempPointAx","tempPointAy","tempPointBx","tempPointBy","line","s1","s2","f1","f2","x1","y1","x2","y2","x3","y3","x4","y4","a1","a2","b1","b2","c1","c2","denom","Cx","Cy","Nx","Ny","C_angle","p1","p2","p3","p4","a","b","c","d","p","q","r","det","lambda","gamma","_createClass","defineProperties","props","descriptor","Constructor","protoProps","staticProps","_classCallCheck","instance","nodeFrom","add","prev","next","list","_remove","vals","_this","v","val","otherNode","current","_typeof","UniqueIDGeneretor","id","arg","type","_toConsumableArray","arr","arr2","Transform","Emitter","Layout","isRemoteUse","isLayoutSuccessfull","allEdges","newLeftTop","flatForest","isForest","allNodes","isFlat","toBeVisited","parents","unProcessedNodes","temp","dummyNodes","dummyNode","dummyEdge","k","lEdge","path","ebp","sliderValue","defaultValue","minDiv","maxMul","minValue","maxValue","removedNodes","remainingDegrees","foundCenter","centerNode","degree","tempList","tempList2","neighbours","neighbour","otherDegree","newDegree","wox","woy","wex","wey","dox","doy","dex","dey","xDevice","worldExtX","yDevice","worldExtY","xWorld","deviceExtX","yWorld","deviceExtY","inPoint","outPoint","FDLayout","lcaDepth","sizeOfSourceInLca","sizeOfTargetInLca","lEdges","gridUpdateAllowed","forceToNodeSurroundingUpdate","j","nodeA","nodeB","lNodes","processedNodeSet","idealLength","length","springForce","springForceX","springForceY","clipPoints","distanceX","distanceY","distanceSquared","distance","repulsionForce","repulsionForceX","repulsionForceY","childrenConstant","ownerCenterX","ownerCenterY","absDistanceX","absDistanceY","estimatedSize","converged","oscilating","sizeX","sizeY","grid","startX","finishX","startY","finishY","surrounding","FDLayoutEdge","FDLayoutNode","_startX","_finishX","_startY","_finishY","DimensionD","HashMap","key","theId","HashSet","keys","Quicksort","A","compareFunction","NeedlemanWunsch","sequence1","sequence2","match_score","mismatch_penalty","gap_penalty","_i","_j","_i2","_j2","diag","up","maxOf","indices","inProcessAlignments","indexes","array","layoutBase","event","callback","l","data","require$$0","__WEBPACK_EXTERNAL_MODULE_0__","CoSEConstants","CoSEEdge","CoSEGraph","graphMgr","CoSEGraphManager","CoSENode","dX","dY","pred1","processed","CoSELayout","createBendsAsNeeded","intersection","forest","pData","rect","layoutEnded","multiEdge","currentStartingPoint","numberOfColumns","currentY","currentX","point","tree","startingPoint","radialSep","bounds","transform","bottomRight","parentOfNode","startAngle","endAngle","radialSeparation","halfInterval","nodeAngle","teta","x_","y_","childCount","branchCount","incEdgesCount","startIndex","stepAngle","childStartAngle","childEndAngle","maxDiagonal","diagonal","tempMemberGroups","zeroDegree","p_id","dummyCompoundId","dummyCompound","dummyParentGraph","parentGraph","childGraphMap","idToNode","tiledZeroDegreePack","compoundNode","lCompoundNode","horizontalMargin","verticalMargin","tiledPack","theChild","child","organization","compoundHorizontalMargin","compoundVerticalMargin","row","maxHeight","lnode","minWidth","verticalPadding","horizontalPadding","n1","n2","rowIndex","minCompoundSize","secondDimension","w","h","extraHeight","min","max","extraWidth","sri","hDiff","add_to_row_ratio","add_new_row_ratio","longest","last","diff","prevTotal","finalTotal","prunedNodesAll","containsLeaf","prunedNodesInStepTemp","prunedNodesInStep","lengthOfPrunedNodesInStep","nodeData","gridForPrunedNode","nodeToConnect","prunedNode","startGridX","finishGridX","startGridY","finishGridY","upNodeCount","downNodeCount","rightNodeCount","leftNodeCount","controlRegions","minCount","minIndex","random","coseBase","defaults","extend","options","_CoSELayout","_options","getUserOptions","ready","frameId","e1","getPositions","ele","iterateAnimated","afterReposition","ticksPerFrame","isDone","animationData","pNode","nodesMap","roots","children_of_children","theNode","dimensions","labelWidth","labelHeight","labelPos","theNewGraph","register","cytoscape","coseBilkent","addNodes","addEdges","edgeData","createCytoscapeInstance","resolve","renderEl","select","n","layoutConfig","e","log","extractPositionedNodes","position","positionedNode","extractPositionedEdges","rscratch","positionedEdge","executeCoseBilkentLayout","_config","validateLayoutData","positionedNodes","positionedEdges","error","render","data4Layout","svg","insertCluster","insertEdge","insertEdgeLabel","insertMarkers","insertNode","log2","positionEdgeLabel","_algorithm","nodeDb","clusterDb","element","subGraphsEl","edgePaths","edgeLabels","clusterNode","nodeWithPosition","nodeEl","boundingBox","updatedLayoutData","nodeWithDimensions","layoutResult","startNode","endNode","edgeWithPath","paths","render2"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
1
+ {"version":3,"file":"cose-bilkent-S5V4N54A-WaA6My8T.js","sources":["../../../../node_modules/layout-base/layout-base.js","../../../../node_modules/cose-base/cose-base.js","../../../../node_modules/cytoscape-cose-bilkent/cytoscape-cose-bilkent.js","../../../../node_modules/mermaid/dist/chunks/mermaid.core/cose-bilkent-S5V4N54A.mjs"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"layoutBase\"] = factory();\n\telse\n\t\troot[\"layoutBase\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 26);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction LayoutConstants() {}\n\n/**\r\n * Layout Quality: 0:draft, 1:default, 2:proof\r\n */\nLayoutConstants.QUALITY = 1;\n\n/**\r\n * Default parameters\r\n */\nLayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED = false;\nLayoutConstants.DEFAULT_INCREMENTAL = false;\nLayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT = true;\nLayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT = false;\nLayoutConstants.DEFAULT_ANIMATION_PERIOD = 50;\nLayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES = false;\n\n// -----------------------------------------------------------------------------\n// Section: General other constants\n// -----------------------------------------------------------------------------\n/*\r\n * Margins of a graph to be applied on bouding rectangle of its contents. We\r\n * assume margins on all four sides to be uniform.\r\n */\nLayoutConstants.DEFAULT_GRAPH_MARGIN = 15;\n\n/*\r\n * Whether to consider labels in node dimensions or not\r\n */\nLayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = false;\n\n/*\r\n * Default dimension of a non-compound node.\r\n */\nLayoutConstants.SIMPLE_NODE_SIZE = 40;\n\n/*\r\n * Default dimension of a non-compound node.\r\n */\nLayoutConstants.SIMPLE_NODE_HALF_SIZE = LayoutConstants.SIMPLE_NODE_SIZE / 2;\n\n/*\r\n * Empty compound node size. When a compound node is empty, its both\r\n * dimensions should be of this value.\r\n */\nLayoutConstants.EMPTY_COMPOUND_NODE_SIZE = 40;\n\n/*\r\n * Minimum length that an edge should take during layout\r\n */\nLayoutConstants.MIN_EDGE_LENGTH = 1;\n\n/*\r\n * World boundaries that layout operates on\r\n */\nLayoutConstants.WORLD_BOUNDARY = 1000000;\n\n/*\r\n * World boundaries that random positioning can be performed with\r\n */\nLayoutConstants.INITIAL_WORLD_BOUNDARY = LayoutConstants.WORLD_BOUNDARY / 1000;\n\n/*\r\n * Coordinates of the world center\r\n */\nLayoutConstants.WORLD_CENTER_X = 1200;\nLayoutConstants.WORLD_CENTER_Y = 900;\n\nmodule.exports = LayoutConstants;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LGraphObject = __webpack_require__(2);\nvar IGeometry = __webpack_require__(8);\nvar IMath = __webpack_require__(9);\n\nfunction LEdge(source, target, vEdge) {\n LGraphObject.call(this, vEdge);\n\n this.isOverlapingSourceAndTarget = false;\n this.vGraphObject = vEdge;\n this.bendpoints = [];\n this.source = source;\n this.target = target;\n}\n\nLEdge.prototype = Object.create(LGraphObject.prototype);\n\nfor (var prop in LGraphObject) {\n LEdge[prop] = LGraphObject[prop];\n}\n\nLEdge.prototype.getSource = function () {\n return this.source;\n};\n\nLEdge.prototype.getTarget = function () {\n return this.target;\n};\n\nLEdge.prototype.isInterGraph = function () {\n return this.isInterGraph;\n};\n\nLEdge.prototype.getLength = function () {\n return this.length;\n};\n\nLEdge.prototype.isOverlapingSourceAndTarget = function () {\n return this.isOverlapingSourceAndTarget;\n};\n\nLEdge.prototype.getBendpoints = function () {\n return this.bendpoints;\n};\n\nLEdge.prototype.getLca = function () {\n return this.lca;\n};\n\nLEdge.prototype.getSourceInLca = function () {\n return this.sourceInLca;\n};\n\nLEdge.prototype.getTargetInLca = function () {\n return this.targetInLca;\n};\n\nLEdge.prototype.getOtherEnd = function (node) {\n if (this.source === node) {\n return this.target;\n } else if (this.target === node) {\n return this.source;\n } else {\n throw \"Node is not incident with this edge\";\n }\n};\n\nLEdge.prototype.getOtherEndInGraph = function (node, graph) {\n var otherEnd = this.getOtherEnd(node);\n var root = graph.getGraphManager().getRoot();\n\n while (true) {\n if (otherEnd.getOwner() == graph) {\n return otherEnd;\n }\n\n if (otherEnd.getOwner() == root) {\n break;\n }\n\n otherEnd = otherEnd.getOwner().getParent();\n }\n\n return null;\n};\n\nLEdge.prototype.updateLength = function () {\n var clipPointCoordinates = new Array(4);\n\n this.isOverlapingSourceAndTarget = IGeometry.getIntersection(this.target.getRect(), this.source.getRect(), clipPointCoordinates);\n\n if (!this.isOverlapingSourceAndTarget) {\n this.lengthX = clipPointCoordinates[0] - clipPointCoordinates[2];\n this.lengthY = clipPointCoordinates[1] - clipPointCoordinates[3];\n\n if (Math.abs(this.lengthX) < 1.0) {\n this.lengthX = IMath.sign(this.lengthX);\n }\n\n if (Math.abs(this.lengthY) < 1.0) {\n this.lengthY = IMath.sign(this.lengthY);\n }\n\n this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY);\n }\n};\n\nLEdge.prototype.updateLengthSimple = function () {\n this.lengthX = this.target.getCenterX() - this.source.getCenterX();\n this.lengthY = this.target.getCenterY() - this.source.getCenterY();\n\n if (Math.abs(this.lengthX) < 1.0) {\n this.lengthX = IMath.sign(this.lengthX);\n }\n\n if (Math.abs(this.lengthY) < 1.0) {\n this.lengthY = IMath.sign(this.lengthY);\n }\n\n this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY);\n};\n\nmodule.exports = LEdge;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction LGraphObject(vGraphObject) {\n this.vGraphObject = vGraphObject;\n}\n\nmodule.exports = LGraphObject;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LGraphObject = __webpack_require__(2);\nvar Integer = __webpack_require__(10);\nvar RectangleD = __webpack_require__(13);\nvar LayoutConstants = __webpack_require__(0);\nvar RandomSeed = __webpack_require__(16);\nvar PointD = __webpack_require__(4);\n\nfunction LNode(gm, loc, size, vNode) {\n //Alternative constructor 1 : LNode(LGraphManager gm, Point loc, Dimension size, Object vNode)\n if (size == null && vNode == null) {\n vNode = loc;\n }\n\n LGraphObject.call(this, vNode);\n\n //Alternative constructor 2 : LNode(Layout layout, Object vNode)\n if (gm.graphManager != null) gm = gm.graphManager;\n\n this.estimatedSize = Integer.MIN_VALUE;\n this.inclusionTreeDepth = Integer.MAX_VALUE;\n this.vGraphObject = vNode;\n this.edges = [];\n this.graphManager = gm;\n\n if (size != null && loc != null) this.rect = new RectangleD(loc.x, loc.y, size.width, size.height);else this.rect = new RectangleD();\n}\n\nLNode.prototype = Object.create(LGraphObject.prototype);\nfor (var prop in LGraphObject) {\n LNode[prop] = LGraphObject[prop];\n}\n\nLNode.prototype.getEdges = function () {\n return this.edges;\n};\n\nLNode.prototype.getChild = function () {\n return this.child;\n};\n\nLNode.prototype.getOwner = function () {\n // if (this.owner != null) {\n // if (!(this.owner == null || this.owner.getNodes().indexOf(this) > -1)) {\n // throw \"assert failed\";\n // }\n // }\n\n return this.owner;\n};\n\nLNode.prototype.getWidth = function () {\n return this.rect.width;\n};\n\nLNode.prototype.setWidth = function (width) {\n this.rect.width = width;\n};\n\nLNode.prototype.getHeight = function () {\n return this.rect.height;\n};\n\nLNode.prototype.setHeight = function (height) {\n this.rect.height = height;\n};\n\nLNode.prototype.getCenterX = function () {\n return this.rect.x + this.rect.width / 2;\n};\n\nLNode.prototype.getCenterY = function () {\n return this.rect.y + this.rect.height / 2;\n};\n\nLNode.prototype.getCenter = function () {\n return new PointD(this.rect.x + this.rect.width / 2, this.rect.y + this.rect.height / 2);\n};\n\nLNode.prototype.getLocation = function () {\n return new PointD(this.rect.x, this.rect.y);\n};\n\nLNode.prototype.getRect = function () {\n return this.rect;\n};\n\nLNode.prototype.getDiagonal = function () {\n return Math.sqrt(this.rect.width * this.rect.width + this.rect.height * this.rect.height);\n};\n\n/**\n * This method returns half the diagonal length of this node.\n */\nLNode.prototype.getHalfTheDiagonal = function () {\n return Math.sqrt(this.rect.height * this.rect.height + this.rect.width * this.rect.width) / 2;\n};\n\nLNode.prototype.setRect = function (upperLeft, dimension) {\n this.rect.x = upperLeft.x;\n this.rect.y = upperLeft.y;\n this.rect.width = dimension.width;\n this.rect.height = dimension.height;\n};\n\nLNode.prototype.setCenter = function (cx, cy) {\n this.rect.x = cx - this.rect.width / 2;\n this.rect.y = cy - this.rect.height / 2;\n};\n\nLNode.prototype.setLocation = function (x, y) {\n this.rect.x = x;\n this.rect.y = y;\n};\n\nLNode.prototype.moveBy = function (dx, dy) {\n this.rect.x += dx;\n this.rect.y += dy;\n};\n\nLNode.prototype.getEdgeListToNode = function (to) {\n var edgeList = [];\n var edge;\n var self = this;\n\n self.edges.forEach(function (edge) {\n\n if (edge.target == to) {\n if (edge.source != self) throw \"Incorrect edge source!\";\n\n edgeList.push(edge);\n }\n });\n\n return edgeList;\n};\n\nLNode.prototype.getEdgesBetween = function (other) {\n var edgeList = [];\n var edge;\n\n var self = this;\n self.edges.forEach(function (edge) {\n\n if (!(edge.source == self || edge.target == self)) throw \"Incorrect edge source and/or target\";\n\n if (edge.target == other || edge.source == other) {\n edgeList.push(edge);\n }\n });\n\n return edgeList;\n};\n\nLNode.prototype.getNeighborsList = function () {\n var neighbors = new Set();\n\n var self = this;\n self.edges.forEach(function (edge) {\n\n if (edge.source == self) {\n neighbors.add(edge.target);\n } else {\n if (edge.target != self) {\n throw \"Incorrect incidency!\";\n }\n\n neighbors.add(edge.source);\n }\n });\n\n return neighbors;\n};\n\nLNode.prototype.withChildren = function () {\n var withNeighborsList = new Set();\n var childNode;\n var children;\n\n withNeighborsList.add(this);\n\n if (this.child != null) {\n var nodes = this.child.getNodes();\n for (var i = 0; i < nodes.length; i++) {\n childNode = nodes[i];\n children = childNode.withChildren();\n children.forEach(function (node) {\n withNeighborsList.add(node);\n });\n }\n }\n\n return withNeighborsList;\n};\n\nLNode.prototype.getNoOfChildren = function () {\n var noOfChildren = 0;\n var childNode;\n\n if (this.child == null) {\n noOfChildren = 1;\n } else {\n var nodes = this.child.getNodes();\n for (var i = 0; i < nodes.length; i++) {\n childNode = nodes[i];\n\n noOfChildren += childNode.getNoOfChildren();\n }\n }\n\n if (noOfChildren == 0) {\n noOfChildren = 1;\n }\n return noOfChildren;\n};\n\nLNode.prototype.getEstimatedSize = function () {\n if (this.estimatedSize == Integer.MIN_VALUE) {\n throw \"assert failed\";\n }\n return this.estimatedSize;\n};\n\nLNode.prototype.calcEstimatedSize = function () {\n if (this.child == null) {\n return this.estimatedSize = (this.rect.width + this.rect.height) / 2;\n } else {\n this.estimatedSize = this.child.calcEstimatedSize();\n this.rect.width = this.estimatedSize;\n this.rect.height = this.estimatedSize;\n\n return this.estimatedSize;\n }\n};\n\nLNode.prototype.scatter = function () {\n var randomCenterX;\n var randomCenterY;\n\n var minX = -LayoutConstants.INITIAL_WORLD_BOUNDARY;\n var maxX = LayoutConstants.INITIAL_WORLD_BOUNDARY;\n randomCenterX = LayoutConstants.WORLD_CENTER_X + RandomSeed.nextDouble() * (maxX - minX) + minX;\n\n var minY = -LayoutConstants.INITIAL_WORLD_BOUNDARY;\n var maxY = LayoutConstants.INITIAL_WORLD_BOUNDARY;\n randomCenterY = LayoutConstants.WORLD_CENTER_Y + RandomSeed.nextDouble() * (maxY - minY) + minY;\n\n this.rect.x = randomCenterX;\n this.rect.y = randomCenterY;\n};\n\nLNode.prototype.updateBounds = function () {\n if (this.getChild() == null) {\n throw \"assert failed\";\n }\n if (this.getChild().getNodes().length != 0) {\n // wrap the children nodes by re-arranging the boundaries\n var childGraph = this.getChild();\n childGraph.updateBounds(true);\n\n this.rect.x = childGraph.getLeft();\n this.rect.y = childGraph.getTop();\n\n this.setWidth(childGraph.getRight() - childGraph.getLeft());\n this.setHeight(childGraph.getBottom() - childGraph.getTop());\n\n // Update compound bounds considering its label properties \n if (LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS) {\n\n var width = childGraph.getRight() - childGraph.getLeft();\n var height = childGraph.getBottom() - childGraph.getTop();\n\n if (this.labelWidth > width) {\n this.rect.x -= (this.labelWidth - width) / 2;\n this.setWidth(this.labelWidth);\n }\n\n if (this.labelHeight > height) {\n if (this.labelPos == \"center\") {\n this.rect.y -= (this.labelHeight - height) / 2;\n } else if (this.labelPos == \"top\") {\n this.rect.y -= this.labelHeight - height;\n }\n this.setHeight(this.labelHeight);\n }\n }\n }\n};\n\nLNode.prototype.getInclusionTreeDepth = function () {\n if (this.inclusionTreeDepth == Integer.MAX_VALUE) {\n throw \"assert failed\";\n }\n return this.inclusionTreeDepth;\n};\n\nLNode.prototype.transform = function (trans) {\n var left = this.rect.x;\n\n if (left > LayoutConstants.WORLD_BOUNDARY) {\n left = LayoutConstants.WORLD_BOUNDARY;\n } else if (left < -LayoutConstants.WORLD_BOUNDARY) {\n left = -LayoutConstants.WORLD_BOUNDARY;\n }\n\n var top = this.rect.y;\n\n if (top > LayoutConstants.WORLD_BOUNDARY) {\n top = LayoutConstants.WORLD_BOUNDARY;\n } else if (top < -LayoutConstants.WORLD_BOUNDARY) {\n top = -LayoutConstants.WORLD_BOUNDARY;\n }\n\n var leftTop = new PointD(left, top);\n var vLeftTop = trans.inverseTransformPoint(leftTop);\n\n this.setLocation(vLeftTop.x, vLeftTop.y);\n};\n\nLNode.prototype.getLeft = function () {\n return this.rect.x;\n};\n\nLNode.prototype.getRight = function () {\n return this.rect.x + this.rect.width;\n};\n\nLNode.prototype.getTop = function () {\n return this.rect.y;\n};\n\nLNode.prototype.getBottom = function () {\n return this.rect.y + this.rect.height;\n};\n\nLNode.prototype.getParent = function () {\n if (this.owner == null) {\n return null;\n }\n\n return this.owner.getParent();\n};\n\nmodule.exports = LNode;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction PointD(x, y) {\n if (x == null && y == null) {\n this.x = 0;\n this.y = 0;\n } else {\n this.x = x;\n this.y = y;\n }\n}\n\nPointD.prototype.getX = function () {\n return this.x;\n};\n\nPointD.prototype.getY = function () {\n return this.y;\n};\n\nPointD.prototype.setX = function (x) {\n this.x = x;\n};\n\nPointD.prototype.setY = function (y) {\n this.y = y;\n};\n\nPointD.prototype.getDifference = function (pt) {\n return new DimensionD(this.x - pt.x, this.y - pt.y);\n};\n\nPointD.prototype.getCopy = function () {\n return new PointD(this.x, this.y);\n};\n\nPointD.prototype.translate = function (dim) {\n this.x += dim.width;\n this.y += dim.height;\n return this;\n};\n\nmodule.exports = PointD;\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LGraphObject = __webpack_require__(2);\nvar Integer = __webpack_require__(10);\nvar LayoutConstants = __webpack_require__(0);\nvar LGraphManager = __webpack_require__(6);\nvar LNode = __webpack_require__(3);\nvar LEdge = __webpack_require__(1);\nvar RectangleD = __webpack_require__(13);\nvar Point = __webpack_require__(12);\nvar LinkedList = __webpack_require__(11);\n\nfunction LGraph(parent, obj2, vGraph) {\n LGraphObject.call(this, vGraph);\n this.estimatedSize = Integer.MIN_VALUE;\n this.margin = LayoutConstants.DEFAULT_GRAPH_MARGIN;\n this.edges = [];\n this.nodes = [];\n this.isConnected = false;\n this.parent = parent;\n\n if (obj2 != null && obj2 instanceof LGraphManager) {\n this.graphManager = obj2;\n } else if (obj2 != null && obj2 instanceof Layout) {\n this.graphManager = obj2.graphManager;\n }\n}\n\nLGraph.prototype = Object.create(LGraphObject.prototype);\nfor (var prop in LGraphObject) {\n LGraph[prop] = LGraphObject[prop];\n}\n\nLGraph.prototype.getNodes = function () {\n return this.nodes;\n};\n\nLGraph.prototype.getEdges = function () {\n return this.edges;\n};\n\nLGraph.prototype.getGraphManager = function () {\n return this.graphManager;\n};\n\nLGraph.prototype.getParent = function () {\n return this.parent;\n};\n\nLGraph.prototype.getLeft = function () {\n return this.left;\n};\n\nLGraph.prototype.getRight = function () {\n return this.right;\n};\n\nLGraph.prototype.getTop = function () {\n return this.top;\n};\n\nLGraph.prototype.getBottom = function () {\n return this.bottom;\n};\n\nLGraph.prototype.isConnected = function () {\n return this.isConnected;\n};\n\nLGraph.prototype.add = function (obj1, sourceNode, targetNode) {\n if (sourceNode == null && targetNode == null) {\n var newNode = obj1;\n if (this.graphManager == null) {\n throw \"Graph has no graph mgr!\";\n }\n if (this.getNodes().indexOf(newNode) > -1) {\n throw \"Node already in graph!\";\n }\n newNode.owner = this;\n this.getNodes().push(newNode);\n\n return newNode;\n } else {\n var newEdge = obj1;\n if (!(this.getNodes().indexOf(sourceNode) > -1 && this.getNodes().indexOf(targetNode) > -1)) {\n throw \"Source or target not in graph!\";\n }\n\n if (!(sourceNode.owner == targetNode.owner && sourceNode.owner == this)) {\n throw \"Both owners must be this graph!\";\n }\n\n if (sourceNode.owner != targetNode.owner) {\n return null;\n }\n\n // set source and target\n newEdge.source = sourceNode;\n newEdge.target = targetNode;\n\n // set as intra-graph edge\n newEdge.isInterGraph = false;\n\n // add to graph edge list\n this.getEdges().push(newEdge);\n\n // add to incidency lists\n sourceNode.edges.push(newEdge);\n\n if (targetNode != sourceNode) {\n targetNode.edges.push(newEdge);\n }\n\n return newEdge;\n }\n};\n\nLGraph.prototype.remove = function (obj) {\n var node = obj;\n if (obj instanceof LNode) {\n if (node == null) {\n throw \"Node is null!\";\n }\n if (!(node.owner != null && node.owner == this)) {\n throw \"Owner graph is invalid!\";\n }\n if (this.graphManager == null) {\n throw \"Owner graph manager is invalid!\";\n }\n // remove incident edges first (make a copy to do it safely)\n var edgesToBeRemoved = node.edges.slice();\n var edge;\n var s = edgesToBeRemoved.length;\n for (var i = 0; i < s; i++) {\n edge = edgesToBeRemoved[i];\n\n if (edge.isInterGraph) {\n this.graphManager.remove(edge);\n } else {\n edge.source.owner.remove(edge);\n }\n }\n\n // now the node itself\n var index = this.nodes.indexOf(node);\n if (index == -1) {\n throw \"Node not in owner node list!\";\n }\n\n this.nodes.splice(index, 1);\n } else if (obj instanceof LEdge) {\n var edge = obj;\n if (edge == null) {\n throw \"Edge is null!\";\n }\n if (!(edge.source != null && edge.target != null)) {\n throw \"Source and/or target is null!\";\n }\n if (!(edge.source.owner != null && edge.target.owner != null && edge.source.owner == this && edge.target.owner == this)) {\n throw \"Source and/or target owner is invalid!\";\n }\n\n var sourceIndex = edge.source.edges.indexOf(edge);\n var targetIndex = edge.target.edges.indexOf(edge);\n if (!(sourceIndex > -1 && targetIndex > -1)) {\n throw \"Source and/or target doesn't know this edge!\";\n }\n\n edge.source.edges.splice(sourceIndex, 1);\n\n if (edge.target != edge.source) {\n edge.target.edges.splice(targetIndex, 1);\n }\n\n var index = edge.source.owner.getEdges().indexOf(edge);\n if (index == -1) {\n throw \"Not in owner's edge list!\";\n }\n\n edge.source.owner.getEdges().splice(index, 1);\n }\n};\n\nLGraph.prototype.updateLeftTop = function () {\n var top = Integer.MAX_VALUE;\n var left = Integer.MAX_VALUE;\n var nodeTop;\n var nodeLeft;\n var margin;\n\n var nodes = this.getNodes();\n var s = nodes.length;\n\n for (var i = 0; i < s; i++) {\n var lNode = nodes[i];\n nodeTop = lNode.getTop();\n nodeLeft = lNode.getLeft();\n\n if (top > nodeTop) {\n top = nodeTop;\n }\n\n if (left > nodeLeft) {\n left = nodeLeft;\n }\n }\n\n // Do we have any nodes in this graph?\n if (top == Integer.MAX_VALUE) {\n return null;\n }\n\n if (nodes[0].getParent().paddingLeft != undefined) {\n margin = nodes[0].getParent().paddingLeft;\n } else {\n margin = this.margin;\n }\n\n this.left = left - margin;\n this.top = top - margin;\n\n // Apply the margins and return the result\n return new Point(this.left, this.top);\n};\n\nLGraph.prototype.updateBounds = function (recursive) {\n // calculate bounds\n var left = Integer.MAX_VALUE;\n var right = -Integer.MAX_VALUE;\n var top = Integer.MAX_VALUE;\n var bottom = -Integer.MAX_VALUE;\n var nodeLeft;\n var nodeRight;\n var nodeTop;\n var nodeBottom;\n var margin;\n\n var nodes = this.nodes;\n var s = nodes.length;\n for (var i = 0; i < s; i++) {\n var lNode = nodes[i];\n\n if (recursive && lNode.child != null) {\n lNode.updateBounds();\n }\n nodeLeft = lNode.getLeft();\n nodeRight = lNode.getRight();\n nodeTop = lNode.getTop();\n nodeBottom = lNode.getBottom();\n\n if (left > nodeLeft) {\n left = nodeLeft;\n }\n\n if (right < nodeRight) {\n right = nodeRight;\n }\n\n if (top > nodeTop) {\n top = nodeTop;\n }\n\n if (bottom < nodeBottom) {\n bottom = nodeBottom;\n }\n }\n\n var boundingRect = new RectangleD(left, top, right - left, bottom - top);\n if (left == Integer.MAX_VALUE) {\n this.left = this.parent.getLeft();\n this.right = this.parent.getRight();\n this.top = this.parent.getTop();\n this.bottom = this.parent.getBottom();\n }\n\n if (nodes[0].getParent().paddingLeft != undefined) {\n margin = nodes[0].getParent().paddingLeft;\n } else {\n margin = this.margin;\n }\n\n this.left = boundingRect.x - margin;\n this.right = boundingRect.x + boundingRect.width + margin;\n this.top = boundingRect.y - margin;\n this.bottom = boundingRect.y + boundingRect.height + margin;\n};\n\nLGraph.calculateBounds = function (nodes) {\n var left = Integer.MAX_VALUE;\n var right = -Integer.MAX_VALUE;\n var top = Integer.MAX_VALUE;\n var bottom = -Integer.MAX_VALUE;\n var nodeLeft;\n var nodeRight;\n var nodeTop;\n var nodeBottom;\n\n var s = nodes.length;\n\n for (var i = 0; i < s; i++) {\n var lNode = nodes[i];\n nodeLeft = lNode.getLeft();\n nodeRight = lNode.getRight();\n nodeTop = lNode.getTop();\n nodeBottom = lNode.getBottom();\n\n if (left > nodeLeft) {\n left = nodeLeft;\n }\n\n if (right < nodeRight) {\n right = nodeRight;\n }\n\n if (top > nodeTop) {\n top = nodeTop;\n }\n\n if (bottom < nodeBottom) {\n bottom = nodeBottom;\n }\n }\n\n var boundingRect = new RectangleD(left, top, right - left, bottom - top);\n\n return boundingRect;\n};\n\nLGraph.prototype.getInclusionTreeDepth = function () {\n if (this == this.graphManager.getRoot()) {\n return 1;\n } else {\n return this.parent.getInclusionTreeDepth();\n }\n};\n\nLGraph.prototype.getEstimatedSize = function () {\n if (this.estimatedSize == Integer.MIN_VALUE) {\n throw \"assert failed\";\n }\n return this.estimatedSize;\n};\n\nLGraph.prototype.calcEstimatedSize = function () {\n var size = 0;\n var nodes = this.nodes;\n var s = nodes.length;\n\n for (var i = 0; i < s; i++) {\n var lNode = nodes[i];\n size += lNode.calcEstimatedSize();\n }\n\n if (size == 0) {\n this.estimatedSize = LayoutConstants.EMPTY_COMPOUND_NODE_SIZE;\n } else {\n this.estimatedSize = size / Math.sqrt(this.nodes.length);\n }\n\n return this.estimatedSize;\n};\n\nLGraph.prototype.updateConnected = function () {\n var self = this;\n if (this.nodes.length == 0) {\n this.isConnected = true;\n return;\n }\n\n var queue = new LinkedList();\n var visited = new Set();\n var currentNode = this.nodes[0];\n var neighborEdges;\n var currentNeighbor;\n var childrenOfNode = currentNode.withChildren();\n childrenOfNode.forEach(function (node) {\n queue.push(node);\n visited.add(node);\n });\n\n while (queue.length !== 0) {\n currentNode = queue.shift();\n\n // Traverse all neighbors of this node\n neighborEdges = currentNode.getEdges();\n var size = neighborEdges.length;\n for (var i = 0; i < size; i++) {\n var neighborEdge = neighborEdges[i];\n currentNeighbor = neighborEdge.getOtherEndInGraph(currentNode, this);\n\n // Add unvisited neighbors to the list to visit\n if (currentNeighbor != null && !visited.has(currentNeighbor)) {\n var childrenOfNeighbor = currentNeighbor.withChildren();\n\n childrenOfNeighbor.forEach(function (node) {\n queue.push(node);\n visited.add(node);\n });\n }\n }\n }\n\n this.isConnected = false;\n\n if (visited.size >= this.nodes.length) {\n var noOfVisitedInThisGraph = 0;\n\n visited.forEach(function (visitedNode) {\n if (visitedNode.owner == self) {\n noOfVisitedInThisGraph++;\n }\n });\n\n if (noOfVisitedInThisGraph == this.nodes.length) {\n this.isConnected = true;\n }\n }\n};\n\nmodule.exports = LGraph;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LGraph;\nvar LEdge = __webpack_require__(1);\n\nfunction LGraphManager(layout) {\n LGraph = __webpack_require__(5); // It may be better to initilize this out of this function but it gives an error (Right-hand side of 'instanceof' is not callable) now.\n this.layout = layout;\n\n this.graphs = [];\n this.edges = [];\n}\n\nLGraphManager.prototype.addRoot = function () {\n var ngraph = this.layout.newGraph();\n var nnode = this.layout.newNode(null);\n var root = this.add(ngraph, nnode);\n this.setRootGraph(root);\n return this.rootGraph;\n};\n\nLGraphManager.prototype.add = function (newGraph, parentNode, newEdge, sourceNode, targetNode) {\n //there are just 2 parameters are passed then it adds an LGraph else it adds an LEdge\n if (newEdge == null && sourceNode == null && targetNode == null) {\n if (newGraph == null) {\n throw \"Graph is null!\";\n }\n if (parentNode == null) {\n throw \"Parent node is null!\";\n }\n if (this.graphs.indexOf(newGraph) > -1) {\n throw \"Graph already in this graph mgr!\";\n }\n\n this.graphs.push(newGraph);\n\n if (newGraph.parent != null) {\n throw \"Already has a parent!\";\n }\n if (parentNode.child != null) {\n throw \"Already has a child!\";\n }\n\n newGraph.parent = parentNode;\n parentNode.child = newGraph;\n\n return newGraph;\n } else {\n //change the order of the parameters\n targetNode = newEdge;\n sourceNode = parentNode;\n newEdge = newGraph;\n var sourceGraph = sourceNode.getOwner();\n var targetGraph = targetNode.getOwner();\n\n if (!(sourceGraph != null && sourceGraph.getGraphManager() == this)) {\n throw \"Source not in this graph mgr!\";\n }\n if (!(targetGraph != null && targetGraph.getGraphManager() == this)) {\n throw \"Target not in this graph mgr!\";\n }\n\n if (sourceGraph == targetGraph) {\n newEdge.isInterGraph = false;\n return sourceGraph.add(newEdge, sourceNode, targetNode);\n } else {\n newEdge.isInterGraph = true;\n\n // set source and target\n newEdge.source = sourceNode;\n newEdge.target = targetNode;\n\n // add edge to inter-graph edge list\n if (this.edges.indexOf(newEdge) > -1) {\n throw \"Edge already in inter-graph edge list!\";\n }\n\n this.edges.push(newEdge);\n\n // add edge to source and target incidency lists\n if (!(newEdge.source != null && newEdge.target != null)) {\n throw \"Edge source and/or target is null!\";\n }\n\n if (!(newEdge.source.edges.indexOf(newEdge) == -1 && newEdge.target.edges.indexOf(newEdge) == -1)) {\n throw \"Edge already in source and/or target incidency list!\";\n }\n\n newEdge.source.edges.push(newEdge);\n newEdge.target.edges.push(newEdge);\n\n return newEdge;\n }\n }\n};\n\nLGraphManager.prototype.remove = function (lObj) {\n if (lObj instanceof LGraph) {\n var graph = lObj;\n if (graph.getGraphManager() != this) {\n throw \"Graph not in this graph mgr\";\n }\n if (!(graph == this.rootGraph || graph.parent != null && graph.parent.graphManager == this)) {\n throw \"Invalid parent node!\";\n }\n\n // first the edges (make a copy to do it safely)\n var edgesToBeRemoved = [];\n\n edgesToBeRemoved = edgesToBeRemoved.concat(graph.getEdges());\n\n var edge;\n var s = edgesToBeRemoved.length;\n for (var i = 0; i < s; i++) {\n edge = edgesToBeRemoved[i];\n graph.remove(edge);\n }\n\n // then the nodes (make a copy to do it safely)\n var nodesToBeRemoved = [];\n\n nodesToBeRemoved = nodesToBeRemoved.concat(graph.getNodes());\n\n var node;\n s = nodesToBeRemoved.length;\n for (var i = 0; i < s; i++) {\n node = nodesToBeRemoved[i];\n graph.remove(node);\n }\n\n // check if graph is the root\n if (graph == this.rootGraph) {\n this.setRootGraph(null);\n }\n\n // now remove the graph itself\n var index = this.graphs.indexOf(graph);\n this.graphs.splice(index, 1);\n\n // also reset the parent of the graph\n graph.parent = null;\n } else if (lObj instanceof LEdge) {\n edge = lObj;\n if (edge == null) {\n throw \"Edge is null!\";\n }\n if (!edge.isInterGraph) {\n throw \"Not an inter-graph edge!\";\n }\n if (!(edge.source != null && edge.target != null)) {\n throw \"Source and/or target is null!\";\n }\n\n // remove edge from source and target nodes' incidency lists\n\n if (!(edge.source.edges.indexOf(edge) != -1 && edge.target.edges.indexOf(edge) != -1)) {\n throw \"Source and/or target doesn't know this edge!\";\n }\n\n var index = edge.source.edges.indexOf(edge);\n edge.source.edges.splice(index, 1);\n index = edge.target.edges.indexOf(edge);\n edge.target.edges.splice(index, 1);\n\n // remove edge from owner graph manager's inter-graph edge list\n\n if (!(edge.source.owner != null && edge.source.owner.getGraphManager() != null)) {\n throw \"Edge owner graph or owner graph manager is null!\";\n }\n if (edge.source.owner.getGraphManager().edges.indexOf(edge) == -1) {\n throw \"Not in owner graph manager's edge list!\";\n }\n\n var index = edge.source.owner.getGraphManager().edges.indexOf(edge);\n edge.source.owner.getGraphManager().edges.splice(index, 1);\n }\n};\n\nLGraphManager.prototype.updateBounds = function () {\n this.rootGraph.updateBounds(true);\n};\n\nLGraphManager.prototype.getGraphs = function () {\n return this.graphs;\n};\n\nLGraphManager.prototype.getAllNodes = function () {\n if (this.allNodes == null) {\n var nodeList = [];\n var graphs = this.getGraphs();\n var s = graphs.length;\n for (var i = 0; i < s; i++) {\n nodeList = nodeList.concat(graphs[i].getNodes());\n }\n this.allNodes = nodeList;\n }\n return this.allNodes;\n};\n\nLGraphManager.prototype.resetAllNodes = function () {\n this.allNodes = null;\n};\n\nLGraphManager.prototype.resetAllEdges = function () {\n this.allEdges = null;\n};\n\nLGraphManager.prototype.resetAllNodesToApplyGravitation = function () {\n this.allNodesToApplyGravitation = null;\n};\n\nLGraphManager.prototype.getAllEdges = function () {\n if (this.allEdges == null) {\n var edgeList = [];\n var graphs = this.getGraphs();\n var s = graphs.length;\n for (var i = 0; i < graphs.length; i++) {\n edgeList = edgeList.concat(graphs[i].getEdges());\n }\n\n edgeList = edgeList.concat(this.edges);\n\n this.allEdges = edgeList;\n }\n return this.allEdges;\n};\n\nLGraphManager.prototype.getAllNodesToApplyGravitation = function () {\n return this.allNodesToApplyGravitation;\n};\n\nLGraphManager.prototype.setAllNodesToApplyGravitation = function (nodeList) {\n if (this.allNodesToApplyGravitation != null) {\n throw \"assert failed\";\n }\n\n this.allNodesToApplyGravitation = nodeList;\n};\n\nLGraphManager.prototype.getRoot = function () {\n return this.rootGraph;\n};\n\nLGraphManager.prototype.setRootGraph = function (graph) {\n if (graph.getGraphManager() != this) {\n throw \"Root not in this graph mgr!\";\n }\n\n this.rootGraph = graph;\n // root graph must have a root node associated with it for convenience\n if (graph.parent == null) {\n graph.parent = this.layout.newNode(\"Root node\");\n }\n};\n\nLGraphManager.prototype.getLayout = function () {\n return this.layout;\n};\n\nLGraphManager.prototype.isOneAncestorOfOther = function (firstNode, secondNode) {\n if (!(firstNode != null && secondNode != null)) {\n throw \"assert failed\";\n }\n\n if (firstNode == secondNode) {\n return true;\n }\n // Is second node an ancestor of the first one?\n var ownerGraph = firstNode.getOwner();\n var parentNode;\n\n do {\n parentNode = ownerGraph.getParent();\n\n if (parentNode == null) {\n break;\n }\n\n if (parentNode == secondNode) {\n return true;\n }\n\n ownerGraph = parentNode.getOwner();\n if (ownerGraph == null) {\n break;\n }\n } while (true);\n // Is first node an ancestor of the second one?\n ownerGraph = secondNode.getOwner();\n\n do {\n parentNode = ownerGraph.getParent();\n\n if (parentNode == null) {\n break;\n }\n\n if (parentNode == firstNode) {\n return true;\n }\n\n ownerGraph = parentNode.getOwner();\n if (ownerGraph == null) {\n break;\n }\n } while (true);\n\n return false;\n};\n\nLGraphManager.prototype.calcLowestCommonAncestors = function () {\n var edge;\n var sourceNode;\n var targetNode;\n var sourceAncestorGraph;\n var targetAncestorGraph;\n\n var edges = this.getAllEdges();\n var s = edges.length;\n for (var i = 0; i < s; i++) {\n edge = edges[i];\n\n sourceNode = edge.source;\n targetNode = edge.target;\n edge.lca = null;\n edge.sourceInLca = sourceNode;\n edge.targetInLca = targetNode;\n\n if (sourceNode == targetNode) {\n edge.lca = sourceNode.getOwner();\n continue;\n }\n\n sourceAncestorGraph = sourceNode.getOwner();\n\n while (edge.lca == null) {\n edge.targetInLca = targetNode;\n targetAncestorGraph = targetNode.getOwner();\n\n while (edge.lca == null) {\n if (targetAncestorGraph == sourceAncestorGraph) {\n edge.lca = targetAncestorGraph;\n break;\n }\n\n if (targetAncestorGraph == this.rootGraph) {\n break;\n }\n\n if (edge.lca != null) {\n throw \"assert failed\";\n }\n edge.targetInLca = targetAncestorGraph.getParent();\n targetAncestorGraph = edge.targetInLca.getOwner();\n }\n\n if (sourceAncestorGraph == this.rootGraph) {\n break;\n }\n\n if (edge.lca == null) {\n edge.sourceInLca = sourceAncestorGraph.getParent();\n sourceAncestorGraph = edge.sourceInLca.getOwner();\n }\n }\n\n if (edge.lca == null) {\n throw \"assert failed\";\n }\n }\n};\n\nLGraphManager.prototype.calcLowestCommonAncestor = function (firstNode, secondNode) {\n if (firstNode == secondNode) {\n return firstNode.getOwner();\n }\n var firstOwnerGraph = firstNode.getOwner();\n\n do {\n if (firstOwnerGraph == null) {\n break;\n }\n var secondOwnerGraph = secondNode.getOwner();\n\n do {\n if (secondOwnerGraph == null) {\n break;\n }\n\n if (secondOwnerGraph == firstOwnerGraph) {\n return secondOwnerGraph;\n }\n secondOwnerGraph = secondOwnerGraph.getParent().getOwner();\n } while (true);\n\n firstOwnerGraph = firstOwnerGraph.getParent().getOwner();\n } while (true);\n\n return firstOwnerGraph;\n};\n\nLGraphManager.prototype.calcInclusionTreeDepths = function (graph, depth) {\n if (graph == null && depth == null) {\n graph = this.rootGraph;\n depth = 1;\n }\n var node;\n\n var nodes = graph.getNodes();\n var s = nodes.length;\n for (var i = 0; i < s; i++) {\n node = nodes[i];\n node.inclusionTreeDepth = depth;\n\n if (node.child != null) {\n this.calcInclusionTreeDepths(node.child, depth + 1);\n }\n }\n};\n\nLGraphManager.prototype.includesInvalidEdge = function () {\n var edge;\n\n var s = this.edges.length;\n for (var i = 0; i < s; i++) {\n edge = this.edges[i];\n\n if (this.isOneAncestorOfOther(edge.source, edge.target)) {\n return true;\n }\n }\n return false;\n};\n\nmodule.exports = LGraphManager;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LayoutConstants = __webpack_require__(0);\n\nfunction FDLayoutConstants() {}\n\n//FDLayoutConstants inherits static props in LayoutConstants\nfor (var prop in LayoutConstants) {\n FDLayoutConstants[prop] = LayoutConstants[prop];\n}\n\nFDLayoutConstants.MAX_ITERATIONS = 2500;\n\nFDLayoutConstants.DEFAULT_EDGE_LENGTH = 50;\nFDLayoutConstants.DEFAULT_SPRING_STRENGTH = 0.45;\nFDLayoutConstants.DEFAULT_REPULSION_STRENGTH = 4500.0;\nFDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = 0.4;\nFDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = 1.0;\nFDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = 3.8;\nFDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = 1.5;\nFDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION = true;\nFDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION = true;\nFDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = 0.3;\nFDLayoutConstants.COOLING_ADAPTATION_FACTOR = 0.33;\nFDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT = 1000;\nFDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT = 5000;\nFDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL = 100.0;\nFDLayoutConstants.MAX_NODE_DISPLACEMENT = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL * 3;\nFDLayoutConstants.MIN_REPULSION_DIST = FDLayoutConstants.DEFAULT_EDGE_LENGTH / 10.0;\nFDLayoutConstants.CONVERGENCE_CHECK_PERIOD = 100;\nFDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = 0.1;\nFDLayoutConstants.MIN_EDGE_LENGTH = 1;\nFDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD = 10;\n\nmodule.exports = FDLayoutConstants;\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * This class maintains a list of static geometry related utility methods.\n *\n *\n * Copyright: i-Vis Research Group, Bilkent University, 2007 - present\n */\n\nvar Point = __webpack_require__(12);\n\nfunction IGeometry() {}\n\n/**\n * This method calculates *half* the amount in x and y directions of the two\n * input rectangles needed to separate them keeping their respective\n * positioning, and returns the result in the input array. An input\n * separation buffer added to the amount in both directions. We assume that\n * the two rectangles do intersect.\n */\nIGeometry.calcSeparationAmount = function (rectA, rectB, overlapAmount, separationBuffer) {\n if (!rectA.intersects(rectB)) {\n throw \"assert failed\";\n }\n\n var directions = new Array(2);\n\n this.decideDirectionsForOverlappingNodes(rectA, rectB, directions);\n\n overlapAmount[0] = Math.min(rectA.getRight(), rectB.getRight()) - Math.max(rectA.x, rectB.x);\n overlapAmount[1] = Math.min(rectA.getBottom(), rectB.getBottom()) - Math.max(rectA.y, rectB.y);\n\n // update the overlapping amounts for the following cases:\n if (rectA.getX() <= rectB.getX() && rectA.getRight() >= rectB.getRight()) {\n /* Case x.1:\n *\n * rectA\n * \t| |\n * \t| _________ |\n * \t| | | |\n * \t|________|_______|______|\n * \t\t\t | |\n * | |\n * rectB\n */\n overlapAmount[0] += Math.min(rectB.getX() - rectA.getX(), rectA.getRight() - rectB.getRight());\n } else if (rectB.getX() <= rectA.getX() && rectB.getRight() >= rectA.getRight()) {\n /* Case x.2:\n *\n * rectB\n * \t| |\n * \t| _________ |\n * \t| | | |\n * \t|________|_______|______|\n * \t\t\t | |\n * | |\n * rectA\n */\n overlapAmount[0] += Math.min(rectA.getX() - rectB.getX(), rectB.getRight() - rectA.getRight());\n }\n if (rectA.getY() <= rectB.getY() && rectA.getBottom() >= rectB.getBottom()) {\n /* Case y.1:\n * ________ rectA\n * |\n * |\n * ______|____ rectB\n * | |\n * | |\n * ______|____|\n * |\n * |\n * |________\n *\n */\n overlapAmount[1] += Math.min(rectB.getY() - rectA.getY(), rectA.getBottom() - rectB.getBottom());\n } else if (rectB.getY() <= rectA.getY() && rectB.getBottom() >= rectA.getBottom()) {\n /* Case y.2:\n * ________ rectB\n * |\n * |\n * ______|____ rectA\n * | |\n * | |\n * ______|____|\n * |\n * |\n * |________\n *\n */\n overlapAmount[1] += Math.min(rectA.getY() - rectB.getY(), rectB.getBottom() - rectA.getBottom());\n }\n\n // find slope of the line passes two centers\n var slope = Math.abs((rectB.getCenterY() - rectA.getCenterY()) / (rectB.getCenterX() - rectA.getCenterX()));\n // if centers are overlapped\n if (rectB.getCenterY() === rectA.getCenterY() && rectB.getCenterX() === rectA.getCenterX()) {\n // assume the slope is 1 (45 degree)\n slope = 1.0;\n }\n\n var moveByY = slope * overlapAmount[0];\n var moveByX = overlapAmount[1] / slope;\n if (overlapAmount[0] < moveByX) {\n moveByX = overlapAmount[0];\n } else {\n moveByY = overlapAmount[1];\n }\n // return half the amount so that if each rectangle is moved by these\n // amounts in opposite directions, overlap will be resolved\n overlapAmount[0] = -1 * directions[0] * (moveByX / 2 + separationBuffer);\n overlapAmount[1] = -1 * directions[1] * (moveByY / 2 + separationBuffer);\n};\n\n/**\n * This method decides the separation direction of overlapping nodes\n *\n * if directions[0] = -1, then rectA goes left\n * if directions[0] = 1, then rectA goes right\n * if directions[1] = -1, then rectA goes up\n * if directions[1] = 1, then rectA goes down\n */\nIGeometry.decideDirectionsForOverlappingNodes = function (rectA, rectB, directions) {\n if (rectA.getCenterX() < rectB.getCenterX()) {\n directions[0] = -1;\n } else {\n directions[0] = 1;\n }\n\n if (rectA.getCenterY() < rectB.getCenterY()) {\n directions[1] = -1;\n } else {\n directions[1] = 1;\n }\n};\n\n/**\n * This method calculates the intersection (clipping) points of the two\n * input rectangles with line segment defined by the centers of these two\n * rectangles. The clipping points are saved in the input double array and\n * whether or not the two rectangles overlap is returned.\n */\nIGeometry.getIntersection2 = function (rectA, rectB, result) {\n //result[0-1] will contain clipPoint of rectA, result[2-3] will contain clipPoint of rectB\n var p1x = rectA.getCenterX();\n var p1y = rectA.getCenterY();\n var p2x = rectB.getCenterX();\n var p2y = rectB.getCenterY();\n\n //if two rectangles intersect, then clipping points are centers\n if (rectA.intersects(rectB)) {\n result[0] = p1x;\n result[1] = p1y;\n result[2] = p2x;\n result[3] = p2y;\n return true;\n }\n //variables for rectA\n var topLeftAx = rectA.getX();\n var topLeftAy = rectA.getY();\n var topRightAx = rectA.getRight();\n var bottomLeftAx = rectA.getX();\n var bottomLeftAy = rectA.getBottom();\n var bottomRightAx = rectA.getRight();\n var halfWidthA = rectA.getWidthHalf();\n var halfHeightA = rectA.getHeightHalf();\n //variables for rectB\n var topLeftBx = rectB.getX();\n var topLeftBy = rectB.getY();\n var topRightBx = rectB.getRight();\n var bottomLeftBx = rectB.getX();\n var bottomLeftBy = rectB.getBottom();\n var bottomRightBx = rectB.getRight();\n var halfWidthB = rectB.getWidthHalf();\n var halfHeightB = rectB.getHeightHalf();\n\n //flag whether clipping points are found\n var clipPointAFound = false;\n var clipPointBFound = false;\n\n // line is vertical\n if (p1x === p2x) {\n if (p1y > p2y) {\n result[0] = p1x;\n result[1] = topLeftAy;\n result[2] = p2x;\n result[3] = bottomLeftBy;\n return false;\n } else if (p1y < p2y) {\n result[0] = p1x;\n result[1] = bottomLeftAy;\n result[2] = p2x;\n result[3] = topLeftBy;\n return false;\n } else {\n //not line, return null;\n }\n }\n // line is horizontal\n else if (p1y === p2y) {\n if (p1x > p2x) {\n result[0] = topLeftAx;\n result[1] = p1y;\n result[2] = topRightBx;\n result[3] = p2y;\n return false;\n } else if (p1x < p2x) {\n result[0] = topRightAx;\n result[1] = p1y;\n result[2] = topLeftBx;\n result[3] = p2y;\n return false;\n } else {\n //not valid line, return null;\n }\n } else {\n //slopes of rectA's and rectB's diagonals\n var slopeA = rectA.height / rectA.width;\n var slopeB = rectB.height / rectB.width;\n\n //slope of line between center of rectA and center of rectB\n var slopePrime = (p2y - p1y) / (p2x - p1x);\n var cardinalDirectionA = void 0;\n var cardinalDirectionB = void 0;\n var tempPointAx = void 0;\n var tempPointAy = void 0;\n var tempPointBx = void 0;\n var tempPointBy = void 0;\n\n //determine whether clipping point is the corner of nodeA\n if (-slopeA === slopePrime) {\n if (p1x > p2x) {\n result[0] = bottomLeftAx;\n result[1] = bottomLeftAy;\n clipPointAFound = true;\n } else {\n result[0] = topRightAx;\n result[1] = topLeftAy;\n clipPointAFound = true;\n }\n } else if (slopeA === slopePrime) {\n if (p1x > p2x) {\n result[0] = topLeftAx;\n result[1] = topLeftAy;\n clipPointAFound = true;\n } else {\n result[0] = bottomRightAx;\n result[1] = bottomLeftAy;\n clipPointAFound = true;\n }\n }\n\n //determine whether clipping point is the corner of nodeB\n if (-slopeB === slopePrime) {\n if (p2x > p1x) {\n result[2] = bottomLeftBx;\n result[3] = bottomLeftBy;\n clipPointBFound = true;\n } else {\n result[2] = topRightBx;\n result[3] = topLeftBy;\n clipPointBFound = true;\n }\n } else if (slopeB === slopePrime) {\n if (p2x > p1x) {\n result[2] = topLeftBx;\n result[3] = topLeftBy;\n clipPointBFound = true;\n } else {\n result[2] = bottomRightBx;\n result[3] = bottomLeftBy;\n clipPointBFound = true;\n }\n }\n\n //if both clipping points are corners\n if (clipPointAFound && clipPointBFound) {\n return false;\n }\n\n //determine Cardinal Direction of rectangles\n if (p1x > p2x) {\n if (p1y > p2y) {\n cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 4);\n cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 2);\n } else {\n cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 3);\n cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 1);\n }\n } else {\n if (p1y > p2y) {\n cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 1);\n cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 3);\n } else {\n cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 2);\n cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 4);\n }\n }\n //calculate clipping Point if it is not found before\n if (!clipPointAFound) {\n switch (cardinalDirectionA) {\n case 1:\n tempPointAy = topLeftAy;\n tempPointAx = p1x + -halfHeightA / slopePrime;\n result[0] = tempPointAx;\n result[1] = tempPointAy;\n break;\n case 2:\n tempPointAx = bottomRightAx;\n tempPointAy = p1y + halfWidthA * slopePrime;\n result[0] = tempPointAx;\n result[1] = tempPointAy;\n break;\n case 3:\n tempPointAy = bottomLeftAy;\n tempPointAx = p1x + halfHeightA / slopePrime;\n result[0] = tempPointAx;\n result[1] = tempPointAy;\n break;\n case 4:\n tempPointAx = bottomLeftAx;\n tempPointAy = p1y + -halfWidthA * slopePrime;\n result[0] = tempPointAx;\n result[1] = tempPointAy;\n break;\n }\n }\n if (!clipPointBFound) {\n switch (cardinalDirectionB) {\n case 1:\n tempPointBy = topLeftBy;\n tempPointBx = p2x + -halfHeightB / slopePrime;\n result[2] = tempPointBx;\n result[3] = tempPointBy;\n break;\n case 2:\n tempPointBx = bottomRightBx;\n tempPointBy = p2y + halfWidthB * slopePrime;\n result[2] = tempPointBx;\n result[3] = tempPointBy;\n break;\n case 3:\n tempPointBy = bottomLeftBy;\n tempPointBx = p2x + halfHeightB / slopePrime;\n result[2] = tempPointBx;\n result[3] = tempPointBy;\n break;\n case 4:\n tempPointBx = bottomLeftBx;\n tempPointBy = p2y + -halfWidthB * slopePrime;\n result[2] = tempPointBx;\n result[3] = tempPointBy;\n break;\n }\n }\n }\n return false;\n};\n\n/**\n * This method returns in which cardinal direction does input point stays\n * 1: North\n * 2: East\n * 3: South\n * 4: West\n */\nIGeometry.getCardinalDirection = function (slope, slopePrime, line) {\n if (slope > slopePrime) {\n return line;\n } else {\n return 1 + line % 4;\n }\n};\n\n/**\n * This method calculates the intersection of the two lines defined by\n * point pairs (s1,s2) and (f1,f2).\n */\nIGeometry.getIntersection = function (s1, s2, f1, f2) {\n if (f2 == null) {\n return this.getIntersection2(s1, s2, f1);\n }\n\n var x1 = s1.x;\n var y1 = s1.y;\n var x2 = s2.x;\n var y2 = s2.y;\n var x3 = f1.x;\n var y3 = f1.y;\n var x4 = f2.x;\n var y4 = f2.y;\n var x = void 0,\n y = void 0; // intersection point\n var a1 = void 0,\n a2 = void 0,\n b1 = void 0,\n b2 = void 0,\n c1 = void 0,\n c2 = void 0; // coefficients of line eqns.\n var denom = void 0;\n\n a1 = y2 - y1;\n b1 = x1 - x2;\n c1 = x2 * y1 - x1 * y2; // { a1*x + b1*y + c1 = 0 is line 1 }\n\n a2 = y4 - y3;\n b2 = x3 - x4;\n c2 = x4 * y3 - x3 * y4; // { a2*x + b2*y + c2 = 0 is line 2 }\n\n denom = a1 * b2 - a2 * b1;\n\n if (denom === 0) {\n return null;\n }\n\n x = (b1 * c2 - b2 * c1) / denom;\n y = (a2 * c1 - a1 * c2) / denom;\n\n return new Point(x, y);\n};\n\n/**\n * This method finds and returns the angle of the vector from the + x-axis\n * in clockwise direction (compatible w/ Java coordinate system!).\n */\nIGeometry.angleOfVector = function (Cx, Cy, Nx, Ny) {\n var C_angle = void 0;\n\n if (Cx !== Nx) {\n C_angle = Math.atan((Ny - Cy) / (Nx - Cx));\n\n if (Nx < Cx) {\n C_angle += Math.PI;\n } else if (Ny < Cy) {\n C_angle += this.TWO_PI;\n }\n } else if (Ny < Cy) {\n C_angle = this.ONE_AND_HALF_PI; // 270 degrees\n } else {\n C_angle = this.HALF_PI; // 90 degrees\n }\n\n return C_angle;\n};\n\n/**\n * This method checks whether the given two line segments (one with point\n * p1 and p2, the other with point p3 and p4) intersect at a point other\n * than these points.\n */\nIGeometry.doIntersect = function (p1, p2, p3, p4) {\n var a = p1.x;\n var b = p1.y;\n var c = p2.x;\n var d = p2.y;\n var p = p3.x;\n var q = p3.y;\n var r = p4.x;\n var s = p4.y;\n var det = (c - a) * (s - q) - (r - p) * (d - b);\n\n if (det === 0) {\n return false;\n } else {\n var lambda = ((s - q) * (r - a) + (p - r) * (s - b)) / det;\n var gamma = ((b - d) * (r - a) + (c - a) * (s - b)) / det;\n return 0 < lambda && lambda < 1 && 0 < gamma && gamma < 1;\n }\n};\n\n// -----------------------------------------------------------------------------\n// Section: Class Constants\n// -----------------------------------------------------------------------------\n/**\n * Some useful pre-calculated constants\n */\nIGeometry.HALF_PI = 0.5 * Math.PI;\nIGeometry.ONE_AND_HALF_PI = 1.5 * Math.PI;\nIGeometry.TWO_PI = 2.0 * Math.PI;\nIGeometry.THREE_PI = 3.0 * Math.PI;\n\nmodule.exports = IGeometry;\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction IMath() {}\n\n/**\n * This method returns the sign of the input value.\n */\nIMath.sign = function (value) {\n if (value > 0) {\n return 1;\n } else if (value < 0) {\n return -1;\n } else {\n return 0;\n }\n};\n\nIMath.floor = function (value) {\n return value < 0 ? Math.ceil(value) : Math.floor(value);\n};\n\nIMath.ceil = function (value) {\n return value < 0 ? Math.floor(value) : Math.ceil(value);\n};\n\nmodule.exports = IMath;\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction Integer() {}\n\nInteger.MAX_VALUE = 2147483647;\nInteger.MIN_VALUE = -2147483648;\n\nmodule.exports = Integer;\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar nodeFrom = function nodeFrom(value) {\n return { value: value, next: null, prev: null };\n};\n\nvar add = function add(prev, node, next, list) {\n if (prev !== null) {\n prev.next = node;\n } else {\n list.head = node;\n }\n\n if (next !== null) {\n next.prev = node;\n } else {\n list.tail = node;\n }\n\n node.prev = prev;\n node.next = next;\n\n list.length++;\n\n return node;\n};\n\nvar _remove = function _remove(node, list) {\n var prev = node.prev,\n next = node.next;\n\n\n if (prev !== null) {\n prev.next = next;\n } else {\n list.head = next;\n }\n\n if (next !== null) {\n next.prev = prev;\n } else {\n list.tail = prev;\n }\n\n node.prev = node.next = null;\n\n list.length--;\n\n return node;\n};\n\nvar LinkedList = function () {\n function LinkedList(vals) {\n var _this = this;\n\n _classCallCheck(this, LinkedList);\n\n this.length = 0;\n this.head = null;\n this.tail = null;\n\n if (vals != null) {\n vals.forEach(function (v) {\n return _this.push(v);\n });\n }\n }\n\n _createClass(LinkedList, [{\n key: \"size\",\n value: function size() {\n return this.length;\n }\n }, {\n key: \"insertBefore\",\n value: function insertBefore(val, otherNode) {\n return add(otherNode.prev, nodeFrom(val), otherNode, this);\n }\n }, {\n key: \"insertAfter\",\n value: function insertAfter(val, otherNode) {\n return add(otherNode, nodeFrom(val), otherNode.next, this);\n }\n }, {\n key: \"insertNodeBefore\",\n value: function insertNodeBefore(newNode, otherNode) {\n return add(otherNode.prev, newNode, otherNode, this);\n }\n }, {\n key: \"insertNodeAfter\",\n value: function insertNodeAfter(newNode, otherNode) {\n return add(otherNode, newNode, otherNode.next, this);\n }\n }, {\n key: \"push\",\n value: function push(val) {\n return add(this.tail, nodeFrom(val), null, this);\n }\n }, {\n key: \"unshift\",\n value: function unshift(val) {\n return add(null, nodeFrom(val), this.head, this);\n }\n }, {\n key: \"remove\",\n value: function remove(node) {\n return _remove(node, this);\n }\n }, {\n key: \"pop\",\n value: function pop() {\n return _remove(this.tail, this).value;\n }\n }, {\n key: \"popNode\",\n value: function popNode() {\n return _remove(this.tail, this);\n }\n }, {\n key: \"shift\",\n value: function shift() {\n return _remove(this.head, this).value;\n }\n }, {\n key: \"shiftNode\",\n value: function shiftNode() {\n return _remove(this.head, this);\n }\n }, {\n key: \"get_object_at\",\n value: function get_object_at(index) {\n if (index <= this.length()) {\n var i = 1;\n var current = this.head;\n while (i < index) {\n current = current.next;\n i++;\n }\n return current.value;\n }\n }\n }, {\n key: \"set_object_at\",\n value: function set_object_at(index, value) {\n if (index <= this.length()) {\n var i = 1;\n var current = this.head;\n while (i < index) {\n current = current.next;\n i++;\n }\n current.value = value;\n }\n }\n }]);\n\n return LinkedList;\n}();\n\nmodule.exports = LinkedList;\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/*\r\n *This class is the javascript implementation of the Point.java class in jdk\r\n */\nfunction Point(x, y, p) {\n this.x = null;\n this.y = null;\n if (x == null && y == null && p == null) {\n this.x = 0;\n this.y = 0;\n } else if (typeof x == 'number' && typeof y == 'number' && p == null) {\n this.x = x;\n this.y = y;\n } else if (x.constructor.name == 'Point' && y == null && p == null) {\n p = x;\n this.x = p.x;\n this.y = p.y;\n }\n}\n\nPoint.prototype.getX = function () {\n return this.x;\n};\n\nPoint.prototype.getY = function () {\n return this.y;\n};\n\nPoint.prototype.getLocation = function () {\n return new Point(this.x, this.y);\n};\n\nPoint.prototype.setLocation = function (x, y, p) {\n if (x.constructor.name == 'Point' && y == null && p == null) {\n p = x;\n this.setLocation(p.x, p.y);\n } else if (typeof x == 'number' && typeof y == 'number' && p == null) {\n //if both parameters are integer just move (x,y) location\n if (parseInt(x) == x && parseInt(y) == y) {\n this.move(x, y);\n } else {\n this.x = Math.floor(x + 0.5);\n this.y = Math.floor(y + 0.5);\n }\n }\n};\n\nPoint.prototype.move = function (x, y) {\n this.x = x;\n this.y = y;\n};\n\nPoint.prototype.translate = function (dx, dy) {\n this.x += dx;\n this.y += dy;\n};\n\nPoint.prototype.equals = function (obj) {\n if (obj.constructor.name == \"Point\") {\n var pt = obj;\n return this.x == pt.x && this.y == pt.y;\n }\n return this == obj;\n};\n\nPoint.prototype.toString = function () {\n return new Point().constructor.name + \"[x=\" + this.x + \",y=\" + this.y + \"]\";\n};\n\nmodule.exports = Point;\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction RectangleD(x, y, width, height) {\n this.x = 0;\n this.y = 0;\n this.width = 0;\n this.height = 0;\n\n if (x != null && y != null && width != null && height != null) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n}\n\nRectangleD.prototype.getX = function () {\n return this.x;\n};\n\nRectangleD.prototype.setX = function (x) {\n this.x = x;\n};\n\nRectangleD.prototype.getY = function () {\n return this.y;\n};\n\nRectangleD.prototype.setY = function (y) {\n this.y = y;\n};\n\nRectangleD.prototype.getWidth = function () {\n return this.width;\n};\n\nRectangleD.prototype.setWidth = function (width) {\n this.width = width;\n};\n\nRectangleD.prototype.getHeight = function () {\n return this.height;\n};\n\nRectangleD.prototype.setHeight = function (height) {\n this.height = height;\n};\n\nRectangleD.prototype.getRight = function () {\n return this.x + this.width;\n};\n\nRectangleD.prototype.getBottom = function () {\n return this.y + this.height;\n};\n\nRectangleD.prototype.intersects = function (a) {\n if (this.getRight() < a.x) {\n return false;\n }\n\n if (this.getBottom() < a.y) {\n return false;\n }\n\n if (a.getRight() < this.x) {\n return false;\n }\n\n if (a.getBottom() < this.y) {\n return false;\n }\n\n return true;\n};\n\nRectangleD.prototype.getCenterX = function () {\n return this.x + this.width / 2;\n};\n\nRectangleD.prototype.getMinX = function () {\n return this.getX();\n};\n\nRectangleD.prototype.getMaxX = function () {\n return this.getX() + this.width;\n};\n\nRectangleD.prototype.getCenterY = function () {\n return this.y + this.height / 2;\n};\n\nRectangleD.prototype.getMinY = function () {\n return this.getY();\n};\n\nRectangleD.prototype.getMaxY = function () {\n return this.getY() + this.height;\n};\n\nRectangleD.prototype.getWidthHalf = function () {\n return this.width / 2;\n};\n\nRectangleD.prototype.getHeightHalf = function () {\n return this.height / 2;\n};\n\nmodule.exports = RectangleD;\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction UniqueIDGeneretor() {}\n\nUniqueIDGeneretor.lastID = 0;\n\nUniqueIDGeneretor.createID = function (obj) {\n if (UniqueIDGeneretor.isPrimitive(obj)) {\n return obj;\n }\n if (obj.uniqueID != null) {\n return obj.uniqueID;\n }\n obj.uniqueID = UniqueIDGeneretor.getString();\n UniqueIDGeneretor.lastID++;\n return obj.uniqueID;\n};\n\nUniqueIDGeneretor.getString = function (id) {\n if (id == null) id = UniqueIDGeneretor.lastID;\n return \"Object#\" + id + \"\";\n};\n\nUniqueIDGeneretor.isPrimitive = function (arg) {\n var type = typeof arg === \"undefined\" ? \"undefined\" : _typeof(arg);\n return arg == null || type != \"object\" && type != \"function\";\n};\n\nmodule.exports = UniqueIDGeneretor;\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar LayoutConstants = __webpack_require__(0);\nvar LGraphManager = __webpack_require__(6);\nvar LNode = __webpack_require__(3);\nvar LEdge = __webpack_require__(1);\nvar LGraph = __webpack_require__(5);\nvar PointD = __webpack_require__(4);\nvar Transform = __webpack_require__(17);\nvar Emitter = __webpack_require__(27);\n\nfunction Layout(isRemoteUse) {\n Emitter.call(this);\n\n //Layout Quality: 0:draft, 1:default, 2:proof\n this.layoutQuality = LayoutConstants.QUALITY;\n //Whether layout should create bendpoints as needed or not\n this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED;\n //Whether layout should be incremental or not\n this.incremental = LayoutConstants.DEFAULT_INCREMENTAL;\n //Whether we animate from before to after layout node positions\n this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT;\n //Whether we animate the layout process or not\n this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT;\n //Number iterations that should be done between two successive animations\n this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD;\n /**\r\n * Whether or not leaf nodes (non-compound nodes) are of uniform sizes. When\r\n * they are, both spring and repulsion forces between two leaf nodes can be\r\n * calculated without the expensive clipping point calculations, resulting\r\n * in major speed-up.\r\n */\n this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES;\n /**\r\n * This is used for creation of bendpoints by using dummy nodes and edges.\r\n * Maps an LEdge to its dummy bendpoint path.\r\n */\n this.edgeToDummyNodes = new Map();\n this.graphManager = new LGraphManager(this);\n this.isLayoutFinished = false;\n this.isSubLayout = false;\n this.isRemoteUse = false;\n\n if (isRemoteUse != null) {\n this.isRemoteUse = isRemoteUse;\n }\n}\n\nLayout.RANDOM_SEED = 1;\n\nLayout.prototype = Object.create(Emitter.prototype);\n\nLayout.prototype.getGraphManager = function () {\n return this.graphManager;\n};\n\nLayout.prototype.getAllNodes = function () {\n return this.graphManager.getAllNodes();\n};\n\nLayout.prototype.getAllEdges = function () {\n return this.graphManager.getAllEdges();\n};\n\nLayout.prototype.getAllNodesToApplyGravitation = function () {\n return this.graphManager.getAllNodesToApplyGravitation();\n};\n\nLayout.prototype.newGraphManager = function () {\n var gm = new LGraphManager(this);\n this.graphManager = gm;\n return gm;\n};\n\nLayout.prototype.newGraph = function (vGraph) {\n return new LGraph(null, this.graphManager, vGraph);\n};\n\nLayout.prototype.newNode = function (vNode) {\n return new LNode(this.graphManager, vNode);\n};\n\nLayout.prototype.newEdge = function (vEdge) {\n return new LEdge(null, null, vEdge);\n};\n\nLayout.prototype.checkLayoutSuccess = function () {\n return this.graphManager.getRoot() == null || this.graphManager.getRoot().getNodes().length == 0 || this.graphManager.includesInvalidEdge();\n};\n\nLayout.prototype.runLayout = function () {\n this.isLayoutFinished = false;\n\n if (this.tilingPreLayout) {\n this.tilingPreLayout();\n }\n\n this.initParameters();\n var isLayoutSuccessfull;\n\n if (this.checkLayoutSuccess()) {\n isLayoutSuccessfull = false;\n } else {\n isLayoutSuccessfull = this.layout();\n }\n\n if (LayoutConstants.ANIMATE === 'during') {\n // If this is a 'during' layout animation. Layout is not finished yet. \n // We need to perform these in index.js when layout is really finished.\n return false;\n }\n\n if (isLayoutSuccessfull) {\n if (!this.isSubLayout) {\n this.doPostLayout();\n }\n }\n\n if (this.tilingPostLayout) {\n this.tilingPostLayout();\n }\n\n this.isLayoutFinished = true;\n\n return isLayoutSuccessfull;\n};\n\n/**\r\n * This method performs the operations required after layout.\r\n */\nLayout.prototype.doPostLayout = function () {\n //assert !isSubLayout : \"Should not be called on sub-layout!\";\n // Propagate geometric changes to v-level objects\n if (!this.incremental) {\n this.transform();\n }\n this.update();\n};\n\n/**\r\n * This method updates the geometry of the target graph according to\r\n * calculated layout.\r\n */\nLayout.prototype.update2 = function () {\n // update bend points\n if (this.createBendsAsNeeded) {\n this.createBendpointsFromDummyNodes();\n\n // reset all edges, since the topology has changed\n this.graphManager.resetAllEdges();\n }\n\n // perform edge, node and root updates if layout is not called\n // remotely\n if (!this.isRemoteUse) {\n // update all edges\n var edge;\n var allEdges = this.graphManager.getAllEdges();\n for (var i = 0; i < allEdges.length; i++) {\n edge = allEdges[i];\n // this.update(edge);\n }\n\n // recursively update nodes\n var node;\n var nodes = this.graphManager.getRoot().getNodes();\n for (var i = 0; i < nodes.length; i++) {\n node = nodes[i];\n // this.update(node);\n }\n\n // update root graph\n this.update(this.graphManager.getRoot());\n }\n};\n\nLayout.prototype.update = function (obj) {\n if (obj == null) {\n this.update2();\n } else if (obj instanceof LNode) {\n var node = obj;\n if (node.getChild() != null) {\n // since node is compound, recursively update child nodes\n var nodes = node.getChild().getNodes();\n for (var i = 0; i < nodes.length; i++) {\n update(nodes[i]);\n }\n }\n\n // if the l-level node is associated with a v-level graph object,\n // then it is assumed that the v-level node implements the\n // interface Updatable.\n if (node.vGraphObject != null) {\n // cast to Updatable without any type check\n var vNode = node.vGraphObject;\n\n // call the update method of the interface\n vNode.update(node);\n }\n } else if (obj instanceof LEdge) {\n var edge = obj;\n // if the l-level edge is associated with a v-level graph object,\n // then it is assumed that the v-level edge implements the\n // interface Updatable.\n\n if (edge.vGraphObject != null) {\n // cast to Updatable without any type check\n var vEdge = edge.vGraphObject;\n\n // call the update method of the interface\n vEdge.update(edge);\n }\n } else if (obj instanceof LGraph) {\n var graph = obj;\n // if the l-level graph is associated with a v-level graph object,\n // then it is assumed that the v-level object implements the\n // interface Updatable.\n\n if (graph.vGraphObject != null) {\n // cast to Updatable without any type check\n var vGraph = graph.vGraphObject;\n\n // call the update method of the interface\n vGraph.update(graph);\n }\n }\n};\n\n/**\r\n * This method is used to set all layout parameters to default values\r\n * determined at compile time.\r\n */\nLayout.prototype.initParameters = function () {\n if (!this.isSubLayout) {\n this.layoutQuality = LayoutConstants.QUALITY;\n this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT;\n this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD;\n this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT;\n this.incremental = LayoutConstants.DEFAULT_INCREMENTAL;\n this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED;\n this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES;\n }\n\n if (this.animationDuringLayout) {\n this.animationOnLayout = false;\n }\n};\n\nLayout.prototype.transform = function (newLeftTop) {\n if (newLeftTop == undefined) {\n this.transform(new PointD(0, 0));\n } else {\n // create a transformation object (from Eclipse to layout). When an\n // inverse transform is applied, we get upper-left coordinate of the\n // drawing or the root graph at given input coordinate (some margins\n // already included in calculation of left-top).\n\n var trans = new Transform();\n var leftTop = this.graphManager.getRoot().updateLeftTop();\n\n if (leftTop != null) {\n trans.setWorldOrgX(newLeftTop.x);\n trans.setWorldOrgY(newLeftTop.y);\n\n trans.setDeviceOrgX(leftTop.x);\n trans.setDeviceOrgY(leftTop.y);\n\n var nodes = this.getAllNodes();\n var node;\n\n for (var i = 0; i < nodes.length; i++) {\n node = nodes[i];\n node.transform(trans);\n }\n }\n }\n};\n\nLayout.prototype.positionNodesRandomly = function (graph) {\n\n if (graph == undefined) {\n //assert !this.incremental;\n this.positionNodesRandomly(this.getGraphManager().getRoot());\n this.getGraphManager().getRoot().updateBounds(true);\n } else {\n var lNode;\n var childGraph;\n\n var nodes = graph.getNodes();\n for (var i = 0; i < nodes.length; i++) {\n lNode = nodes[i];\n childGraph = lNode.getChild();\n\n if (childGraph == null) {\n lNode.scatter();\n } else if (childGraph.getNodes().length == 0) {\n lNode.scatter();\n } else {\n this.positionNodesRandomly(childGraph);\n lNode.updateBounds();\n }\n }\n }\n};\n\n/**\r\n * This method returns a list of trees where each tree is represented as a\r\n * list of l-nodes. The method returns a list of size 0 when:\r\n * - The graph is not flat or\r\n * - One of the component(s) of the graph is not a tree.\r\n */\nLayout.prototype.getFlatForest = function () {\n var flatForest = [];\n var isForest = true;\n\n // Quick reference for all nodes in the graph manager associated with\n // this layout. The list should not be changed.\n var allNodes = this.graphManager.getRoot().getNodes();\n\n // First be sure that the graph is flat\n var isFlat = true;\n\n for (var i = 0; i < allNodes.length; i++) {\n if (allNodes[i].getChild() != null) {\n isFlat = false;\n }\n }\n\n // Return empty forest if the graph is not flat.\n if (!isFlat) {\n return flatForest;\n }\n\n // Run BFS for each component of the graph.\n\n var visited = new Set();\n var toBeVisited = [];\n var parents = new Map();\n var unProcessedNodes = [];\n\n unProcessedNodes = unProcessedNodes.concat(allNodes);\n\n // Each iteration of this loop finds a component of the graph and\n // decides whether it is a tree or not. If it is a tree, adds it to the\n // forest and continued with the next component.\n\n while (unProcessedNodes.length > 0 && isForest) {\n toBeVisited.push(unProcessedNodes[0]);\n\n // Start the BFS. Each iteration of this loop visits a node in a\n // BFS manner.\n while (toBeVisited.length > 0 && isForest) {\n //pool operation\n var currentNode = toBeVisited[0];\n toBeVisited.splice(0, 1);\n visited.add(currentNode);\n\n // Traverse all neighbors of this node\n var neighborEdges = currentNode.getEdges();\n\n for (var i = 0; i < neighborEdges.length; i++) {\n var currentNeighbor = neighborEdges[i].getOtherEnd(currentNode);\n\n // If BFS is not growing from this neighbor.\n if (parents.get(currentNode) != currentNeighbor) {\n // We haven't previously visited this neighbor.\n if (!visited.has(currentNeighbor)) {\n toBeVisited.push(currentNeighbor);\n parents.set(currentNeighbor, currentNode);\n }\n // Since we have previously visited this neighbor and\n // this neighbor is not parent of currentNode, given\n // graph contains a component that is not tree, hence\n // it is not a forest.\n else {\n isForest = false;\n break;\n }\n }\n }\n }\n\n // The graph contains a component that is not a tree. Empty\n // previously found trees. The method will end.\n if (!isForest) {\n flatForest = [];\n }\n // Save currently visited nodes as a tree in our forest. Reset\n // visited and parents lists. Continue with the next component of\n // the graph, if any.\n else {\n var temp = [].concat(_toConsumableArray(visited));\n flatForest.push(temp);\n //flatForest = flatForest.concat(temp);\n //unProcessedNodes.removeAll(visited);\n for (var i = 0; i < temp.length; i++) {\n var value = temp[i];\n var index = unProcessedNodes.indexOf(value);\n if (index > -1) {\n unProcessedNodes.splice(index, 1);\n }\n }\n visited = new Set();\n parents = new Map();\n }\n }\n\n return flatForest;\n};\n\n/**\r\n * This method creates dummy nodes (an l-level node with minimal dimensions)\r\n * for the given edge (one per bendpoint). The existing l-level structure\r\n * is updated accordingly.\r\n */\nLayout.prototype.createDummyNodesForBendpoints = function (edge) {\n var dummyNodes = [];\n var prev = edge.source;\n\n var graph = this.graphManager.calcLowestCommonAncestor(edge.source, edge.target);\n\n for (var i = 0; i < edge.bendpoints.length; i++) {\n // create new dummy node\n var dummyNode = this.newNode(null);\n dummyNode.setRect(new Point(0, 0), new Dimension(1, 1));\n\n graph.add(dummyNode);\n\n // create new dummy edge between prev and dummy node\n var dummyEdge = this.newEdge(null);\n this.graphManager.add(dummyEdge, prev, dummyNode);\n\n dummyNodes.add(dummyNode);\n prev = dummyNode;\n }\n\n var dummyEdge = this.newEdge(null);\n this.graphManager.add(dummyEdge, prev, edge.target);\n\n this.edgeToDummyNodes.set(edge, dummyNodes);\n\n // remove real edge from graph manager if it is inter-graph\n if (edge.isInterGraph()) {\n this.graphManager.remove(edge);\n }\n // else, remove the edge from the current graph\n else {\n graph.remove(edge);\n }\n\n return dummyNodes;\n};\n\n/**\r\n * This method creates bendpoints for edges from the dummy nodes\r\n * at l-level.\r\n */\nLayout.prototype.createBendpointsFromDummyNodes = function () {\n var edges = [];\n edges = edges.concat(this.graphManager.getAllEdges());\n edges = [].concat(_toConsumableArray(this.edgeToDummyNodes.keys())).concat(edges);\n\n for (var k = 0; k < edges.length; k++) {\n var lEdge = edges[k];\n\n if (lEdge.bendpoints.length > 0) {\n var path = this.edgeToDummyNodes.get(lEdge);\n\n for (var i = 0; i < path.length; i++) {\n var dummyNode = path[i];\n var p = new PointD(dummyNode.getCenterX(), dummyNode.getCenterY());\n\n // update bendpoint's location according to dummy node\n var ebp = lEdge.bendpoints.get(i);\n ebp.x = p.x;\n ebp.y = p.y;\n\n // remove the dummy node, dummy edges incident with this\n // dummy node is also removed (within the remove method)\n dummyNode.getOwner().remove(dummyNode);\n }\n\n // add the real edge to graph\n this.graphManager.add(lEdge, lEdge.source, lEdge.target);\n }\n }\n};\n\nLayout.transform = function (sliderValue, defaultValue, minDiv, maxMul) {\n if (minDiv != undefined && maxMul != undefined) {\n var value = defaultValue;\n\n if (sliderValue <= 50) {\n var minValue = defaultValue / minDiv;\n value -= (defaultValue - minValue) / 50 * (50 - sliderValue);\n } else {\n var maxValue = defaultValue * maxMul;\n value += (maxValue - defaultValue) / 50 * (sliderValue - 50);\n }\n\n return value;\n } else {\n var a, b;\n\n if (sliderValue <= 50) {\n a = 9.0 * defaultValue / 500.0;\n b = defaultValue / 10.0;\n } else {\n a = 9.0 * defaultValue / 50.0;\n b = -8 * defaultValue;\n }\n\n return a * sliderValue + b;\n }\n};\n\n/**\r\n * This method finds and returns the center of the given nodes, assuming\r\n * that the given nodes form a tree in themselves.\r\n */\nLayout.findCenterOfTree = function (nodes) {\n var list = [];\n list = list.concat(nodes);\n\n var removedNodes = [];\n var remainingDegrees = new Map();\n var foundCenter = false;\n var centerNode = null;\n\n if (list.length == 1 || list.length == 2) {\n foundCenter = true;\n centerNode = list[0];\n }\n\n for (var i = 0; i < list.length; i++) {\n var node = list[i];\n var degree = node.getNeighborsList().size;\n remainingDegrees.set(node, node.getNeighborsList().size);\n\n if (degree == 1) {\n removedNodes.push(node);\n }\n }\n\n var tempList = [];\n tempList = tempList.concat(removedNodes);\n\n while (!foundCenter) {\n var tempList2 = [];\n tempList2 = tempList2.concat(tempList);\n tempList = [];\n\n for (var i = 0; i < list.length; i++) {\n var node = list[i];\n\n var index = list.indexOf(node);\n if (index >= 0) {\n list.splice(index, 1);\n }\n\n var neighbours = node.getNeighborsList();\n\n neighbours.forEach(function (neighbour) {\n if (removedNodes.indexOf(neighbour) < 0) {\n var otherDegree = remainingDegrees.get(neighbour);\n var newDegree = otherDegree - 1;\n\n if (newDegree == 1) {\n tempList.push(neighbour);\n }\n\n remainingDegrees.set(neighbour, newDegree);\n }\n });\n }\n\n removedNodes = removedNodes.concat(tempList);\n\n if (list.length == 1 || list.length == 2) {\n foundCenter = true;\n centerNode = list[0];\n }\n }\n\n return centerNode;\n};\n\n/**\r\n * During the coarsening process, this layout may be referenced by two graph managers\r\n * this setter function grants access to change the currently being used graph manager\r\n */\nLayout.prototype.setGraphManager = function (gm) {\n this.graphManager = gm;\n};\n\nmodule.exports = Layout;\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction RandomSeed() {}\n// adapted from: https://stackoverflow.com/a/19303725\nRandomSeed.seed = 1;\nRandomSeed.x = 0;\n\nRandomSeed.nextDouble = function () {\n RandomSeed.x = Math.sin(RandomSeed.seed++) * 10000;\n return RandomSeed.x - Math.floor(RandomSeed.x);\n};\n\nmodule.exports = RandomSeed;\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar PointD = __webpack_require__(4);\n\nfunction Transform(x, y) {\n this.lworldOrgX = 0.0;\n this.lworldOrgY = 0.0;\n this.ldeviceOrgX = 0.0;\n this.ldeviceOrgY = 0.0;\n this.lworldExtX = 1.0;\n this.lworldExtY = 1.0;\n this.ldeviceExtX = 1.0;\n this.ldeviceExtY = 1.0;\n}\n\nTransform.prototype.getWorldOrgX = function () {\n return this.lworldOrgX;\n};\n\nTransform.prototype.setWorldOrgX = function (wox) {\n this.lworldOrgX = wox;\n};\n\nTransform.prototype.getWorldOrgY = function () {\n return this.lworldOrgY;\n};\n\nTransform.prototype.setWorldOrgY = function (woy) {\n this.lworldOrgY = woy;\n};\n\nTransform.prototype.getWorldExtX = function () {\n return this.lworldExtX;\n};\n\nTransform.prototype.setWorldExtX = function (wex) {\n this.lworldExtX = wex;\n};\n\nTransform.prototype.getWorldExtY = function () {\n return this.lworldExtY;\n};\n\nTransform.prototype.setWorldExtY = function (wey) {\n this.lworldExtY = wey;\n};\n\n/* Device related */\n\nTransform.prototype.getDeviceOrgX = function () {\n return this.ldeviceOrgX;\n};\n\nTransform.prototype.setDeviceOrgX = function (dox) {\n this.ldeviceOrgX = dox;\n};\n\nTransform.prototype.getDeviceOrgY = function () {\n return this.ldeviceOrgY;\n};\n\nTransform.prototype.setDeviceOrgY = function (doy) {\n this.ldeviceOrgY = doy;\n};\n\nTransform.prototype.getDeviceExtX = function () {\n return this.ldeviceExtX;\n};\n\nTransform.prototype.setDeviceExtX = function (dex) {\n this.ldeviceExtX = dex;\n};\n\nTransform.prototype.getDeviceExtY = function () {\n return this.ldeviceExtY;\n};\n\nTransform.prototype.setDeviceExtY = function (dey) {\n this.ldeviceExtY = dey;\n};\n\nTransform.prototype.transformX = function (x) {\n var xDevice = 0.0;\n var worldExtX = this.lworldExtX;\n if (worldExtX != 0.0) {\n xDevice = this.ldeviceOrgX + (x - this.lworldOrgX) * this.ldeviceExtX / worldExtX;\n }\n\n return xDevice;\n};\n\nTransform.prototype.transformY = function (y) {\n var yDevice = 0.0;\n var worldExtY = this.lworldExtY;\n if (worldExtY != 0.0) {\n yDevice = this.ldeviceOrgY + (y - this.lworldOrgY) * this.ldeviceExtY / worldExtY;\n }\n\n return yDevice;\n};\n\nTransform.prototype.inverseTransformX = function (x) {\n var xWorld = 0.0;\n var deviceExtX = this.ldeviceExtX;\n if (deviceExtX != 0.0) {\n xWorld = this.lworldOrgX + (x - this.ldeviceOrgX) * this.lworldExtX / deviceExtX;\n }\n\n return xWorld;\n};\n\nTransform.prototype.inverseTransformY = function (y) {\n var yWorld = 0.0;\n var deviceExtY = this.ldeviceExtY;\n if (deviceExtY != 0.0) {\n yWorld = this.lworldOrgY + (y - this.ldeviceOrgY) * this.lworldExtY / deviceExtY;\n }\n return yWorld;\n};\n\nTransform.prototype.inverseTransformPoint = function (inPoint) {\n var outPoint = new PointD(this.inverseTransformX(inPoint.x), this.inverseTransformY(inPoint.y));\n return outPoint;\n};\n\nmodule.exports = Transform;\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar Layout = __webpack_require__(15);\nvar FDLayoutConstants = __webpack_require__(7);\nvar LayoutConstants = __webpack_require__(0);\nvar IGeometry = __webpack_require__(8);\nvar IMath = __webpack_require__(9);\n\nfunction FDLayout() {\n Layout.call(this);\n\n this.useSmartIdealEdgeLengthCalculation = FDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION;\n this.idealEdgeLength = FDLayoutConstants.DEFAULT_EDGE_LENGTH;\n this.springConstant = FDLayoutConstants.DEFAULT_SPRING_STRENGTH;\n this.repulsionConstant = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH;\n this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH;\n this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH;\n this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR;\n this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR;\n this.displacementThresholdPerNode = 3.0 * FDLayoutConstants.DEFAULT_EDGE_LENGTH / 100;\n this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL;\n this.initialCoolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL;\n this.totalDisplacement = 0.0;\n this.oldTotalDisplacement = 0.0;\n this.maxIterations = FDLayoutConstants.MAX_ITERATIONS;\n}\n\nFDLayout.prototype = Object.create(Layout.prototype);\n\nfor (var prop in Layout) {\n FDLayout[prop] = Layout[prop];\n}\n\nFDLayout.prototype.initParameters = function () {\n Layout.prototype.initParameters.call(this, arguments);\n\n this.totalIterations = 0;\n this.notAnimatedIterations = 0;\n\n this.useFRGridVariant = FDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION;\n\n this.grid = [];\n};\n\nFDLayout.prototype.calcIdealEdgeLengths = function () {\n var edge;\n var lcaDepth;\n var source;\n var target;\n var sizeOfSourceInLca;\n var sizeOfTargetInLca;\n\n var allEdges = this.getGraphManager().getAllEdges();\n for (var i = 0; i < allEdges.length; i++) {\n edge = allEdges[i];\n\n edge.idealLength = this.idealEdgeLength;\n\n if (edge.isInterGraph) {\n source = edge.getSource();\n target = edge.getTarget();\n\n sizeOfSourceInLca = edge.getSourceInLca().getEstimatedSize();\n sizeOfTargetInLca = edge.getTargetInLca().getEstimatedSize();\n\n if (this.useSmartIdealEdgeLengthCalculation) {\n edge.idealLength += sizeOfSourceInLca + sizeOfTargetInLca - 2 * LayoutConstants.SIMPLE_NODE_SIZE;\n }\n\n lcaDepth = edge.getLca().getInclusionTreeDepth();\n\n edge.idealLength += FDLayoutConstants.DEFAULT_EDGE_LENGTH * FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR * (source.getInclusionTreeDepth() + target.getInclusionTreeDepth() - 2 * lcaDepth);\n }\n }\n};\n\nFDLayout.prototype.initSpringEmbedder = function () {\n\n var s = this.getAllNodes().length;\n if (this.incremental) {\n if (s > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) {\n this.coolingFactor = Math.max(this.coolingFactor * FDLayoutConstants.COOLING_ADAPTATION_FACTOR, this.coolingFactor - (s - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * this.coolingFactor * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR));\n }\n this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL;\n } else {\n if (s > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) {\n this.coolingFactor = Math.max(FDLayoutConstants.COOLING_ADAPTATION_FACTOR, 1.0 - (s - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR));\n } else {\n this.coolingFactor = 1.0;\n }\n this.initialCoolingFactor = this.coolingFactor;\n this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT;\n }\n\n this.maxIterations = Math.max(this.getAllNodes().length * 5, this.maxIterations);\n\n this.totalDisplacementThreshold = this.displacementThresholdPerNode * this.getAllNodes().length;\n\n this.repulsionRange = this.calcRepulsionRange();\n};\n\nFDLayout.prototype.calcSpringForces = function () {\n var lEdges = this.getAllEdges();\n var edge;\n\n for (var i = 0; i < lEdges.length; i++) {\n edge = lEdges[i];\n\n this.calcSpringForce(edge, edge.idealLength);\n }\n};\n\nFDLayout.prototype.calcRepulsionForces = function () {\n var gridUpdateAllowed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var forceToNodeSurroundingUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var i, j;\n var nodeA, nodeB;\n var lNodes = this.getAllNodes();\n var processedNodeSet;\n\n if (this.useFRGridVariant) {\n if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed) {\n this.updateGrid();\n }\n\n processedNodeSet = new Set();\n\n // calculate repulsion forces between each nodes and its surrounding\n for (i = 0; i < lNodes.length; i++) {\n nodeA = lNodes[i];\n this.calculateRepulsionForceOfANode(nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate);\n processedNodeSet.add(nodeA);\n }\n } else {\n for (i = 0; i < lNodes.length; i++) {\n nodeA = lNodes[i];\n\n for (j = i + 1; j < lNodes.length; j++) {\n nodeB = lNodes[j];\n\n // If both nodes are not members of the same graph, skip.\n if (nodeA.getOwner() != nodeB.getOwner()) {\n continue;\n }\n\n this.calcRepulsionForce(nodeA, nodeB);\n }\n }\n }\n};\n\nFDLayout.prototype.calcGravitationalForces = function () {\n var node;\n var lNodes = this.getAllNodesToApplyGravitation();\n\n for (var i = 0; i < lNodes.length; i++) {\n node = lNodes[i];\n this.calcGravitationalForce(node);\n }\n};\n\nFDLayout.prototype.moveNodes = function () {\n var lNodes = this.getAllNodes();\n var node;\n\n for (var i = 0; i < lNodes.length; i++) {\n node = lNodes[i];\n node.move();\n }\n};\n\nFDLayout.prototype.calcSpringForce = function (edge, idealLength) {\n var sourceNode = edge.getSource();\n var targetNode = edge.getTarget();\n\n var length;\n var springForce;\n var springForceX;\n var springForceY;\n\n // Update edge length\n if (this.uniformLeafNodeSizes && sourceNode.getChild() == null && targetNode.getChild() == null) {\n edge.updateLengthSimple();\n } else {\n edge.updateLength();\n\n if (edge.isOverlapingSourceAndTarget) {\n return;\n }\n }\n\n length = edge.getLength();\n\n if (length == 0) return;\n\n // Calculate spring forces\n springForce = this.springConstant * (length - idealLength);\n\n // Project force onto x and y axes\n springForceX = springForce * (edge.lengthX / length);\n springForceY = springForce * (edge.lengthY / length);\n\n // Apply forces on the end nodes\n sourceNode.springForceX += springForceX;\n sourceNode.springForceY += springForceY;\n targetNode.springForceX -= springForceX;\n targetNode.springForceY -= springForceY;\n};\n\nFDLayout.prototype.calcRepulsionForce = function (nodeA, nodeB) {\n var rectA = nodeA.getRect();\n var rectB = nodeB.getRect();\n var overlapAmount = new Array(2);\n var clipPoints = new Array(4);\n var distanceX;\n var distanceY;\n var distanceSquared;\n var distance;\n var repulsionForce;\n var repulsionForceX;\n var repulsionForceY;\n\n if (rectA.intersects(rectB)) // two nodes overlap\n {\n // calculate separation amount in x and y directions\n IGeometry.calcSeparationAmount(rectA, rectB, overlapAmount, FDLayoutConstants.DEFAULT_EDGE_LENGTH / 2.0);\n\n repulsionForceX = 2 * overlapAmount[0];\n repulsionForceY = 2 * overlapAmount[1];\n\n var childrenConstant = nodeA.noOfChildren * nodeB.noOfChildren / (nodeA.noOfChildren + nodeB.noOfChildren);\n\n // Apply forces on the two nodes\n nodeA.repulsionForceX -= childrenConstant * repulsionForceX;\n nodeA.repulsionForceY -= childrenConstant * repulsionForceY;\n nodeB.repulsionForceX += childrenConstant * repulsionForceX;\n nodeB.repulsionForceY += childrenConstant * repulsionForceY;\n } else // no overlap\n {\n // calculate distance\n\n if (this.uniformLeafNodeSizes && nodeA.getChild() == null && nodeB.getChild() == null) // simply base repulsion on distance of node centers\n {\n distanceX = rectB.getCenterX() - rectA.getCenterX();\n distanceY = rectB.getCenterY() - rectA.getCenterY();\n } else // use clipping points\n {\n IGeometry.getIntersection(rectA, rectB, clipPoints);\n\n distanceX = clipPoints[2] - clipPoints[0];\n distanceY = clipPoints[3] - clipPoints[1];\n }\n\n // No repulsion range. FR grid variant should take care of this.\n if (Math.abs(distanceX) < FDLayoutConstants.MIN_REPULSION_DIST) {\n distanceX = IMath.sign(distanceX) * FDLayoutConstants.MIN_REPULSION_DIST;\n }\n\n if (Math.abs(distanceY) < FDLayoutConstants.MIN_REPULSION_DIST) {\n distanceY = IMath.sign(distanceY) * FDLayoutConstants.MIN_REPULSION_DIST;\n }\n\n distanceSquared = distanceX * distanceX + distanceY * distanceY;\n distance = Math.sqrt(distanceSquared);\n\n repulsionForce = this.repulsionConstant * nodeA.noOfChildren * nodeB.noOfChildren / distanceSquared;\n\n // Project force onto x and y axes\n repulsionForceX = repulsionForce * distanceX / distance;\n repulsionForceY = repulsionForce * distanceY / distance;\n\n // Apply forces on the two nodes \n nodeA.repulsionForceX -= repulsionForceX;\n nodeA.repulsionForceY -= repulsionForceY;\n nodeB.repulsionForceX += repulsionForceX;\n nodeB.repulsionForceY += repulsionForceY;\n }\n};\n\nFDLayout.prototype.calcGravitationalForce = function (node) {\n var ownerGraph;\n var ownerCenterX;\n var ownerCenterY;\n var distanceX;\n var distanceY;\n var absDistanceX;\n var absDistanceY;\n var estimatedSize;\n ownerGraph = node.getOwner();\n\n ownerCenterX = (ownerGraph.getRight() + ownerGraph.getLeft()) / 2;\n ownerCenterY = (ownerGraph.getTop() + ownerGraph.getBottom()) / 2;\n distanceX = node.getCenterX() - ownerCenterX;\n distanceY = node.getCenterY() - ownerCenterY;\n absDistanceX = Math.abs(distanceX) + node.getWidth() / 2;\n absDistanceY = Math.abs(distanceY) + node.getHeight() / 2;\n\n if (node.getOwner() == this.graphManager.getRoot()) // in the root graph\n {\n estimatedSize = ownerGraph.getEstimatedSize() * this.gravityRangeFactor;\n\n if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) {\n node.gravitationForceX = -this.gravityConstant * distanceX;\n node.gravitationForceY = -this.gravityConstant * distanceY;\n }\n } else // inside a compound\n {\n estimatedSize = ownerGraph.getEstimatedSize() * this.compoundGravityRangeFactor;\n\n if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) {\n node.gravitationForceX = -this.gravityConstant * distanceX * this.compoundGravityConstant;\n node.gravitationForceY = -this.gravityConstant * distanceY * this.compoundGravityConstant;\n }\n }\n};\n\nFDLayout.prototype.isConverged = function () {\n var converged;\n var oscilating = false;\n\n if (this.totalIterations > this.maxIterations / 3) {\n oscilating = Math.abs(this.totalDisplacement - this.oldTotalDisplacement) < 2;\n }\n\n converged = this.totalDisplacement < this.totalDisplacementThreshold;\n\n this.oldTotalDisplacement = this.totalDisplacement;\n\n return converged || oscilating;\n};\n\nFDLayout.prototype.animate = function () {\n if (this.animationDuringLayout && !this.isSubLayout) {\n if (this.notAnimatedIterations == this.animationPeriod) {\n this.update();\n this.notAnimatedIterations = 0;\n } else {\n this.notAnimatedIterations++;\n }\n }\n};\n\n//This method calculates the number of children (weight) for all nodes\nFDLayout.prototype.calcNoOfChildrenForAllNodes = function () {\n var node;\n var allNodes = this.graphManager.getAllNodes();\n\n for (var i = 0; i < allNodes.length; i++) {\n node = allNodes[i];\n node.noOfChildren = node.getNoOfChildren();\n }\n};\n\n// -----------------------------------------------------------------------------\n// Section: FR-Grid Variant Repulsion Force Calculation\n// -----------------------------------------------------------------------------\n\nFDLayout.prototype.calcGrid = function (graph) {\n\n var sizeX = 0;\n var sizeY = 0;\n\n sizeX = parseInt(Math.ceil((graph.getRight() - graph.getLeft()) / this.repulsionRange));\n sizeY = parseInt(Math.ceil((graph.getBottom() - graph.getTop()) / this.repulsionRange));\n\n var grid = new Array(sizeX);\n\n for (var i = 0; i < sizeX; i++) {\n grid[i] = new Array(sizeY);\n }\n\n for (var i = 0; i < sizeX; i++) {\n for (var j = 0; j < sizeY; j++) {\n grid[i][j] = new Array();\n }\n }\n\n return grid;\n};\n\nFDLayout.prototype.addNodeToGrid = function (v, left, top) {\n\n var startX = 0;\n var finishX = 0;\n var startY = 0;\n var finishY = 0;\n\n startX = parseInt(Math.floor((v.getRect().x - left) / this.repulsionRange));\n finishX = parseInt(Math.floor((v.getRect().width + v.getRect().x - left) / this.repulsionRange));\n startY = parseInt(Math.floor((v.getRect().y - top) / this.repulsionRange));\n finishY = parseInt(Math.floor((v.getRect().height + v.getRect().y - top) / this.repulsionRange));\n\n for (var i = startX; i <= finishX; i++) {\n for (var j = startY; j <= finishY; j++) {\n this.grid[i][j].push(v);\n v.setGridCoordinates(startX, finishX, startY, finishY);\n }\n }\n};\n\nFDLayout.prototype.updateGrid = function () {\n var i;\n var nodeA;\n var lNodes = this.getAllNodes();\n\n this.grid = this.calcGrid(this.graphManager.getRoot());\n\n // put all nodes to proper grid cells\n for (i = 0; i < lNodes.length; i++) {\n nodeA = lNodes[i];\n this.addNodeToGrid(nodeA, this.graphManager.getRoot().getLeft(), this.graphManager.getRoot().getTop());\n }\n};\n\nFDLayout.prototype.calculateRepulsionForceOfANode = function (nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate) {\n\n if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed || forceToNodeSurroundingUpdate) {\n var surrounding = new Set();\n nodeA.surrounding = new Array();\n var nodeB;\n var grid = this.grid;\n\n for (var i = nodeA.startX - 1; i < nodeA.finishX + 2; i++) {\n for (var j = nodeA.startY - 1; j < nodeA.finishY + 2; j++) {\n if (!(i < 0 || j < 0 || i >= grid.length || j >= grid[0].length)) {\n for (var k = 0; k < grid[i][j].length; k++) {\n nodeB = grid[i][j][k];\n\n // If both nodes are not members of the same graph, \n // or both nodes are the same, skip.\n if (nodeA.getOwner() != nodeB.getOwner() || nodeA == nodeB) {\n continue;\n }\n\n // check if the repulsion force between\n // nodeA and nodeB has already been calculated\n if (!processedNodeSet.has(nodeB) && !surrounding.has(nodeB)) {\n var distanceX = Math.abs(nodeA.getCenterX() - nodeB.getCenterX()) - (nodeA.getWidth() / 2 + nodeB.getWidth() / 2);\n var distanceY = Math.abs(nodeA.getCenterY() - nodeB.getCenterY()) - (nodeA.getHeight() / 2 + nodeB.getHeight() / 2);\n\n // if the distance between nodeA and nodeB \n // is less then calculation range\n if (distanceX <= this.repulsionRange && distanceY <= this.repulsionRange) {\n //then add nodeB to surrounding of nodeA\n surrounding.add(nodeB);\n }\n }\n }\n }\n }\n }\n\n nodeA.surrounding = [].concat(_toConsumableArray(surrounding));\n }\n for (i = 0; i < nodeA.surrounding.length; i++) {\n this.calcRepulsionForce(nodeA, nodeA.surrounding[i]);\n }\n};\n\nFDLayout.prototype.calcRepulsionRange = function () {\n return 0.0;\n};\n\nmodule.exports = FDLayout;\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LEdge = __webpack_require__(1);\nvar FDLayoutConstants = __webpack_require__(7);\n\nfunction FDLayoutEdge(source, target, vEdge) {\n LEdge.call(this, source, target, vEdge);\n this.idealLength = FDLayoutConstants.DEFAULT_EDGE_LENGTH;\n}\n\nFDLayoutEdge.prototype = Object.create(LEdge.prototype);\n\nfor (var prop in LEdge) {\n FDLayoutEdge[prop] = LEdge[prop];\n}\n\nmodule.exports = FDLayoutEdge;\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LNode = __webpack_require__(3);\n\nfunction FDLayoutNode(gm, loc, size, vNode) {\n // alternative constructor is handled inside LNode\n LNode.call(this, gm, loc, size, vNode);\n //Spring, repulsion and gravitational forces acting on this node\n this.springForceX = 0;\n this.springForceY = 0;\n this.repulsionForceX = 0;\n this.repulsionForceY = 0;\n this.gravitationForceX = 0;\n this.gravitationForceY = 0;\n //Amount by which this node is to be moved in this iteration\n this.displacementX = 0;\n this.displacementY = 0;\n\n //Start and finish grid coordinates that this node is fallen into\n this.startX = 0;\n this.finishX = 0;\n this.startY = 0;\n this.finishY = 0;\n\n //Geometric neighbors of this node\n this.surrounding = [];\n}\n\nFDLayoutNode.prototype = Object.create(LNode.prototype);\n\nfor (var prop in LNode) {\n FDLayoutNode[prop] = LNode[prop];\n}\n\nFDLayoutNode.prototype.setGridCoordinates = function (_startX, _finishX, _startY, _finishY) {\n this.startX = _startX;\n this.finishX = _finishX;\n this.startY = _startY;\n this.finishY = _finishY;\n};\n\nmodule.exports = FDLayoutNode;\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction DimensionD(width, height) {\n this.width = 0;\n this.height = 0;\n if (width !== null && height !== null) {\n this.height = height;\n this.width = width;\n }\n}\n\nDimensionD.prototype.getWidth = function () {\n return this.width;\n};\n\nDimensionD.prototype.setWidth = function (width) {\n this.width = width;\n};\n\nDimensionD.prototype.getHeight = function () {\n return this.height;\n};\n\nDimensionD.prototype.setHeight = function (height) {\n this.height = height;\n};\n\nmodule.exports = DimensionD;\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar UniqueIDGeneretor = __webpack_require__(14);\n\nfunction HashMap() {\n this.map = {};\n this.keys = [];\n}\n\nHashMap.prototype.put = function (key, value) {\n var theId = UniqueIDGeneretor.createID(key);\n if (!this.contains(theId)) {\n this.map[theId] = value;\n this.keys.push(key);\n }\n};\n\nHashMap.prototype.contains = function (key) {\n var theId = UniqueIDGeneretor.createID(key);\n return this.map[key] != null;\n};\n\nHashMap.prototype.get = function (key) {\n var theId = UniqueIDGeneretor.createID(key);\n return this.map[theId];\n};\n\nHashMap.prototype.keySet = function () {\n return this.keys;\n};\n\nmodule.exports = HashMap;\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar UniqueIDGeneretor = __webpack_require__(14);\n\nfunction HashSet() {\n this.set = {};\n}\n;\n\nHashSet.prototype.add = function (obj) {\n var theId = UniqueIDGeneretor.createID(obj);\n if (!this.contains(theId)) this.set[theId] = obj;\n};\n\nHashSet.prototype.remove = function (obj) {\n delete this.set[UniqueIDGeneretor.createID(obj)];\n};\n\nHashSet.prototype.clear = function () {\n this.set = {};\n};\n\nHashSet.prototype.contains = function (obj) {\n return this.set[UniqueIDGeneretor.createID(obj)] == obj;\n};\n\nHashSet.prototype.isEmpty = function () {\n return this.size() === 0;\n};\n\nHashSet.prototype.size = function () {\n return Object.keys(this.set).length;\n};\n\n//concats this.set to the given list\nHashSet.prototype.addAllTo = function (list) {\n var keys = Object.keys(this.set);\n var length = keys.length;\n for (var i = 0; i < length; i++) {\n list.push(this.set[keys[i]]);\n }\n};\n\nHashSet.prototype.size = function () {\n return Object.keys(this.set).length;\n};\n\nHashSet.prototype.addAll = function (list) {\n var s = list.length;\n for (var i = 0; i < s; i++) {\n var v = list[i];\n this.add(v);\n }\n};\n\nmodule.exports = HashSet;\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * A classic Quicksort algorithm with Hoare's partition\n * - Works also on LinkedList objects\n *\n * Copyright: i-Vis Research Group, Bilkent University, 2007 - present\n */\n\nvar LinkedList = __webpack_require__(11);\n\nvar Quicksort = function () {\n function Quicksort(A, compareFunction) {\n _classCallCheck(this, Quicksort);\n\n if (compareFunction !== null || compareFunction !== undefined) this.compareFunction = this._defaultCompareFunction;\n\n var length = void 0;\n if (A instanceof LinkedList) length = A.size();else length = A.length;\n\n this._quicksort(A, 0, length - 1);\n }\n\n _createClass(Quicksort, [{\n key: '_quicksort',\n value: function _quicksort(A, p, r) {\n if (p < r) {\n var q = this._partition(A, p, r);\n this._quicksort(A, p, q);\n this._quicksort(A, q + 1, r);\n }\n }\n }, {\n key: '_partition',\n value: function _partition(A, p, r) {\n var x = this._get(A, p);\n var i = p;\n var j = r;\n while (true) {\n while (this.compareFunction(x, this._get(A, j))) {\n j--;\n }while (this.compareFunction(this._get(A, i), x)) {\n i++;\n }if (i < j) {\n this._swap(A, i, j);\n i++;\n j--;\n } else return j;\n }\n }\n }, {\n key: '_get',\n value: function _get(object, index) {\n if (object instanceof LinkedList) return object.get_object_at(index);else return object[index];\n }\n }, {\n key: '_set',\n value: function _set(object, index, value) {\n if (object instanceof LinkedList) object.set_object_at(index, value);else object[index] = value;\n }\n }, {\n key: '_swap',\n value: function _swap(A, i, j) {\n var temp = this._get(A, i);\n this._set(A, i, this._get(A, j));\n this._set(A, j, temp);\n }\n }, {\n key: '_defaultCompareFunction',\n value: function _defaultCompareFunction(a, b) {\n return b > a;\n }\n }]);\n\n return Quicksort;\n}();\n\nmodule.exports = Quicksort;\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Needleman-Wunsch algorithm is an procedure to compute the optimal global alignment of two string\n * sequences by S.B.Needleman and C.D.Wunsch (1970).\n *\n * Aside from the inputs, you can assign the scores for,\n * - Match: The two characters at the current index are same.\n * - Mismatch: The two characters at the current index are different.\n * - Insertion/Deletion(gaps): The best alignment involves one letter aligning to a gap in the other string.\n */\n\nvar NeedlemanWunsch = function () {\n function NeedlemanWunsch(sequence1, sequence2) {\n var match_score = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n var mismatch_penalty = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : -1;\n var gap_penalty = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : -1;\n\n _classCallCheck(this, NeedlemanWunsch);\n\n this.sequence1 = sequence1;\n this.sequence2 = sequence2;\n this.match_score = match_score;\n this.mismatch_penalty = mismatch_penalty;\n this.gap_penalty = gap_penalty;\n\n // Just the remove redundancy\n this.iMax = sequence1.length + 1;\n this.jMax = sequence2.length + 1;\n\n // Grid matrix of scores\n this.grid = new Array(this.iMax);\n for (var i = 0; i < this.iMax; i++) {\n this.grid[i] = new Array(this.jMax);\n\n for (var j = 0; j < this.jMax; j++) {\n this.grid[i][j] = 0;\n }\n }\n\n // Traceback matrix (2D array, each cell is an array of boolean values for [`Diag`, `Up`, `Left`] positions)\n this.tracebackGrid = new Array(this.iMax);\n for (var _i = 0; _i < this.iMax; _i++) {\n this.tracebackGrid[_i] = new Array(this.jMax);\n\n for (var _j = 0; _j < this.jMax; _j++) {\n this.tracebackGrid[_i][_j] = [null, null, null];\n }\n }\n\n // The aligned sequences (return multiple possibilities)\n this.alignments = [];\n\n // Final alignment score\n this.score = -1;\n\n // Calculate scores and tracebacks\n this.computeGrids();\n }\n\n _createClass(NeedlemanWunsch, [{\n key: \"getScore\",\n value: function getScore() {\n return this.score;\n }\n }, {\n key: \"getAlignments\",\n value: function getAlignments() {\n return this.alignments;\n }\n\n // Main dynamic programming procedure\n\n }, {\n key: \"computeGrids\",\n value: function computeGrids() {\n // Fill in the first row\n for (var j = 1; j < this.jMax; j++) {\n this.grid[0][j] = this.grid[0][j - 1] + this.gap_penalty;\n this.tracebackGrid[0][j] = [false, false, true];\n }\n\n // Fill in the first column\n for (var i = 1; i < this.iMax; i++) {\n this.grid[i][0] = this.grid[i - 1][0] + this.gap_penalty;\n this.tracebackGrid[i][0] = [false, true, false];\n }\n\n // Fill the rest of the grid\n for (var _i2 = 1; _i2 < this.iMax; _i2++) {\n for (var _j2 = 1; _j2 < this.jMax; _j2++) {\n // Find the max score(s) among [`Diag`, `Up`, `Left`]\n var diag = void 0;\n if (this.sequence1[_i2 - 1] === this.sequence2[_j2 - 1]) diag = this.grid[_i2 - 1][_j2 - 1] + this.match_score;else diag = this.grid[_i2 - 1][_j2 - 1] + this.mismatch_penalty;\n\n var up = this.grid[_i2 - 1][_j2] + this.gap_penalty;\n var left = this.grid[_i2][_j2 - 1] + this.gap_penalty;\n\n // If there exists multiple max values, capture them for multiple paths\n var maxOf = [diag, up, left];\n var indices = this.arrayAllMaxIndexes(maxOf);\n\n // Update Grids\n this.grid[_i2][_j2] = maxOf[indices[0]];\n this.tracebackGrid[_i2][_j2] = [indices.includes(0), indices.includes(1), indices.includes(2)];\n }\n }\n\n // Update alignment score\n this.score = this.grid[this.iMax - 1][this.jMax - 1];\n }\n\n // Gets all possible valid sequence combinations\n\n }, {\n key: \"alignmentTraceback\",\n value: function alignmentTraceback() {\n var inProcessAlignments = [];\n\n inProcessAlignments.push({ pos: [this.sequence1.length, this.sequence2.length],\n seq1: \"\",\n seq2: \"\"\n });\n\n while (inProcessAlignments[0]) {\n var current = inProcessAlignments[0];\n var directions = this.tracebackGrid[current.pos[0]][current.pos[1]];\n\n if (directions[0]) {\n inProcessAlignments.push({ pos: [current.pos[0] - 1, current.pos[1] - 1],\n seq1: this.sequence1[current.pos[0] - 1] + current.seq1,\n seq2: this.sequence2[current.pos[1] - 1] + current.seq2\n });\n }\n if (directions[1]) {\n inProcessAlignments.push({ pos: [current.pos[0] - 1, current.pos[1]],\n seq1: this.sequence1[current.pos[0] - 1] + current.seq1,\n seq2: '-' + current.seq2\n });\n }\n if (directions[2]) {\n inProcessAlignments.push({ pos: [current.pos[0], current.pos[1] - 1],\n seq1: '-' + current.seq1,\n seq2: this.sequence2[current.pos[1] - 1] + current.seq2\n });\n }\n\n if (current.pos[0] === 0 && current.pos[1] === 0) this.alignments.push({ sequence1: current.seq1,\n sequence2: current.seq2\n });\n\n inProcessAlignments.shift();\n }\n\n return this.alignments;\n }\n\n // Helper Functions\n\n }, {\n key: \"getAllIndexes\",\n value: function getAllIndexes(arr, val) {\n var indexes = [],\n i = -1;\n while ((i = arr.indexOf(val, i + 1)) !== -1) {\n indexes.push(i);\n }\n return indexes;\n }\n }, {\n key: \"arrayAllMaxIndexes\",\n value: function arrayAllMaxIndexes(array) {\n return this.getAllIndexes(array, Math.max.apply(null, array));\n }\n }]);\n\n return NeedlemanWunsch;\n}();\n\nmodule.exports = NeedlemanWunsch;\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar layoutBase = function layoutBase() {\n return;\n};\n\nlayoutBase.FDLayout = __webpack_require__(18);\nlayoutBase.FDLayoutConstants = __webpack_require__(7);\nlayoutBase.FDLayoutEdge = __webpack_require__(19);\nlayoutBase.FDLayoutNode = __webpack_require__(20);\nlayoutBase.DimensionD = __webpack_require__(21);\nlayoutBase.HashMap = __webpack_require__(22);\nlayoutBase.HashSet = __webpack_require__(23);\nlayoutBase.IGeometry = __webpack_require__(8);\nlayoutBase.IMath = __webpack_require__(9);\nlayoutBase.Integer = __webpack_require__(10);\nlayoutBase.Point = __webpack_require__(12);\nlayoutBase.PointD = __webpack_require__(4);\nlayoutBase.RandomSeed = __webpack_require__(16);\nlayoutBase.RectangleD = __webpack_require__(13);\nlayoutBase.Transform = __webpack_require__(17);\nlayoutBase.UniqueIDGeneretor = __webpack_require__(14);\nlayoutBase.Quicksort = __webpack_require__(24);\nlayoutBase.LinkedList = __webpack_require__(11);\nlayoutBase.LGraphObject = __webpack_require__(2);\nlayoutBase.LGraph = __webpack_require__(5);\nlayoutBase.LEdge = __webpack_require__(1);\nlayoutBase.LGraphManager = __webpack_require__(6);\nlayoutBase.LNode = __webpack_require__(3);\nlayoutBase.Layout = __webpack_require__(15);\nlayoutBase.LayoutConstants = __webpack_require__(0);\nlayoutBase.NeedlemanWunsch = __webpack_require__(25);\n\nmodule.exports = layoutBase;\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction Emitter() {\n this.listeners = [];\n}\n\nvar p = Emitter.prototype;\n\np.addListener = function (event, callback) {\n this.listeners.push({\n event: event,\n callback: callback\n });\n};\n\np.removeListener = function (event, callback) {\n for (var i = this.listeners.length; i >= 0; i--) {\n var l = this.listeners[i];\n\n if (l.event === event && l.callback === callback) {\n this.listeners.splice(i, 1);\n }\n }\n};\n\np.emit = function (event, data) {\n for (var i = 0; i < this.listeners.length; i++) {\n var l = this.listeners[i];\n\n if (event === l.event) {\n l.callback(data);\n }\n }\n};\n\nmodule.exports = Emitter;\n\n/***/ })\n/******/ ]);\n});","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"layout-base\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"layout-base\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"coseBase\"] = factory(require(\"layout-base\"));\n\telse\n\t\troot[\"coseBase\"] = factory(root[\"layoutBase\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_0__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 7);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_0__;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar FDLayoutConstants = __webpack_require__(0).FDLayoutConstants;\n\nfunction CoSEConstants() {}\n\n//CoSEConstants inherits static props in FDLayoutConstants\nfor (var prop in FDLayoutConstants) {\n CoSEConstants[prop] = FDLayoutConstants[prop];\n}\n\nCoSEConstants.DEFAULT_USE_MULTI_LEVEL_SCALING = false;\nCoSEConstants.DEFAULT_RADIAL_SEPARATION = FDLayoutConstants.DEFAULT_EDGE_LENGTH;\nCoSEConstants.DEFAULT_COMPONENT_SEPERATION = 60;\nCoSEConstants.TILE = true;\nCoSEConstants.TILING_PADDING_VERTICAL = 10;\nCoSEConstants.TILING_PADDING_HORIZONTAL = 10;\nCoSEConstants.TREE_REDUCTION_ON_INCREMENTAL = false; // make this true when cose is used incrementally as a part of other non-incremental layout\n\nmodule.exports = CoSEConstants;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar FDLayoutEdge = __webpack_require__(0).FDLayoutEdge;\n\nfunction CoSEEdge(source, target, vEdge) {\n FDLayoutEdge.call(this, source, target, vEdge);\n}\n\nCoSEEdge.prototype = Object.create(FDLayoutEdge.prototype);\nfor (var prop in FDLayoutEdge) {\n CoSEEdge[prop] = FDLayoutEdge[prop];\n}\n\nmodule.exports = CoSEEdge;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LGraph = __webpack_require__(0).LGraph;\n\nfunction CoSEGraph(parent, graphMgr, vGraph) {\n LGraph.call(this, parent, graphMgr, vGraph);\n}\n\nCoSEGraph.prototype = Object.create(LGraph.prototype);\nfor (var prop in LGraph) {\n CoSEGraph[prop] = LGraph[prop];\n}\n\nmodule.exports = CoSEGraph;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LGraphManager = __webpack_require__(0).LGraphManager;\n\nfunction CoSEGraphManager(layout) {\n LGraphManager.call(this, layout);\n}\n\nCoSEGraphManager.prototype = Object.create(LGraphManager.prototype);\nfor (var prop in LGraphManager) {\n CoSEGraphManager[prop] = LGraphManager[prop];\n}\n\nmodule.exports = CoSEGraphManager;\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar FDLayoutNode = __webpack_require__(0).FDLayoutNode;\nvar IMath = __webpack_require__(0).IMath;\n\nfunction CoSENode(gm, loc, size, vNode) {\n FDLayoutNode.call(this, gm, loc, size, vNode);\n}\n\nCoSENode.prototype = Object.create(FDLayoutNode.prototype);\nfor (var prop in FDLayoutNode) {\n CoSENode[prop] = FDLayoutNode[prop];\n}\n\nCoSENode.prototype.move = function () {\n var layout = this.graphManager.getLayout();\n this.displacementX = layout.coolingFactor * (this.springForceX + this.repulsionForceX + this.gravitationForceX) / this.noOfChildren;\n this.displacementY = layout.coolingFactor * (this.springForceY + this.repulsionForceY + this.gravitationForceY) / this.noOfChildren;\n\n if (Math.abs(this.displacementX) > layout.coolingFactor * layout.maxNodeDisplacement) {\n this.displacementX = layout.coolingFactor * layout.maxNodeDisplacement * IMath.sign(this.displacementX);\n }\n\n if (Math.abs(this.displacementY) > layout.coolingFactor * layout.maxNodeDisplacement) {\n this.displacementY = layout.coolingFactor * layout.maxNodeDisplacement * IMath.sign(this.displacementY);\n }\n\n // a simple node, just move it\n if (this.child == null) {\n this.moveBy(this.displacementX, this.displacementY);\n }\n // an empty compound node, again just move it\n else if (this.child.getNodes().length == 0) {\n this.moveBy(this.displacementX, this.displacementY);\n }\n // non-empty compound node, propogate movement to children as well\n else {\n this.propogateDisplacementToChildren(this.displacementX, this.displacementY);\n }\n\n layout.totalDisplacement += Math.abs(this.displacementX) + Math.abs(this.displacementY);\n\n this.springForceX = 0;\n this.springForceY = 0;\n this.repulsionForceX = 0;\n this.repulsionForceY = 0;\n this.gravitationForceX = 0;\n this.gravitationForceY = 0;\n this.displacementX = 0;\n this.displacementY = 0;\n};\n\nCoSENode.prototype.propogateDisplacementToChildren = function (dX, dY) {\n var nodes = this.getChild().getNodes();\n var node;\n for (var i = 0; i < nodes.length; i++) {\n node = nodes[i];\n if (node.getChild() == null) {\n node.moveBy(dX, dY);\n node.displacementX += dX;\n node.displacementY += dY;\n } else {\n node.propogateDisplacementToChildren(dX, dY);\n }\n }\n};\n\nCoSENode.prototype.setPred1 = function (pred1) {\n this.pred1 = pred1;\n};\n\nCoSENode.prototype.getPred1 = function () {\n return pred1;\n};\n\nCoSENode.prototype.getPred2 = function () {\n return pred2;\n};\n\nCoSENode.prototype.setNext = function (next) {\n this.next = next;\n};\n\nCoSENode.prototype.getNext = function () {\n return next;\n};\n\nCoSENode.prototype.setProcessed = function (processed) {\n this.processed = processed;\n};\n\nCoSENode.prototype.isProcessed = function () {\n return processed;\n};\n\nmodule.exports = CoSENode;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar FDLayout = __webpack_require__(0).FDLayout;\nvar CoSEGraphManager = __webpack_require__(4);\nvar CoSEGraph = __webpack_require__(3);\nvar CoSENode = __webpack_require__(5);\nvar CoSEEdge = __webpack_require__(2);\nvar CoSEConstants = __webpack_require__(1);\nvar FDLayoutConstants = __webpack_require__(0).FDLayoutConstants;\nvar LayoutConstants = __webpack_require__(0).LayoutConstants;\nvar Point = __webpack_require__(0).Point;\nvar PointD = __webpack_require__(0).PointD;\nvar Layout = __webpack_require__(0).Layout;\nvar Integer = __webpack_require__(0).Integer;\nvar IGeometry = __webpack_require__(0).IGeometry;\nvar LGraph = __webpack_require__(0).LGraph;\nvar Transform = __webpack_require__(0).Transform;\n\nfunction CoSELayout() {\n FDLayout.call(this);\n\n this.toBeTiled = {}; // Memorize if a node is to be tiled or is tiled\n}\n\nCoSELayout.prototype = Object.create(FDLayout.prototype);\n\nfor (var prop in FDLayout) {\n CoSELayout[prop] = FDLayout[prop];\n}\n\nCoSELayout.prototype.newGraphManager = function () {\n var gm = new CoSEGraphManager(this);\n this.graphManager = gm;\n return gm;\n};\n\nCoSELayout.prototype.newGraph = function (vGraph) {\n return new CoSEGraph(null, this.graphManager, vGraph);\n};\n\nCoSELayout.prototype.newNode = function (vNode) {\n return new CoSENode(this.graphManager, vNode);\n};\n\nCoSELayout.prototype.newEdge = function (vEdge) {\n return new CoSEEdge(null, null, vEdge);\n};\n\nCoSELayout.prototype.initParameters = function () {\n FDLayout.prototype.initParameters.call(this, arguments);\n if (!this.isSubLayout) {\n if (CoSEConstants.DEFAULT_EDGE_LENGTH < 10) {\n this.idealEdgeLength = 10;\n } else {\n this.idealEdgeLength = CoSEConstants.DEFAULT_EDGE_LENGTH;\n }\n\n this.useSmartIdealEdgeLengthCalculation = CoSEConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION;\n this.springConstant = FDLayoutConstants.DEFAULT_SPRING_STRENGTH;\n this.repulsionConstant = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH;\n this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH;\n this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH;\n this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR;\n this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR;\n\n // variables for tree reduction support\n this.prunedNodesAll = [];\n this.growTreeIterations = 0;\n this.afterGrowthIterations = 0;\n this.isTreeGrowing = false;\n this.isGrowthFinished = false;\n\n // variables for cooling\n this.coolingCycle = 0;\n this.maxCoolingCycle = this.maxIterations / FDLayoutConstants.CONVERGENCE_CHECK_PERIOD;\n this.finalTemperature = FDLayoutConstants.CONVERGENCE_CHECK_PERIOD / this.maxIterations;\n this.coolingAdjuster = 1;\n }\n};\n\nCoSELayout.prototype.layout = function () {\n var createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED;\n if (createBendsAsNeeded) {\n this.createBendpoints();\n this.graphManager.resetAllEdges();\n }\n\n this.level = 0;\n return this.classicLayout();\n};\n\nCoSELayout.prototype.classicLayout = function () {\n this.nodesWithGravity = this.calculateNodesToApplyGravitationTo();\n this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity);\n this.calcNoOfChildrenForAllNodes();\n this.graphManager.calcLowestCommonAncestors();\n this.graphManager.calcInclusionTreeDepths();\n this.graphManager.getRoot().calcEstimatedSize();\n this.calcIdealEdgeLengths();\n\n if (!this.incremental) {\n var forest = this.getFlatForest();\n\n // The graph associated with this layout is flat and a forest\n if (forest.length > 0) {\n this.positionNodesRadially(forest);\n }\n // The graph associated with this layout is not flat or a forest\n else {\n // Reduce the trees when incremental mode is not enabled and graph is not a forest \n this.reduceTrees();\n // Update nodes that gravity will be applied\n this.graphManager.resetAllNodesToApplyGravitation();\n var allNodes = new Set(this.getAllNodes());\n var intersection = this.nodesWithGravity.filter(function (x) {\n return allNodes.has(x);\n });\n this.graphManager.setAllNodesToApplyGravitation(intersection);\n\n this.positionNodesRandomly();\n }\n } else {\n if (CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL) {\n // Reduce the trees in incremental mode if only this constant is set to true \n this.reduceTrees();\n // Update nodes that gravity will be applied\n this.graphManager.resetAllNodesToApplyGravitation();\n var allNodes = new Set(this.getAllNodes());\n var intersection = this.nodesWithGravity.filter(function (x) {\n return allNodes.has(x);\n });\n this.graphManager.setAllNodesToApplyGravitation(intersection);\n }\n }\n\n this.initSpringEmbedder();\n this.runSpringEmbedder();\n\n return true;\n};\n\nCoSELayout.prototype.tick = function () {\n this.totalIterations++;\n\n if (this.totalIterations === this.maxIterations && !this.isTreeGrowing && !this.isGrowthFinished) {\n if (this.prunedNodesAll.length > 0) {\n this.isTreeGrowing = true;\n } else {\n return true;\n }\n }\n\n if (this.totalIterations % FDLayoutConstants.CONVERGENCE_CHECK_PERIOD == 0 && !this.isTreeGrowing && !this.isGrowthFinished) {\n if (this.isConverged()) {\n if (this.prunedNodesAll.length > 0) {\n this.isTreeGrowing = true;\n } else {\n return true;\n }\n }\n\n this.coolingCycle++;\n\n if (this.layoutQuality == 0) {\n // quality - \"draft\"\n this.coolingAdjuster = this.coolingCycle;\n } else if (this.layoutQuality == 1) {\n // quality - \"default\"\n this.coolingAdjuster = this.coolingCycle / 3;\n }\n\n // cooling schedule is based on http://www.btluke.com/simanf1.html -> cooling schedule 3\n this.coolingFactor = Math.max(this.initialCoolingFactor - Math.pow(this.coolingCycle, Math.log(100 * (this.initialCoolingFactor - this.finalTemperature)) / Math.log(this.maxCoolingCycle)) / 100 * this.coolingAdjuster, this.finalTemperature);\n this.animationPeriod = Math.ceil(this.initialAnimationPeriod * Math.sqrt(this.coolingFactor));\n }\n // Operations while tree is growing again \n if (this.isTreeGrowing) {\n if (this.growTreeIterations % 10 == 0) {\n if (this.prunedNodesAll.length > 0) {\n this.graphManager.updateBounds();\n this.updateGrid();\n this.growTree(this.prunedNodesAll);\n // Update nodes that gravity will be applied\n this.graphManager.resetAllNodesToApplyGravitation();\n var allNodes = new Set(this.getAllNodes());\n var intersection = this.nodesWithGravity.filter(function (x) {\n return allNodes.has(x);\n });\n this.graphManager.setAllNodesToApplyGravitation(intersection);\n\n this.graphManager.updateBounds();\n this.updateGrid();\n this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL;\n } else {\n this.isTreeGrowing = false;\n this.isGrowthFinished = true;\n }\n }\n this.growTreeIterations++;\n }\n // Operations after growth is finished\n if (this.isGrowthFinished) {\n if (this.isConverged()) {\n return true;\n }\n if (this.afterGrowthIterations % 10 == 0) {\n this.graphManager.updateBounds();\n this.updateGrid();\n }\n this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL * ((100 - this.afterGrowthIterations) / 100);\n this.afterGrowthIterations++;\n }\n\n var gridUpdateAllowed = !this.isTreeGrowing && !this.isGrowthFinished;\n var forceToNodeSurroundingUpdate = this.growTreeIterations % 10 == 1 && this.isTreeGrowing || this.afterGrowthIterations % 10 == 1 && this.isGrowthFinished;\n\n this.totalDisplacement = 0;\n this.graphManager.updateBounds();\n this.calcSpringForces();\n this.calcRepulsionForces(gridUpdateAllowed, forceToNodeSurroundingUpdate);\n this.calcGravitationalForces();\n this.moveNodes();\n this.animate();\n\n return false; // Layout is not ended yet return false\n};\n\nCoSELayout.prototype.getPositionsData = function () {\n var allNodes = this.graphManager.getAllNodes();\n var pData = {};\n for (var i = 0; i < allNodes.length; i++) {\n var rect = allNodes[i].rect;\n var id = allNodes[i].id;\n pData[id] = {\n id: id,\n x: rect.getCenterX(),\n y: rect.getCenterY(),\n w: rect.width,\n h: rect.height\n };\n }\n\n return pData;\n};\n\nCoSELayout.prototype.runSpringEmbedder = function () {\n this.initialAnimationPeriod = 25;\n this.animationPeriod = this.initialAnimationPeriod;\n var layoutEnded = false;\n\n // If aminate option is 'during' signal that layout is supposed to start iterating\n if (FDLayoutConstants.ANIMATE === 'during') {\n this.emit('layoutstarted');\n } else {\n // If aminate option is 'during' tick() function will be called on index.js\n while (!layoutEnded) {\n layoutEnded = this.tick();\n }\n\n this.graphManager.updateBounds();\n }\n};\n\nCoSELayout.prototype.calculateNodesToApplyGravitationTo = function () {\n var nodeList = [];\n var graph;\n\n var graphs = this.graphManager.getGraphs();\n var size = graphs.length;\n var i;\n for (i = 0; i < size; i++) {\n graph = graphs[i];\n\n graph.updateConnected();\n\n if (!graph.isConnected) {\n nodeList = nodeList.concat(graph.getNodes());\n }\n }\n\n return nodeList;\n};\n\nCoSELayout.prototype.createBendpoints = function () {\n var edges = [];\n edges = edges.concat(this.graphManager.getAllEdges());\n var visited = new Set();\n var i;\n for (i = 0; i < edges.length; i++) {\n var edge = edges[i];\n\n if (!visited.has(edge)) {\n var source = edge.getSource();\n var target = edge.getTarget();\n\n if (source == target) {\n edge.getBendpoints().push(new PointD());\n edge.getBendpoints().push(new PointD());\n this.createDummyNodesForBendpoints(edge);\n visited.add(edge);\n } else {\n var edgeList = [];\n\n edgeList = edgeList.concat(source.getEdgeListToNode(target));\n edgeList = edgeList.concat(target.getEdgeListToNode(source));\n\n if (!visited.has(edgeList[0])) {\n if (edgeList.length > 1) {\n var k;\n for (k = 0; k < edgeList.length; k++) {\n var multiEdge = edgeList[k];\n multiEdge.getBendpoints().push(new PointD());\n this.createDummyNodesForBendpoints(multiEdge);\n }\n }\n edgeList.forEach(function (edge) {\n visited.add(edge);\n });\n }\n }\n }\n\n if (visited.size == edges.length) {\n break;\n }\n }\n};\n\nCoSELayout.prototype.positionNodesRadially = function (forest) {\n // We tile the trees to a grid row by row; first tree starts at (0,0)\n var currentStartingPoint = new Point(0, 0);\n var numberOfColumns = Math.ceil(Math.sqrt(forest.length));\n var height = 0;\n var currentY = 0;\n var currentX = 0;\n var point = new PointD(0, 0);\n\n for (var i = 0; i < forest.length; i++) {\n if (i % numberOfColumns == 0) {\n // Start of a new row, make the x coordinate 0, increment the\n // y coordinate with the max height of the previous row\n currentX = 0;\n currentY = height;\n\n if (i != 0) {\n currentY += CoSEConstants.DEFAULT_COMPONENT_SEPERATION;\n }\n\n height = 0;\n }\n\n var tree = forest[i];\n\n // Find the center of the tree\n var centerNode = Layout.findCenterOfTree(tree);\n\n // Set the staring point of the next tree\n currentStartingPoint.x = currentX;\n currentStartingPoint.y = currentY;\n\n // Do a radial layout starting with the center\n point = CoSELayout.radialLayout(tree, centerNode, currentStartingPoint);\n\n if (point.y > height) {\n height = Math.floor(point.y);\n }\n\n currentX = Math.floor(point.x + CoSEConstants.DEFAULT_COMPONENT_SEPERATION);\n }\n\n this.transform(new PointD(LayoutConstants.WORLD_CENTER_X - point.x / 2, LayoutConstants.WORLD_CENTER_Y - point.y / 2));\n};\n\nCoSELayout.radialLayout = function (tree, centerNode, startingPoint) {\n var radialSep = Math.max(this.maxDiagonalInTree(tree), CoSEConstants.DEFAULT_RADIAL_SEPARATION);\n CoSELayout.branchRadialLayout(centerNode, null, 0, 359, 0, radialSep);\n var bounds = LGraph.calculateBounds(tree);\n\n var transform = new Transform();\n transform.setDeviceOrgX(bounds.getMinX());\n transform.setDeviceOrgY(bounds.getMinY());\n transform.setWorldOrgX(startingPoint.x);\n transform.setWorldOrgY(startingPoint.y);\n\n for (var i = 0; i < tree.length; i++) {\n var node = tree[i];\n node.transform(transform);\n }\n\n var bottomRight = new PointD(bounds.getMaxX(), bounds.getMaxY());\n\n return transform.inverseTransformPoint(bottomRight);\n};\n\nCoSELayout.branchRadialLayout = function (node, parentOfNode, startAngle, endAngle, distance, radialSeparation) {\n // First, position this node by finding its angle.\n var halfInterval = (endAngle - startAngle + 1) / 2;\n\n if (halfInterval < 0) {\n halfInterval += 180;\n }\n\n var nodeAngle = (halfInterval + startAngle) % 360;\n var teta = nodeAngle * IGeometry.TWO_PI / 360;\n\n // Make polar to java cordinate conversion.\n var cos_teta = Math.cos(teta);\n var x_ = distance * Math.cos(teta);\n var y_ = distance * Math.sin(teta);\n\n node.setCenter(x_, y_);\n\n // Traverse all neighbors of this node and recursively call this\n // function.\n var neighborEdges = [];\n neighborEdges = neighborEdges.concat(node.getEdges());\n var childCount = neighborEdges.length;\n\n if (parentOfNode != null) {\n childCount--;\n }\n\n var branchCount = 0;\n\n var incEdgesCount = neighborEdges.length;\n var startIndex;\n\n var edges = node.getEdgesBetween(parentOfNode);\n\n // If there are multiple edges, prune them until there remains only one\n // edge.\n while (edges.length > 1) {\n //neighborEdges.remove(edges.remove(0));\n var temp = edges[0];\n edges.splice(0, 1);\n var index = neighborEdges.indexOf(temp);\n if (index >= 0) {\n neighborEdges.splice(index, 1);\n }\n incEdgesCount--;\n childCount--;\n }\n\n if (parentOfNode != null) {\n //assert edges.length == 1;\n startIndex = (neighborEdges.indexOf(edges[0]) + 1) % incEdgesCount;\n } else {\n startIndex = 0;\n }\n\n var stepAngle = Math.abs(endAngle - startAngle) / childCount;\n\n for (var i = startIndex; branchCount != childCount; i = ++i % incEdgesCount) {\n var currentNeighbor = neighborEdges[i].getOtherEnd(node);\n\n // Don't back traverse to root node in current tree.\n if (currentNeighbor == parentOfNode) {\n continue;\n }\n\n var childStartAngle = (startAngle + branchCount * stepAngle) % 360;\n var childEndAngle = (childStartAngle + stepAngle) % 360;\n\n CoSELayout.branchRadialLayout(currentNeighbor, node, childStartAngle, childEndAngle, distance + radialSeparation, radialSeparation);\n\n branchCount++;\n }\n};\n\nCoSELayout.maxDiagonalInTree = function (tree) {\n var maxDiagonal = Integer.MIN_VALUE;\n\n for (var i = 0; i < tree.length; i++) {\n var node = tree[i];\n var diagonal = node.getDiagonal();\n\n if (diagonal > maxDiagonal) {\n maxDiagonal = diagonal;\n }\n }\n\n return maxDiagonal;\n};\n\nCoSELayout.prototype.calcRepulsionRange = function () {\n // formula is 2 x (level + 1) x idealEdgeLength\n return 2 * (this.level + 1) * this.idealEdgeLength;\n};\n\n// Tiling methods\n\n// Group zero degree members whose parents are not to be tiled, create dummy parents where needed and fill memberGroups by their dummp parent id's\nCoSELayout.prototype.groupZeroDegreeMembers = function () {\n var self = this;\n // array of [parent_id x oneDegreeNode_id]\n var tempMemberGroups = {}; // A temporary map of parent node and its zero degree members\n this.memberGroups = {}; // A map of dummy parent node and its zero degree members whose parents are not to be tiled\n this.idToDummyNode = {}; // A map of id to dummy node \n\n var zeroDegree = []; // List of zero degree nodes whose parents are not to be tiled\n var allNodes = this.graphManager.getAllNodes();\n\n // Fill zero degree list\n for (var i = 0; i < allNodes.length; i++) {\n var node = allNodes[i];\n var parent = node.getParent();\n // If a node has zero degree and its parent is not to be tiled if exists add that node to zeroDegres list\n if (this.getNodeDegreeWithChildren(node) === 0 && (parent.id == undefined || !this.getToBeTiled(parent))) {\n zeroDegree.push(node);\n }\n }\n\n // Create a map of parent node and its zero degree members\n for (var i = 0; i < zeroDegree.length; i++) {\n var node = zeroDegree[i]; // Zero degree node itself\n var p_id = node.getParent().id; // Parent id\n\n if (typeof tempMemberGroups[p_id] === \"undefined\") tempMemberGroups[p_id] = [];\n\n tempMemberGroups[p_id] = tempMemberGroups[p_id].concat(node); // Push node to the list belongs to its parent in tempMemberGroups\n }\n\n // If there are at least two nodes at a level, create a dummy compound for them\n Object.keys(tempMemberGroups).forEach(function (p_id) {\n if (tempMemberGroups[p_id].length > 1) {\n var dummyCompoundId = \"DummyCompound_\" + p_id; // The id of dummy compound which will be created soon\n self.memberGroups[dummyCompoundId] = tempMemberGroups[p_id]; // Add dummy compound to memberGroups\n\n var parent = tempMemberGroups[p_id][0].getParent(); // The parent of zero degree nodes will be the parent of new dummy compound\n\n // Create a dummy compound with calculated id\n var dummyCompound = new CoSENode(self.graphManager);\n dummyCompound.id = dummyCompoundId;\n dummyCompound.paddingLeft = parent.paddingLeft || 0;\n dummyCompound.paddingRight = parent.paddingRight || 0;\n dummyCompound.paddingBottom = parent.paddingBottom || 0;\n dummyCompound.paddingTop = parent.paddingTop || 0;\n\n self.idToDummyNode[dummyCompoundId] = dummyCompound;\n\n var dummyParentGraph = self.getGraphManager().add(self.newGraph(), dummyCompound);\n var parentGraph = parent.getChild();\n\n // Add dummy compound to parent the graph\n parentGraph.add(dummyCompound);\n\n // For each zero degree node in this level remove it from its parent graph and add it to the graph of dummy parent\n for (var i = 0; i < tempMemberGroups[p_id].length; i++) {\n var node = tempMemberGroups[p_id][i];\n\n parentGraph.remove(node);\n dummyParentGraph.add(node);\n }\n }\n });\n};\n\nCoSELayout.prototype.clearCompounds = function () {\n var childGraphMap = {};\n var idToNode = {};\n\n // Get compound ordering by finding the inner one first\n this.performDFSOnCompounds();\n\n for (var i = 0; i < this.compoundOrder.length; i++) {\n\n idToNode[this.compoundOrder[i].id] = this.compoundOrder[i];\n childGraphMap[this.compoundOrder[i].id] = [].concat(this.compoundOrder[i].getChild().getNodes());\n\n // Remove children of compounds\n this.graphManager.remove(this.compoundOrder[i].getChild());\n this.compoundOrder[i].child = null;\n }\n\n this.graphManager.resetAllNodes();\n\n // Tile the removed children\n this.tileCompoundMembers(childGraphMap, idToNode);\n};\n\nCoSELayout.prototype.clearZeroDegreeMembers = function () {\n var self = this;\n var tiledZeroDegreePack = this.tiledZeroDegreePack = [];\n\n Object.keys(this.memberGroups).forEach(function (id) {\n var compoundNode = self.idToDummyNode[id]; // Get the dummy compound\n\n tiledZeroDegreePack[id] = self.tileNodes(self.memberGroups[id], compoundNode.paddingLeft + compoundNode.paddingRight);\n\n // Set the width and height of the dummy compound as calculated\n compoundNode.rect.width = tiledZeroDegreePack[id].width;\n compoundNode.rect.height = tiledZeroDegreePack[id].height;\n });\n};\n\nCoSELayout.prototype.repopulateCompounds = function () {\n for (var i = this.compoundOrder.length - 1; i >= 0; i--) {\n var lCompoundNode = this.compoundOrder[i];\n var id = lCompoundNode.id;\n var horizontalMargin = lCompoundNode.paddingLeft;\n var verticalMargin = lCompoundNode.paddingTop;\n\n this.adjustLocations(this.tiledMemberPack[id], lCompoundNode.rect.x, lCompoundNode.rect.y, horizontalMargin, verticalMargin);\n }\n};\n\nCoSELayout.prototype.repopulateZeroDegreeMembers = function () {\n var self = this;\n var tiledPack = this.tiledZeroDegreePack;\n\n Object.keys(tiledPack).forEach(function (id) {\n var compoundNode = self.idToDummyNode[id]; // Get the dummy compound by its id\n var horizontalMargin = compoundNode.paddingLeft;\n var verticalMargin = compoundNode.paddingTop;\n\n // Adjust the positions of nodes wrt its compound\n self.adjustLocations(tiledPack[id], compoundNode.rect.x, compoundNode.rect.y, horizontalMargin, verticalMargin);\n });\n};\n\nCoSELayout.prototype.getToBeTiled = function (node) {\n var id = node.id;\n //firstly check the previous results\n if (this.toBeTiled[id] != null) {\n return this.toBeTiled[id];\n }\n\n //only compound nodes are to be tiled\n var childGraph = node.getChild();\n if (childGraph == null) {\n this.toBeTiled[id] = false;\n return false;\n }\n\n var children = childGraph.getNodes(); // Get the children nodes\n\n //a compound node is not to be tiled if all of its compound children are not to be tiled\n for (var i = 0; i < children.length; i++) {\n var theChild = children[i];\n\n if (this.getNodeDegree(theChild) > 0) {\n this.toBeTiled[id] = false;\n return false;\n }\n\n //pass the children not having the compound structure\n if (theChild.getChild() == null) {\n this.toBeTiled[theChild.id] = false;\n continue;\n }\n\n if (!this.getToBeTiled(theChild)) {\n this.toBeTiled[id] = false;\n return false;\n }\n }\n this.toBeTiled[id] = true;\n return true;\n};\n\n// Get degree of a node depending of its edges and independent of its children\nCoSELayout.prototype.getNodeDegree = function (node) {\n var id = node.id;\n var edges = node.getEdges();\n var degree = 0;\n\n // For the edges connected\n for (var i = 0; i < edges.length; i++) {\n var edge = edges[i];\n if (edge.getSource().id !== edge.getTarget().id) {\n degree = degree + 1;\n }\n }\n return degree;\n};\n\n// Get degree of a node with its children\nCoSELayout.prototype.getNodeDegreeWithChildren = function (node) {\n var degree = this.getNodeDegree(node);\n if (node.getChild() == null) {\n return degree;\n }\n var children = node.getChild().getNodes();\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n degree += this.getNodeDegreeWithChildren(child);\n }\n return degree;\n};\n\nCoSELayout.prototype.performDFSOnCompounds = function () {\n this.compoundOrder = [];\n this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes());\n};\n\nCoSELayout.prototype.fillCompexOrderByDFS = function (children) {\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n if (child.getChild() != null) {\n this.fillCompexOrderByDFS(child.getChild().getNodes());\n }\n if (this.getToBeTiled(child)) {\n this.compoundOrder.push(child);\n }\n }\n};\n\n/**\n* This method places each zero degree member wrt given (x,y) coordinates (top left).\n*/\nCoSELayout.prototype.adjustLocations = function (organization, x, y, compoundHorizontalMargin, compoundVerticalMargin) {\n x += compoundHorizontalMargin;\n y += compoundVerticalMargin;\n\n var left = x;\n\n for (var i = 0; i < organization.rows.length; i++) {\n var row = organization.rows[i];\n x = left;\n var maxHeight = 0;\n\n for (var j = 0; j < row.length; j++) {\n var lnode = row[j];\n\n lnode.rect.x = x; // + lnode.rect.width / 2;\n lnode.rect.y = y; // + lnode.rect.height / 2;\n\n x += lnode.rect.width + organization.horizontalPadding;\n\n if (lnode.rect.height > maxHeight) maxHeight = lnode.rect.height;\n }\n\n y += maxHeight + organization.verticalPadding;\n }\n};\n\nCoSELayout.prototype.tileCompoundMembers = function (childGraphMap, idToNode) {\n var self = this;\n this.tiledMemberPack = [];\n\n Object.keys(childGraphMap).forEach(function (id) {\n // Get the compound node\n var compoundNode = idToNode[id];\n\n self.tiledMemberPack[id] = self.tileNodes(childGraphMap[id], compoundNode.paddingLeft + compoundNode.paddingRight);\n\n compoundNode.rect.width = self.tiledMemberPack[id].width;\n compoundNode.rect.height = self.tiledMemberPack[id].height;\n });\n};\n\nCoSELayout.prototype.tileNodes = function (nodes, minWidth) {\n var verticalPadding = CoSEConstants.TILING_PADDING_VERTICAL;\n var horizontalPadding = CoSEConstants.TILING_PADDING_HORIZONTAL;\n var organization = {\n rows: [],\n rowWidth: [],\n rowHeight: [],\n width: 0,\n height: minWidth, // assume minHeight equals to minWidth\n verticalPadding: verticalPadding,\n horizontalPadding: horizontalPadding\n };\n\n // Sort the nodes in ascending order of their areas\n nodes.sort(function (n1, n2) {\n if (n1.rect.width * n1.rect.height > n2.rect.width * n2.rect.height) return -1;\n if (n1.rect.width * n1.rect.height < n2.rect.width * n2.rect.height) return 1;\n return 0;\n });\n\n // Create the organization -> tile members\n for (var i = 0; i < nodes.length; i++) {\n var lNode = nodes[i];\n\n if (organization.rows.length == 0) {\n this.insertNodeToRow(organization, lNode, 0, minWidth);\n } else if (this.canAddHorizontal(organization, lNode.rect.width, lNode.rect.height)) {\n this.insertNodeToRow(organization, lNode, this.getShortestRowIndex(organization), minWidth);\n } else {\n this.insertNodeToRow(organization, lNode, organization.rows.length, minWidth);\n }\n\n this.shiftToLastRow(organization);\n }\n\n return organization;\n};\n\nCoSELayout.prototype.insertNodeToRow = function (organization, node, rowIndex, minWidth) {\n var minCompoundSize = minWidth;\n\n // Add new row if needed\n if (rowIndex == organization.rows.length) {\n var secondDimension = [];\n\n organization.rows.push(secondDimension);\n organization.rowWidth.push(minCompoundSize);\n organization.rowHeight.push(0);\n }\n\n // Update row width\n var w = organization.rowWidth[rowIndex] + node.rect.width;\n\n if (organization.rows[rowIndex].length > 0) {\n w += organization.horizontalPadding;\n }\n\n organization.rowWidth[rowIndex] = w;\n // Update compound width\n if (organization.width < w) {\n organization.width = w;\n }\n\n // Update height\n var h = node.rect.height;\n if (rowIndex > 0) h += organization.verticalPadding;\n\n var extraHeight = 0;\n if (h > organization.rowHeight[rowIndex]) {\n extraHeight = organization.rowHeight[rowIndex];\n organization.rowHeight[rowIndex] = h;\n extraHeight = organization.rowHeight[rowIndex] - extraHeight;\n }\n\n organization.height += extraHeight;\n\n // Insert node\n organization.rows[rowIndex].push(node);\n};\n\n//Scans the rows of an organization and returns the one with the min width\nCoSELayout.prototype.getShortestRowIndex = function (organization) {\n var r = -1;\n var min = Number.MAX_VALUE;\n\n for (var i = 0; i < organization.rows.length; i++) {\n if (organization.rowWidth[i] < min) {\n r = i;\n min = organization.rowWidth[i];\n }\n }\n return r;\n};\n\n//Scans the rows of an organization and returns the one with the max width\nCoSELayout.prototype.getLongestRowIndex = function (organization) {\n var r = -1;\n var max = Number.MIN_VALUE;\n\n for (var i = 0; i < organization.rows.length; i++) {\n\n if (organization.rowWidth[i] > max) {\n r = i;\n max = organization.rowWidth[i];\n }\n }\n\n return r;\n};\n\n/**\n* This method checks whether adding extra width to the organization violates\n* the aspect ratio(1) or not.\n*/\nCoSELayout.prototype.canAddHorizontal = function (organization, extraWidth, extraHeight) {\n\n var sri = this.getShortestRowIndex(organization);\n\n if (sri < 0) {\n return true;\n }\n\n var min = organization.rowWidth[sri];\n\n if (min + organization.horizontalPadding + extraWidth <= organization.width) return true;\n\n var hDiff = 0;\n\n // Adding to an existing row\n if (organization.rowHeight[sri] < extraHeight) {\n if (sri > 0) hDiff = extraHeight + organization.verticalPadding - organization.rowHeight[sri];\n }\n\n var add_to_row_ratio;\n if (organization.width - min >= extraWidth + organization.horizontalPadding) {\n add_to_row_ratio = (organization.height + hDiff) / (min + extraWidth + organization.horizontalPadding);\n } else {\n add_to_row_ratio = (organization.height + hDiff) / organization.width;\n }\n\n // Adding a new row for this node\n hDiff = extraHeight + organization.verticalPadding;\n var add_new_row_ratio;\n if (organization.width < extraWidth) {\n add_new_row_ratio = (organization.height + hDiff) / extraWidth;\n } else {\n add_new_row_ratio = (organization.height + hDiff) / organization.width;\n }\n\n if (add_new_row_ratio < 1) add_new_row_ratio = 1 / add_new_row_ratio;\n\n if (add_to_row_ratio < 1) add_to_row_ratio = 1 / add_to_row_ratio;\n\n return add_to_row_ratio < add_new_row_ratio;\n};\n\n//If moving the last node from the longest row and adding it to the last\n//row makes the bounding box smaller, do it.\nCoSELayout.prototype.shiftToLastRow = function (organization) {\n var longest = this.getLongestRowIndex(organization);\n var last = organization.rowWidth.length - 1;\n var row = organization.rows[longest];\n var node = row[row.length - 1];\n\n var diff = node.width + organization.horizontalPadding;\n\n // Check if there is enough space on the last row\n if (organization.width - organization.rowWidth[last] > diff && longest != last) {\n // Remove the last element of the longest row\n row.splice(-1, 1);\n\n // Push it to the last row\n organization.rows[last].push(node);\n\n organization.rowWidth[longest] = organization.rowWidth[longest] - diff;\n organization.rowWidth[last] = organization.rowWidth[last] + diff;\n organization.width = organization.rowWidth[instance.getLongestRowIndex(organization)];\n\n // Update heights of the organization\n var maxHeight = Number.MIN_VALUE;\n for (var i = 0; i < row.length; i++) {\n if (row[i].height > maxHeight) maxHeight = row[i].height;\n }\n if (longest > 0) maxHeight += organization.verticalPadding;\n\n var prevTotal = organization.rowHeight[longest] + organization.rowHeight[last];\n\n organization.rowHeight[longest] = maxHeight;\n if (organization.rowHeight[last] < node.height + organization.verticalPadding) organization.rowHeight[last] = node.height + organization.verticalPadding;\n\n var finalTotal = organization.rowHeight[longest] + organization.rowHeight[last];\n organization.height += finalTotal - prevTotal;\n\n this.shiftToLastRow(organization);\n }\n};\n\nCoSELayout.prototype.tilingPreLayout = function () {\n if (CoSEConstants.TILE) {\n // Find zero degree nodes and create a compound for each level\n this.groupZeroDegreeMembers();\n // Tile and clear children of each compound\n this.clearCompounds();\n // Separately tile and clear zero degree nodes for each level\n this.clearZeroDegreeMembers();\n }\n};\n\nCoSELayout.prototype.tilingPostLayout = function () {\n if (CoSEConstants.TILE) {\n this.repopulateZeroDegreeMembers();\n this.repopulateCompounds();\n }\n};\n\n// -----------------------------------------------------------------------------\n// Section: Tree Reduction methods\n// -----------------------------------------------------------------------------\n// Reduce trees \nCoSELayout.prototype.reduceTrees = function () {\n var prunedNodesAll = [];\n var containsLeaf = true;\n var node;\n\n while (containsLeaf) {\n var allNodes = this.graphManager.getAllNodes();\n var prunedNodesInStepTemp = [];\n containsLeaf = false;\n\n for (var i = 0; i < allNodes.length; i++) {\n node = allNodes[i];\n if (node.getEdges().length == 1 && !node.getEdges()[0].isInterGraph && node.getChild() == null) {\n prunedNodesInStepTemp.push([node, node.getEdges()[0], node.getOwner()]);\n containsLeaf = true;\n }\n }\n if (containsLeaf == true) {\n var prunedNodesInStep = [];\n for (var j = 0; j < prunedNodesInStepTemp.length; j++) {\n if (prunedNodesInStepTemp[j][0].getEdges().length == 1) {\n prunedNodesInStep.push(prunedNodesInStepTemp[j]);\n prunedNodesInStepTemp[j][0].getOwner().remove(prunedNodesInStepTemp[j][0]);\n }\n }\n prunedNodesAll.push(prunedNodesInStep);\n this.graphManager.resetAllNodes();\n this.graphManager.resetAllEdges();\n }\n }\n this.prunedNodesAll = prunedNodesAll;\n};\n\n// Grow tree one step \nCoSELayout.prototype.growTree = function (prunedNodesAll) {\n var lengthOfPrunedNodesInStep = prunedNodesAll.length;\n var prunedNodesInStep = prunedNodesAll[lengthOfPrunedNodesInStep - 1];\n\n var nodeData;\n for (var i = 0; i < prunedNodesInStep.length; i++) {\n nodeData = prunedNodesInStep[i];\n\n this.findPlaceforPrunedNode(nodeData);\n\n nodeData[2].add(nodeData[0]);\n nodeData[2].add(nodeData[1], nodeData[1].source, nodeData[1].target);\n }\n\n prunedNodesAll.splice(prunedNodesAll.length - 1, 1);\n this.graphManager.resetAllNodes();\n this.graphManager.resetAllEdges();\n};\n\n// Find an appropriate position to replace pruned node, this method can be improved\nCoSELayout.prototype.findPlaceforPrunedNode = function (nodeData) {\n\n var gridForPrunedNode;\n var nodeToConnect;\n var prunedNode = nodeData[0];\n if (prunedNode == nodeData[1].source) {\n nodeToConnect = nodeData[1].target;\n } else {\n nodeToConnect = nodeData[1].source;\n }\n var startGridX = nodeToConnect.startX;\n var finishGridX = nodeToConnect.finishX;\n var startGridY = nodeToConnect.startY;\n var finishGridY = nodeToConnect.finishY;\n\n var upNodeCount = 0;\n var downNodeCount = 0;\n var rightNodeCount = 0;\n var leftNodeCount = 0;\n var controlRegions = [upNodeCount, rightNodeCount, downNodeCount, leftNodeCount];\n\n if (startGridY > 0) {\n for (var i = startGridX; i <= finishGridX; i++) {\n controlRegions[0] += this.grid[i][startGridY - 1].length + this.grid[i][startGridY].length - 1;\n }\n }\n if (finishGridX < this.grid.length - 1) {\n for (var i = startGridY; i <= finishGridY; i++) {\n controlRegions[1] += this.grid[finishGridX + 1][i].length + this.grid[finishGridX][i].length - 1;\n }\n }\n if (finishGridY < this.grid[0].length - 1) {\n for (var i = startGridX; i <= finishGridX; i++) {\n controlRegions[2] += this.grid[i][finishGridY + 1].length + this.grid[i][finishGridY].length - 1;\n }\n }\n if (startGridX > 0) {\n for (var i = startGridY; i <= finishGridY; i++) {\n controlRegions[3] += this.grid[startGridX - 1][i].length + this.grid[startGridX][i].length - 1;\n }\n }\n var min = Integer.MAX_VALUE;\n var minCount;\n var minIndex;\n for (var j = 0; j < controlRegions.length; j++) {\n if (controlRegions[j] < min) {\n min = controlRegions[j];\n minCount = 1;\n minIndex = j;\n } else if (controlRegions[j] == min) {\n minCount++;\n }\n }\n\n if (minCount == 3 && min == 0) {\n if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[2] == 0) {\n gridForPrunedNode = 1;\n } else if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[3] == 0) {\n gridForPrunedNode = 0;\n } else if (controlRegions[0] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) {\n gridForPrunedNode = 3;\n } else if (controlRegions[1] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) {\n gridForPrunedNode = 2;\n }\n } else if (minCount == 2 && min == 0) {\n var random = Math.floor(Math.random() * 2);\n if (controlRegions[0] == 0 && controlRegions[1] == 0) {\n ;\n if (random == 0) {\n gridForPrunedNode = 0;\n } else {\n gridForPrunedNode = 1;\n }\n } else if (controlRegions[0] == 0 && controlRegions[2] == 0) {\n if (random == 0) {\n gridForPrunedNode = 0;\n } else {\n gridForPrunedNode = 2;\n }\n } else if (controlRegions[0] == 0 && controlRegions[3] == 0) {\n if (random == 0) {\n gridForPrunedNode = 0;\n } else {\n gridForPrunedNode = 3;\n }\n } else if (controlRegions[1] == 0 && controlRegions[2] == 0) {\n if (random == 0) {\n gridForPrunedNode = 1;\n } else {\n gridForPrunedNode = 2;\n }\n } else if (controlRegions[1] == 0 && controlRegions[3] == 0) {\n if (random == 0) {\n gridForPrunedNode = 1;\n } else {\n gridForPrunedNode = 3;\n }\n } else {\n if (random == 0) {\n gridForPrunedNode = 2;\n } else {\n gridForPrunedNode = 3;\n }\n }\n } else if (minCount == 4 && min == 0) {\n var random = Math.floor(Math.random() * 4);\n gridForPrunedNode = random;\n } else {\n gridForPrunedNode = minIndex;\n }\n\n if (gridForPrunedNode == 0) {\n prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() - nodeToConnect.getHeight() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getHeight() / 2);\n } else if (gridForPrunedNode == 1) {\n prunedNode.setCenter(nodeToConnect.getCenterX() + nodeToConnect.getWidth() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getWidth() / 2, nodeToConnect.getCenterY());\n } else if (gridForPrunedNode == 2) {\n prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() + nodeToConnect.getHeight() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getHeight() / 2);\n } else {\n prunedNode.setCenter(nodeToConnect.getCenterX() - nodeToConnect.getWidth() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getWidth() / 2, nodeToConnect.getCenterY());\n }\n};\n\nmodule.exports = CoSELayout;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar coseBase = {};\n\ncoseBase.layoutBase = __webpack_require__(0);\ncoseBase.CoSEConstants = __webpack_require__(1);\ncoseBase.CoSEEdge = __webpack_require__(2);\ncoseBase.CoSEGraph = __webpack_require__(3);\ncoseBase.CoSEGraphManager = __webpack_require__(4);\ncoseBase.CoSELayout = __webpack_require__(6);\ncoseBase.CoSENode = __webpack_require__(5);\n\nmodule.exports = coseBase;\n\n/***/ })\n/******/ ]);\n});","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"cose-base\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"cose-base\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"cytoscapeCoseBilkent\"] = factory(require(\"cose-base\"));\n\telse\n\t\troot[\"cytoscapeCoseBilkent\"] = factory(root[\"coseBase\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_0__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 1);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_0__;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LayoutConstants = __webpack_require__(0).layoutBase.LayoutConstants;\nvar FDLayoutConstants = __webpack_require__(0).layoutBase.FDLayoutConstants;\nvar CoSEConstants = __webpack_require__(0).CoSEConstants;\nvar CoSELayout = __webpack_require__(0).CoSELayout;\nvar CoSENode = __webpack_require__(0).CoSENode;\nvar PointD = __webpack_require__(0).layoutBase.PointD;\nvar DimensionD = __webpack_require__(0).layoutBase.DimensionD;\n\nvar defaults = {\n // Called on `layoutready`\n ready: function ready() {},\n // Called on `layoutstop`\n stop: function stop() {},\n // 'draft', 'default' or 'proof\" \n // - 'draft' fast cooling rate \n // - 'default' moderate cooling rate \n // - \"proof\" slow cooling rate\n quality: 'default',\n // include labels in node dimensions\n nodeDimensionsIncludeLabels: false,\n // number of ticks per frame; higher is faster but more jerky\n refresh: 30,\n // Whether to fit the network view after when done\n fit: true,\n // Padding on fit\n padding: 10,\n // Whether to enable incremental mode\n randomize: true,\n // Node repulsion (non overlapping) multiplier\n nodeRepulsion: 4500,\n // Ideal edge (non nested) length\n idealEdgeLength: 50,\n // Divisor to compute edge forces\n edgeElasticity: 0.45,\n // Nesting factor (multiplier) to compute ideal edge length for nested edges\n nestingFactor: 0.1,\n // Gravity force (constant)\n gravity: 0.25,\n // Maximum number of iterations to perform\n numIter: 2500,\n // For enabling tiling\n tile: true,\n // Type of layout animation. The option set is {'during', 'end', false}\n animate: 'end',\n // Duration for animate:end\n animationDuration: 500,\n // Represents the amount of the vertical space to put between the zero degree members during the tiling operation(can also be a function)\n tilingPaddingVertical: 10,\n // Represents the amount of the horizontal space to put between the zero degree members during the tiling operation(can also be a function)\n tilingPaddingHorizontal: 10,\n // Gravity range (constant) for compounds\n gravityRangeCompound: 1.5,\n // Gravity force (constant) for compounds\n gravityCompound: 1.0,\n // Gravity range (constant)\n gravityRange: 3.8,\n // Initial cooling factor for incremental layout\n initialEnergyOnIncremental: 0.5\n};\n\nfunction extend(defaults, options) {\n var obj = {};\n\n for (var i in defaults) {\n obj[i] = defaults[i];\n }\n\n for (var i in options) {\n obj[i] = options[i];\n }\n\n return obj;\n};\n\nfunction _CoSELayout(_options) {\n this.options = extend(defaults, _options);\n getUserOptions(this.options);\n}\n\nvar getUserOptions = function getUserOptions(options) {\n if (options.nodeRepulsion != null) CoSEConstants.DEFAULT_REPULSION_STRENGTH = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH = options.nodeRepulsion;\n if (options.idealEdgeLength != null) CoSEConstants.DEFAULT_EDGE_LENGTH = FDLayoutConstants.DEFAULT_EDGE_LENGTH = options.idealEdgeLength;\n if (options.edgeElasticity != null) CoSEConstants.DEFAULT_SPRING_STRENGTH = FDLayoutConstants.DEFAULT_SPRING_STRENGTH = options.edgeElasticity;\n if (options.nestingFactor != null) CoSEConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = options.nestingFactor;\n if (options.gravity != null) CoSEConstants.DEFAULT_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = options.gravity;\n if (options.numIter != null) CoSEConstants.MAX_ITERATIONS = FDLayoutConstants.MAX_ITERATIONS = options.numIter;\n if (options.gravityRange != null) CoSEConstants.DEFAULT_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = options.gravityRange;\n if (options.gravityCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = options.gravityCompound;\n if (options.gravityRangeCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = options.gravityRangeCompound;\n if (options.initialEnergyOnIncremental != null) CoSEConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = options.initialEnergyOnIncremental;\n\n if (options.quality == 'draft') LayoutConstants.QUALITY = 0;else if (options.quality == 'proof') LayoutConstants.QUALITY = 2;else LayoutConstants.QUALITY = 1;\n\n CoSEConstants.NODE_DIMENSIONS_INCLUDE_LABELS = FDLayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = options.nodeDimensionsIncludeLabels;\n CoSEConstants.DEFAULT_INCREMENTAL = FDLayoutConstants.DEFAULT_INCREMENTAL = LayoutConstants.DEFAULT_INCREMENTAL = !options.randomize;\n CoSEConstants.ANIMATE = FDLayoutConstants.ANIMATE = LayoutConstants.ANIMATE = options.animate;\n CoSEConstants.TILE = options.tile;\n CoSEConstants.TILING_PADDING_VERTICAL = typeof options.tilingPaddingVertical === 'function' ? options.tilingPaddingVertical.call() : options.tilingPaddingVertical;\n CoSEConstants.TILING_PADDING_HORIZONTAL = typeof options.tilingPaddingHorizontal === 'function' ? options.tilingPaddingHorizontal.call() : options.tilingPaddingHorizontal;\n};\n\n_CoSELayout.prototype.run = function () {\n var ready;\n var frameId;\n var options = this.options;\n var idToLNode = this.idToLNode = {};\n var layout = this.layout = new CoSELayout();\n var self = this;\n\n self.stopped = false;\n\n this.cy = this.options.cy;\n\n this.cy.trigger({ type: 'layoutstart', layout: this });\n\n var gm = layout.newGraphManager();\n this.gm = gm;\n\n var nodes = this.options.eles.nodes();\n var edges = this.options.eles.edges();\n\n this.root = gm.addRoot();\n this.processChildrenList(this.root, this.getTopMostNodes(nodes), layout);\n\n for (var i = 0; i < edges.length; i++) {\n var edge = edges[i];\n var sourceNode = this.idToLNode[edge.data(\"source\")];\n var targetNode = this.idToLNode[edge.data(\"target\")];\n if (sourceNode !== targetNode && sourceNode.getEdgesBetween(targetNode).length == 0) {\n var e1 = gm.add(layout.newEdge(), sourceNode, targetNode);\n e1.id = edge.id();\n }\n }\n\n var getPositions = function getPositions(ele, i) {\n if (typeof ele === \"number\") {\n ele = i;\n }\n var theId = ele.data('id');\n var lNode = self.idToLNode[theId];\n\n return {\n x: lNode.getRect().getCenterX(),\n y: lNode.getRect().getCenterY()\n };\n };\n\n /*\n * Reposition nodes in iterations animatedly\n */\n var iterateAnimated = function iterateAnimated() {\n // Thigs to perform after nodes are repositioned on screen\n var afterReposition = function afterReposition() {\n if (options.fit) {\n options.cy.fit(options.eles, options.padding);\n }\n\n if (!ready) {\n ready = true;\n self.cy.one('layoutready', options.ready);\n self.cy.trigger({ type: 'layoutready', layout: self });\n }\n };\n\n var ticksPerFrame = self.options.refresh;\n var isDone;\n\n for (var i = 0; i < ticksPerFrame && !isDone; i++) {\n isDone = self.stopped || self.layout.tick();\n }\n\n // If layout is done\n if (isDone) {\n // If the layout is not a sublayout and it is successful perform post layout.\n if (layout.checkLayoutSuccess() && !layout.isSubLayout) {\n layout.doPostLayout();\n }\n\n // If layout has a tilingPostLayout function property call it.\n if (layout.tilingPostLayout) {\n layout.tilingPostLayout();\n }\n\n layout.isLayoutFinished = true;\n\n self.options.eles.nodes().positions(getPositions);\n\n afterReposition();\n\n // trigger layoutstop when the layout stops (e.g. finishes)\n self.cy.one('layoutstop', self.options.stop);\n self.cy.trigger({ type: 'layoutstop', layout: self });\n\n if (frameId) {\n cancelAnimationFrame(frameId);\n }\n\n ready = false;\n return;\n }\n\n var animationData = self.layout.getPositionsData(); // Get positions of layout nodes note that all nodes may not be layout nodes because of tiling\n\n // Position nodes, for the nodes whose id does not included in data (because they are removed from their parents and included in dummy compounds)\n // use position of their ancestors or dummy ancestors\n options.eles.nodes().positions(function (ele, i) {\n if (typeof ele === \"number\") {\n ele = i;\n }\n // If ele is a compound node, then its position will be defined by its children\n if (!ele.isParent()) {\n var theId = ele.id();\n var pNode = animationData[theId];\n var temp = ele;\n // If pNode is undefined search until finding position data of its first ancestor (It may be dummy as well)\n while (pNode == null) {\n pNode = animationData[temp.data('parent')] || animationData['DummyCompound_' + temp.data('parent')];\n animationData[theId] = pNode;\n temp = temp.parent()[0];\n if (temp == undefined) {\n break;\n }\n }\n if (pNode != null) {\n return {\n x: pNode.x,\n y: pNode.y\n };\n } else {\n return {\n x: ele.position('x'),\n y: ele.position('y')\n };\n }\n }\n });\n\n afterReposition();\n\n frameId = requestAnimationFrame(iterateAnimated);\n };\n\n /*\n * Listen 'layoutstarted' event and start animated iteration if animate option is 'during'\n */\n layout.addListener('layoutstarted', function () {\n if (self.options.animate === 'during') {\n frameId = requestAnimationFrame(iterateAnimated);\n }\n });\n\n layout.runLayout(); // Run cose layout\n\n /*\n * If animate option is not 'during' ('end' or false) perform these here (If it is 'during' similar things are already performed)\n */\n if (this.options.animate !== \"during\") {\n self.options.eles.nodes().not(\":parent\").layoutPositions(self, self.options, getPositions); // Use layout positions to reposition the nodes it considers the options parameter\n ready = false;\n }\n\n return this; // chaining\n};\n\n//Get the top most ones of a list of nodes\n_CoSELayout.prototype.getTopMostNodes = function (nodes) {\n var nodesMap = {};\n for (var i = 0; i < nodes.length; i++) {\n nodesMap[nodes[i].id()] = true;\n }\n var roots = nodes.filter(function (ele, i) {\n if (typeof ele === \"number\") {\n ele = i;\n }\n var parent = ele.parent()[0];\n while (parent != null) {\n if (nodesMap[parent.id()]) {\n return false;\n }\n parent = parent.parent()[0];\n }\n return true;\n });\n\n return roots;\n};\n\n_CoSELayout.prototype.processChildrenList = function (parent, children, layout) {\n var size = children.length;\n for (var i = 0; i < size; i++) {\n var theChild = children[i];\n var children_of_children = theChild.children();\n var theNode;\n\n var dimensions = theChild.layoutDimensions({\n nodeDimensionsIncludeLabels: this.options.nodeDimensionsIncludeLabels\n });\n\n if (theChild.outerWidth() != null && theChild.outerHeight() != null) {\n theNode = parent.add(new CoSENode(layout.graphManager, new PointD(theChild.position('x') - dimensions.w / 2, theChild.position('y') - dimensions.h / 2), new DimensionD(parseFloat(dimensions.w), parseFloat(dimensions.h))));\n } else {\n theNode = parent.add(new CoSENode(this.graphManager));\n }\n // Attach id to the layout node\n theNode.id = theChild.data(\"id\");\n // Attach the paddings of cy node to layout node\n theNode.paddingLeft = parseInt(theChild.css('padding'));\n theNode.paddingTop = parseInt(theChild.css('padding'));\n theNode.paddingRight = parseInt(theChild.css('padding'));\n theNode.paddingBottom = parseInt(theChild.css('padding'));\n\n //Attach the label properties to compound if labels will be included in node dimensions \n if (this.options.nodeDimensionsIncludeLabels) {\n if (theChild.isParent()) {\n var labelWidth = theChild.boundingBox({ includeLabels: true, includeNodes: false }).w;\n var labelHeight = theChild.boundingBox({ includeLabels: true, includeNodes: false }).h;\n var labelPos = theChild.css(\"text-halign\");\n theNode.labelWidth = labelWidth;\n theNode.labelHeight = labelHeight;\n theNode.labelPos = labelPos;\n }\n }\n\n // Map the layout node\n this.idToLNode[theChild.data(\"id\")] = theNode;\n\n if (isNaN(theNode.rect.x)) {\n theNode.rect.x = 0;\n }\n\n if (isNaN(theNode.rect.y)) {\n theNode.rect.y = 0;\n }\n\n if (children_of_children != null && children_of_children.length > 0) {\n var theNewGraph;\n theNewGraph = layout.getGraphManager().add(layout.newGraph(), theNode);\n this.processChildrenList(theNewGraph, children_of_children, layout);\n }\n }\n};\n\n/**\n * @brief : called on continuous layouts to stop them before they finish\n */\n_CoSELayout.prototype.stop = function () {\n this.stopped = true;\n\n return this; // chaining\n};\n\nvar register = function register(cytoscape) {\n // var Layout = getLayout( cytoscape );\n\n cytoscape('layout', 'cose-bilkent', _CoSELayout);\n};\n\n// auto reg for globals\nif (typeof cytoscape !== 'undefined') {\n register(cytoscape);\n}\n\nmodule.exports = register;\n\n/***/ })\n/******/ ]);\n});","import {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/rendering-util/layout-algorithms/cose-bilkent/cytoscape-setup.ts\nimport cytoscape from \"cytoscape\";\nimport coseBilkent from \"cytoscape-cose-bilkent\";\nimport { select } from \"d3\";\ncytoscape.use(coseBilkent);\nfunction addNodes(nodes, cy) {\n nodes.forEach((node) => {\n const nodeData = {\n id: node.id,\n labelText: node.label,\n height: node.height,\n width: node.width,\n padding: node.padding ?? 0\n };\n Object.keys(node).forEach((key) => {\n if (![\"id\", \"label\", \"height\", \"width\", \"padding\", \"x\", \"y\"].includes(key)) {\n nodeData[key] = node[key];\n }\n });\n cy.add({\n group: \"nodes\",\n data: nodeData,\n position: {\n x: node.x ?? 0,\n y: node.y ?? 0\n }\n });\n });\n}\n__name(addNodes, \"addNodes\");\nfunction addEdges(edges, cy) {\n edges.forEach((edge) => {\n const edgeData = {\n id: edge.id,\n source: edge.start,\n target: edge.end\n };\n Object.keys(edge).forEach((key) => {\n if (![\"id\", \"start\", \"end\"].includes(key)) {\n edgeData[key] = edge[key];\n }\n });\n cy.add({\n group: \"edges\",\n data: edgeData\n });\n });\n}\n__name(addEdges, \"addEdges\");\nfunction createCytoscapeInstance(data) {\n return new Promise((resolve) => {\n const renderEl = select(\"body\").append(\"div\").attr(\"id\", \"cy\").attr(\"style\", \"display:none\");\n const cy = cytoscape({\n container: document.getElementById(\"cy\"),\n // container to render in\n style: [\n {\n selector: \"edge\",\n style: {\n \"curve-style\": \"bezier\"\n }\n }\n ]\n });\n renderEl.remove();\n addNodes(data.nodes, cy);\n addEdges(data.edges, cy);\n cy.nodes().forEach(function(n) {\n n.layoutDimensions = () => {\n const nodeData = n.data();\n return { w: nodeData.width, h: nodeData.height };\n };\n });\n const layoutConfig = {\n name: \"cose-bilkent\",\n // @ts-ignore Types for cose-bilkent are not correct?\n quality: \"proof\",\n styleEnabled: false,\n animate: false\n };\n cy.layout(layoutConfig).run();\n cy.ready((e) => {\n log.info(\"Cytoscape ready\", e);\n resolve(cy);\n });\n });\n}\n__name(createCytoscapeInstance, \"createCytoscapeInstance\");\nfunction extractPositionedNodes(cy) {\n return cy.nodes().map((node) => {\n const data = node.data();\n const position = node.position();\n const positionedNode = {\n id: data.id,\n x: position.x,\n y: position.y\n };\n Object.keys(data).forEach((key) => {\n if (key !== \"id\") {\n positionedNode[key] = data[key];\n }\n });\n return positionedNode;\n });\n}\n__name(extractPositionedNodes, \"extractPositionedNodes\");\nfunction extractPositionedEdges(cy) {\n return cy.edges().map((edge) => {\n const data = edge.data();\n const rscratch = edge._private.rscratch;\n const positionedEdge = {\n id: data.id,\n source: data.source,\n target: data.target,\n startX: rscratch.startX,\n startY: rscratch.startY,\n midX: rscratch.midX,\n midY: rscratch.midY,\n endX: rscratch.endX,\n endY: rscratch.endY\n };\n Object.keys(data).forEach((key) => {\n if (![\"id\", \"source\", \"target\"].includes(key)) {\n positionedEdge[key] = data[key];\n }\n });\n return positionedEdge;\n });\n}\n__name(extractPositionedEdges, \"extractPositionedEdges\");\n\n// src/rendering-util/layout-algorithms/cose-bilkent/layout.ts\nasync function executeCoseBilkentLayout(data, _config) {\n log.debug(\"Starting cose-bilkent layout algorithm\");\n try {\n validateLayoutData(data);\n const cy = await createCytoscapeInstance(data);\n const positionedNodes = extractPositionedNodes(cy);\n const positionedEdges = extractPositionedEdges(cy);\n log.debug(`Layout completed: ${positionedNodes.length} nodes, ${positionedEdges.length} edges`);\n return {\n nodes: positionedNodes,\n edges: positionedEdges\n };\n } catch (error) {\n log.error(\"Error in cose-bilkent layout algorithm:\", error);\n throw error;\n }\n}\n__name(executeCoseBilkentLayout, \"executeCoseBilkentLayout\");\nfunction validateLayoutData(data) {\n if (!data) {\n throw new Error(\"Layout data is required\");\n }\n if (!data.config) {\n throw new Error(\"Configuration is required in layout data\");\n }\n if (!data.rootNode) {\n throw new Error(\"Root node is required\");\n }\n if (!data.nodes || !Array.isArray(data.nodes)) {\n throw new Error(\"No nodes found in layout data\");\n }\n if (!Array.isArray(data.edges)) {\n throw new Error(\"Edges array is required in layout data\");\n }\n return true;\n}\n__name(validateLayoutData, \"validateLayoutData\");\n\n// src/rendering-util/layout-algorithms/cose-bilkent/render.ts\nvar render = /* @__PURE__ */ __name(async (data4Layout, svg, {\n insertCluster,\n insertEdge,\n insertEdgeLabel,\n insertMarkers,\n insertNode,\n log: log2,\n positionEdgeLabel\n}, { algorithm: _algorithm }) => {\n const nodeDb = {};\n const clusterDb = {};\n const element = svg.select(\"g\");\n insertMarkers(element, data4Layout.markers, data4Layout.type, data4Layout.diagramId);\n const subGraphsEl = element.insert(\"g\").attr(\"class\", \"subgraphs\");\n const edgePaths = element.insert(\"g\").attr(\"class\", \"edgePaths\");\n const edgeLabels = element.insert(\"g\").attr(\"class\", \"edgeLabels\");\n const nodes = element.insert(\"g\").attr(\"class\", \"nodes\");\n log2.debug(\"Inserting nodes into DOM for dimension calculation\");\n await Promise.all(\n data4Layout.nodes.map(async (node) => {\n if (node.isGroup) {\n const clusterNode = { ...node };\n clusterDb[node.id] = clusterNode;\n nodeDb[node.id] = clusterNode;\n await insertCluster(subGraphsEl, node);\n } else {\n const nodeWithPosition = { ...node };\n nodeDb[node.id] = nodeWithPosition;\n const nodeEl = await insertNode(nodes, node, {\n config: data4Layout.config,\n dir: data4Layout.direction || \"TB\"\n });\n const boundingBox = nodeEl.node().getBBox();\n nodeWithPosition.width = boundingBox.width;\n nodeWithPosition.height = boundingBox.height;\n nodeWithPosition.domId = nodeEl;\n log2.debug(`Node ${node.id} dimensions: ${boundingBox.width}x${boundingBox.height}`);\n }\n })\n );\n log2.debug(\"Running cose-bilkent layout algorithm\");\n const updatedLayoutData = {\n ...data4Layout,\n nodes: data4Layout.nodes.map((node) => {\n const nodeWithDimensions = nodeDb[node.id];\n return {\n ...node,\n width: nodeWithDimensions.width,\n height: nodeWithDimensions.height\n };\n })\n };\n const layoutResult = await executeCoseBilkentLayout(updatedLayoutData, data4Layout.config);\n log2.debug(\"Positioning nodes based on layout results\");\n layoutResult.nodes.forEach((positionedNode) => {\n const node = nodeDb[positionedNode.id];\n if (node?.domId) {\n node.domId.attr(\n \"transform\",\n `translate(${positionedNode.x}, ${positionedNode.y})`\n );\n node.x = positionedNode.x;\n node.y = positionedNode.y;\n log2.debug(`Positioned node ${node.id} at center (${positionedNode.x}, ${positionedNode.y})`);\n }\n });\n layoutResult.edges.forEach((positionedEdge) => {\n const edge = data4Layout.edges.find((e) => e.id === positionedEdge.id);\n if (edge) {\n edge.points = [\n { x: positionedEdge.startX, y: positionedEdge.startY },\n { x: positionedEdge.midX, y: positionedEdge.midY },\n { x: positionedEdge.endX, y: positionedEdge.endY }\n ];\n }\n });\n log2.debug(\"Inserting and positioning edges\");\n await Promise.all(\n data4Layout.edges.map(async (edge) => {\n const _edgeLabel = await insertEdgeLabel(edgeLabels, edge);\n const startNode = nodeDb[edge.start ?? \"\"];\n const endNode = nodeDb[edge.end ?? \"\"];\n if (startNode && endNode) {\n const positionedEdge = layoutResult.edges.find((e) => e.id === edge.id);\n if (positionedEdge) {\n log2.debug(\"APA01 positionedEdge\", positionedEdge);\n const edgeWithPath = { ...edge };\n const paths = insertEdge(\n edgePaths,\n edgeWithPath,\n clusterDb,\n data4Layout.type,\n startNode,\n endNode,\n data4Layout.diagramId\n );\n positionEdgeLabel(edgeWithPath, paths);\n } else {\n const edgeWithPath = {\n ...edge,\n points: [\n { x: startNode.x || 0, y: startNode.y || 0 },\n { x: endNode.x || 0, y: endNode.y || 0 }\n ]\n };\n const paths = insertEdge(\n edgePaths,\n edgeWithPath,\n clusterDb,\n data4Layout.type,\n startNode,\n endNode,\n data4Layout.diagramId\n );\n positionEdgeLabel(edgeWithPath, paths);\n }\n }\n })\n );\n log2.debug(\"Cose-bilkent rendering completed\");\n}, \"render\");\n\n// src/rendering-util/layout-algorithms/cose-bilkent/index.ts\nvar render2 = render;\nexport {\n render2 as render\n};\n"],"names":["__name","root","factory","module","this","modules","installedModules","__webpack_require__","moduleId","value","exports","name","getter","object","property","LayoutConstants","LGraphObject","IGeometry","IMath","LEdge","source","target","vEdge","prop","node","graph","otherEnd","clipPointCoordinates","vGraphObject","Integer","RectangleD","RandomSeed","PointD","LNode","gm","loc","size","vNode","width","height","upperLeft","dimension","cx","cy","x","y","dx","dy","to","edgeList","self","edge","other","neighbors","withNeighborsList","childNode","children","nodes","i","noOfChildren","randomCenterX","randomCenterY","minX","maxX","minY","maxY","childGraph","trans","left","top","leftTop","vLeftTop","pt","dim","LGraphManager","Point","LinkedList","LGraph","parent","obj2","vGraph","obj1","sourceNode","targetNode","newNode","newEdge","obj","edgesToBeRemoved","s","index","sourceIndex","targetIndex","nodeTop","nodeLeft","margin","lNode","recursive","right","bottom","nodeRight","nodeBottom","boundingRect","queue","visited","currentNode","neighborEdges","currentNeighbor","childrenOfNode","neighborEdge","childrenOfNeighbor","noOfVisitedInThisGraph","visitedNode","layout","ngraph","nnode","newGraph","parentNode","sourceGraph","targetGraph","lObj","nodesToBeRemoved","nodeList","graphs","firstNode","secondNode","ownerGraph","sourceAncestorGraph","targetAncestorGraph","edges","firstOwnerGraph","secondOwnerGraph","depth","FDLayoutConstants","rectA","rectB","overlapAmount","separationBuffer","directions","slope","moveByY","moveByX","result","p1x","p1y","p2x","p2y","topLeftAx","topLeftAy","topRightAx","bottomLeftAx","bottomLeftAy","bottomRightAx","halfWidthA","halfHeightA","topLeftBx","topLeftBy","topRightBx","bottomLeftBx","bottomLeftBy","bottomRightBx","halfWidthB","halfHeightB","clipPointAFound","clipPointBFound","slopeA","slopeB","slopePrime","cardinalDirectionA","cardinalDirectionB","tempPointAx","tempPointAy","tempPointBx","tempPointBy","line","s1","s2","f1","f2","x1","y1","x2","y2","x3","y3","x4","y4","a1","a2","b1","b2","c1","c2","denom","Cx","Cy","Nx","Ny","C_angle","p1","p2","p3","p4","a","b","c","d","p","q","r","det","lambda","gamma","_createClass","defineProperties","props","descriptor","Constructor","protoProps","staticProps","_classCallCheck","instance","nodeFrom","add","prev","next","list","_remove","vals","_this","v","val","otherNode","current","_typeof","UniqueIDGeneretor","id","arg","type","_toConsumableArray","arr","arr2","Transform","Emitter","Layout","isRemoteUse","isLayoutSuccessfull","allEdges","newLeftTop","flatForest","isForest","allNodes","isFlat","toBeVisited","parents","unProcessedNodes","temp","dummyNodes","dummyNode","dummyEdge","k","lEdge","path","ebp","sliderValue","defaultValue","minDiv","maxMul","minValue","maxValue","removedNodes","remainingDegrees","foundCenter","centerNode","degree","tempList","tempList2","neighbours","neighbour","otherDegree","newDegree","wox","woy","wex","wey","dox","doy","dex","dey","xDevice","worldExtX","yDevice","worldExtY","xWorld","deviceExtX","yWorld","deviceExtY","inPoint","outPoint","FDLayout","lcaDepth","sizeOfSourceInLca","sizeOfTargetInLca","lEdges","gridUpdateAllowed","forceToNodeSurroundingUpdate","j","nodeA","nodeB","lNodes","processedNodeSet","idealLength","length","springForce","springForceX","springForceY","clipPoints","distanceX","distanceY","distanceSquared","distance","repulsionForce","repulsionForceX","repulsionForceY","childrenConstant","ownerCenterX","ownerCenterY","absDistanceX","absDistanceY","estimatedSize","converged","oscilating","sizeX","sizeY","grid","startX","finishX","startY","finishY","surrounding","FDLayoutEdge","FDLayoutNode","_startX","_finishX","_startY","_finishY","DimensionD","HashMap","key","theId","HashSet","keys","Quicksort","A","compareFunction","NeedlemanWunsch","sequence1","sequence2","match_score","mismatch_penalty","gap_penalty","_i","_j","_i2","_j2","diag","up","maxOf","indices","inProcessAlignments","indexes","array","layoutBase","event","callback","l","data","require$$0","__WEBPACK_EXTERNAL_MODULE_0__","CoSEConstants","CoSEEdge","CoSEGraph","graphMgr","CoSEGraphManager","CoSENode","dX","dY","pred1","processed","CoSELayout","createBendsAsNeeded","intersection","forest","pData","rect","layoutEnded","multiEdge","currentStartingPoint","numberOfColumns","currentY","currentX","point","tree","startingPoint","radialSep","bounds","transform","bottomRight","parentOfNode","startAngle","endAngle","radialSeparation","halfInterval","nodeAngle","teta","x_","y_","childCount","branchCount","incEdgesCount","startIndex","stepAngle","childStartAngle","childEndAngle","maxDiagonal","diagonal","tempMemberGroups","zeroDegree","p_id","dummyCompoundId","dummyCompound","dummyParentGraph","parentGraph","childGraphMap","idToNode","tiledZeroDegreePack","compoundNode","lCompoundNode","horizontalMargin","verticalMargin","tiledPack","theChild","child","organization","compoundHorizontalMargin","compoundVerticalMargin","row","maxHeight","lnode","minWidth","verticalPadding","horizontalPadding","n1","n2","rowIndex","minCompoundSize","secondDimension","w","h","extraHeight","min","max","extraWidth","sri","hDiff","add_to_row_ratio","add_new_row_ratio","longest","last","diff","prevTotal","finalTotal","prunedNodesAll","containsLeaf","prunedNodesInStepTemp","prunedNodesInStep","lengthOfPrunedNodesInStep","nodeData","gridForPrunedNode","nodeToConnect","prunedNode","startGridX","finishGridX","startGridY","finishGridY","upNodeCount","downNodeCount","rightNodeCount","leftNodeCount","controlRegions","minCount","minIndex","random","coseBase","defaults","extend","options","_CoSELayout","_options","getUserOptions","ready","frameId","e1","getPositions","ele","iterateAnimated","afterReposition","ticksPerFrame","isDone","animationData","pNode","nodesMap","roots","children_of_children","theNode","dimensions","labelWidth","labelHeight","labelPos","theNewGraph","register","cytoscape","coseBilkent","addNodes","addEdges","edgeData","createCytoscapeInstance","resolve","renderEl","select","n","layoutConfig","e","log","extractPositionedNodes","position","positionedNode","extractPositionedEdges","rscratch","positionedEdge","executeCoseBilkentLayout","_config","validateLayoutData","positionedNodes","positionedEdges","error","render","data4Layout","svg","insertCluster","insertEdge","insertEdgeLabel","insertMarkers","insertNode","log2","positionEdgeLabel","_algorithm","nodeDb","clusterDb","element","subGraphsEl","edgePaths","edgeLabels","clusterNode","nodeWithPosition","nodeEl","boundingBox","updatedLayoutData","nodeWithDimensions","layoutResult","startNode","endNode","edgeWithPath","paths","render2"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}