@antv/layout 0.3.11 → 1.0.0-alpha.0

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 (555) hide show
  1. package/README.md +45 -32
  2. package/dist/3a54d760230d1933f953.worker.js +2 -0
  3. package/dist/3a54d760230d1933f953.worker.js.map +1 -0
  4. package/dist/index.min.js +2 -0
  5. package/dist/index.min.js.map +1 -0
  6. package/lib/Circular.d.ts +40 -0
  7. package/lib/Supervisor.d.ts +65 -0
  8. package/lib/index.d.ts +3 -3
  9. package/lib/registry.d.ts +3 -0
  10. package/lib/types.d.ts +128 -0
  11. package/lib/util/gpu.d.ts +22 -22
  12. package/lib/util/index.d.ts +6 -6
  13. package/lib/util/math.d.ts +9 -4
  14. package/lib/worker.d.ts +3 -0
  15. package/package.json +21 -95
  16. package/dist/layout.min.js +0 -3
  17. package/dist/layout.min.js.LICENSE.txt +0 -1
  18. package/dist/layout.min.js.map +0 -1
  19. package/es/index.d.ts +0 -3
  20. package/es/index.js +0 -6
  21. package/es/index.js.map +0 -1
  22. package/es/layout/base.d.ts +0 -22
  23. package/es/layout/base.js +0 -51
  24. package/es/layout/base.js.map +0 -1
  25. package/es/layout/circular.d.ts +0 -80
  26. package/es/layout/circular.js +0 -314
  27. package/es/layout/circular.js.map +0 -1
  28. package/es/layout/comboCombined.d.ts +0 -54
  29. package/es/layout/comboCombined.js +0 -348
  30. package/es/layout/comboCombined.js.map +0 -1
  31. package/es/layout/comboForce.d.ts +0 -134
  32. package/es/layout/comboForce.js +0 -801
  33. package/es/layout/comboForce.js.map +0 -1
  34. package/es/layout/concentric.d.ts +0 -67
  35. package/es/layout/concentric.js +0 -219
  36. package/es/layout/concentric.js.map +0 -1
  37. package/es/layout/constants.d.ts +0 -12
  38. package/es/layout/constants.js +0 -22
  39. package/es/layout/constants.js.map +0 -1
  40. package/es/layout/dagre/graph.d.ts +0 -91
  41. package/es/layout/dagre/graph.js +0 -4
  42. package/es/layout/dagre/graph.js.map +0 -1
  43. package/es/layout/dagre/index.d.ts +0 -8
  44. package/es/layout/dagre/index.js +0 -31
  45. package/es/layout/dagre/index.js.map +0 -1
  46. package/es/layout/dagre/src/acyclic.d.ts +0 -6
  47. package/es/layout/dagre/src/acyclic.js +0 -52
  48. package/es/layout/dagre/src/acyclic.js.map +0 -1
  49. package/es/layout/dagre/src/add-border-segments.d.ts +0 -3
  50. package/es/layout/dagre/src/add-border-segments.js +0 -32
  51. package/es/layout/dagre/src/add-border-segments.js.map +0 -1
  52. package/es/layout/dagre/src/coordinate-system.d.ts +0 -6
  53. package/es/layout/dagre/src/coordinate-system.js +0 -69
  54. package/es/layout/dagre/src/coordinate-system.js.map +0 -1
  55. package/es/layout/dagre/src/data/list.d.ts +0 -12
  56. package/es/layout/dagre/src/data/list.js +0 -48
  57. package/es/layout/dagre/src/data/list.js.map +0 -1
  58. package/es/layout/dagre/src/debug.d.ts +0 -3
  59. package/es/layout/dagre/src/debug.js +0 -24
  60. package/es/layout/dagre/src/debug.js.map +0 -1
  61. package/es/layout/dagre/src/greedy-fas.d.ts +0 -3
  62. package/es/layout/dagre/src/greedy-fas.js +0 -114
  63. package/es/layout/dagre/src/greedy-fas.js.map +0 -1
  64. package/es/layout/dagre/src/layout.d.ts +0 -3
  65. package/es/layout/dagre/src/layout.js +0 -518
  66. package/es/layout/dagre/src/layout.js.map +0 -1
  67. package/es/layout/dagre/src/nesting-graph.d.ts +0 -6
  68. package/es/layout/dagre/src/nesting-graph.js +0 -117
  69. package/es/layout/dagre/src/nesting-graph.js.map +0 -1
  70. package/es/layout/dagre/src/normalize.d.ts +0 -6
  71. package/es/layout/dagre/src/normalize.js +0 -89
  72. package/es/layout/dagre/src/normalize.js.map +0 -1
  73. package/es/layout/dagre/src/order/add-subgraph-constraints.d.ts +0 -3
  74. package/es/layout/dagre/src/order/add-subgraph-constraints.js +0 -27
  75. package/es/layout/dagre/src/order/add-subgraph-constraints.js.map +0 -1
  76. package/es/layout/dagre/src/order/barycenter.d.ts +0 -11
  77. package/es/layout/dagre/src/order/barycenter.js +0 -24
  78. package/es/layout/dagre/src/order/barycenter.js.map +0 -1
  79. package/es/layout/dagre/src/order/build-layer-graph.d.ts +0 -3
  80. package/es/layout/dagre/src/order/build-layer-graph.js +0 -71
  81. package/es/layout/dagre/src/order/build-layer-graph.js.map +0 -1
  82. package/es/layout/dagre/src/order/cross-count.d.ts +0 -3
  83. package/es/layout/dagre/src/order/cross-count.js +0 -65
  84. package/es/layout/dagre/src/order/cross-count.js.map +0 -1
  85. package/es/layout/dagre/src/order/index.d.ts +0 -3
  86. package/es/layout/dagre/src/order/index.js +0 -91
  87. package/es/layout/dagre/src/order/index.js.map +0 -1
  88. package/es/layout/dagre/src/order/init-data-order.d.ts +0 -6
  89. package/es/layout/dagre/src/order/init-data-order.js +0 -25
  90. package/es/layout/dagre/src/order/init-data-order.js.map +0 -1
  91. package/es/layout/dagre/src/order/init-order.d.ts +0 -3
  92. package/es/layout/dagre/src/order/init-order.js +0 -52
  93. package/es/layout/dagre/src/order/init-order.js.map +0 -1
  94. package/es/layout/dagre/src/order/resolve-conflicts.d.ts +0 -19
  95. package/es/layout/dagre/src/order/resolve-conflicts.js +0 -93
  96. package/es/layout/dagre/src/order/resolve-conflicts.js.map +0 -1
  97. package/es/layout/dagre/src/order/sort-subgraph.d.ts +0 -7
  98. package/es/layout/dagre/src/order/sort-subgraph.js +0 -85
  99. package/es/layout/dagre/src/order/sort-subgraph.js.map +0 -1
  100. package/es/layout/dagre/src/order/sort.d.ts +0 -7
  101. package/es/layout/dagre/src/order/sort.js +0 -68
  102. package/es/layout/dagre/src/order/sort.js.map +0 -1
  103. package/es/layout/dagre/src/parent-dummy-chains.d.ts +0 -3
  104. package/es/layout/dagre/src/parent-dummy-chains.js +0 -81
  105. package/es/layout/dagre/src/parent-dummy-chains.js.map +0 -1
  106. package/es/layout/dagre/src/position/bk.d.ts +0 -23
  107. package/es/layout/dagre/src/position/bk.js +0 -370
  108. package/es/layout/dagre/src/position/bk.js.map +0 -1
  109. package/es/layout/dagre/src/position/index.d.ts +0 -3
  110. package/es/layout/dagre/src/position/index.js +0 -51
  111. package/es/layout/dagre/src/position/index.js.map +0 -1
  112. package/es/layout/dagre/src/rank/feasible-tree.d.ts +0 -9
  113. package/es/layout/dagre/src/rank/feasible-tree.js +0 -148
  114. package/es/layout/dagre/src/rank/feasible-tree.js.map +0 -1
  115. package/es/layout/dagre/src/rank/index.d.ts +0 -3
  116. package/es/layout/dagre/src/rank/index.js +0 -53
  117. package/es/layout/dagre/src/rank/index.js.map +0 -1
  118. package/es/layout/dagre/src/rank/network-simplex.d.ts +0 -9
  119. package/es/layout/dagre/src/rank/network-simplex.js +0 -195
  120. package/es/layout/dagre/src/rank/network-simplex.js.map +0 -1
  121. package/es/layout/dagre/src/rank/util.d.ts +0 -11
  122. package/es/layout/dagre/src/rank/util.js +0 -141
  123. package/es/layout/dagre/src/rank/util.js.map +0 -1
  124. package/es/layout/dagre/src/util.d.ts +0 -31
  125. package/es/layout/dagre/src/util.js +0 -261
  126. package/es/layout/dagre/src/util.js.map +0 -1
  127. package/es/layout/dagre.d.ts +0 -71
  128. package/es/layout/dagre.js +0 -433
  129. package/es/layout/dagre.js.map +0 -1
  130. package/es/layout/dagreCompound.d.ts +0 -121
  131. package/es/layout/dagreCompound.js +0 -391
  132. package/es/layout/dagreCompound.js.map +0 -1
  133. package/es/layout/er/core.d.ts +0 -1
  134. package/es/layout/er/core.js +0 -107
  135. package/es/layout/er/core.js.map +0 -1
  136. package/es/layout/er/forceGrid.d.ts +0 -8
  137. package/es/layout/er/forceGrid.js +0 -88
  138. package/es/layout/er/forceGrid.js.map +0 -1
  139. package/es/layout/er/grid.d.ts +0 -26
  140. package/es/layout/er/grid.js +0 -162
  141. package/es/layout/er/grid.js.map +0 -1
  142. package/es/layout/er/index.d.ts +0 -29
  143. package/es/layout/er/index.js +0 -54
  144. package/es/layout/er/index.js.map +0 -1
  145. package/es/layout/er/mysqlWorkbench.d.ts +0 -6
  146. package/es/layout/er/mysqlWorkbench.js +0 -324
  147. package/es/layout/er/mysqlWorkbench.js.map +0 -1
  148. package/es/layout/er/type.d.ts +0 -35
  149. package/es/layout/er/type.js +0 -2
  150. package/es/layout/er/type.js.map +0 -1
  151. package/es/layout/force/force-in-a-box.d.ts +0 -28
  152. package/es/layout/force/force-in-a-box.js +0 -330
  153. package/es/layout/force/force-in-a-box.js.map +0 -1
  154. package/es/layout/force/force.d.ts +0 -100
  155. package/es/layout/force/force.js +0 -340
  156. package/es/layout/force/force.js.map +0 -1
  157. package/es/layout/force/index.d.ts +0 -1
  158. package/es/layout/force/index.js +0 -2
  159. package/es/layout/force/index.js.map +0 -1
  160. package/es/layout/force2/ForceNBody.d.ts +0 -7
  161. package/es/layout/force2/ForceNBody.js +0 -94
  162. package/es/layout/force2/ForceNBody.js.map +0 -1
  163. package/es/layout/force2/index.d.ts +0 -119
  164. package/es/layout/force2/index.js +0 -608
  165. package/es/layout/force2/index.js.map +0 -1
  166. package/es/layout/forceAtlas2/body.d.ts +0 -33
  167. package/es/layout/forceAtlas2/body.js +0 -89
  168. package/es/layout/forceAtlas2/body.js.map +0 -1
  169. package/es/layout/forceAtlas2/index.d.ts +0 -115
  170. package/es/layout/forceAtlas2/index.js +0 -484
  171. package/es/layout/forceAtlas2/index.js.map +0 -1
  172. package/es/layout/forceAtlas2/quad.d.ts +0 -27
  173. package/es/layout/forceAtlas2/quad.js +0 -96
  174. package/es/layout/forceAtlas2/quad.js.map +0 -1
  175. package/es/layout/forceAtlas2/quadTree.d.ts +0 -20
  176. package/es/layout/forceAtlas2/quadTree.js +0 -103
  177. package/es/layout/forceAtlas2/quadTree.js.map +0 -1
  178. package/es/layout/fruchterman.d.ts +0 -73
  179. package/es/layout/fruchterman.js +0 -296
  180. package/es/layout/fruchterman.js.map +0 -1
  181. package/es/layout/gForce.d.ts +0 -96
  182. package/es/layout/gForce.js +0 -399
  183. package/es/layout/gForce.js.map +0 -1
  184. package/es/layout/gpu/fruchterman.d.ts +0 -57
  185. package/es/layout/gpu/fruchterman.js +0 -267
  186. package/es/layout/gpu/fruchterman.js.map +0 -1
  187. package/es/layout/gpu/fruchtermanShader.d.ts +0 -4
  188. package/es/layout/gpu/fruchtermanShader.js +0 -201
  189. package/es/layout/gpu/fruchtermanShader.js.map +0 -1
  190. package/es/layout/gpu/gForce.d.ts +0 -68
  191. package/es/layout/gpu/gForce.js +0 -330
  192. package/es/layout/gpu/gForce.js.map +0 -1
  193. package/es/layout/gpu/gForceShader.d.ts +0 -4
  194. package/es/layout/gpu/gForceShader.js +0 -218
  195. package/es/layout/gpu/gForceShader.js.map +0 -1
  196. package/es/layout/grid.d.ts +0 -83
  197. package/es/layout/grid.js +0 -317
  198. package/es/layout/grid.js.map +0 -1
  199. package/es/layout/index.d.ts +0 -22
  200. package/es/layout/index.js +0 -25
  201. package/es/layout/index.js.map +0 -1
  202. package/es/layout/layout.d.ts +0 -26
  203. package/es/layout/layout.js +0 -97
  204. package/es/layout/layout.js.map +0 -1
  205. package/es/layout/mds.d.ts +0 -39
  206. package/es/layout/mds.js +0 -122
  207. package/es/layout/mds.js.map +0 -1
  208. package/es/layout/radial/index.d.ts +0 -1
  209. package/es/layout/radial/index.js +0 -2
  210. package/es/layout/radial/index.js.map +0 -1
  211. package/es/layout/radial/mds.d.ts +0 -15
  212. package/es/layout/radial/mds.js +0 -38
  213. package/es/layout/radial/mds.js.map +0 -1
  214. package/es/layout/radial/radial.d.ts +0 -74
  215. package/es/layout/radial/radial.js +0 -420
  216. package/es/layout/radial/radial.js.map +0 -1
  217. package/es/layout/radial/radialNonoverlapForce.d.ts +0 -50
  218. package/es/layout/radial/radialNonoverlapForce.js +0 -123
  219. package/es/layout/radial/radialNonoverlapForce.js.map +0 -1
  220. package/es/layout/random.d.ts +0 -35
  221. package/es/layout/random.js +0 -62
  222. package/es/layout/random.js.map +0 -1
  223. package/es/layout/types.d.ts +0 -432
  224. package/es/layout/types.js +0 -2
  225. package/es/layout/types.js.map +0 -1
  226. package/es/registy/index.d.ts +0 -3
  227. package/es/registy/index.js +0 -41
  228. package/es/registy/index.js.map +0 -1
  229. package/es/util/array.d.ts +0 -1
  230. package/es/util/array.js +0 -2
  231. package/es/util/array.js.map +0 -1
  232. package/es/util/function.d.ts +0 -6
  233. package/es/util/function.js +0 -56
  234. package/es/util/function.js.map +0 -1
  235. package/es/util/gpu.d.ts +0 -52
  236. package/es/util/gpu.js +0 -239
  237. package/es/util/gpu.js.map +0 -1
  238. package/es/util/index.d.ts +0 -6
  239. package/es/util/index.js +0 -7
  240. package/es/util/index.js.map +0 -1
  241. package/es/util/math.d.ts +0 -43
  242. package/es/util/math.js +0 -253
  243. package/es/util/math.js.map +0 -1
  244. package/es/util/number.d.ts +0 -3
  245. package/es/util/number.js +0 -7
  246. package/es/util/number.js.map +0 -1
  247. package/es/util/object.d.ts +0 -2
  248. package/es/util/object.js +0 -25
  249. package/es/util/object.js.map +0 -1
  250. package/es/util/string.d.ts +0 -2
  251. package/es/util/string.js +0 -16
  252. package/es/util/string.js.map +0 -1
  253. package/lib/index.js +0 -24
  254. package/lib/index.js.map +0 -1
  255. package/lib/layout/base.d.ts +0 -22
  256. package/lib/layout/base.js +0 -56
  257. package/lib/layout/base.js.map +0 -1
  258. package/lib/layout/circular.d.ts +0 -80
  259. package/lib/layout/circular.js +0 -337
  260. package/lib/layout/circular.js.map +0 -1
  261. package/lib/layout/comboCombined.d.ts +0 -54
  262. package/lib/layout/comboCombined.js +0 -384
  263. package/lib/layout/comboCombined.js.map +0 -1
  264. package/lib/layout/comboForce.d.ts +0 -134
  265. package/lib/layout/comboForce.js +0 -826
  266. package/lib/layout/comboForce.js.map +0 -1
  267. package/lib/layout/concentric.d.ts +0 -67
  268. package/lib/layout/concentric.js +0 -243
  269. package/lib/layout/concentric.js.map +0 -1
  270. package/lib/layout/constants.d.ts +0 -12
  271. package/lib/layout/constants.js +0 -25
  272. package/lib/layout/constants.js.map +0 -1
  273. package/lib/layout/dagre/graph.d.ts +0 -91
  274. package/lib/layout/dagre/graph.js +0 -28
  275. package/lib/layout/dagre/graph.js.map +0 -1
  276. package/lib/layout/dagre/index.d.ts +0 -8
  277. package/lib/layout/dagre/index.js +0 -36
  278. package/lib/layout/dagre/index.js.map +0 -1
  279. package/lib/layout/dagre/src/acyclic.d.ts +0 -6
  280. package/lib/layout/dagre/src/acyclic.js +0 -57
  281. package/lib/layout/dagre/src/acyclic.js.map +0 -1
  282. package/lib/layout/dagre/src/add-border-segments.d.ts +0 -3
  283. package/lib/layout/dagre/src/add-border-segments.js +0 -34
  284. package/lib/layout/dagre/src/add-border-segments.js.map +0 -1
  285. package/lib/layout/dagre/src/coordinate-system.d.ts +0 -6
  286. package/lib/layout/dagre/src/coordinate-system.js +0 -71
  287. package/lib/layout/dagre/src/coordinate-system.js.map +0 -1
  288. package/lib/layout/dagre/src/data/list.d.ts +0 -12
  289. package/lib/layout/dagre/src/data/list.js +0 -52
  290. package/lib/layout/dagre/src/data/list.js.map +0 -1
  291. package/lib/layout/dagre/src/debug.d.ts +0 -3
  292. package/lib/layout/dagre/src/debug.js +0 -26
  293. package/lib/layout/dagre/src/debug.js.map +0 -1
  294. package/lib/layout/dagre/src/greedy-fas.d.ts +0 -3
  295. package/lib/layout/dagre/src/greedy-fas.js +0 -144
  296. package/lib/layout/dagre/src/greedy-fas.js.map +0 -1
  297. package/lib/layout/dagre/src/layout.d.ts +0 -3
  298. package/lib/layout/dagre/src/layout.js +0 -535
  299. package/lib/layout/dagre/src/layout.js.map +0 -1
  300. package/lib/layout/dagre/src/nesting-graph.d.ts +0 -6
  301. package/lib/layout/dagre/src/nesting-graph.js +0 -119
  302. package/lib/layout/dagre/src/nesting-graph.js.map +0 -1
  303. package/lib/layout/dagre/src/normalize.d.ts +0 -6
  304. package/lib/layout/dagre/src/normalize.js +0 -91
  305. package/lib/layout/dagre/src/normalize.js.map +0 -1
  306. package/lib/layout/dagre/src/order/add-subgraph-constraints.d.ts +0 -3
  307. package/lib/layout/dagre/src/order/add-subgraph-constraints.js +0 -29
  308. package/lib/layout/dagre/src/order/add-subgraph-constraints.js.map +0 -1
  309. package/lib/layout/dagre/src/order/barycenter.d.ts +0 -11
  310. package/lib/layout/dagre/src/order/barycenter.js +0 -26
  311. package/lib/layout/dagre/src/order/barycenter.js.map +0 -1
  312. package/lib/layout/dagre/src/order/build-layer-graph.d.ts +0 -3
  313. package/lib/layout/dagre/src/order/build-layer-graph.js +0 -73
  314. package/lib/layout/dagre/src/order/build-layer-graph.js.map +0 -1
  315. package/lib/layout/dagre/src/order/cross-count.d.ts +0 -3
  316. package/lib/layout/dagre/src/order/cross-count.js +0 -67
  317. package/lib/layout/dagre/src/order/cross-count.js.map +0 -1
  318. package/lib/layout/dagre/src/order/index.d.ts +0 -3
  319. package/lib/layout/dagre/src/order/index.js +0 -96
  320. package/lib/layout/dagre/src/order/index.js.map +0 -1
  321. package/lib/layout/dagre/src/order/init-data-order.d.ts +0 -6
  322. package/lib/layout/dagre/src/order/init-data-order.js +0 -27
  323. package/lib/layout/dagre/src/order/init-data-order.js.map +0 -1
  324. package/lib/layout/dagre/src/order/init-order.d.ts +0 -3
  325. package/lib/layout/dagre/src/order/init-order.js +0 -54
  326. package/lib/layout/dagre/src/order/init-order.js.map +0 -1
  327. package/lib/layout/dagre/src/order/resolve-conflicts.d.ts +0 -19
  328. package/lib/layout/dagre/src/order/resolve-conflicts.js +0 -98
  329. package/lib/layout/dagre/src/order/resolve-conflicts.js.map +0 -1
  330. package/lib/layout/dagre/src/order/sort-subgraph.d.ts +0 -7
  331. package/lib/layout/dagre/src/order/sort-subgraph.js +0 -90
  332. package/lib/layout/dagre/src/order/sort-subgraph.js.map +0 -1
  333. package/lib/layout/dagre/src/order/sort.d.ts +0 -7
  334. package/lib/layout/dagre/src/order/sort.js +0 -70
  335. package/lib/layout/dagre/src/order/sort.js.map +0 -1
  336. package/lib/layout/dagre/src/parent-dummy-chains.d.ts +0 -3
  337. package/lib/layout/dagre/src/parent-dummy-chains.js +0 -83
  338. package/lib/layout/dagre/src/parent-dummy-chains.js.map +0 -1
  339. package/lib/layout/dagre/src/position/bk.d.ts +0 -23
  340. package/lib/layout/dagre/src/position/bk.js +0 -409
  341. package/lib/layout/dagre/src/position/bk.js.map +0 -1
  342. package/lib/layout/dagre/src/position/index.d.ts +0 -3
  343. package/lib/layout/dagre/src/position/index.js +0 -64
  344. package/lib/layout/dagre/src/position/index.js.map +0 -1
  345. package/lib/layout/dagre/src/rank/feasible-tree.d.ts +0 -9
  346. package/lib/layout/dagre/src/rank/feasible-tree.js +0 -152
  347. package/lib/layout/dagre/src/rank/feasible-tree.js.map +0 -1
  348. package/lib/layout/dagre/src/rank/index.d.ts +0 -3
  349. package/lib/layout/dagre/src/rank/index.js +0 -58
  350. package/lib/layout/dagre/src/rank/index.js.map +0 -1
  351. package/lib/layout/dagre/src/rank/network-simplex.d.ts +0 -9
  352. package/lib/layout/dagre/src/rank/network-simplex.js +0 -205
  353. package/lib/layout/dagre/src/rank/network-simplex.js.map +0 -1
  354. package/lib/layout/dagre/src/rank/util.d.ts +0 -11
  355. package/lib/layout/dagre/src/rank/util.js +0 -146
  356. package/lib/layout/dagre/src/rank/util.js.map +0 -1
  357. package/lib/layout/dagre/src/util.d.ts +0 -31
  358. package/lib/layout/dagre/src/util.js +0 -280
  359. package/lib/layout/dagre/src/util.js.map +0 -1
  360. package/lib/layout/dagre.d.ts +0 -71
  361. package/lib/layout/dagre.js +0 -462
  362. package/lib/layout/dagre.js.map +0 -1
  363. package/lib/layout/dagreCompound.d.ts +0 -121
  364. package/lib/layout/dagreCompound.js +0 -429
  365. package/lib/layout/dagreCompound.js.map +0 -1
  366. package/lib/layout/er/core.d.ts +0 -1
  367. package/lib/layout/er/core.js +0 -147
  368. package/lib/layout/er/core.js.map +0 -1
  369. package/lib/layout/er/forceGrid.d.ts +0 -8
  370. package/lib/layout/er/forceGrid.js +0 -97
  371. package/lib/layout/er/forceGrid.js.map +0 -1
  372. package/lib/layout/er/grid.d.ts +0 -26
  373. package/lib/layout/er/grid.js +0 -177
  374. package/lib/layout/er/grid.js.map +0 -1
  375. package/lib/layout/er/index.d.ts +0 -29
  376. package/lib/layout/er/index.js +0 -80
  377. package/lib/layout/er/index.js.map +0 -1
  378. package/lib/layout/er/mysqlWorkbench.d.ts +0 -6
  379. package/lib/layout/er/mysqlWorkbench.js +0 -326
  380. package/lib/layout/er/mysqlWorkbench.js.map +0 -1
  381. package/lib/layout/er/type.d.ts +0 -35
  382. package/lib/layout/er/type.js +0 -3
  383. package/lib/layout/er/type.js.map +0 -1
  384. package/lib/layout/force/force-in-a-box.d.ts +0 -28
  385. package/lib/layout/force/force-in-a-box.js +0 -357
  386. package/lib/layout/force/force-in-a-box.js.map +0 -1
  387. package/lib/layout/force/force.d.ts +0 -100
  388. package/lib/layout/force/force.js +0 -388
  389. package/lib/layout/force/force.js.map +0 -1
  390. package/lib/layout/force/index.d.ts +0 -1
  391. package/lib/layout/force/index.js +0 -18
  392. package/lib/layout/force/index.js.map +0 -1
  393. package/lib/layout/force2/ForceNBody.d.ts +0 -7
  394. package/lib/layout/force2/ForceNBody.js +0 -98
  395. package/lib/layout/force2/ForceNBody.js.map +0 -1
  396. package/lib/layout/force2/index.d.ts +0 -119
  397. package/lib/layout/force2/index.js +0 -643
  398. package/lib/layout/force2/index.js.map +0 -1
  399. package/lib/layout/forceAtlas2/body.d.ts +0 -33
  400. package/lib/layout/forceAtlas2/body.js +0 -93
  401. package/lib/layout/forceAtlas2/body.js.map +0 -1
  402. package/lib/layout/forceAtlas2/index.d.ts +0 -115
  403. package/lib/layout/forceAtlas2/index.js +0 -509
  404. package/lib/layout/forceAtlas2/index.js.map +0 -1
  405. package/lib/layout/forceAtlas2/quad.d.ts +0 -27
  406. package/lib/layout/forceAtlas2/quad.js +0 -100
  407. package/lib/layout/forceAtlas2/quad.js.map +0 -1
  408. package/lib/layout/forceAtlas2/quadTree.d.ts +0 -20
  409. package/lib/layout/forceAtlas2/quadTree.js +0 -107
  410. package/lib/layout/forceAtlas2/quadTree.js.map +0 -1
  411. package/lib/layout/fruchterman.d.ts +0 -73
  412. package/lib/layout/fruchterman.js +0 -320
  413. package/lib/layout/fruchterman.js.map +0 -1
  414. package/lib/layout/gForce.d.ts +0 -96
  415. package/lib/layout/gForce.js +0 -421
  416. package/lib/layout/gForce.js.map +0 -1
  417. package/lib/layout/gpu/fruchterman.d.ts +0 -57
  418. package/lib/layout/gpu/fruchterman.js +0 -361
  419. package/lib/layout/gpu/fruchterman.js.map +0 -1
  420. package/lib/layout/gpu/fruchtermanShader.d.ts +0 -4
  421. package/lib/layout/gpu/fruchtermanShader.js +0 -8
  422. package/lib/layout/gpu/fruchtermanShader.js.map +0 -1
  423. package/lib/layout/gpu/gForce.d.ts +0 -68
  424. package/lib/layout/gpu/gForce.js +0 -415
  425. package/lib/layout/gpu/gForce.js.map +0 -1
  426. package/lib/layout/gpu/gForceShader.d.ts +0 -4
  427. package/lib/layout/gpu/gForceShader.js +0 -8
  428. package/lib/layout/gpu/gForceShader.js.map +0 -1
  429. package/lib/layout/grid.d.ts +0 -83
  430. package/lib/layout/grid.js +0 -339
  431. package/lib/layout/grid.js.map +0 -1
  432. package/lib/layout/index.d.ts +0 -22
  433. package/lib/layout/index.js +0 -59
  434. package/lib/layout/index.js.map +0 -1
  435. package/lib/layout/layout.d.ts +0 -26
  436. package/lib/layout/layout.js +0 -102
  437. package/lib/layout/layout.js.map +0 -1
  438. package/lib/layout/mds.d.ts +0 -39
  439. package/lib/layout/mds.js +0 -144
  440. package/lib/layout/mds.js.map +0 -1
  441. package/lib/layout/radial/index.d.ts +0 -1
  442. package/lib/layout/radial/index.js +0 -18
  443. package/lib/layout/radial/index.js.map +0 -1
  444. package/lib/layout/radial/mds.d.ts +0 -15
  445. package/lib/layout/radial/mds.js +0 -42
  446. package/lib/layout/radial/mds.js.map +0 -1
  447. package/lib/layout/radial/radial.d.ts +0 -74
  448. package/lib/layout/radial/radial.js +0 -445
  449. package/lib/layout/radial/radial.js.map +0 -1
  450. package/lib/layout/radial/radialNonoverlapForce.d.ts +0 -50
  451. package/lib/layout/radial/radialNonoverlapForce.js +0 -127
  452. package/lib/layout/radial/radialNonoverlapForce.js.map +0 -1
  453. package/lib/layout/random.d.ts +0 -35
  454. package/lib/layout/random.js +0 -84
  455. package/lib/layout/random.js.map +0 -1
  456. package/lib/layout/types.d.ts +0 -432
  457. package/lib/layout/types.js +0 -3
  458. package/lib/layout/types.js.map +0 -1
  459. package/lib/registy/index.d.ts +0 -3
  460. package/lib/registy/index.js +0 -65
  461. package/lib/registy/index.js.map +0 -1
  462. package/lib/util/array.js +0 -5
  463. package/lib/util/array.js.map +0 -1
  464. package/lib/util/function.js +0 -65
  465. package/lib/util/function.js.map +0 -1
  466. package/lib/util/gpu.js +0 -250
  467. package/lib/util/gpu.js.map +0 -1
  468. package/lib/util/index.js +0 -23
  469. package/lib/util/index.js.map +0 -1
  470. package/lib/util/math.js +0 -266
  471. package/lib/util/math.js.map +0 -1
  472. package/lib/util/number.js +0 -13
  473. package/lib/util/number.js.map +0 -1
  474. package/lib/util/object.js +0 -43
  475. package/lib/util/object.js.map +0 -1
  476. package/lib/util/string.js +0 -20
  477. package/lib/util/string.js.map +0 -1
  478. package/src/index.ts +0 -7
  479. package/src/layout/base.ts +0 -57
  480. package/src/layout/circular.ts +0 -370
  481. package/src/layout/comboCombined.ts +0 -391
  482. package/src/layout/comboForce.ts +0 -873
  483. package/src/layout/concentric.ts +0 -289
  484. package/src/layout/constants.ts +0 -22
  485. package/src/layout/dagre/graph.ts +0 -104
  486. package/src/layout/dagre/index.ts +0 -31
  487. package/src/layout/dagre/src/acyclic.ts +0 -58
  488. package/src/layout/dagre/src/add-border-segments.ts +0 -47
  489. package/src/layout/dagre/src/coordinate-system.ts +0 -77
  490. package/src/layout/dagre/src/data/list.ts +0 -60
  491. package/src/layout/dagre/src/debug.ts +0 -30
  492. package/src/layout/dagre/src/greedy-fas.ts +0 -144
  493. package/src/layout/dagre/src/layout.ts +0 -579
  494. package/src/layout/dagre/src/nesting-graph.ts +0 -143
  495. package/src/layout/dagre/src/normalize.ts +0 -96
  496. package/src/layout/dagre/src/order/add-subgraph-constraints.ts +0 -29
  497. package/src/layout/dagre/src/order/barycenter.ts +0 -26
  498. package/src/layout/dagre/src/order/build-layer-graph.ts +0 -82
  499. package/src/layout/dagre/src/order/cross-count.ts +0 -77
  500. package/src/layout/dagre/src/order/index.ts +0 -105
  501. package/src/layout/dagre/src/order/init-data-order.ts +0 -27
  502. package/src/layout/dagre/src/order/init-order.ts +0 -56
  503. package/src/layout/dagre/src/order/resolve-conflicts.ts +0 -152
  504. package/src/layout/dagre/src/order/sort-subgraph.ts +0 -105
  505. package/src/layout/dagre/src/order/sort.ts +0 -76
  506. package/src/layout/dagre/src/parent-dummy-chains.ts +0 -102
  507. package/src/layout/dagre/src/position/bk.ts +0 -493
  508. package/src/layout/dagre/src/position/index.ts +0 -82
  509. package/src/layout/dagre/src/rank/feasible-tree.ts +0 -165
  510. package/src/layout/dagre/src/rank/index.ts +0 -54
  511. package/src/layout/dagre/src/rank/network-simplex.ts +0 -225
  512. package/src/layout/dagre/src/rank/util.ts +0 -166
  513. package/src/layout/dagre/src/util.ts +0 -309
  514. package/src/layout/dagre.ts +0 -460
  515. package/src/layout/dagreCompound.ts +0 -518
  516. package/src/layout/er/core.ts +0 -117
  517. package/src/layout/er/forceGrid.ts +0 -95
  518. package/src/layout/er/grid.ts +0 -185
  519. package/src/layout/er/index.ts +0 -68
  520. package/src/layout/er/mysqlWorkbench.ts +0 -345
  521. package/src/layout/er/type.ts +0 -39
  522. package/src/layout/force/force-in-a-box.ts +0 -400
  523. package/src/layout/force/force.ts +0 -391
  524. package/src/layout/force/index.ts +0 -1
  525. package/src/layout/force2/ForceNBody.ts +0 -128
  526. package/src/layout/force2/index.ts +0 -741
  527. package/src/layout/forceAtlas2/body.ts +0 -115
  528. package/src/layout/forceAtlas2/index.ts +0 -556
  529. package/src/layout/forceAtlas2/quad.ts +0 -115
  530. package/src/layout/forceAtlas2/quadTree.ts +0 -107
  531. package/src/layout/fruchterman.ts +0 -361
  532. package/src/layout/gForce.ts +0 -488
  533. package/src/layout/gpu/fruchterman.ts +0 -314
  534. package/src/layout/gpu/fruchtermanShader.ts +0 -203
  535. package/src/layout/gpu/gForce.ts +0 -407
  536. package/src/layout/gpu/gForceShader.ts +0 -220
  537. package/src/layout/grid.ts +0 -404
  538. package/src/layout/index.ts +0 -47
  539. package/src/layout/layout.ts +0 -110
  540. package/src/layout/mds.ts +0 -140
  541. package/src/layout/radial/index.ts +0 -1
  542. package/src/layout/radial/mds.ts +0 -51
  543. package/src/layout/radial/radial.ts +0 -500
  544. package/src/layout/radial/radialNonoverlapForce.ts +0 -189
  545. package/src/layout/random.ts +0 -75
  546. package/src/layout/types.ts +0 -496
  547. package/src/registy/index.ts +0 -43
  548. package/src/util/array.ts +0 -1
  549. package/src/util/function.ts +0 -64
  550. package/src/util/gpu.ts +0 -256
  551. package/src/util/index.ts +0 -6
  552. package/src/util/math.ts +0 -272
  553. package/src/util/number.ts +0 -8
  554. package/src/util/object.ts +0 -28
  555. package/src/util/string.ts +0 -18
@@ -0,0 +1 @@
1
+ {"version":3,"file":"3a54d760230d1933f953.worker.js","mappings":"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","sources":["webpack://Layout/webpack/bootstrap","webpack://Layout/webpack/runtime/define property getters","webpack://Layout/webpack/runtime/hasOwnProperty shorthand","webpack://Layout/../../node_modules/@antv/graphlib/esm/Graph.js","webpack://Layout/../../node_modules/tslib/tslib.es6.js","webpack://Layout/./src/util/string.ts","webpack://Layout/./src/util/array.ts","webpack://Layout/./src/util/object.ts","webpack://Layout/./src/util/math.ts","webpack://Layout/./src/util/function.ts","webpack://Layout/./src/util/number.ts","webpack://Layout/./src/circular.ts","webpack://Layout/./src/registry.ts","webpack://Layout/./src/worker.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","export class Graph {\n nodeMap = new Map();\n edgeMap = new Map();\n inEdgesMap = new Map();\n outEdgesMap = new Map();\n treeIndices = new Map();\n changes = [];\n batchCount = 0;\n /**\n * This function is called with a {@link GraphChangedEvent} each time a graph change happened.\n *\n * `event.changes` contains all the graph changes in order since last `onChanged`.\n */\n onChanged = () => {\n // Do nothing.\n };\n /**\n * Create a new Graph instance.\n * @param options - The options to initialize a graph. See {@link GraphOptions}.\n *\n * ```ts\n * const graph = new Graph({\n * // Optional, initial nodes.\n * nodes: [\n * // Each node has a unique ID.\n * { id: 'A', foo: 1 },\n * { id: 'B', foo: 1 },\n * ],\n * // Optional, initial edges.\n * edges: [\n * { id: 'C', source: 'B', target: 'B', weight: 1 },\n * ],\n * // Optional, called with a GraphChangedEvent.\n * onChanged: (event) => {\n * console.log(event);\n * }\n * });\n * ```\n */\n constructor(options) {\n if (!options)\n return;\n if (options.nodes)\n this.addNodes(options.nodes);\n if (options.edges)\n this.addEdges(options.edges);\n if (options.tree)\n this.addTree(options.tree);\n if (options.onChanged)\n this.onChanged = options.onChanged;\n }\n /**\n * Batch several graph changes into one.\n *\n * Make several changes, but dispatch only one ChangedEvent at the end of batch:\n * ```ts\n * graph.batch(() => {\n * graph.addNodes([]);\n * graph.addEdges([]);\n * });\n * ```\n *\n * Batches can be nested. Only the outermost batch will dispatch a ChangedEvent:\n * ```ts\n * graph.batch(() => {\n * graph.addNodes([]);\n * graph.batch(() => {\n * graph.addEdges([]);\n * });\n * });\n * ```\n */\n batch = (fn) => {\n this.batchCount += 1;\n fn();\n this.batchCount -= 1;\n if (!this.batchCount) {\n this.commit();\n }\n };\n /**\n * Reset changes and dispatch a ChangedEvent.\n */\n commit() {\n const changes = this.changes;\n this.changes = [];\n this.onChanged({\n graph: this,\n changes,\n });\n }\n /**\n * Reduce the number of ordered graph changes by dropping or merging unnecessary changes.\n *\n * For example, if we update a node and remove it in a batch:\n *\n * ```ts\n * graph.batch(() => {\n * graph.updateNodeData('A', 'foo', 2);\n * graph.removeNode('A');\n * });\n * ```\n *\n * We get 2 atomic graph changes like\n *\n * ```ts\n * [\n * { type: 'NodeDataUpdated', id: 'A', propertyName: 'foo', oldValue: 1, newValue: 2 },\n * { type: 'NodeRemoved', value: { id: 'A', data: { foo: 2 } },\n * ]\n * ```\n *\n * Since node 'A' has been removed, we actually have no need to handle with NodeDataUpdated change.\n *\n * `reduceChanges()` here helps us remove such changes.\n */\n reduceChanges(changes) {\n let mergedChanges = [];\n changes.forEach((change) => {\n switch (change.type) {\n case 'NodeRemoved': {\n // NodeAdded: A added.\n // NodeDataUpdated: A changed.\n // TreeStructureChanged: A's parent changed.\n // NodeRemoved: A removed. 👈🏻 Since A was removed, above three changes may be ignored.\n let isNewlyAdded = false;\n mergedChanges = mergedChanges.filter((pastChange) => {\n if (pastChange.type === 'NodeAdded') {\n const sameId = pastChange.value.id === change.value.id;\n if (sameId) {\n isNewlyAdded = true;\n }\n return !sameId;\n }\n else if (pastChange.type === 'NodeDataUpdated') {\n return pastChange.id !== change.value.id;\n }\n else if (pastChange.type === 'TreeStructureChanged') {\n return pastChange.nodeId !== change.value.id;\n }\n return true;\n });\n if (!isNewlyAdded) {\n mergedChanges.push(change);\n }\n break;\n }\n case 'EdgeRemoved': {\n // EdgeAdded: A added.\n // EdgeDataUpdated: A changed.\n // EdgeDataUpdated: A's source/target changed.\n // EdgeRemoved: A removed. 👈🏻 Since A was removed, above three changes may be ignored.\n let isNewlyAdded = false;\n mergedChanges = mergedChanges.filter((pastChange) => {\n if (pastChange.type === 'EdgeAdded') {\n const sameId = pastChange.value.id === change.value.id;\n if (sameId) {\n isNewlyAdded = true;\n }\n return !sameId;\n }\n else if (pastChange.type === 'EdgeDataUpdated' ||\n pastChange.type === 'EdgeUpdated') {\n return pastChange.id !== change.value.id;\n }\n return true;\n });\n if (!isNewlyAdded) {\n mergedChanges.push(change);\n }\n break;\n }\n case 'NodeDataUpdated':\n case 'EdgeDataUpdated':\n case 'EdgeUpdated': {\n // NodeDataUpdated: { id: A, propertyName: 'foo', oldValue: 1, newValue: 2 }.\n // NodeDataUpdated: { id: A, propertyName: 'foo', oldValue: 2, newValue: 3 }.\n // 👆 Could be merged as { id: A, propertyName: 'foo', oldValue: 1, newValue: 3 }.\n const existingChange = mergedChanges.find((pastChange) => {\n return (pastChange.type === change.type &&\n pastChange.id === change.id &&\n pastChange.propertyName === change.propertyName);\n });\n if (existingChange) {\n existingChange.newValue = change.newValue;\n }\n else {\n mergedChanges.push(change);\n }\n break;\n }\n case 'TreeStructureDetached': {\n // TreeStructureAttached\n // TreeStructureChanged\n // TreeStructureDetached 👈🏻 Since the tree struct was detached, above 2 changes may be ignored.\n mergedChanges = mergedChanges.filter((pastChange) => {\n if (pastChange.type === 'TreeStructureAttached') {\n return pastChange.treeKey !== change.treeKey;\n }\n else if (pastChange.type === 'TreeStructureChanged') {\n return pastChange.treeKey !== change.treeKey;\n }\n return true;\n });\n mergedChanges.push(change);\n break;\n }\n case 'TreeStructureChanged': {\n const existingChange = mergedChanges.find((pastChange) => {\n return (pastChange.type === 'TreeStructureChanged' &&\n pastChange.treeKey === change.treeKey &&\n pastChange.nodeId === change.nodeId);\n });\n if (existingChange) {\n existingChange.newParentId =\n change.newParentId;\n }\n else {\n mergedChanges.push(change);\n }\n break;\n }\n default:\n mergedChanges.push(change);\n break;\n }\n });\n return mergedChanges;\n }\n // ================= Node =================\n checkNodeExistence(id) {\n if (!this.hasNode(id)) {\n throw new Error('Node not found for id: ' + id);\n }\n }\n /**\n * Check if a node exists in the graph.\n * @group NodeMethods\n */\n hasNode(id) {\n return this.nodeMap.has(id);\n }\n /**\n * Tell if two nodes are neighbors.\n * @group NodeMethods\n */\n areNeighbors(firstNodeId, secondNodeId) {\n this.checkNodeExistence(firstNodeId);\n return this.getNeighbors(secondNodeId).some((neighbor) => neighbor.id === firstNodeId);\n }\n /**\n * Get the node data with given ID.\n * @group NodeMethods\n */\n getNode(id) {\n this.checkNodeExistence(id);\n return this.nodeMap.get(id);\n }\n /**\n * Given a node ID, find all edges of the node.\n * @param id - ID of the node\n * @param direction - Edge direction, defaults to 'both'.\n * @group NodeMethods\n */\n getRelatedEdges(id, direction) {\n this.checkNodeExistence(id);\n const inEdges = this.inEdgesMap.get(id);\n const outEdges = this.outEdgesMap.get(id);\n if (direction === 'in') {\n return Array.from(inEdges);\n }\n else if (direction === 'out') {\n return Array.from(outEdges);\n }\n const bothEdges = new Set([...inEdges, ...outEdges]);\n return Array.from(bothEdges);\n }\n /**\n * Get the degree of the given node.\n * @group NodeMethods\n */\n getDegree(id, direction) {\n return this.getRelatedEdges(id, direction).length;\n }\n /**\n * Get all successors of the given node.\n */\n getSuccessors(id) {\n const outEdges = this.getRelatedEdges(id, 'out');\n const targets = outEdges.map((edge) => edge.target);\n return Array.from(new Set(targets)).map((id) => this.getNode(id));\n }\n /**\n * Get all predecessors of the given node.\n */\n getPredecessors(id) {\n const inEdges = this.getRelatedEdges(id, 'in');\n const sources = inEdges.map((edge) => edge.source);\n return Array.from(new Set(sources)).map((id) => this.getNode(id));\n }\n /**\n * Given a node ID, find its neighbors.\n * @param id - ID of the node\n * @group NodeMethods\n */\n getNeighbors(id) {\n const predecessors = this.getPredecessors(id);\n const successors = this.getSuccessors(id);\n return Array.from(new Set([...predecessors, ...successors]));\n }\n doAddNode(node) {\n if (this.hasNode(node.id)) {\n throw new Error('Node already exists: ' + node.id);\n }\n this.nodeMap.set(node.id, node);\n this.inEdgesMap.set(node.id, new Set());\n this.outEdgesMap.set(node.id, new Set());\n this.treeIndices.forEach((tree) => {\n tree.childrenMap.set(node.id, new Set());\n });\n this.changes.push({ type: 'NodeAdded', value: node });\n }\n /**\n * Add all nodes of the given array, or iterable, into the graph.\n * @group NodeMethods\n */\n addNodes(nodes) {\n this.batch(() => {\n for (const node of nodes) {\n this.doAddNode(node);\n }\n });\n }\n /**\n * Add a single node into the graph.\n * @group NodeMethods\n */\n addNode(node) {\n this.addNodes([node]);\n }\n doRemoveNode(id) {\n const node = this.getNode(id);\n const inEdges = this.inEdgesMap.get(id);\n const outEdges = this.outEdgesMap.get(id);\n inEdges?.forEach((edge) => this.doRemoveEdge(edge.id));\n outEdges?.forEach((edge) => this.doRemoveEdge(edge.id));\n this.nodeMap.delete(id);\n this.treeIndices.forEach((tree) => {\n tree.childrenMap.get(id)?.forEach((child) => {\n tree.parentMap.delete(child.id);\n });\n tree.parentMap.delete(id);\n tree.childrenMap.delete(id);\n });\n this.changes.push({ type: 'NodeRemoved', value: node });\n }\n /**\n * Remove nodes and their attached edges from the graph.\n * @group NodeMethods\n */\n removeNodes(idList) {\n this.batch(() => {\n idList.forEach((id) => this.doRemoveNode(id));\n });\n }\n /**\n * Remove a single node and its attached edges from the graph.\n * @group NodeMethods\n */\n removeNode(id) {\n this.removeNodes([id]);\n }\n /**\n * Update node data.\n * @group NodeMethods\n */\n updateNodeData(id, propertyName, value) {\n const node = this.getNode(id);\n this.batch(() => {\n const oldValue = node.data[propertyName];\n const newValue = value;\n node.data[propertyName] = newValue;\n this.changes.push({\n type: 'NodeDataUpdated',\n id,\n propertyName,\n oldValue,\n newValue,\n });\n });\n }\n /**\n * Like Object.assign, merge all properties of `path` to the node data.\n * @param id Node ID.\n * @param patch A data object to merge.\n */\n mergeNodeData(id, patch) {\n this.batch(() => {\n Object.entries(patch).forEach(([propertyName, value]) => {\n this.updateNodeData(id, propertyName, value);\n });\n });\n }\n // ================= Edge =================\n checkEdgeExistence(id) {\n if (!this.hasEdge(id)) {\n throw new Error('Edge not found for id: ' + id);\n }\n }\n /**\n * Check if an edge exists in the graph.\n * @group NodeMethods\n */\n hasEdge(id) {\n return this.edgeMap.has(id);\n }\n /**\n * Get the edge data with given ID.\n * @group EdgeMethods\n */\n getEdge(id) {\n this.checkEdgeExistence(id);\n return this.edgeMap.get(id);\n }\n /**\n * Get the edge, the source node, and the target node by an edge ID.\n * @group EdgeMethods\n */\n getEdgeDetail(id) {\n const edge = this.getEdge(id);\n return {\n edge,\n source: this.getNode(edge.source),\n target: this.getNode(edge.target),\n };\n }\n doAddEdge(edge) {\n if (this.hasEdge(edge.id)) {\n throw new Error('Edge already exists: ' + edge.id);\n }\n this.checkNodeExistence(edge.source);\n this.checkNodeExistence(edge.target);\n this.edgeMap.set(edge.id, edge);\n const inEdges = this.inEdgesMap.get(edge.target);\n const outEdges = this.outEdgesMap.get(edge.source);\n inEdges.add(edge);\n outEdges.add(edge);\n this.changes.push({ type: 'EdgeAdded', value: edge });\n }\n /**\n * Add all edges of the given iterable(an array, a set, etc.) into the graph.\n * @group EdgeMethods\n */\n addEdges(edges) {\n this.batch(() => {\n for (const edge of edges) {\n this.doAddEdge(edge);\n }\n });\n }\n /**\n * Add a single edge pointing from `source` to `target` into the graph.\n *\n * ```ts\n * graph.addNode({ id: 'NodeA' });\n * graph.addNode({ id: 'NodeB' });\n * graph.addEdge({ id: 'EdgeA', source: 'NodeA', target: 'NodeB' });\n * ```\n *\n * If `source` or `target` were not found in the current graph, it throws an Error.\n * @group EdgeMethods\n */\n addEdge(edge) {\n this.addEdges([edge]);\n }\n doRemoveEdge(id) {\n const edge = this.getEdge(id);\n const outEdges = this.outEdgesMap.get(edge.source);\n const inEdges = this.inEdgesMap.get(edge.target);\n outEdges.delete(edge);\n inEdges.delete(edge);\n this.edgeMap.delete(id);\n this.changes.push({ type: 'EdgeRemoved', value: edge });\n }\n /**\n * Remove edges whose id was included in the given id list.\n * @group EdgeMethods\n */\n removeEdges(idList) {\n this.batch(() => {\n idList.forEach((id) => this.doRemoveEdge(id));\n });\n }\n /**\n * Remove a single edge of the given id.\n * @group EdgeMethods\n */\n removeEdge(id) {\n this.removeEdges([id]);\n }\n /**\n * Change the source of an edge. The source must be found in current graph.\n * @group EdgeMethods\n */\n updateEdgeSource(id, source) {\n const edge = this.getEdge(id);\n this.checkNodeExistence(source);\n const oldSource = edge.source;\n const newSource = source;\n this.outEdgesMap.get(oldSource).delete(edge);\n this.outEdgesMap.get(newSource).add(edge);\n edge.source = source;\n this.batch(() => {\n this.changes.push({\n type: 'EdgeUpdated',\n id,\n propertyName: 'source',\n oldValue: oldSource,\n newValue: newSource,\n });\n });\n }\n /**\n * Change the target of an edge. The target must be found in current graph.\n * @group EdgeMethods\n */\n updateEdgeTarget(id, target) {\n const edge = this.getEdge(id);\n this.checkNodeExistence(target);\n const oldTarget = edge.target;\n const newTarget = target;\n this.inEdgesMap.get(oldTarget).delete(edge);\n this.inEdgesMap.get(newTarget).add(edge);\n edge.target = target;\n this.batch(() => {\n this.changes.push({\n type: 'EdgeUpdated',\n id,\n propertyName: 'target',\n oldValue: oldTarget,\n newValue: newTarget,\n });\n });\n }\n /**\n * Update edge data.\n * @group EdgeMethods\n */\n updateEdgeData(id, propertyName, value) {\n const edge = this.getEdge(id);\n this.batch(() => {\n const oldValue = edge.data[propertyName];\n const newValue = value;\n edge.data[propertyName] = newValue;\n this.changes.push({\n type: 'EdgeDataUpdated',\n id,\n propertyName,\n oldValue,\n newValue,\n });\n });\n }\n /**\n * @group EdgeMethods\n */\n mergeEdgeData(id, patch) {\n this.batch(() => {\n Object.entries(patch).forEach(([propertyName, value]) => {\n this.updateEdgeData(id, propertyName, value);\n });\n });\n }\n // ================= Tree =================\n checkTreeExistence(treeKey) {\n if (!this.treeIndices.has(treeKey)) {\n throw new Error('Tree structure not found for treeKey: ' + treeKey);\n }\n }\n /**\n * Attach a new tree structure representing the hierarchy of all nodes in the graph.\n * @param treeKey A unique key of the tree structure. You can attach multiple tree structures with different keys.\n *\n * ```ts\n * const graph = new Graph({\n * nodes: [{ id: 1 }, { id: 2 }, { id: 3 }],\n * });\n * graph.attachTreeStructure('Inheritance');\n * graph.setParent(2, 1, 'Inheritance');\n * graph.setParent(3, 1, 'Inheritance');\n * graph.getRoots('Inheritance'); // [1]\n * graph.getChildren(1, 'Inheritance'); // [2,3]\n * ```\n * @group TreeMethods\n */\n attachTreeStructure(treeKey) {\n if (this.treeIndices.has(treeKey)) {\n // Already attached.\n return;\n }\n this.treeIndices.set(treeKey, {\n parentMap: new Map(),\n childrenMap: new Map(),\n });\n this.batch(() => {\n this.changes.push({\n type: 'TreeStructureAttached',\n treeKey,\n });\n });\n }\n /**\n * Detach the tree structure of the given tree key from the graph.\n *\n * ```ts\n * graph.detachTreeStructure('Inheritance');\n * graph.getRoots('Inheritance'); // Error!\n * ```\n * @group TreeMethods\n */\n detachTreeStructure(treeKey) {\n this.checkTreeExistence(treeKey);\n this.treeIndices.delete(treeKey);\n this.batch(() => {\n this.changes.push({\n type: 'TreeStructureDetached',\n treeKey,\n });\n });\n }\n /**\n * Traverse the given tree data, add each node into the graph, then attach the tree structure.\n *\n * ```ts\n * graph.addTree({\n * id: 1,\n * children: [\n * { id: 2 },\n * { id: 3 },\n * ],\n * }, 'Inheritance');\n * graph.getRoots('Inheritance'); // [1]\n * graph.getChildren(1, 'Inheritance'); // [2, 3]\n * graph.getAllNodes(); // [1, 2, 3]\n * graph.getAllEdges(); // []\n * ```\n * @group TreeMethods\n */\n addTree(tree, treeKey) {\n this.batch(() => {\n this.attachTreeStructure(treeKey);\n // Add Nodes\n const nodes = [];\n const stack = Array.isArray(tree) ? tree : [tree];\n while (stack.length) {\n const node = stack.shift();\n nodes.push(node);\n if (node.children) {\n stack.push(...node.children);\n }\n }\n this.addNodes(nodes);\n // Set parent for each child node.\n nodes.forEach((parent) => {\n parent.children?.forEach((child) => {\n this.setParent(child.id, parent.id, treeKey);\n });\n });\n });\n }\n /**\n * Get the root nodes of an attached tree structure.\n *\n * Consider a graph with the following tree structure attached:\n * ```\n * Tree structure:\n * O 3\n * / \\ |\n * 1 2 4\n * ```\n * `graph.getRoots()` takes all nodes without a parent, therefore [0, 3] was returned.\n *\n * Newly added nodes are also unparented. So they are counted as roots.\n * ```ts\n * graph.addNode({ id: 5 });\n * graph.getRoots(); // [0, 3, 5]\n * ```\n *\n * Here is how the tree structure looks like:\n * ```\n * Tree structure:\n * O 3 5\n * / \\ |\n * 1 2 4\n * ```\n *\n * By setting a parent, a root node no more be a root.\n * ```ts\n * graph.setParent(5, 2);\n * graph.getRoots(); // [0, 3]\n * ```\n *\n * The tree structure now becomes:\n * ```\n * Tree structure:\n * O 3\n * / \\ |\n * 1 2 4\n * |\n * 5\n * ```\n *\n * Removing a node forces its children to be unparented, or roots.\n * ```ts\n * graph.removeNode(0);\n * graph.getRoots(); // [1, 2, 3]\n * ```\n *\n * You might draw the the structure as follow:\n * ```\n * Tree structure:\n * 1 2 3\n * | |\n * 5 4\n * ```\n * @group TreeMethods\n */\n getRoots(treeKey) {\n this.checkTreeExistence(treeKey);\n return this.getAllNodes().filter((node) => !this.getParent(node.id, treeKey));\n }\n /**\n * Given a node ID and an optional tree key, get the children of the node in the specified tree structure.\n * @group TreeMethods\n */\n getChildren(id, treeKey) {\n this.checkNodeExistence(id);\n this.checkTreeExistence(treeKey);\n const tree = this.treeIndices.get(treeKey);\n const children = tree.childrenMap.get(id);\n return Array.from(children || []);\n }\n /**\n * Given a node ID and an optional tree key, get the parent of the node in the specified tree structure.\n * If the given node is one of the tree roots, this returns null.\n * @group TreeMethods\n */\n getParent(id, treeKey) {\n this.checkNodeExistence(id);\n this.checkTreeExistence(treeKey);\n const tree = this.treeIndices.get(treeKey);\n return tree.parentMap.get(id) || null;\n }\n /**\n * Set node parent. If this operation causes a circle, it fails with an error.\n * @param id - ID of the child node.\n * @param parent - ID of the parent node.\n * @param treeKey - Which tree structure the relation is applied to.\n * @group TreeMethods\n */\n setParent(id, parent, treeKey) {\n this.checkTreeExistence(treeKey);\n const tree = this.treeIndices.get(treeKey);\n const node = this.getNode(id);\n const oldParent = tree.parentMap.get(id);\n const newParent = this.getNode(parent);\n // Set parent\n tree.parentMap.set(id, newParent);\n // Set children\n if (oldParent) {\n tree.childrenMap.get(oldParent.id)?.delete(node);\n }\n let children = tree.childrenMap.get(newParent.id);\n if (!children) {\n children = new Set();\n tree.childrenMap.set(newParent.id, children);\n }\n children.add(node);\n this.batch(() => {\n this.changes.push({\n type: 'TreeStructureChanged',\n treeKey,\n nodeId: id,\n oldParentId: oldParent?.id,\n newParentId: newParent.id,\n });\n });\n }\n // ================= Graph =================\n /**\n * Get all nodes in the graph as an array.\n */\n getAllNodes() {\n return Array.from(this.nodeMap.values());\n }\n /**\n * Get all edges in the graph as an array.\n */\n getAllEdges() {\n return Array.from(this.edgeMap.values());\n }\n doBFS(queue, visited, fn) {\n while (queue.length) {\n const node = queue.shift();\n fn(node);\n visited.add(node.id);\n this.getSuccessors(node.id).forEach((n) => {\n if (!visited.has(n.id)) {\n visited.add(n.id);\n queue.push(n);\n }\n });\n }\n }\n bfs(id, fn) {\n this.doBFS([this.getNode(id)], new Set(), fn);\n }\n doDFS(node, visited, fn) {\n fn(node);\n visited.add(node.id);\n this.getSuccessors(node.id).forEach((n) => {\n if (!visited.has(n.id)) {\n this.doDFS(n, visited, fn);\n }\n });\n }\n dfs(id, fn) {\n this.doDFS(this.getNode(id), new Set(), fn);\n }\n clone() {\n // Make a shallow copy of nodes and edges.\n const newNodes = this.getAllNodes().map((oldNode) => {\n return { ...oldNode, data: { ...oldNode.data } };\n });\n const newEdges = this.getAllEdges().map((oldEdge) => {\n return { ...oldEdge, data: { ...oldEdge.data } };\n });\n // Create a new graph with shallow copied nodes and edges.\n const newGraph = new Graph({\n nodes: newNodes,\n edges: newEdges,\n });\n // Add tree indices.\n this.treeIndices.forEach(({ parentMap: oldParentMap, childrenMap: oldChildrenMap }, treeKey) => {\n const parentMap = new Map();\n oldParentMap.forEach((parent, key) => {\n parentMap.set(key, newGraph.getNode(parent.id));\n });\n const childrenMap = new Map();\n oldChildrenMap.forEach((children, key) => {\n childrenMap.set(key, new Set(Array.from(children).map((n) => newGraph.getNode(n.id))));\n });\n newGraph.treeIndices.set(treeKey, {\n parentMap: parentMap,\n childrenMap: childrenMap,\n });\n });\n return newGraph;\n }\n toJSON() {\n return JSON.stringify({\n nodes: this.getAllNodes(),\n edges: this.getAllEdges(),\n // FIXME: And tree structures?\n });\n }\n}\n//# sourceMappingURL=Graph.js.map","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","export const isString = (val: unknown): val is string =>\n typeof val === \"string\";\n\nconst cacheStringFunction = <T extends (str: string) => string>(fn: T): T => {\n const cache: Record<string, string> = Object.create(null);\n return ((str: string) => {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n }) as any;\n};\n\nconst camelizeRE = /-(\\w)/g;\nexport const camelize = cacheStringFunction((str: string): string => {\n return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : \"\"));\n});\n\n// export const capitalize = cacheStringFunction(\n// (str: string) => str.charAt(0).toUpperCase() + str.slice(1),\n// )\n","export const isArray = Array.isArray;\n","export const isObject = (val: unknown): val is Record<any, any> =>\n val !== null && typeof val === \"object\";\n\nexport const clone = <T>(target: T): T => {\n if (target === null) {\n return target;\n }\n if (target instanceof Date) {\n return new Date(target.getTime()) as any;\n }\n if (target instanceof Array) {\n const cp = [] as any[];\n (target as any[]).forEach((v) => {\n cp.push(v);\n });\n return cp.map((n: any) => clone<any>(n)) as any;\n }\n if (typeof target === \"object\" && Object.keys(target).length) {\n const cp = { ...(target as { [key: string]: any }) } as {\n [key: string]: any;\n };\n Object.keys(cp).forEach((k) => {\n cp[k] = clone<any>(cp[k]);\n });\n return cp as T;\n }\n return target;\n};\n","import {\n Matrix,\n Model,\n IndexMap,\n Edge,\n Node,\n OutNode,\n Degree,\n NodeMap,\n} from \"../types\";\nimport { isArray } from \"./array\";\nimport { isNumber } from \"./number\";\nimport { isObject } from \"./object\";\n\nexport const getEdgeTerminal = (edge: Edge, type: \"source\" | \"target\") => {\n const terminal = edge[type];\n if (isObject(terminal)) {\n return terminal.cell;\n }\n return terminal;\n};\n\nexport const getDegree = (\n n: number,\n nodeIdxMap: IndexMap,\n edges: Edge[] | null\n) => {\n const degrees: Degree[] = [];\n for (let i = 0; i < n; i++) {\n degrees[i] = {\n in: 0,\n out: 0,\n all: 0,\n };\n }\n if (!edges) return degrees;\n edges.forEach((e) => {\n const source = getEdgeTerminal(e, \"source\");\n const target = getEdgeTerminal(e, \"target\");\n if (source && degrees[nodeIdxMap[source]]) {\n degrees[nodeIdxMap[source]].out += 1;\n degrees[nodeIdxMap[source]].all += 1;\n }\n if (target && degrees[nodeIdxMap[target]]) {\n degrees[nodeIdxMap[target]].in += 1;\n degrees[nodeIdxMap[target]].all += 1;\n }\n });\n return degrees;\n};\n\nexport const getDegreeMap = (nodes: Node[], edges: Edge[] | null) => {\n const degreesMap: { [id: string]: Degree } = {};\n nodes.forEach((node) => {\n degreesMap[node.id] = {\n in: 0,\n out: 0,\n all: 0,\n };\n });\n\n if (!edges) return degreesMap;\n edges.forEach((e) => {\n const source = getEdgeTerminal(e, \"source\");\n const target = getEdgeTerminal(e, \"target\");\n if (source) {\n degreesMap[source].out += 1;\n degreesMap[source].all += 1;\n }\n if (target) {\n degreesMap[target].in += 1;\n degreesMap[target].all += 1;\n }\n });\n return degreesMap;\n};\n\nexport const floydWarshall = (adjMatrix: Matrix[]): Matrix[] => {\n // initialize\n const dist: Matrix[] = [];\n const size = adjMatrix.length;\n for (let i = 0; i < size; i += 1) {\n dist[i] = [];\n for (let j = 0; j < size; j += 1) {\n if (i === j) {\n dist[i][j] = 0;\n } else if (adjMatrix[i][j] === 0 || !adjMatrix[i][j]) {\n dist[i][j] = Infinity;\n } else {\n dist[i][j] = adjMatrix[i][j];\n }\n }\n }\n // floyd\n for (let k = 0; k < size; k += 1) {\n for (let i = 0; i < size; i += 1) {\n for (let j = 0; j < size; j += 1) {\n if (dist[i][j] > dist[i][k] + dist[k][j]) {\n dist[i][j] = dist[i][k] + dist[k][j];\n }\n }\n }\n }\n return dist;\n};\n\nexport const getAdjMatrix = (data: Model, directed: boolean): Matrix[] => {\n const { nodes, edges } = data;\n const matrix: Matrix[] = [];\n // map node with index in data.nodes\n const nodeMap: {\n [key: string]: number;\n } = {};\n\n if (!nodes) {\n throw new Error(\"invalid nodes data!\");\n }\n if (nodes) {\n nodes.forEach((node, i) => {\n nodeMap[node.id] = i;\n const row: number[] = [];\n matrix.push(row);\n });\n }\n\n edges?.forEach((e) => {\n const source = getEdgeTerminal(e, \"source\");\n const target = getEdgeTerminal(e, \"target\");\n const sIndex = nodeMap[source as string];\n const tIndex = nodeMap[target as string];\n if (sIndex === undefined || tIndex === undefined) return;\n matrix[sIndex][tIndex] = 1;\n if (!directed) {\n matrix[tIndex][sIndex] = 1;\n }\n });\n return matrix;\n};\n\n/**\n * scale matrix\n * @param matrix [ [], [], [] ]\n * @param ratio\n */\nexport const scaleMatrix = (matrix: Matrix[], ratio: number) => {\n const result: Matrix[] = [];\n matrix.forEach((row) => {\n const newRow: number[] = [];\n row.forEach((v) => {\n newRow.push(v * ratio);\n });\n result.push(newRow);\n });\n return result;\n};\n\n/**\n * depth first traverse, from leaves to root, children in inverse order\n * if the fn returns false, terminate the traverse\n */\nconst traverseUp = <T extends { children?: T[] }>(\n data: T,\n fn: (param: T) => boolean\n) => {\n if (data && data.children) {\n for (let i = data.children.length - 1; i >= 0; i--) {\n if (!traverseUp(data.children[i], fn)) return;\n }\n }\n\n if (!fn(data)) {\n return false;\n }\n return true;\n};\n\n/**\n * depth first traverse, from leaves to root, children in inverse order\n * if the fn returns false, terminate the traverse\n */\nexport const traverseTreeUp = <T extends { children?: T[] }>(\n data: T,\n fn: (param: T) => boolean\n) => {\n if (typeof fn !== \"function\") {\n return;\n }\n traverseUp(data, fn);\n};\n\n/**\n * calculate the bounding box for the nodes according to their x, y, and size\n * @param nodes nodes in the layout\n * @returns\n */\nexport const getLayoutBBox = (nodes: OutNode[]) => {\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n nodes.forEach((node) => {\n let size = node.size;\n if (isArray(size)) {\n if (size.length === 1) size = [size[0], size[0]];\n } else if (isNumber(size)) {\n size = [size, size];\n } else if (size === undefined || isNaN(size as any)) {\n size = [30, 30];\n }\n\n const halfSize = [size[0] / 2, size[1] / 2];\n const left = node.x - halfSize[0];\n const right = node.x + halfSize[0];\n const top = node.y - halfSize[1];\n const bottom = node.y + halfSize[1];\n\n if (minX > left) minX = left;\n if (minY > top) minY = top;\n if (maxX < right) maxX = right;\n if (maxY < bottom) maxY = bottom;\n });\n return { minX, minY, maxX, maxY };\n};\n\n/**\n * 获取节点集合的平均位置信息\n * @param nodes 节点集合\n * @returns 平局内置\n */\nexport const getAvgNodePosition = (nodes: OutNode[]) => {\n const totalNodes = { x: 0, y: 0 };\n nodes.forEach((node) => {\n totalNodes.x += node.x || 0;\n totalNodes.y += node.y || 0;\n });\n // 获取均值向量\n const length = nodes.length || 1;\n return {\n x: totalNodes.x / length,\n y: totalNodes.y / length,\n };\n};\n\n// 找出指定节点关联的边的起点或终点\nconst getCoreNode = (type: \"source\" | \"target\", node: Node, edges: Edge[]) => {\n if (type === \"source\") {\n return (edges?.find((edge) => edge.target === node.id)?.source ||\n {}) as Node;\n }\n return (edges?.find((edge) => edge.source === node.id)?.target || {}) as Node;\n};\n\n// 找出指定节点为起点或终点的所有一度叶子节点\nconst getRelativeNodeIds = (\n type: \"source\" | \"target\" | \"both\",\n coreNode: Node,\n edges: Edge[]\n) => {\n let relativeNodes: string[] = [];\n switch (type) {\n case \"source\":\n relativeNodes = edges\n ?.filter((edge) => edge.source === coreNode.id)\n .map((edge) => edge.target);\n break;\n case \"target\":\n relativeNodes = edges\n ?.filter((edge) => edge.target === coreNode.id)\n .map((edge) => edge.source);\n break;\n case \"both\":\n relativeNodes = edges\n ?.filter((edge) => edge.source === coreNode.id)\n .map((edge) => edge.target)\n .concat(\n edges\n ?.filter((edge) => edge.target === coreNode.id)\n .map((edge) => edge.source)\n );\n break;\n default:\n break;\n }\n // 去重\n const set = new Set(relativeNodes);\n return Array.from(set);\n};\n// 找出同类型的节点\nconst getSameTypeNodes = (\n type: \"leaf\" | \"all\",\n nodeClusterBy: string,\n node: Node,\n relativeNodes: Node[],\n degreesMap: { [id: string]: Degree }\n) => {\n // @ts-ignore\n const typeName = node[nodeClusterBy] || \"\";\n // @ts-ignore\n let sameTypeNodes =\n relativeNodes?.filter((item) => item[nodeClusterBy] === typeName) || [];\n if (type === \"leaf\") {\n sameTypeNodes = sameTypeNodes.filter(\n (node) => degreesMap[node.id]?.in === 0 || degreesMap[node.id]?.out === 0\n );\n }\n return sameTypeNodes;\n};\n\n// 找出与指定节点关联的边的起点或终点出发的所有一度叶子节点\nexport const getCoreNodeAndRelativeLeafNodes = (\n type: \"leaf\" | \"all\",\n node: Node,\n edges: Edge[],\n nodeClusterBy: string,\n degreesMap: { [id: string]: Degree },\n nodeMap: NodeMap\n) => {\n const { in: inDegree, out: outDegree } = degreesMap[node.id];\n let coreNode: Node = node;\n let relativeLeafNodes: Node[] = [];\n if (inDegree === 0) {\n // 如果为没有出边的叶子节点,则找出与它关联的边的起点出发的所有一度节点\n coreNode = getCoreNode(\"source\", node, edges);\n relativeLeafNodes = getRelativeNodeIds(\"both\", coreNode, edges).map(\n (nodeId) => nodeMap[nodeId]\n );\n } else if (outDegree === 0) {\n // 如果为没有入边边的叶子节点,则找出与它关联的边的起点出发的所有一度节点\n coreNode = getCoreNode(\"target\", node, edges);\n relativeLeafNodes = getRelativeNodeIds(\"both\", coreNode, edges).map(\n (nodeId) => nodeMap[nodeId]\n );\n }\n relativeLeafNodes = relativeLeafNodes.filter(\n (node) =>\n degreesMap[node.id] &&\n (degreesMap[node.id].in === 0 || degreesMap[node.id].out === 0)\n );\n const sameTypeLeafNodes = getSameTypeNodes(\n type,\n nodeClusterBy,\n node,\n relativeLeafNodes,\n degreesMap\n );\n return { coreNode, relativeLeafNodes, sameTypeLeafNodes };\n};\n","import { isArray, isObject } from \".\";\nimport { isNumber } from \"./number\";\n\nexport const isFunction = (val: unknown): val is Function =>\n typeof val === \"function\";\n\nexport const getFunc = (\n value: number,\n defaultValue: number,\n func?: ((d?: any) => number) | undefined\n): Function => {\n let resultFunc;\n if (func) {\n resultFunc = func;\n } else if (isNumber(value)) {\n resultFunc = () => value;\n } else {\n resultFunc = () => defaultValue;\n }\n return resultFunc;\n};\n\nexport const getFuncByUnknownType = (\n defaultValue: number,\n value?:\n | number\n | number[]\n | { width: number; height: number }\n | ((d?: any) => number)\n | undefined,\n resultIsNumber: boolean = true\n): ((d?: any) => number | number[]) => {\n if (!value && value !== 0) {\n return (d) => {\n if (d.size) {\n if (isArray(d.size))\n return d.size[0] > d.size[1] ? d.size[0] : d.size[1];\n if (isObject(d.size))\n return d.size.width > d.size.height ? d.size.width : d.size.height;\n return d.size;\n }\n return defaultValue;\n };\n }\n if (isFunction(value)) {\n return value;\n }\n if (isNumber(value)) {\n return () => value;\n }\n if (isArray(value)) {\n return () => {\n if (resultIsNumber) {\n const max = Math.max(...(value as number[]));\n return isNaN(max) ? defaultValue : max;\n }\n return value;\n };\n }\n if (isObject(value)) {\n return () => {\n if (resultIsNumber) {\n const max = Math.max(value.width, value.height);\n return isNaN(max) ? defaultValue : max;\n }\n return [value.width, value.height];\n };\n }\n return () => defaultValue;\n};\n","export const isNumber = (val: unknown): val is Number =>\n typeof val === \"number\";\n\nexport const isNaN = (num: unknown) => Number.isNaN(Number(num));\n\nexport const toNumber = (val: any): any => {\n const n = parseFloat(val);\n return isNaN(n) ? val : n;\n};\n","import type { Graph } from \"@antv/graphlib\";\nimport type { CircularLayoutOptions, SyncLayout, LayoutMapping, PointTuple, IndexMap, OutNode, Edge, Degree } from \"./types\";\nimport { getDegree, getEdgeTerminal, getFuncByUnknownType, clone } from \"./util\";\n\ntype INodeData = OutNode & {\n degree: number;\n size: number | PointTuple;\n weight: number;\n children: string[];\n parent: string[];\n};\n\ntype IEdgeData = {};\n\nconst DEFAULTS_LAYOUT_OPTIONS: Partial<CircularLayoutOptions> = {\n radius: null,\n startRadius: null,\n endRadius: null,\n startAngle: 0,\n endAngle: 2 * Math.PI,\n clockwise: true,\n divisions: 1,\n ordering: null,\n angleRatio: 1\n}\n\n/**\n * Layout arranging the nodes in a circle.\n * \n * @example\n * // Assign layout options when initialization.\n * const layout = new CircularLayout({ radius: 10 });\n * const positions = layout.execute(graph); // { nodes: [], edges: [] }\n * \n * // Or use different options later.\n * const layout = new CircularLayout({ radius: 10 });\n * const positions = layout.execute(graph, { radius: 20 }); // { nodes: [], edges: [] }\n * \n * // If you want to assign the positions directly to the nodes, use assign method.\n * layout.assign(graph, { radius: 20 });\n */\nexport class CircularLayout implements SyncLayout<CircularLayoutOptions> {\n id = 'circular';\n\n constructor(public options: CircularLayoutOptions = {} as CircularLayoutOptions) {\n Object.assign(this.options, DEFAULTS_LAYOUT_OPTIONS, options);\n }\n\n /**\n * Return the positions of nodes and edges(if needed).\n */\n execute(graph: Graph<INodeData, IEdgeData>, options?: CircularLayoutOptions): LayoutMapping {\n return this.genericCircularLayout(false, graph, options) as LayoutMapping;\n }\n\n /**\n * To directly assign the positions to the nodes.\n */\n assign(graph: Graph<INodeData, IEdgeData>, options?: CircularLayoutOptions) {\n graph.batch(() => {\n this.genericCircularLayout(true, graph, options);\n });\n }\n\n private genericCircularLayout(assign: boolean, graph: Graph<INodeData, IEdgeData>, options?: CircularLayoutOptions): LayoutMapping | void {\n const mergedOptions = { ...this.options, ...options };\n const { width, height, center, divisions, startAngle = 0, endAngle = 2 * Math.PI, angleRatio, ordering, clockwise, nodeSpacing: paramNodeSpacing, nodeSize: paramNodeSize, onLayoutEnd } = mergedOptions;\n\n const nodes = graph.getAllNodes();\n const edges = graph.getAllEdges() as Edge[];\n const n = nodes.length;\n\n // Need no layout if there is no node.\n if (n === 0) {\n if (onLayoutEnd) {\n onLayoutEnd();\n }\n return {\n nodes: [],\n edges: [],\n };\n }\n\n // Calculate center according to `window` if not provided.\n const [calculatedWidth, calculatedHeight, calculatedCenter] = calculateCenter(width, height, center);\n\n // Layout easily if there is only one node.\n if (n === 1) {\n if (assign) {\n graph.updateNodeData(nodes[0].id, \"x\", calculatedCenter[0]);\n graph.updateNodeData(nodes[0].id, \"y\", calculatedCenter[1]);\n }\n \n if (onLayoutEnd) {\n onLayoutEnd();\n }\n return {\n nodes: [\n {\n id: `${nodes[0].id}`,\n x: calculatedCenter[0],\n y: calculatedCenter[1],\n }\n ],\n edges: [],\n };\n }\n\n const angleStep = (endAngle - startAngle) / n;\n const nodeMap: IndexMap = {};\n nodes.forEach((node, i) => {\n nodeMap[node.id] = i;\n });\n const degrees = getDegree(nodes.length, nodeMap, edges as Edge[]);\n\n let { radius, startRadius, endRadius } = mergedOptions;\n if (paramNodeSpacing) {\n const nodeSpacing: Function = getFuncByUnknownType(10, paramNodeSpacing);\n const nodeSize: Function = getFuncByUnknownType(10, paramNodeSize);\n let maxNodeSize = -Infinity;\n nodes.forEach((node) => {\n const nSize = nodeSize(node);\n if (maxNodeSize < nSize) maxNodeSize = nSize;\n });\n let length = 0;\n nodes.forEach((node, i) => {\n if (i === 0) length += (maxNodeSize || 10);\n else length += (nodeSpacing(node) || 0) + (maxNodeSize || 10);\n });\n radius = length / (2 * Math.PI);\n } else if (!radius && !startRadius && !endRadius) {\n radius = calculatedHeight > calculatedWidth ? calculatedWidth / 2 : calculatedHeight / 2;\n } else if (!startRadius && endRadius) {\n startRadius = endRadius;\n } else if (startRadius && !endRadius) {\n endRadius = startRadius;\n }\n const astep = angleStep * angleRatio!;\n\n let layoutNodes: any[] = [];\n let nodesData = nodes.map((node) => node.data);\n if (ordering === \"topology\") {\n // layout according to the topology\n layoutNodes = topologyOrdering(degrees, nodesData, edges, nodeMap);\n } else if (ordering === \"topology-directed\") {\n // layout according to the topology\n layoutNodes = topologyOrdering(degrees, nodesData, edges, nodeMap, true);\n } else if (ordering === \"degree\") {\n // layout according to the descent order of degrees\n layoutNodes = degreeOrdering(degrees, nodesData);\n } else {\n // layout according to the original order in the data.nodes\n layoutNodes = nodes;\n }\n\n const divN = Math.ceil(n / divisions!); // node number in each division\n for (let i = 0; i < n; ++i) {\n let r = radius;\n if (!r && startRadius !== null && endRadius !== null) {\n r = startRadius! + (i * (endRadius! - startRadius!)) / (n - 1);\n }\n if (!r) {\n r = 10 + (i * 100) / (n - 1);\n }\n let angle =\n startAngle +\n (i % divN) * astep +\n ((2 * Math.PI) / divisions!) * Math.floor(i / divN);\n if (!clockwise) {\n angle =\n endAngle -\n (i % divN) * astep -\n ((2 * Math.PI) / divisions!) * Math.floor(i / divN);\n }\n layoutNodes[i].x = calculatedCenter[0] + Math.cos(angle) * r;\n layoutNodes[i].y = calculatedCenter[1] + Math.sin(angle) * r;\n layoutNodes[i].weight = degrees[i].all;\n }\n\n if (assign) {\n layoutNodes.forEach((node) => {\n graph.mergeNodeData(node.id, {\n x: node.x,\n y: node.y,\n weight: node.weight,\n });\n });\n }\n\n if (onLayoutEnd) {\n onLayoutEnd();\n };\n\n return {\n nodes: layoutNodes,\n edges\n };\n }\n}\n\nfunction initHierarchy(\n nodes: INodeData[],\n edges: Edge[],\n nodeMap: IndexMap,\n directed: boolean\n) {\n nodes.forEach((_, i: number) => {\n nodes[i].children = [];\n nodes[i].parent = [];\n });\n if (directed) {\n edges.forEach((e) => {\n const source = getEdgeTerminal(e, 'source');\n const target = getEdgeTerminal(e, 'target');\n let sourceIdx = 0;\n if (source) {\n sourceIdx = nodeMap[source];\n }\n let targetIdx = 0;\n if (target) {\n targetIdx = nodeMap[target];\n }\n const child = nodes[sourceIdx].children!;\n const parent = nodes[targetIdx].parent!;\n child.push(nodes[targetIdx].id);\n parent.push(nodes[sourceIdx].id);\n });\n } else {\n edges.forEach((e) => {\n const source = getEdgeTerminal(e, 'source');\n const target = getEdgeTerminal(e, 'target');\n let sourceIdx = 0;\n if (source) {\n sourceIdx = nodeMap[source];\n }\n let targetIdx = 0;\n if (target) {\n targetIdx = nodeMap[target];\n }\n const sourceChildren = nodes[sourceIdx].children!;\n const targetChildren = nodes[targetIdx].children!;\n sourceChildren.push(nodes[targetIdx].id);\n targetChildren.push(nodes[sourceIdx].id);\n });\n }\n}\n\nfunction connect(a: INodeData, b: INodeData, edges: Edge[]) {\n const m = edges.length;\n for (let i = 0; i < m; i++) {\n const source = getEdgeTerminal(edges[i], 'source');\n const target = getEdgeTerminal(edges[i], 'target');\n if (\n (a.id === source && b.id === target) ||\n (b.id === source && a.id === target)\n ) {\n return true;\n }\n }\n return false;\n}\n\nfunction compareDegree(a: INodeData, b: INodeData) {\n const aDegree = a.degree!;\n const bDegree = b.degree!;\n if (aDegree < bDegree) {\n return -1;\n }\n if (aDegree > bDegree) {\n return 1;\n }\n return 0;\n}\n\nfunction topologyOrdering(\n degrees: Degree[],\n nodes: INodeData[],\n edges: Edge[],\n nodeMap: IndexMap, \n directed: boolean = false\n) {\n const cnodes = clone(nodes);\n const orderedCNodes = [cnodes[0]];\n const resNodes = [nodes[0]];\n const pickFlags: boolean[] = [];\n const n = nodes.length;\n pickFlags[0] = true;\n initHierarchy(cnodes, edges, nodeMap, directed);\n let k = 0;\n cnodes.forEach((cnode, i) => {\n if (i !== 0) {\n if (\n (i === n - 1 ||\n degrees[i].all !== degrees[i + 1].all ||\n connect(\n orderedCNodes[k],\n cnode,\n edges\n )) &&\n !pickFlags[i]\n ) {\n orderedCNodes.push(cnode);\n resNodes.push(nodes[nodeMap[cnode.id]]);\n pickFlags[i] = true;\n k++;\n } else {\n const children = orderedCNodes[k].children!;\n let foundChild = false;\n for (let j = 0; j < children.length; j++) {\n const childIdx = nodeMap[children[j]];\n if (degrees[childIdx].all === degrees[i].all && !pickFlags[childIdx]) {\n orderedCNodes.push(cnodes[childIdx]);\n resNodes.push(nodes[nodeMap[cnodes[childIdx].id]]);\n pickFlags[childIdx] = true;\n foundChild = true;\n break;\n }\n }\n let ii = 0;\n while (!foundChild) {\n if (!pickFlags[ii]) {\n orderedCNodes.push(cnodes[ii]);\n resNodes.push(nodes[nodeMap[cnodes[ii].id]]);\n pickFlags[ii] = true;\n foundChild = true;\n }\n ii++;\n if (ii === n) {\n break;\n }\n }\n }\n }\n });\n return resNodes;\n}\n\nfunction degreeOrdering(\n degrees: Degree[],\n nodes: INodeData[],\n): INodeData[] {\n const orderedNodes: INodeData[] = [];\n nodes.forEach((node, i) => {\n node.degree = degrees[i].all;\n orderedNodes.push(node);\n });\n orderedNodes.sort(compareDegree);\n return orderedNodes;\n}\n\nfunction calculateCenter(width: number | undefined, height: number | undefined, center: PointTuple | undefined): [number, number, PointTuple] {\n let calculatedWidth = width;\n let calculatedHeight = height;\n let calculatedCenter = center;\n if (!calculatedWidth && typeof window !== \"undefined\") {\n calculatedWidth = window.innerWidth;\n }\n if (!calculatedHeight && typeof window !== \"undefined\") {\n calculatedHeight = window.innerHeight;\n }\n if (!calculatedCenter) {\n calculatedCenter = [calculatedWidth! / 2, calculatedHeight! / 2];\n }\n return [calculatedWidth!, calculatedHeight!, calculatedCenter];\n}","import { CircularLayout } from \"./circular\";\nimport type { SyncLayoutConstructor } from \"./types\";\n\nexport const registry: Record<string, SyncLayoutConstructor<any>> = {\n circular: CircularLayout,\n};\nexport function registerLayout(id: string, layout: SyncLayoutConstructor<any>) {\n registry[id] = layout;\n}\n","import { Graph } from \"@antv/graphlib\";\n// import { setupTransferableMethodsOnWorker } from \"@naoak/workerize-transferable\";\nimport { registry } from \"./registry\";\nimport type { Payload } from \"./supervisor\";\nimport type { LayoutMapping, SyncLayout } from \"./types\";\n\n// @see https://www.npmjs.com/package/@naoak/workerize-transferable\n// setupTransferableMethodsOnWorker({\n// // The name of function which use some transferables.\n// calculateLayout: {\n// // Specify an instance of the function\n// fn: calculateLayout,\n// // Pick a transferable object from the result which is an instance of Float32Array\n// pickTransferablesFromResult: (result) => [result[1].buffer],\n// },\n// });\n\nexport function calculateLayout(payload: Payload, transferables: Float32Array[]) {\n const { layout: { id, options }, nodes, edges } = payload;\n\n // Sync graph on the worker side.\n // TODO: Use transferable objects like ArrayBuffer for nodes & edges, \n // in which case we don't need the whole graph.\n // @see https://github.com/graphology/graphology/blob/master/src/layout-noverlap/webworker.tpl.js#L32\n const graph = new Graph({\n nodes: nodes,\n edges: edges,\n });\n\n /**\n * Create layout instance on the worker side.\n */\n let layout: SyncLayout<any>;\n let positions: LayoutMapping;\n const layoutCtor = registry[id];\n if (layoutCtor) {\n layout = new layoutCtor(options);\n } else {\n throw new Error('Unknown layout id: ' + id);\n }\n\n // Do calculation.\n positions = layout.execute(graph);\n \n return [positions, transferables];\n}\n"],"names":["__webpack_require__","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Graph","nodeMap","Map","edgeMap","inEdgesMap","outEdgesMap","treeIndices","changes","batchCount","onChanged","constructor","options","nodes","this","addNodes","edges","addEdges","tree","addTree","batch","fn","commit","graph","reduceChanges","mergedChanges","forEach","change","type","isNewlyAdded","filter","pastChange","sameId","value","id","nodeId","push","existingChange","find","propertyName","newValue","treeKey","newParentId","checkNodeExistence","hasNode","Error","has","areNeighbors","firstNodeId","secondNodeId","getNeighbors","some","neighbor","getNode","getRelatedEdges","direction","inEdges","outEdges","Array","from","bothEdges","Set","getDegree","length","getSuccessors","targets","map","edge","target","getPredecessors","sources","source","predecessors","successors","doAddNode","node","set","childrenMap","addNode","doRemoveNode","doRemoveEdge","delete","child","parentMap","removeNodes","idList","removeNode","updateNodeData","oldValue","data","mergeNodeData","patch","entries","checkEdgeExistence","hasEdge","getEdge","getEdgeDetail","doAddEdge","add","addEdge","removeEdges","removeEdge","updateEdgeSource","oldSource","newSource","updateEdgeTarget","oldTarget","newTarget","updateEdgeData","mergeEdgeData","checkTreeExistence","attachTreeStructure","detachTreeStructure","stack","isArray","shift","children","parent","setParent","getRoots","getAllNodes","getParent","getChildren","oldParent","newParent","oldParentId","values","getAllEdges","doBFS","queue","visited","n","bfs","doDFS","dfs","clone","newNodes","oldNode","newEdges","oldEdge","newGraph","oldParentMap","oldChildrenMap","toJSON","JSON","stringify","__assign","assign","t","s","i","arguments","p","apply","__read","m","Symbol","iterator","r","e","ar","next","done","error","create","camelizeRE","str","replace","_","c","toUpperCase","isObject","val","Date","getTime","v","keys","k","getEdgeTerminal","terminal","cell","getFuncByUnknownType","defaultValue","resultIsNumber","max","Math","to","pack","l","slice","concat","isNaN","width","height","d","size","DEFAULTS_LAYOUT_OPTIONS","radius","startRadius","endRadius","startAngle","endAngle","PI","clockwise","divisions","ordering","angleRatio","compareDegree","a","b","aDegree","degree","bDegree","topologyOrdering","degrees","directed","cnodes","orderedCNodes","resNodes","pickFlags","sourceIdx","targetIdx","sourceChildren","targetChildren","initHierarchy","cnode","all","connect","foundChild","j","childIdx","ii","registry","circular","execute","genericCircularLayout","mergedOptions","center","paramNodeSpacing","paramNodeSize","onLayoutEnd","calculatedWidth","calculatedHeight","calculatedCenter","window","innerWidth","innerHeight","calculateCenter","x","y","angleStep","nodeIdxMap","in","out","nSize","astep","layoutNodes","nodesData","orderedNodes","sort","degreeOrdering","divN","ceil","angle","floor","cos","sin","weight","calculateLayout","payload","transferables","layoutCtor"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ var Layout;(()=>{var e={161:e=>{"use strict";var t=Object.prototype.hasOwnProperty,r="~";function a(){}function n(e,t,r){this.fn=e,this.context=t,this.once=r||!1}function s(e,t,a,s,i){if("function"!=typeof a)throw new TypeError("The listener must be a function");var o=new n(a,s||e,i),d=r?r+t:t;return e._events[d]?e._events[d].fn?e._events[d]=[e._events[d],o]:e._events[d].push(o):(e._events[d]=o,e._eventsCount++),e}function i(e,t){0==--e._eventsCount?e._events=new a:delete e._events[t]}function o(){this._events=new a,this._eventsCount=0}Object.create&&(a.prototype=Object.create(null),(new a).__proto__||(r=!1)),o.prototype.eventNames=function(){var e,a,n=[];if(0===this._eventsCount)return n;for(a in e=this._events)t.call(e,a)&&n.push(r?a.slice(1):a);return Object.getOwnPropertySymbols?n.concat(Object.getOwnPropertySymbols(e)):n},o.prototype.listeners=function(e){var t=r?r+e:e,a=this._events[t];if(!a)return[];if(a.fn)return[a.fn];for(var n=0,s=a.length,i=new Array(s);n<s;n++)i[n]=a[n].fn;return i},o.prototype.listenerCount=function(e){var t=r?r+e:e,a=this._events[t];return a?a.fn?1:a.length:0},o.prototype.emit=function(e,t,a,n,s,i){var o=r?r+e:e;if(!this._events[o])return!1;var d,c,h=this._events[o],u=arguments.length;if(h.fn){switch(h.once&&this.removeListener(e,h.fn,void 0,!0),u){case 1:return h.fn.call(h.context),!0;case 2:return h.fn.call(h.context,t),!0;case 3:return h.fn.call(h.context,t,a),!0;case 4:return h.fn.call(h.context,t,a,n),!0;case 5:return h.fn.call(h.context,t,a,n,s),!0;case 6:return h.fn.call(h.context,t,a,n,s,i),!0}for(c=1,d=new Array(u-1);c<u;c++)d[c-1]=arguments[c];h.fn.apply(h.context,d)}else{var g,l=h.length;for(c=0;c<l;c++)switch(h[c].once&&this.removeListener(e,h[c].fn,void 0,!0),u){case 1:h[c].fn.call(h[c].context);break;case 2:h[c].fn.call(h[c].context,t);break;case 3:h[c].fn.call(h[c].context,t,a);break;case 4:h[c].fn.call(h[c].context,t,a,n);break;default:if(!d)for(g=1,d=new Array(u-1);g<u;g++)d[g-1]=arguments[g];h[c].fn.apply(h[c].context,d)}}return!0},o.prototype.on=function(e,t,r){return s(this,e,t,r,!1)},o.prototype.once=function(e,t,r){return s(this,e,t,r,!0)},o.prototype.removeListener=function(e,t,a,n){var s=r?r+e:e;if(!this._events[s])return this;if(!t)return i(this,s),this;var o=this._events[s];if(o.fn)o.fn!==t||n&&!o.once||a&&o.context!==a||i(this,s);else{for(var d=0,c=[],h=o.length;d<h;d++)(o[d].fn!==t||n&&!o[d].once||a&&o[d].context!==a)&&c.push(o[d]);c.length?this._events[s]=1===c.length?c[0]:c:i(this,s)}return this},o.prototype.removeAllListeners=function(e){var t;return e?(t=r?r+e:e,this._events[t]&&i(this,t)):(this._events=new a,this._eventsCount=0),this},o.prototype.off=o.prototype.removeListener,o.prototype.addListener=o.prototype.on,o.prefixed=r,o.EventEmitter=o,e.exports=o},190:(e,t,r)=>{var a=r(314),n=["calculateLayout"];e.exports=function(){var e=new Worker(URL.createObjectURL(new Blob(['(()=>{"use strict";var e={d:(t,r)=>{for(var a in r)e.o(r,a)&&!e.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:r[a]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},t={};e.d(t,{calculateLayout:()=>f});class r{nodeMap=new Map;edgeMap=new Map;inEdgesMap=new Map;outEdgesMap=new Map;treeIndices=new Map;changes=[];batchCount=0;onChanged=()=>{};constructor(e){e&&(e.nodes&&this.addNodes(e.nodes),e.edges&&this.addEdges(e.edges),e.tree&&this.addTree(e.tree),e.onChanged&&(this.onChanged=e.onChanged))}batch=e=>{this.batchCount+=1,e(),this.batchCount-=1,this.batchCount||this.commit()};commit(){const e=this.changes;this.changes=[],this.onChanged({graph:this,changes:e})}reduceChanges(e){let t=[];return e.forEach((e=>{switch(e.type){case"NodeRemoved":{let r=!1;t=t.filter((t=>{if("NodeAdded"===t.type){const a=t.value.id===e.value.id;return a&&(r=!0),!a}return"NodeDataUpdated"===t.type?t.id!==e.value.id:"TreeStructureChanged"!==t.type||t.nodeId!==e.value.id})),r||t.push(e);break}case"EdgeRemoved":{let r=!1;t=t.filter((t=>{if("EdgeAdded"===t.type){const a=t.value.id===e.value.id;return a&&(r=!0),!a}return"EdgeDataUpdated"!==t.type&&"EdgeUpdated"!==t.type||t.id!==e.value.id})),r||t.push(e);break}case"NodeDataUpdated":case"EdgeDataUpdated":case"EdgeUpdated":{const r=t.find((t=>t.type===e.type&&t.id===e.id&&t.propertyName===e.propertyName));r?r.newValue=e.newValue:t.push(e);break}case"TreeStructureDetached":t=t.filter((t=>"TreeStructureAttached"===t.type?t.treeKey!==e.treeKey:"TreeStructureChanged"!==t.type||t.treeKey!==e.treeKey)),t.push(e);break;case"TreeStructureChanged":{const r=t.find((t=>"TreeStructureChanged"===t.type&&t.treeKey===e.treeKey&&t.nodeId===e.nodeId));r?r.newParentId=e.newParentId:t.push(e);break}default:t.push(e)}})),t}checkNodeExistence(e){if(!this.hasNode(e))throw new Error("Node not found for id: "+e)}hasNode(e){return this.nodeMap.has(e)}areNeighbors(e,t){return this.checkNodeExistence(e),this.getNeighbors(t).some((t=>t.id===e))}getNode(e){return this.checkNodeExistence(e),this.nodeMap.get(e)}getRelatedEdges(e,t){this.checkNodeExistence(e);const r=this.inEdgesMap.get(e),a=this.outEdgesMap.get(e);if("in"===t)return Array.from(r);if("out"===t)return Array.from(a);const d=new Set([...r,...a]);return Array.from(d)}getDegree(e,t){return this.getRelatedEdges(e,t).length}getSuccessors(e){const t=this.getRelatedEdges(e,"out").map((e=>e.target));return Array.from(new Set(t)).map((e=>this.getNode(e)))}getPredecessors(e){const t=this.getRelatedEdges(e,"in").map((e=>e.source));return Array.from(new Set(t)).map((e=>this.getNode(e)))}getNeighbors(e){const t=this.getPredecessors(e),r=this.getSuccessors(e);return Array.from(new Set([...t,...r]))}doAddNode(e){if(this.hasNode(e.id))throw new Error("Node already exists: "+e.id);this.nodeMap.set(e.id,e),this.inEdgesMap.set(e.id,new Set),this.outEdgesMap.set(e.id,new Set),this.treeIndices.forEach((t=>{t.childrenMap.set(e.id,new Set)})),this.changes.push({type:"NodeAdded",value:e})}addNodes(e){this.batch((()=>{for(const t of e)this.doAddNode(t)}))}addNode(e){this.addNodes([e])}doRemoveNode(e){const t=this.getNode(e),r=this.inEdgesMap.get(e),a=this.outEdgesMap.get(e);r?.forEach((e=>this.doRemoveEdge(e.id))),a?.forEach((e=>this.doRemoveEdge(e.id))),this.nodeMap.delete(e),this.treeIndices.forEach((t=>{t.childrenMap.get(e)?.forEach((e=>{t.parentMap.delete(e.id)})),t.parentMap.delete(e),t.childrenMap.delete(e)})),this.changes.push({type:"NodeRemoved",value:t})}removeNodes(e){this.batch((()=>{e.forEach((e=>this.doRemoveNode(e)))}))}removeNode(e){this.removeNodes([e])}updateNodeData(e,t,r){const a=this.getNode(e);this.batch((()=>{const d=a.data[t],s=r;a.data[t]=s,this.changes.push({type:"NodeDataUpdated",id:e,propertyName:t,oldValue:d,newValue:s})}))}mergeNodeData(e,t){this.batch((()=>{Object.entries(t).forEach((([t,r])=>{this.updateNodeData(e,t,r)}))}))}checkEdgeExistence(e){if(!this.hasEdge(e))throw new Error("Edge not found for id: "+e)}hasEdge(e){return this.edgeMap.has(e)}getEdge(e){return this.checkEdgeExistence(e),this.edgeMap.get(e)}getEdgeDetail(e){const t=this.getEdge(e);return{edge:t,source:this.getNode(t.source),target:this.getNode(t.target)}}doAddEdge(e){if(this.hasEdge(e.id))throw new Error("Edge already exists: "+e.id);this.checkNodeExistence(e.source),this.checkNodeExistence(e.target),this.edgeMap.set(e.id,e);const t=this.inEdgesMap.get(e.target),r=this.outEdgesMap.get(e.source);t.add(e),r.add(e),this.changes.push({type:"EdgeAdded",value:e})}addEdges(e){this.batch((()=>{for(const t of e)this.doAddEdge(t)}))}addEdge(e){this.addEdges([e])}doRemoveEdge(e){const t=this.getEdge(e),r=this.outEdgesMap.get(t.source),a=this.inEdgesMap.get(t.target);r.delete(t),a.delete(t),this.edgeMap.delete(e),this.changes.push({type:"EdgeRemoved",value:t})}removeEdges(e){this.batch((()=>{e.forEach((e=>this.doRemoveEdge(e)))}))}removeEdge(e){this.removeEdges([e])}updateEdgeSource(e,t){const r=this.getEdge(e);this.checkNodeExistence(t);const a=r.source,d=t;this.outEdgesMap.get(a).delete(r),this.outEdgesMap.get(d).add(r),r.source=t,this.batch((()=>{this.changes.push({type:"EdgeUpdated",id:e,propertyName:"source",oldValue:a,newValue:d})}))}updateEdgeTarget(e,t){const r=this.getEdge(e);this.checkNodeExistence(t);const a=r.target,d=t;this.inEdgesMap.get(a).delete(r),this.inEdgesMap.get(d).add(r),r.target=t,this.batch((()=>{this.changes.push({type:"EdgeUpdated",id:e,propertyName:"target",oldValue:a,newValue:d})}))}updateEdgeData(e,t,r){const a=this.getEdge(e);this.batch((()=>{const d=a.data[t],s=r;a.data[t]=s,this.changes.push({type:"EdgeDataUpdated",id:e,propertyName:t,oldValue:d,newValue:s})}))}mergeEdgeData(e,t){this.batch((()=>{Object.entries(t).forEach((([t,r])=>{this.updateEdgeData(e,t,r)}))}))}checkTreeExistence(e){if(!this.treeIndices.has(e))throw new Error("Tree structure not found for treeKey: "+e)}attachTreeStructure(e){this.treeIndices.has(e)||(this.treeIndices.set(e,{parentMap:new Map,childrenMap:new Map}),this.batch((()=>{this.changes.push({type:"TreeStructureAttached",treeKey:e})})))}detachTreeStructure(e){this.checkTreeExistence(e),this.treeIndices.delete(e),this.batch((()=>{this.changes.push({type:"TreeStructureDetached",treeKey:e})}))}addTree(e,t){this.batch((()=>{this.attachTreeStructure(t);const r=[],a=Array.isArray(e)?e:[e];for(;a.length;){const e=a.shift();r.push(e),e.children&&a.push(...e.children)}this.addNodes(r),r.forEach((e=>{e.children?.forEach((r=>{this.setParent(r.id,e.id,t)}))}))}))}getRoots(e){return this.checkTreeExistence(e),this.getAllNodes().filter((t=>!this.getParent(t.id,e)))}getChildren(e,t){this.checkNodeExistence(e),this.checkTreeExistence(t);const r=this.treeIndices.get(t).childrenMap.get(e);return Array.from(r||[])}getParent(e,t){return this.checkNodeExistence(e),this.checkTreeExistence(t),this.treeIndices.get(t).parentMap.get(e)||null}setParent(e,t,r){this.checkTreeExistence(r);const a=this.treeIndices.get(r),d=this.getNode(e),s=a.parentMap.get(e),n=this.getNode(t);a.parentMap.set(e,n),s&&a.childrenMap.get(s.id)?.delete(d);let i=a.childrenMap.get(n.id);i||(i=new Set,a.childrenMap.set(n.id,i)),i.add(d),this.batch((()=>{this.changes.push({type:"TreeStructureChanged",treeKey:r,nodeId:e,oldParentId:s?.id,newParentId:n.id})}))}getAllNodes(){return Array.from(this.nodeMap.values())}getAllEdges(){return Array.from(this.edgeMap.values())}doBFS(e,t,r){for(;e.length;){const a=e.shift();r(a),t.add(a.id),this.getSuccessors(a.id).forEach((r=>{t.has(r.id)||(t.add(r.id),e.push(r))}))}}bfs(e,t){this.doBFS([this.getNode(e)],new Set,t)}doDFS(e,t,r){r(e),t.add(e.id),this.getSuccessors(e.id).forEach((e=>{t.has(e.id)||this.doDFS(e,t,r)}))}dfs(e,t){this.doDFS(this.getNode(e),new Set,t)}clone(){const e=this.getAllNodes().map((e=>({...e,data:{...e.data}}))),t=this.getAllEdges().map((e=>({...e,data:{...e.data}}))),a=new r({nodes:e,edges:t});return this.treeIndices.forEach((({parentMap:e,childrenMap:t},r)=>{const d=new Map;e.forEach(((e,t)=>{d.set(t,a.getNode(e.id))}));const s=new Map;t.forEach(((e,t)=>{s.set(t,new Set(Array.from(e).map((e=>a.getNode(e.id)))))})),a.treeIndices.set(r,{parentMap:d,childrenMap:s})})),a}toJSON(){return JSON.stringify({nodes:this.getAllNodes(),edges:this.getAllEdges()})}}var a=function(){return a=Object.assign||function(e){for(var t,r=1,a=arguments.length;r<a;r++)for(var d in t=arguments[r])Object.prototype.hasOwnProperty.call(t,d)&&(e[d]=t[d]);return e},a.apply(this,arguments)};function d(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var a,d,s=r.call(e),n=[];try{for(;(void 0===t||t-- >0)&&!(a=s.next()).done;)n.push(a.value)}catch(e){d={error:e}}finally{try{a&&!a.done&&(r=s.return)&&r.call(s)}finally{if(d)throw d.error}}return n}Object.create,Object.create;var s=/-(\\w)/g,n=(function(e){return e.replace(s,(function(e,t){return t?t.toUpperCase():""}))},Object.create(null),Array.isArray),i=function(e){return null!==e&&"object"==typeof e},o=function(e){if(null===e)return e;if(e instanceof Date)return new Date(e.getTime());if(e instanceof Array){var t=[];return e.forEach((function(e){t.push(e)})),t.map((function(e){return o(e)}))}if("object"==typeof e&&Object.keys(e).length){var r=a({},e);return Object.keys(r).forEach((function(e){r[e]=o(r[e])})),r}return e},h=function(e,t){var r=e[t];return i(r)?r.cell:r},c=function(e,t,r){return void 0===r&&(r=!0),t||0===t?"function"==typeof t?t:"number"==typeof t?function(){return t}:n(t)?function(){if(r){var a=Math.max.apply(Math,function(e,t,r){if(r||2===arguments.length)for(var a,d=0,s=t.length;d<s;d++)!a&&d in t||(a||(a=Array.prototype.slice.call(t,0,d)),a[d]=t[d]);return e.concat(a||Array.prototype.slice.call(t))}([],d(t),!1));return isNaN(a)?e:a}return t}:i(t)?function(){if(r){var a=Math.max(t.width,t.height);return isNaN(a)?e:a}return[t.width,t.height]}:function(){return e}:function(t){return t.size?n(t.size)?t.size[0]>t.size[1]?t.size[0]:t.size[1]:i(t.size)?t.size.width>t.size.height?t.size.width:t.size.height:t.size:e}},u={radius:null,startRadius:null,endRadius:null,startAngle:0,endAngle:2*Math.PI,clockwise:!0,divisions:1,ordering:null,angleRatio:1};function g(e,t){var r=e.degree,a=t.degree;return r<a?-1:r>a?1:0}function p(e,t,r,a,d){void 0===d&&(d=!1);var s=o(t),n=[s[0]],i=[t[0]],c=[],u=t.length;c[0]=!0,function(e,t,r,a){e.forEach((function(t,r){e[r].children=[],e[r].parent=[]})),a?t.forEach((function(t){var a=h(t,"source"),d=h(t,"target"),s=0;a&&(s=r[a]);var n=0;d&&(n=r[d]);var i=e[s].children,o=e[n].parent;i.push(e[n].id),o.push(e[s].id)})):t.forEach((function(t){var a=h(t,"source"),d=h(t,"target"),s=0;a&&(s=r[a]);var n=0;d&&(n=r[d]);var i=e[s].children,o=e[n].children;i.push(e[n].id),o.push(e[s].id)}))}(s,r,a,d);var g=0;return s.forEach((function(d,o){if(0!==o)if(o!==u-1&&e[o].all===e[o+1].all&&!function(e,t,r){for(var a=r.length,d=0;d<a;d++){var s=h(r[d],"source"),n=h(r[d],"target");if(e.id===s&&t.id===n||t.id===s&&e.id===n)return!0}return!1}(n[g],d,r)||c[o]){for(var p=n[g].children,l=!1,f=0;f<p.length;f++){var E=a[p[f]];if(e[E].all===e[o].all&&!c[E]){n.push(s[E]),i.push(t[a[s[E].id]]),c[E]=!0,l=!0;break}}for(var y=0;!l&&(c[y]||(n.push(s[y]),i.push(t[a[s[y].id]]),c[y]=!0,l=!0),++y!==u););}else n.push(d),i.push(t[a[d.id]]),c[o]=!0,g++})),i}var l={circular:function(){function e(e){void 0===e&&(e={}),this.options=e,this.id="circular",Object.assign(this.options,u,e)}return e.prototype.execute=function(e,t){return this.genericCircularLayout(!1,e,t)},e.prototype.assign=function(e,t){var r=this;e.batch((function(){r.genericCircularLayout(!0,e,t)}))},e.prototype.genericCircularLayout=function(e,t,r){var s=a(a({},this.options),r),n=s.width,i=s.height,o=s.center,u=s.divisions,l=s.startAngle,f=void 0===l?0:l,E=s.endAngle,y=void 0===E?2*Math.PI:E,v=s.angleRatio,N=s.ordering,M=s.clockwise,w=s.nodeSpacing,m=s.nodeSize,b=s.onLayoutEnd,A=t.getAllNodes(),S=t.getAllEdges(),k=A.length;if(0===k)return b&&b(),{nodes:[],edges:[]};var x=d(function(e,t,r){var a=e,d=t,s=r;return a||"undefined"==typeof window||(a=window.innerWidth),d||"undefined"==typeof window||(d=window.innerHeight),s||(s=[a/2,d/2]),[a,d,s]}(n,i,o),3),I=x[0],R=x[1],C=x[2];if(1===k)return e&&(t.updateNodeData(A[0].id,"x",C[0]),t.updateNodeData(A[0].id,"y",C[1])),b&&b(),{nodes:[{id:"".concat(A[0].id),x:C[0],y:C[1]}],edges:[]};var D=(y-f)/k,P={};A.forEach((function(e,t){P[e.id]=t}));var T=function(e,t,r){for(var a=[],d=0;d<e;d++)a[d]={in:0,out:0,all:0};return r?(r.forEach((function(e){var r=h(e,"source"),d=h(e,"target");r&&a[t[r]]&&(a[t[r]].out+=1,a[t[r]].all+=1),d&&a[t[d]]&&(a[t[d]].in+=1,a[t[d]].all+=1)})),a):a}(A.length,P,S),O=s.radius,j=s.startRadius,z=s.endRadius;if(w){var U=c(10,w),K=c(10,m),V=-1/0;A.forEach((function(e){var t=K(e);V<t&&(V=t)}));var L=0;A.forEach((function(e,t){L+=0===t?V||10:(U(e)||0)+(V||10)})),O=L/(2*Math.PI)}else O||j||z?!j&&z?j=z:j&&!z&&(z=j):O=R>I?I/2:R/2;var F=D*v,B=[],J=A.map((function(e){return e.data}));B="topology"===N?p(T,J,S,P):"topology-directed"===N?p(T,J,S,P,!0):"degree"===N?function(e,t){var r=[];return t.forEach((function(t,a){t.degree=e[a].all,r.push(t)})),r.sort(g),r}(T,J):A;for(var H=Math.ceil(k/u),W=0;W<k;++W){var q=O;q||null===j||null===z||(q=j+W*(z-j)/(k-1)),q||(q=10+100*W/(k-1));var G=f+W%H*F+2*Math.PI/u*Math.floor(W/H);M||(G=y-W%H*F-2*Math.PI/u*Math.floor(W/H)),B[W].x=C[0]+Math.cos(G)*q,B[W].y=C[1]+Math.sin(G)*q,B[W].weight=T[W].all}return e&&B.forEach((function(e){t.mergeNodeData(e.id,{x:e.x,y:e.y,weight:e.weight})})),b&&b(),{nodes:B,edges:S}},e}()};function f(e,t){var a=e.layout,d=a.id,s=a.options,n=e.nodes,i=e.edges,o=new r({nodes:n,edges:i}),h=l[d];if(!h)throw new Error("Unknown layout id: "+d);return[new h(s).execute(o),t]}addEventListener("message",(function(e){var r,a=e.data,d=a.type,s=a.method,n=a.id,i=a.params;"RPC"===d&&s&&((r=t[s])?Promise.resolve().then((function(){return r.apply(t,i)})):Promise.reject("No such method")).then((function(e){postMessage({type:"RPC",id:n,result:e})})).catch((function(e){var t={message:e};e.stack&&(t.message=e.message,t.stack=e.stack,t.name=e.name),postMessage({type:"RPC",id:n,error:t})}))})),postMessage({type:"RPC",method:"ready"})})();\n//# sourceMappingURL=3a54d760230d1933f953.worker.js.map'])),{name:"[fullhash].worker.js"});return URL.revokeObjectURL(URL.createObjectURL(new Blob(['(()=>{"use strict";var e={d:(t,r)=>{for(var a in r)e.o(r,a)&&!e.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:r[a]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},t={};e.d(t,{calculateLayout:()=>f});class r{nodeMap=new Map;edgeMap=new Map;inEdgesMap=new Map;outEdgesMap=new Map;treeIndices=new Map;changes=[];batchCount=0;onChanged=()=>{};constructor(e){e&&(e.nodes&&this.addNodes(e.nodes),e.edges&&this.addEdges(e.edges),e.tree&&this.addTree(e.tree),e.onChanged&&(this.onChanged=e.onChanged))}batch=e=>{this.batchCount+=1,e(),this.batchCount-=1,this.batchCount||this.commit()};commit(){const e=this.changes;this.changes=[],this.onChanged({graph:this,changes:e})}reduceChanges(e){let t=[];return e.forEach((e=>{switch(e.type){case"NodeRemoved":{let r=!1;t=t.filter((t=>{if("NodeAdded"===t.type){const a=t.value.id===e.value.id;return a&&(r=!0),!a}return"NodeDataUpdated"===t.type?t.id!==e.value.id:"TreeStructureChanged"!==t.type||t.nodeId!==e.value.id})),r||t.push(e);break}case"EdgeRemoved":{let r=!1;t=t.filter((t=>{if("EdgeAdded"===t.type){const a=t.value.id===e.value.id;return a&&(r=!0),!a}return"EdgeDataUpdated"!==t.type&&"EdgeUpdated"!==t.type||t.id!==e.value.id})),r||t.push(e);break}case"NodeDataUpdated":case"EdgeDataUpdated":case"EdgeUpdated":{const r=t.find((t=>t.type===e.type&&t.id===e.id&&t.propertyName===e.propertyName));r?r.newValue=e.newValue:t.push(e);break}case"TreeStructureDetached":t=t.filter((t=>"TreeStructureAttached"===t.type?t.treeKey!==e.treeKey:"TreeStructureChanged"!==t.type||t.treeKey!==e.treeKey)),t.push(e);break;case"TreeStructureChanged":{const r=t.find((t=>"TreeStructureChanged"===t.type&&t.treeKey===e.treeKey&&t.nodeId===e.nodeId));r?r.newParentId=e.newParentId:t.push(e);break}default:t.push(e)}})),t}checkNodeExistence(e){if(!this.hasNode(e))throw new Error("Node not found for id: "+e)}hasNode(e){return this.nodeMap.has(e)}areNeighbors(e,t){return this.checkNodeExistence(e),this.getNeighbors(t).some((t=>t.id===e))}getNode(e){return this.checkNodeExistence(e),this.nodeMap.get(e)}getRelatedEdges(e,t){this.checkNodeExistence(e);const r=this.inEdgesMap.get(e),a=this.outEdgesMap.get(e);if("in"===t)return Array.from(r);if("out"===t)return Array.from(a);const d=new Set([...r,...a]);return Array.from(d)}getDegree(e,t){return this.getRelatedEdges(e,t).length}getSuccessors(e){const t=this.getRelatedEdges(e,"out").map((e=>e.target));return Array.from(new Set(t)).map((e=>this.getNode(e)))}getPredecessors(e){const t=this.getRelatedEdges(e,"in").map((e=>e.source));return Array.from(new Set(t)).map((e=>this.getNode(e)))}getNeighbors(e){const t=this.getPredecessors(e),r=this.getSuccessors(e);return Array.from(new Set([...t,...r]))}doAddNode(e){if(this.hasNode(e.id))throw new Error("Node already exists: "+e.id);this.nodeMap.set(e.id,e),this.inEdgesMap.set(e.id,new Set),this.outEdgesMap.set(e.id,new Set),this.treeIndices.forEach((t=>{t.childrenMap.set(e.id,new Set)})),this.changes.push({type:"NodeAdded",value:e})}addNodes(e){this.batch((()=>{for(const t of e)this.doAddNode(t)}))}addNode(e){this.addNodes([e])}doRemoveNode(e){const t=this.getNode(e),r=this.inEdgesMap.get(e),a=this.outEdgesMap.get(e);r?.forEach((e=>this.doRemoveEdge(e.id))),a?.forEach((e=>this.doRemoveEdge(e.id))),this.nodeMap.delete(e),this.treeIndices.forEach((t=>{t.childrenMap.get(e)?.forEach((e=>{t.parentMap.delete(e.id)})),t.parentMap.delete(e),t.childrenMap.delete(e)})),this.changes.push({type:"NodeRemoved",value:t})}removeNodes(e){this.batch((()=>{e.forEach((e=>this.doRemoveNode(e)))}))}removeNode(e){this.removeNodes([e])}updateNodeData(e,t,r){const a=this.getNode(e);this.batch((()=>{const d=a.data[t],s=r;a.data[t]=s,this.changes.push({type:"NodeDataUpdated",id:e,propertyName:t,oldValue:d,newValue:s})}))}mergeNodeData(e,t){this.batch((()=>{Object.entries(t).forEach((([t,r])=>{this.updateNodeData(e,t,r)}))}))}checkEdgeExistence(e){if(!this.hasEdge(e))throw new Error("Edge not found for id: "+e)}hasEdge(e){return this.edgeMap.has(e)}getEdge(e){return this.checkEdgeExistence(e),this.edgeMap.get(e)}getEdgeDetail(e){const t=this.getEdge(e);return{edge:t,source:this.getNode(t.source),target:this.getNode(t.target)}}doAddEdge(e){if(this.hasEdge(e.id))throw new Error("Edge already exists: "+e.id);this.checkNodeExistence(e.source),this.checkNodeExistence(e.target),this.edgeMap.set(e.id,e);const t=this.inEdgesMap.get(e.target),r=this.outEdgesMap.get(e.source);t.add(e),r.add(e),this.changes.push({type:"EdgeAdded",value:e})}addEdges(e){this.batch((()=>{for(const t of e)this.doAddEdge(t)}))}addEdge(e){this.addEdges([e])}doRemoveEdge(e){const t=this.getEdge(e),r=this.outEdgesMap.get(t.source),a=this.inEdgesMap.get(t.target);r.delete(t),a.delete(t),this.edgeMap.delete(e),this.changes.push({type:"EdgeRemoved",value:t})}removeEdges(e){this.batch((()=>{e.forEach((e=>this.doRemoveEdge(e)))}))}removeEdge(e){this.removeEdges([e])}updateEdgeSource(e,t){const r=this.getEdge(e);this.checkNodeExistence(t);const a=r.source,d=t;this.outEdgesMap.get(a).delete(r),this.outEdgesMap.get(d).add(r),r.source=t,this.batch((()=>{this.changes.push({type:"EdgeUpdated",id:e,propertyName:"source",oldValue:a,newValue:d})}))}updateEdgeTarget(e,t){const r=this.getEdge(e);this.checkNodeExistence(t);const a=r.target,d=t;this.inEdgesMap.get(a).delete(r),this.inEdgesMap.get(d).add(r),r.target=t,this.batch((()=>{this.changes.push({type:"EdgeUpdated",id:e,propertyName:"target",oldValue:a,newValue:d})}))}updateEdgeData(e,t,r){const a=this.getEdge(e);this.batch((()=>{const d=a.data[t],s=r;a.data[t]=s,this.changes.push({type:"EdgeDataUpdated",id:e,propertyName:t,oldValue:d,newValue:s})}))}mergeEdgeData(e,t){this.batch((()=>{Object.entries(t).forEach((([t,r])=>{this.updateEdgeData(e,t,r)}))}))}checkTreeExistence(e){if(!this.treeIndices.has(e))throw new Error("Tree structure not found for treeKey: "+e)}attachTreeStructure(e){this.treeIndices.has(e)||(this.treeIndices.set(e,{parentMap:new Map,childrenMap:new Map}),this.batch((()=>{this.changes.push({type:"TreeStructureAttached",treeKey:e})})))}detachTreeStructure(e){this.checkTreeExistence(e),this.treeIndices.delete(e),this.batch((()=>{this.changes.push({type:"TreeStructureDetached",treeKey:e})}))}addTree(e,t){this.batch((()=>{this.attachTreeStructure(t);const r=[],a=Array.isArray(e)?e:[e];for(;a.length;){const e=a.shift();r.push(e),e.children&&a.push(...e.children)}this.addNodes(r),r.forEach((e=>{e.children?.forEach((r=>{this.setParent(r.id,e.id,t)}))}))}))}getRoots(e){return this.checkTreeExistence(e),this.getAllNodes().filter((t=>!this.getParent(t.id,e)))}getChildren(e,t){this.checkNodeExistence(e),this.checkTreeExistence(t);const r=this.treeIndices.get(t).childrenMap.get(e);return Array.from(r||[])}getParent(e,t){return this.checkNodeExistence(e),this.checkTreeExistence(t),this.treeIndices.get(t).parentMap.get(e)||null}setParent(e,t,r){this.checkTreeExistence(r);const a=this.treeIndices.get(r),d=this.getNode(e),s=a.parentMap.get(e),n=this.getNode(t);a.parentMap.set(e,n),s&&a.childrenMap.get(s.id)?.delete(d);let i=a.childrenMap.get(n.id);i||(i=new Set,a.childrenMap.set(n.id,i)),i.add(d),this.batch((()=>{this.changes.push({type:"TreeStructureChanged",treeKey:r,nodeId:e,oldParentId:s?.id,newParentId:n.id})}))}getAllNodes(){return Array.from(this.nodeMap.values())}getAllEdges(){return Array.from(this.edgeMap.values())}doBFS(e,t,r){for(;e.length;){const a=e.shift();r(a),t.add(a.id),this.getSuccessors(a.id).forEach((r=>{t.has(r.id)||(t.add(r.id),e.push(r))}))}}bfs(e,t){this.doBFS([this.getNode(e)],new Set,t)}doDFS(e,t,r){r(e),t.add(e.id),this.getSuccessors(e.id).forEach((e=>{t.has(e.id)||this.doDFS(e,t,r)}))}dfs(e,t){this.doDFS(this.getNode(e),new Set,t)}clone(){const e=this.getAllNodes().map((e=>({...e,data:{...e.data}}))),t=this.getAllEdges().map((e=>({...e,data:{...e.data}}))),a=new r({nodes:e,edges:t});return this.treeIndices.forEach((({parentMap:e,childrenMap:t},r)=>{const d=new Map;e.forEach(((e,t)=>{d.set(t,a.getNode(e.id))}));const s=new Map;t.forEach(((e,t)=>{s.set(t,new Set(Array.from(e).map((e=>a.getNode(e.id)))))})),a.treeIndices.set(r,{parentMap:d,childrenMap:s})})),a}toJSON(){return JSON.stringify({nodes:this.getAllNodes(),edges:this.getAllEdges()})}}var a=function(){return a=Object.assign||function(e){for(var t,r=1,a=arguments.length;r<a;r++)for(var d in t=arguments[r])Object.prototype.hasOwnProperty.call(t,d)&&(e[d]=t[d]);return e},a.apply(this,arguments)};function d(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var a,d,s=r.call(e),n=[];try{for(;(void 0===t||t-- >0)&&!(a=s.next()).done;)n.push(a.value)}catch(e){d={error:e}}finally{try{a&&!a.done&&(r=s.return)&&r.call(s)}finally{if(d)throw d.error}}return n}Object.create,Object.create;var s=/-(\\w)/g,n=(function(e){return e.replace(s,(function(e,t){return t?t.toUpperCase():""}))},Object.create(null),Array.isArray),i=function(e){return null!==e&&"object"==typeof e},o=function(e){if(null===e)return e;if(e instanceof Date)return new Date(e.getTime());if(e instanceof Array){var t=[];return e.forEach((function(e){t.push(e)})),t.map((function(e){return o(e)}))}if("object"==typeof e&&Object.keys(e).length){var r=a({},e);return Object.keys(r).forEach((function(e){r[e]=o(r[e])})),r}return e},h=function(e,t){var r=e[t];return i(r)?r.cell:r},c=function(e,t,r){return void 0===r&&(r=!0),t||0===t?"function"==typeof t?t:"number"==typeof t?function(){return t}:n(t)?function(){if(r){var a=Math.max.apply(Math,function(e,t,r){if(r||2===arguments.length)for(var a,d=0,s=t.length;d<s;d++)!a&&d in t||(a||(a=Array.prototype.slice.call(t,0,d)),a[d]=t[d]);return e.concat(a||Array.prototype.slice.call(t))}([],d(t),!1));return isNaN(a)?e:a}return t}:i(t)?function(){if(r){var a=Math.max(t.width,t.height);return isNaN(a)?e:a}return[t.width,t.height]}:function(){return e}:function(t){return t.size?n(t.size)?t.size[0]>t.size[1]?t.size[0]:t.size[1]:i(t.size)?t.size.width>t.size.height?t.size.width:t.size.height:t.size:e}},u={radius:null,startRadius:null,endRadius:null,startAngle:0,endAngle:2*Math.PI,clockwise:!0,divisions:1,ordering:null,angleRatio:1};function g(e,t){var r=e.degree,a=t.degree;return r<a?-1:r>a?1:0}function p(e,t,r,a,d){void 0===d&&(d=!1);var s=o(t),n=[s[0]],i=[t[0]],c=[],u=t.length;c[0]=!0,function(e,t,r,a){e.forEach((function(t,r){e[r].children=[],e[r].parent=[]})),a?t.forEach((function(t){var a=h(t,"source"),d=h(t,"target"),s=0;a&&(s=r[a]);var n=0;d&&(n=r[d]);var i=e[s].children,o=e[n].parent;i.push(e[n].id),o.push(e[s].id)})):t.forEach((function(t){var a=h(t,"source"),d=h(t,"target"),s=0;a&&(s=r[a]);var n=0;d&&(n=r[d]);var i=e[s].children,o=e[n].children;i.push(e[n].id),o.push(e[s].id)}))}(s,r,a,d);var g=0;return s.forEach((function(d,o){if(0!==o)if(o!==u-1&&e[o].all===e[o+1].all&&!function(e,t,r){for(var a=r.length,d=0;d<a;d++){var s=h(r[d],"source"),n=h(r[d],"target");if(e.id===s&&t.id===n||t.id===s&&e.id===n)return!0}return!1}(n[g],d,r)||c[o]){for(var p=n[g].children,l=!1,f=0;f<p.length;f++){var E=a[p[f]];if(e[E].all===e[o].all&&!c[E]){n.push(s[E]),i.push(t[a[s[E].id]]),c[E]=!0,l=!0;break}}for(var y=0;!l&&(c[y]||(n.push(s[y]),i.push(t[a[s[y].id]]),c[y]=!0,l=!0),++y!==u););}else n.push(d),i.push(t[a[d.id]]),c[o]=!0,g++})),i}var l={circular:function(){function e(e){void 0===e&&(e={}),this.options=e,this.id="circular",Object.assign(this.options,u,e)}return e.prototype.execute=function(e,t){return this.genericCircularLayout(!1,e,t)},e.prototype.assign=function(e,t){var r=this;e.batch((function(){r.genericCircularLayout(!0,e,t)}))},e.prototype.genericCircularLayout=function(e,t,r){var s=a(a({},this.options),r),n=s.width,i=s.height,o=s.center,u=s.divisions,l=s.startAngle,f=void 0===l?0:l,E=s.endAngle,y=void 0===E?2*Math.PI:E,v=s.angleRatio,N=s.ordering,M=s.clockwise,w=s.nodeSpacing,m=s.nodeSize,b=s.onLayoutEnd,A=t.getAllNodes(),S=t.getAllEdges(),k=A.length;if(0===k)return b&&b(),{nodes:[],edges:[]};var x=d(function(e,t,r){var a=e,d=t,s=r;return a||"undefined"==typeof window||(a=window.innerWidth),d||"undefined"==typeof window||(d=window.innerHeight),s||(s=[a/2,d/2]),[a,d,s]}(n,i,o),3),I=x[0],R=x[1],C=x[2];if(1===k)return e&&(t.updateNodeData(A[0].id,"x",C[0]),t.updateNodeData(A[0].id,"y",C[1])),b&&b(),{nodes:[{id:"".concat(A[0].id),x:C[0],y:C[1]}],edges:[]};var D=(y-f)/k,P={};A.forEach((function(e,t){P[e.id]=t}));var T=function(e,t,r){for(var a=[],d=0;d<e;d++)a[d]={in:0,out:0,all:0};return r?(r.forEach((function(e){var r=h(e,"source"),d=h(e,"target");r&&a[t[r]]&&(a[t[r]].out+=1,a[t[r]].all+=1),d&&a[t[d]]&&(a[t[d]].in+=1,a[t[d]].all+=1)})),a):a}(A.length,P,S),O=s.radius,j=s.startRadius,z=s.endRadius;if(w){var U=c(10,w),K=c(10,m),V=-1/0;A.forEach((function(e){var t=K(e);V<t&&(V=t)}));var L=0;A.forEach((function(e,t){L+=0===t?V||10:(U(e)||0)+(V||10)})),O=L/(2*Math.PI)}else O||j||z?!j&&z?j=z:j&&!z&&(z=j):O=R>I?I/2:R/2;var F=D*v,B=[],J=A.map((function(e){return e.data}));B="topology"===N?p(T,J,S,P):"topology-directed"===N?p(T,J,S,P,!0):"degree"===N?function(e,t){var r=[];return t.forEach((function(t,a){t.degree=e[a].all,r.push(t)})),r.sort(g),r}(T,J):A;for(var H=Math.ceil(k/u),W=0;W<k;++W){var q=O;q||null===j||null===z||(q=j+W*(z-j)/(k-1)),q||(q=10+100*W/(k-1));var G=f+W%H*F+2*Math.PI/u*Math.floor(W/H);M||(G=y-W%H*F-2*Math.PI/u*Math.floor(W/H)),B[W].x=C[0]+Math.cos(G)*q,B[W].y=C[1]+Math.sin(G)*q,B[W].weight=T[W].all}return e&&B.forEach((function(e){t.mergeNodeData(e.id,{x:e.x,y:e.y,weight:e.weight})})),b&&b(),{nodes:B,edges:S}},e}()};function f(e,t){var a=e.layout,d=a.id,s=a.options,n=e.nodes,i=e.edges,o=new r({nodes:n,edges:i}),h=l[d];if(!h)throw new Error("Unknown layout id: "+d);return[new h(s).execute(o),t]}addEventListener("message",(function(e){var r,a=e.data,d=a.type,s=a.method,n=a.id,i=a.params;"RPC"===d&&s&&((r=t[s])?Promise.resolve().then((function(){return r.apply(t,i)})):Promise.reject("No such method")).then((function(e){postMessage({type:"RPC",id:n,result:e})})).catch((function(e){var t={message:e};e.stack&&(t.message=e.message,t.stack=e.stack,t.name=e.name),postMessage({type:"RPC",id:n,error:t})}))})),postMessage({type:"RPC",method:"ready"})})();\n//# sourceMappingURL=3a54d760230d1933f953.worker.js.map']))),a(e,n),e}},314:e=>{e.exports=function(e,t){var r=0,a={};e.addEventListener("message",(function(t){var r=t.data;if("RPC"===r.type)if(r.id){var n=a[r.id];n&&(delete a[r.id],r.error?n[1](Object.assign(Error(r.error.message),r.error)):n[0](r.result))}else{var s=document.createEvent("Event");s.initEvent(r.method,!1,!1),s.data=r.params,e.dispatchEvent(s)}})),t.forEach((function(t){e[t]=function(){var n=arguments;return new Promise((function(s,i){var o=++r;a[o]=[s,i],e.postMessage({type:"RPC",id:o,method:t,params:[].slice.call(n)})}))}}))}}},t={};function r(a){var n=t[a];if(void 0!==n)return n.exports;var s=t[a]={exports:{}};return e[a](s,s.exports,r),s.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var a in t)r.o(t,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var a={};(()=>{"use strict";r.r(a),r.d(a,{CircularLayout:()=>g,Supervisor:()=>m,SupervisorEvent:()=>w,registerLayout:()=>M,registry:()=>N});var e=function(t,r){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},e(t,r)},t=function(){return t=Object.assign||function(e){for(var t,r=1,a=arguments.length;r<a;r++)for(var n in t=arguments[r])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e},t.apply(this,arguments)};function n(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var a,n,s=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(a=s.next()).done;)i.push(a.value)}catch(e){n={error:e}}finally{try{a&&!a.done&&(r=s.return)&&r.call(s)}finally{if(n)throw n.error}}return i}Object.create,Object.create;var s=/-(\w)/g,i=(function(e){return e.replace(s,(function(e,t){return t?t.toUpperCase():""}))},Object.create(null),Array.isArray),o=function(e){return null!==e&&"object"==typeof e},d=function(e){if(null===e)return e;if(e instanceof Date)return new Date(e.getTime());if(e instanceof Array){var r=[];return e.forEach((function(e){r.push(e)})),r.map((function(e){return d(e)}))}if("object"==typeof e&&Object.keys(e).length){var a=t({},e);return Object.keys(a).forEach((function(e){a[e]=d(a[e])})),a}return e},c=function(e,t){var r=e[t];return o(r)?r.cell:r},h=function(e,t,r){return void 0===r&&(r=!0),t||0===t?"function"==typeof t?t:"number"==typeof t?function(){return t}:i(t)?function(){if(r){var a=Math.max.apply(Math,function(e,t,r){if(r||2===arguments.length)for(var a,n=0,s=t.length;n<s;n++)!a&&n in t||(a||(a=Array.prototype.slice.call(t,0,n)),a[n]=t[n]);return e.concat(a||Array.prototype.slice.call(t))}([],n(t),!1));return isNaN(a)?e:a}return t}:o(t)?function(){if(r){var a=Math.max(t.width,t.height);return isNaN(a)?e:a}return[t.width,t.height]}:function(){return e}:function(t){return t.size?i(t.size)?t.size[0]>t.size[1]?t.size[0]:t.size[1]:o(t.size)?t.size.width>t.size.height?t.size.width:t.size.height:t.size:e}},u={radius:null,startRadius:null,endRadius:null,startAngle:0,endAngle:2*Math.PI,clockwise:!0,divisions:1,ordering:null,angleRatio:1},g=function(){function e(e){void 0===e&&(e={}),this.options=e,this.id="circular",Object.assign(this.options,u,e)}return e.prototype.execute=function(e,t){return this.genericCircularLayout(!1,e,t)},e.prototype.assign=function(e,t){var r=this;e.batch((function(){r.genericCircularLayout(!0,e,t)}))},e.prototype.genericCircularLayout=function(e,r,a){var s=t(t({},this.options),a),i=s.width,o=s.height,d=s.center,u=s.divisions,g=s.startAngle,f=void 0===g?0:g,y=s.endAngle,v=void 0===y?2*Math.PI:y,E=s.angleRatio,w=s.ordering,m=s.clockwise,N=s.nodeSpacing,M=s.nodeSize,b=s.onLayoutEnd,A=r.getAllNodes(),k=r.getAllEdges(),S=A.length;if(0===S)return b&&b(),{nodes:[],edges:[]};var x=n(function(e,t,r){var a=e,n=t,s=r;return a||"undefined"==typeof window||(a=window.innerWidth),n||"undefined"==typeof window||(n=window.innerHeight),s||(s=[a/2,n/2]),[a,n,s]}(i,o,d),3),j=x[0],O=x[1],C=x[2];if(1===S)return e&&(r.updateNodeData(A[0].id,"x",C[0]),r.updateNodeData(A[0].id,"y",C[1])),b&&b(),{nodes:[{id:"".concat(A[0].id),x:C[0],y:C[1]}],edges:[]};var P=(v-f)/S,R={};A.forEach((function(e,t){R[e.id]=t}));var T=function(e,t,r){for(var a=[],n=0;n<e;n++)a[n]={in:0,out:0,all:0};return r?(r.forEach((function(e){var r=c(e,"source"),n=c(e,"target");r&&a[t[r]]&&(a[t[r]].out+=1,a[t[r]].all+=1),n&&a[t[n]]&&(a[t[n]].in+=1,a[t[n]].all+=1)})),a):a}(A.length,R,k),I=s.radius,D=s.startRadius,z=s.endRadius;if(N){var L=h(10,N),_=h(10,M),U=-1/0;A.forEach((function(e){var t=_(e);U<t&&(U=t)}));var W=0;A.forEach((function(e,t){W+=0===t?U||10:(L(e)||0)+(U||10)})),I=W/(2*Math.PI)}else I||D||z?!D&&z?D=z:D&&!z&&(z=D):I=O>j?j/2:O/2;var V=P*E,K=[],B=A.map((function(e){return e.data}));K="topology"===w?p(T,B,k,R):"topology-directed"===w?p(T,B,k,R,!0):"degree"===w?function(e,t){var r=[];return t.forEach((function(t,a){t.degree=e[a].all,r.push(t)})),r.sort(l),r}(T,B):A;for(var F=Math.ceil(S/u),q=0;q<S;++q){var H=I;H||null===D||null===z||(H=D+q*(z-D)/(S-1)),H||(H=10+100*q/(S-1));var J=f+q%F*V+2*Math.PI/u*Math.floor(q/F);m||(J=v-q%F*V-2*Math.PI/u*Math.floor(q/F)),K[q].x=C[0]+Math.cos(J)*H,K[q].y=C[1]+Math.sin(J)*H,K[q].weight=T[q].all}return e&&K.forEach((function(e){r.mergeNodeData(e.id,{x:e.x,y:e.y,weight:e.weight})})),b&&b(),{nodes:K,edges:k}},e}();function l(e,t){var r=e.degree,a=t.degree;return r<a?-1:r>a?1:0}function p(e,t,r,a,n){void 0===n&&(n=!1);var s=d(t),i=[s[0]],o=[t[0]],h=[],u=t.length;h[0]=!0,function(e,t,r,a){e.forEach((function(t,r){e[r].children=[],e[r].parent=[]})),a?t.forEach((function(t){var a=c(t,"source"),n=c(t,"target"),s=0;a&&(s=r[a]);var i=0;n&&(i=r[n]);var o=e[s].children,d=e[i].parent;o.push(e[i].id),d.push(e[s].id)})):t.forEach((function(t){var a=c(t,"source"),n=c(t,"target"),s=0;a&&(s=r[a]);var i=0;n&&(i=r[n]);var o=e[s].children,d=e[i].children;o.push(e[i].id),d.push(e[s].id)}))}(s,r,a,n);var g=0;return s.forEach((function(n,d){if(0!==d)if(d!==u-1&&e[d].all===e[d+1].all&&!function(e,t,r){for(var a=r.length,n=0;n<a;n++){var s=c(r[n],"source"),i=c(r[n],"target");if(e.id===s&&t.id===i||t.id===s&&e.id===i)return!0}return!1}(i[g],n,r)||h[d]){for(var l=i[g].children,p=!1,f=0;f<l.length;f++){var y=a[l[f]];if(e[y].all===e[d].all&&!h[y]){i.push(s[y]),o.push(t[a[s[y].id]]),h[y]=!0,p=!0;break}}for(var v=0;!p&&(h[v]||(i.push(s[v]),o.push(t[a[s[v].id]]),h[v]=!0,p=!0),++v!==u););}else i.push(n),o.push(t[a[n.id]]),h[d]=!0,g++})),o}var f=r(161),y=r.n(f),v=r(190),E=r.n(v),w={LAYOUT_ITERATION:"tick",LAYOUT_END:"layoutend"},m=function(t){function r(e,r,a){var n=t.call(this)||this;return n.graph=e,n.layout=r,n.spawnWorker(),n}return function(t,r){if("function"!=typeof r&&null!==r)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");function a(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(a.prototype=r.prototype,new a)}(r,t),r.prototype.spawnWorker=function(){this.worker&&this.worker.terminate(),this.worker=E()(),this.running&&(this.running=!1,this.start())},r.prototype.start=function(){var e=this;if(this.running)return this;this.running=!0;var t={layout:{id:this.layout.id,options:this.layout.options},nodes:this.graph.getAllNodes(),edges:this.graph.getAllEdges()},r=new Float32Array([0]);return this.worker.calculateLayout(t,[r]).then((function(t){var r=n(t,2),a=r[0];r[1],e.emit(w.LAYOUT_END,a)})),this},r.prototype.stop=function(){return this.running=!1,this},r.prototype.kill=function(){this.worker&&this.worker.terminate()},r.prototype.isRunning=function(){return this.running},r}(y()),N={circular:g};function M(e,t){N[e]=t}})(),Layout=a})();
2
+ //# sourceMappingURL=index.min.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.min.js","mappings":"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","sources":["webpack://Layout/../../node_modules/eventemitter3/index.js","webpack://Layout/./src/worker.ts","webpack://Layout/./node_modules/workerize-loader/dist/rpc-wrapper.js","webpack://Layout/webpack/bootstrap","webpack://Layout/webpack/runtime/compat get default export","webpack://Layout/webpack/runtime/define property getters","webpack://Layout/webpack/runtime/hasOwnProperty shorthand","webpack://Layout/webpack/runtime/make namespace object","webpack://Layout/../../node_modules/tslib/tslib.es6.js","webpack://Layout/./src/util/string.ts","webpack://Layout/./src/util/array.ts","webpack://Layout/./src/util/object.ts","webpack://Layout/./src/util/math.ts","webpack://Layout/./src/util/function.ts","webpack://Layout/./src/util/number.ts","webpack://Layout/./src/circular.ts","webpack://Layout/./src/supervisor.ts","webpack://Layout/./src/registry.ts"],"sourcesContent":["'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","\n\t\t\t\tvar addMethods = require(\"../node_modules/workerize-loader/dist/rpc-wrapper.js\")\n\t\t\t\tvar methods = [\"calculateLayout\"]\n\t\t\t\tmodule.exports = function() {\n\t\t\t\t\tvar w = new Worker(URL.createObjectURL(new Blob([\"(()=>{\\\"use strict\\\";var e={d:(t,r)=>{for(var a in r)e.o(r,a)&&!e.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:r[a]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},t={};e.d(t,{calculateLayout:()=>f});class r{nodeMap=new Map;edgeMap=new Map;inEdgesMap=new Map;outEdgesMap=new Map;treeIndices=new Map;changes=[];batchCount=0;onChanged=()=>{};constructor(e){e&&(e.nodes&&this.addNodes(e.nodes),e.edges&&this.addEdges(e.edges),e.tree&&this.addTree(e.tree),e.onChanged&&(this.onChanged=e.onChanged))}batch=e=>{this.batchCount+=1,e(),this.batchCount-=1,this.batchCount||this.commit()};commit(){const e=this.changes;this.changes=[],this.onChanged({graph:this,changes:e})}reduceChanges(e){let t=[];return e.forEach((e=>{switch(e.type){case\\\"NodeRemoved\\\":{let r=!1;t=t.filter((t=>{if(\\\"NodeAdded\\\"===t.type){const a=t.value.id===e.value.id;return a&&(r=!0),!a}return\\\"NodeDataUpdated\\\"===t.type?t.id!==e.value.id:\\\"TreeStructureChanged\\\"!==t.type||t.nodeId!==e.value.id})),r||t.push(e);break}case\\\"EdgeRemoved\\\":{let r=!1;t=t.filter((t=>{if(\\\"EdgeAdded\\\"===t.type){const a=t.value.id===e.value.id;return a&&(r=!0),!a}return\\\"EdgeDataUpdated\\\"!==t.type&&\\\"EdgeUpdated\\\"!==t.type||t.id!==e.value.id})),r||t.push(e);break}case\\\"NodeDataUpdated\\\":case\\\"EdgeDataUpdated\\\":case\\\"EdgeUpdated\\\":{const r=t.find((t=>t.type===e.type&&t.id===e.id&&t.propertyName===e.propertyName));r?r.newValue=e.newValue:t.push(e);break}case\\\"TreeStructureDetached\\\":t=t.filter((t=>\\\"TreeStructureAttached\\\"===t.type?t.treeKey!==e.treeKey:\\\"TreeStructureChanged\\\"!==t.type||t.treeKey!==e.treeKey)),t.push(e);break;case\\\"TreeStructureChanged\\\":{const r=t.find((t=>\\\"TreeStructureChanged\\\"===t.type&&t.treeKey===e.treeKey&&t.nodeId===e.nodeId));r?r.newParentId=e.newParentId:t.push(e);break}default:t.push(e)}})),t}checkNodeExistence(e){if(!this.hasNode(e))throw new Error(\\\"Node not found for id: \\\"+e)}hasNode(e){return this.nodeMap.has(e)}areNeighbors(e,t){return this.checkNodeExistence(e),this.getNeighbors(t).some((t=>t.id===e))}getNode(e){return this.checkNodeExistence(e),this.nodeMap.get(e)}getRelatedEdges(e,t){this.checkNodeExistence(e);const r=this.inEdgesMap.get(e),a=this.outEdgesMap.get(e);if(\\\"in\\\"===t)return Array.from(r);if(\\\"out\\\"===t)return Array.from(a);const d=new Set([...r,...a]);return Array.from(d)}getDegree(e,t){return this.getRelatedEdges(e,t).length}getSuccessors(e){const t=this.getRelatedEdges(e,\\\"out\\\").map((e=>e.target));return Array.from(new Set(t)).map((e=>this.getNode(e)))}getPredecessors(e){const t=this.getRelatedEdges(e,\\\"in\\\").map((e=>e.source));return Array.from(new Set(t)).map((e=>this.getNode(e)))}getNeighbors(e){const t=this.getPredecessors(e),r=this.getSuccessors(e);return Array.from(new Set([...t,...r]))}doAddNode(e){if(this.hasNode(e.id))throw new Error(\\\"Node already exists: \\\"+e.id);this.nodeMap.set(e.id,e),this.inEdgesMap.set(e.id,new Set),this.outEdgesMap.set(e.id,new Set),this.treeIndices.forEach((t=>{t.childrenMap.set(e.id,new Set)})),this.changes.push({type:\\\"NodeAdded\\\",value:e})}addNodes(e){this.batch((()=>{for(const t of e)this.doAddNode(t)}))}addNode(e){this.addNodes([e])}doRemoveNode(e){const t=this.getNode(e),r=this.inEdgesMap.get(e),a=this.outEdgesMap.get(e);r?.forEach((e=>this.doRemoveEdge(e.id))),a?.forEach((e=>this.doRemoveEdge(e.id))),this.nodeMap.delete(e),this.treeIndices.forEach((t=>{t.childrenMap.get(e)?.forEach((e=>{t.parentMap.delete(e.id)})),t.parentMap.delete(e),t.childrenMap.delete(e)})),this.changes.push({type:\\\"NodeRemoved\\\",value:t})}removeNodes(e){this.batch((()=>{e.forEach((e=>this.doRemoveNode(e)))}))}removeNode(e){this.removeNodes([e])}updateNodeData(e,t,r){const a=this.getNode(e);this.batch((()=>{const d=a.data[t],s=r;a.data[t]=s,this.changes.push({type:\\\"NodeDataUpdated\\\",id:e,propertyName:t,oldValue:d,newValue:s})}))}mergeNodeData(e,t){this.batch((()=>{Object.entries(t).forEach((([t,r])=>{this.updateNodeData(e,t,r)}))}))}checkEdgeExistence(e){if(!this.hasEdge(e))throw new Error(\\\"Edge not found for id: \\\"+e)}hasEdge(e){return this.edgeMap.has(e)}getEdge(e){return this.checkEdgeExistence(e),this.edgeMap.get(e)}getEdgeDetail(e){const t=this.getEdge(e);return{edge:t,source:this.getNode(t.source),target:this.getNode(t.target)}}doAddEdge(e){if(this.hasEdge(e.id))throw new Error(\\\"Edge already exists: \\\"+e.id);this.checkNodeExistence(e.source),this.checkNodeExistence(e.target),this.edgeMap.set(e.id,e);const t=this.inEdgesMap.get(e.target),r=this.outEdgesMap.get(e.source);t.add(e),r.add(e),this.changes.push({type:\\\"EdgeAdded\\\",value:e})}addEdges(e){this.batch((()=>{for(const t of e)this.doAddEdge(t)}))}addEdge(e){this.addEdges([e])}doRemoveEdge(e){const t=this.getEdge(e),r=this.outEdgesMap.get(t.source),a=this.inEdgesMap.get(t.target);r.delete(t),a.delete(t),this.edgeMap.delete(e),this.changes.push({type:\\\"EdgeRemoved\\\",value:t})}removeEdges(e){this.batch((()=>{e.forEach((e=>this.doRemoveEdge(e)))}))}removeEdge(e){this.removeEdges([e])}updateEdgeSource(e,t){const r=this.getEdge(e);this.checkNodeExistence(t);const a=r.source,d=t;this.outEdgesMap.get(a).delete(r),this.outEdgesMap.get(d).add(r),r.source=t,this.batch((()=>{this.changes.push({type:\\\"EdgeUpdated\\\",id:e,propertyName:\\\"source\\\",oldValue:a,newValue:d})}))}updateEdgeTarget(e,t){const r=this.getEdge(e);this.checkNodeExistence(t);const a=r.target,d=t;this.inEdgesMap.get(a).delete(r),this.inEdgesMap.get(d).add(r),r.target=t,this.batch((()=>{this.changes.push({type:\\\"EdgeUpdated\\\",id:e,propertyName:\\\"target\\\",oldValue:a,newValue:d})}))}updateEdgeData(e,t,r){const a=this.getEdge(e);this.batch((()=>{const d=a.data[t],s=r;a.data[t]=s,this.changes.push({type:\\\"EdgeDataUpdated\\\",id:e,propertyName:t,oldValue:d,newValue:s})}))}mergeEdgeData(e,t){this.batch((()=>{Object.entries(t).forEach((([t,r])=>{this.updateEdgeData(e,t,r)}))}))}checkTreeExistence(e){if(!this.treeIndices.has(e))throw new Error(\\\"Tree structure not found for treeKey: \\\"+e)}attachTreeStructure(e){this.treeIndices.has(e)||(this.treeIndices.set(e,{parentMap:new Map,childrenMap:new Map}),this.batch((()=>{this.changes.push({type:\\\"TreeStructureAttached\\\",treeKey:e})})))}detachTreeStructure(e){this.checkTreeExistence(e),this.treeIndices.delete(e),this.batch((()=>{this.changes.push({type:\\\"TreeStructureDetached\\\",treeKey:e})}))}addTree(e,t){this.batch((()=>{this.attachTreeStructure(t);const r=[],a=Array.isArray(e)?e:[e];for(;a.length;){const e=a.shift();r.push(e),e.children&&a.push(...e.children)}this.addNodes(r),r.forEach((e=>{e.children?.forEach((r=>{this.setParent(r.id,e.id,t)}))}))}))}getRoots(e){return this.checkTreeExistence(e),this.getAllNodes().filter((t=>!this.getParent(t.id,e)))}getChildren(e,t){this.checkNodeExistence(e),this.checkTreeExistence(t);const r=this.treeIndices.get(t).childrenMap.get(e);return Array.from(r||[])}getParent(e,t){return this.checkNodeExistence(e),this.checkTreeExistence(t),this.treeIndices.get(t).parentMap.get(e)||null}setParent(e,t,r){this.checkTreeExistence(r);const a=this.treeIndices.get(r),d=this.getNode(e),s=a.parentMap.get(e),n=this.getNode(t);a.parentMap.set(e,n),s&&a.childrenMap.get(s.id)?.delete(d);let i=a.childrenMap.get(n.id);i||(i=new Set,a.childrenMap.set(n.id,i)),i.add(d),this.batch((()=>{this.changes.push({type:\\\"TreeStructureChanged\\\",treeKey:r,nodeId:e,oldParentId:s?.id,newParentId:n.id})}))}getAllNodes(){return Array.from(this.nodeMap.values())}getAllEdges(){return Array.from(this.edgeMap.values())}doBFS(e,t,r){for(;e.length;){const a=e.shift();r(a),t.add(a.id),this.getSuccessors(a.id).forEach((r=>{t.has(r.id)||(t.add(r.id),e.push(r))}))}}bfs(e,t){this.doBFS([this.getNode(e)],new Set,t)}doDFS(e,t,r){r(e),t.add(e.id),this.getSuccessors(e.id).forEach((e=>{t.has(e.id)||this.doDFS(e,t,r)}))}dfs(e,t){this.doDFS(this.getNode(e),new Set,t)}clone(){const e=this.getAllNodes().map((e=>({...e,data:{...e.data}}))),t=this.getAllEdges().map((e=>({...e,data:{...e.data}}))),a=new r({nodes:e,edges:t});return this.treeIndices.forEach((({parentMap:e,childrenMap:t},r)=>{const d=new Map;e.forEach(((e,t)=>{d.set(t,a.getNode(e.id))}));const s=new Map;t.forEach(((e,t)=>{s.set(t,new Set(Array.from(e).map((e=>a.getNode(e.id)))))})),a.treeIndices.set(r,{parentMap:d,childrenMap:s})})),a}toJSON(){return JSON.stringify({nodes:this.getAllNodes(),edges:this.getAllEdges()})}}var a=function(){return a=Object.assign||function(e){for(var t,r=1,a=arguments.length;r<a;r++)for(var d in t=arguments[r])Object.prototype.hasOwnProperty.call(t,d)&&(e[d]=t[d]);return e},a.apply(this,arguments)};function d(e,t){var r=\\\"function\\\"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var a,d,s=r.call(e),n=[];try{for(;(void 0===t||t-- >0)&&!(a=s.next()).done;)n.push(a.value)}catch(e){d={error:e}}finally{try{a&&!a.done&&(r=s.return)&&r.call(s)}finally{if(d)throw d.error}}return n}Object.create,Object.create;var s=/-(\\\\w)/g,n=(function(e){return e.replace(s,(function(e,t){return t?t.toUpperCase():\\\"\\\"}))},Object.create(null),Array.isArray),i=function(e){return null!==e&&\\\"object\\\"==typeof e},o=function(e){if(null===e)return e;if(e instanceof Date)return new Date(e.getTime());if(e instanceof Array){var t=[];return e.forEach((function(e){t.push(e)})),t.map((function(e){return o(e)}))}if(\\\"object\\\"==typeof e&&Object.keys(e).length){var r=a({},e);return Object.keys(r).forEach((function(e){r[e]=o(r[e])})),r}return e},h=function(e,t){var r=e[t];return i(r)?r.cell:r},c=function(e,t,r){return void 0===r&&(r=!0),t||0===t?\\\"function\\\"==typeof t?t:\\\"number\\\"==typeof t?function(){return t}:n(t)?function(){if(r){var a=Math.max.apply(Math,function(e,t,r){if(r||2===arguments.length)for(var a,d=0,s=t.length;d<s;d++)!a&&d in t||(a||(a=Array.prototype.slice.call(t,0,d)),a[d]=t[d]);return e.concat(a||Array.prototype.slice.call(t))}([],d(t),!1));return isNaN(a)?e:a}return t}:i(t)?function(){if(r){var a=Math.max(t.width,t.height);return isNaN(a)?e:a}return[t.width,t.height]}:function(){return e}:function(t){return t.size?n(t.size)?t.size[0]>t.size[1]?t.size[0]:t.size[1]:i(t.size)?t.size.width>t.size.height?t.size.width:t.size.height:t.size:e}},u={radius:null,startRadius:null,endRadius:null,startAngle:0,endAngle:2*Math.PI,clockwise:!0,divisions:1,ordering:null,angleRatio:1};function g(e,t){var r=e.degree,a=t.degree;return r<a?-1:r>a?1:0}function p(e,t,r,a,d){void 0===d&&(d=!1);var s=o(t),n=[s[0]],i=[t[0]],c=[],u=t.length;c[0]=!0,function(e,t,r,a){e.forEach((function(t,r){e[r].children=[],e[r].parent=[]})),a?t.forEach((function(t){var a=h(t,\\\"source\\\"),d=h(t,\\\"target\\\"),s=0;a&&(s=r[a]);var n=0;d&&(n=r[d]);var i=e[s].children,o=e[n].parent;i.push(e[n].id),o.push(e[s].id)})):t.forEach((function(t){var a=h(t,\\\"source\\\"),d=h(t,\\\"target\\\"),s=0;a&&(s=r[a]);var n=0;d&&(n=r[d]);var i=e[s].children,o=e[n].children;i.push(e[n].id),o.push(e[s].id)}))}(s,r,a,d);var g=0;return s.forEach((function(d,o){if(0!==o)if(o!==u-1&&e[o].all===e[o+1].all&&!function(e,t,r){for(var a=r.length,d=0;d<a;d++){var s=h(r[d],\\\"source\\\"),n=h(r[d],\\\"target\\\");if(e.id===s&&t.id===n||t.id===s&&e.id===n)return!0}return!1}(n[g],d,r)||c[o]){for(var p=n[g].children,l=!1,f=0;f<p.length;f++){var E=a[p[f]];if(e[E].all===e[o].all&&!c[E]){n.push(s[E]),i.push(t[a[s[E].id]]),c[E]=!0,l=!0;break}}for(var y=0;!l&&(c[y]||(n.push(s[y]),i.push(t[a[s[y].id]]),c[y]=!0,l=!0),++y!==u););}else n.push(d),i.push(t[a[d.id]]),c[o]=!0,g++})),i}var l={circular:function(){function e(e){void 0===e&&(e={}),this.options=e,this.id=\\\"circular\\\",Object.assign(this.options,u,e)}return e.prototype.execute=function(e,t){return this.genericCircularLayout(!1,e,t)},e.prototype.assign=function(e,t){var r=this;e.batch((function(){r.genericCircularLayout(!0,e,t)}))},e.prototype.genericCircularLayout=function(e,t,r){var s=a(a({},this.options),r),n=s.width,i=s.height,o=s.center,u=s.divisions,l=s.startAngle,f=void 0===l?0:l,E=s.endAngle,y=void 0===E?2*Math.PI:E,v=s.angleRatio,N=s.ordering,M=s.clockwise,w=s.nodeSpacing,m=s.nodeSize,b=s.onLayoutEnd,A=t.getAllNodes(),S=t.getAllEdges(),k=A.length;if(0===k)return b&&b(),{nodes:[],edges:[]};var x=d(function(e,t,r){var a=e,d=t,s=r;return a||\\\"undefined\\\"==typeof window||(a=window.innerWidth),d||\\\"undefined\\\"==typeof window||(d=window.innerHeight),s||(s=[a/2,d/2]),[a,d,s]}(n,i,o),3),I=x[0],R=x[1],C=x[2];if(1===k)return e&&(t.updateNodeData(A[0].id,\\\"x\\\",C[0]),t.updateNodeData(A[0].id,\\\"y\\\",C[1])),b&&b(),{nodes:[{id:\\\"\\\".concat(A[0].id),x:C[0],y:C[1]}],edges:[]};var D=(y-f)/k,P={};A.forEach((function(e,t){P[e.id]=t}));var T=function(e,t,r){for(var a=[],d=0;d<e;d++)a[d]={in:0,out:0,all:0};return r?(r.forEach((function(e){var r=h(e,\\\"source\\\"),d=h(e,\\\"target\\\");r&&a[t[r]]&&(a[t[r]].out+=1,a[t[r]].all+=1),d&&a[t[d]]&&(a[t[d]].in+=1,a[t[d]].all+=1)})),a):a}(A.length,P,S),O=s.radius,j=s.startRadius,z=s.endRadius;if(w){var U=c(10,w),K=c(10,m),V=-1/0;A.forEach((function(e){var t=K(e);V<t&&(V=t)}));var L=0;A.forEach((function(e,t){L+=0===t?V||10:(U(e)||0)+(V||10)})),O=L/(2*Math.PI)}else O||j||z?!j&&z?j=z:j&&!z&&(z=j):O=R>I?I/2:R/2;var F=D*v,B=[],J=A.map((function(e){return e.data}));B=\\\"topology\\\"===N?p(T,J,S,P):\\\"topology-directed\\\"===N?p(T,J,S,P,!0):\\\"degree\\\"===N?function(e,t){var r=[];return t.forEach((function(t,a){t.degree=e[a].all,r.push(t)})),r.sort(g),r}(T,J):A;for(var H=Math.ceil(k/u),W=0;W<k;++W){var q=O;q||null===j||null===z||(q=j+W*(z-j)/(k-1)),q||(q=10+100*W/(k-1));var G=f+W%H*F+2*Math.PI/u*Math.floor(W/H);M||(G=y-W%H*F-2*Math.PI/u*Math.floor(W/H)),B[W].x=C[0]+Math.cos(G)*q,B[W].y=C[1]+Math.sin(G)*q,B[W].weight=T[W].all}return e&&B.forEach((function(e){t.mergeNodeData(e.id,{x:e.x,y:e.y,weight:e.weight})})),b&&b(),{nodes:B,edges:S}},e}()};function f(e,t){var a=e.layout,d=a.id,s=a.options,n=e.nodes,i=e.edges,o=new r({nodes:n,edges:i}),h=l[d];if(!h)throw new Error(\\\"Unknown layout id: \\\"+d);return[new h(s).execute(o),t]}addEventListener(\\\"message\\\",(function(e){var r,a=e.data,d=a.type,s=a.method,n=a.id,i=a.params;\\\"RPC\\\"===d&&s&&((r=t[s])?Promise.resolve().then((function(){return r.apply(t,i)})):Promise.reject(\\\"No such method\\\")).then((function(e){postMessage({type:\\\"RPC\\\",id:n,result:e})})).catch((function(e){var t={message:e};e.stack&&(t.message=e.message,t.stack=e.stack,t.name=e.name),postMessage({type:\\\"RPC\\\",id:n,error:t})}))})),postMessage({type:\\\"RPC\\\",method:\\\"ready\\\"})})();\\n//# sourceMappingURL=3a54d760230d1933f953.worker.js.map\"])), { name: \"[fullhash].worker.js\" })\n\t\t\t\t\tURL.revokeObjectURL(URL.createObjectURL(new Blob([\"(()=>{\\\"use strict\\\";var e={d:(t,r)=>{for(var a in r)e.o(r,a)&&!e.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:r[a]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},t={};e.d(t,{calculateLayout:()=>f});class r{nodeMap=new Map;edgeMap=new Map;inEdgesMap=new Map;outEdgesMap=new Map;treeIndices=new Map;changes=[];batchCount=0;onChanged=()=>{};constructor(e){e&&(e.nodes&&this.addNodes(e.nodes),e.edges&&this.addEdges(e.edges),e.tree&&this.addTree(e.tree),e.onChanged&&(this.onChanged=e.onChanged))}batch=e=>{this.batchCount+=1,e(),this.batchCount-=1,this.batchCount||this.commit()};commit(){const e=this.changes;this.changes=[],this.onChanged({graph:this,changes:e})}reduceChanges(e){let t=[];return e.forEach((e=>{switch(e.type){case\\\"NodeRemoved\\\":{let r=!1;t=t.filter((t=>{if(\\\"NodeAdded\\\"===t.type){const a=t.value.id===e.value.id;return a&&(r=!0),!a}return\\\"NodeDataUpdated\\\"===t.type?t.id!==e.value.id:\\\"TreeStructureChanged\\\"!==t.type||t.nodeId!==e.value.id})),r||t.push(e);break}case\\\"EdgeRemoved\\\":{let r=!1;t=t.filter((t=>{if(\\\"EdgeAdded\\\"===t.type){const a=t.value.id===e.value.id;return a&&(r=!0),!a}return\\\"EdgeDataUpdated\\\"!==t.type&&\\\"EdgeUpdated\\\"!==t.type||t.id!==e.value.id})),r||t.push(e);break}case\\\"NodeDataUpdated\\\":case\\\"EdgeDataUpdated\\\":case\\\"EdgeUpdated\\\":{const r=t.find((t=>t.type===e.type&&t.id===e.id&&t.propertyName===e.propertyName));r?r.newValue=e.newValue:t.push(e);break}case\\\"TreeStructureDetached\\\":t=t.filter((t=>\\\"TreeStructureAttached\\\"===t.type?t.treeKey!==e.treeKey:\\\"TreeStructureChanged\\\"!==t.type||t.treeKey!==e.treeKey)),t.push(e);break;case\\\"TreeStructureChanged\\\":{const r=t.find((t=>\\\"TreeStructureChanged\\\"===t.type&&t.treeKey===e.treeKey&&t.nodeId===e.nodeId));r?r.newParentId=e.newParentId:t.push(e);break}default:t.push(e)}})),t}checkNodeExistence(e){if(!this.hasNode(e))throw new Error(\\\"Node not found for id: \\\"+e)}hasNode(e){return this.nodeMap.has(e)}areNeighbors(e,t){return this.checkNodeExistence(e),this.getNeighbors(t).some((t=>t.id===e))}getNode(e){return this.checkNodeExistence(e),this.nodeMap.get(e)}getRelatedEdges(e,t){this.checkNodeExistence(e);const r=this.inEdgesMap.get(e),a=this.outEdgesMap.get(e);if(\\\"in\\\"===t)return Array.from(r);if(\\\"out\\\"===t)return Array.from(a);const d=new Set([...r,...a]);return Array.from(d)}getDegree(e,t){return this.getRelatedEdges(e,t).length}getSuccessors(e){const t=this.getRelatedEdges(e,\\\"out\\\").map((e=>e.target));return Array.from(new Set(t)).map((e=>this.getNode(e)))}getPredecessors(e){const t=this.getRelatedEdges(e,\\\"in\\\").map((e=>e.source));return Array.from(new Set(t)).map((e=>this.getNode(e)))}getNeighbors(e){const t=this.getPredecessors(e),r=this.getSuccessors(e);return Array.from(new Set([...t,...r]))}doAddNode(e){if(this.hasNode(e.id))throw new Error(\\\"Node already exists: \\\"+e.id);this.nodeMap.set(e.id,e),this.inEdgesMap.set(e.id,new Set),this.outEdgesMap.set(e.id,new Set),this.treeIndices.forEach((t=>{t.childrenMap.set(e.id,new Set)})),this.changes.push({type:\\\"NodeAdded\\\",value:e})}addNodes(e){this.batch((()=>{for(const t of e)this.doAddNode(t)}))}addNode(e){this.addNodes([e])}doRemoveNode(e){const t=this.getNode(e),r=this.inEdgesMap.get(e),a=this.outEdgesMap.get(e);r?.forEach((e=>this.doRemoveEdge(e.id))),a?.forEach((e=>this.doRemoveEdge(e.id))),this.nodeMap.delete(e),this.treeIndices.forEach((t=>{t.childrenMap.get(e)?.forEach((e=>{t.parentMap.delete(e.id)})),t.parentMap.delete(e),t.childrenMap.delete(e)})),this.changes.push({type:\\\"NodeRemoved\\\",value:t})}removeNodes(e){this.batch((()=>{e.forEach((e=>this.doRemoveNode(e)))}))}removeNode(e){this.removeNodes([e])}updateNodeData(e,t,r){const a=this.getNode(e);this.batch((()=>{const d=a.data[t],s=r;a.data[t]=s,this.changes.push({type:\\\"NodeDataUpdated\\\",id:e,propertyName:t,oldValue:d,newValue:s})}))}mergeNodeData(e,t){this.batch((()=>{Object.entries(t).forEach((([t,r])=>{this.updateNodeData(e,t,r)}))}))}checkEdgeExistence(e){if(!this.hasEdge(e))throw new Error(\\\"Edge not found for id: \\\"+e)}hasEdge(e){return this.edgeMap.has(e)}getEdge(e){return this.checkEdgeExistence(e),this.edgeMap.get(e)}getEdgeDetail(e){const t=this.getEdge(e);return{edge:t,source:this.getNode(t.source),target:this.getNode(t.target)}}doAddEdge(e){if(this.hasEdge(e.id))throw new Error(\\\"Edge already exists: \\\"+e.id);this.checkNodeExistence(e.source),this.checkNodeExistence(e.target),this.edgeMap.set(e.id,e);const t=this.inEdgesMap.get(e.target),r=this.outEdgesMap.get(e.source);t.add(e),r.add(e),this.changes.push({type:\\\"EdgeAdded\\\",value:e})}addEdges(e){this.batch((()=>{for(const t of e)this.doAddEdge(t)}))}addEdge(e){this.addEdges([e])}doRemoveEdge(e){const t=this.getEdge(e),r=this.outEdgesMap.get(t.source),a=this.inEdgesMap.get(t.target);r.delete(t),a.delete(t),this.edgeMap.delete(e),this.changes.push({type:\\\"EdgeRemoved\\\",value:t})}removeEdges(e){this.batch((()=>{e.forEach((e=>this.doRemoveEdge(e)))}))}removeEdge(e){this.removeEdges([e])}updateEdgeSource(e,t){const r=this.getEdge(e);this.checkNodeExistence(t);const a=r.source,d=t;this.outEdgesMap.get(a).delete(r),this.outEdgesMap.get(d).add(r),r.source=t,this.batch((()=>{this.changes.push({type:\\\"EdgeUpdated\\\",id:e,propertyName:\\\"source\\\",oldValue:a,newValue:d})}))}updateEdgeTarget(e,t){const r=this.getEdge(e);this.checkNodeExistence(t);const a=r.target,d=t;this.inEdgesMap.get(a).delete(r),this.inEdgesMap.get(d).add(r),r.target=t,this.batch((()=>{this.changes.push({type:\\\"EdgeUpdated\\\",id:e,propertyName:\\\"target\\\",oldValue:a,newValue:d})}))}updateEdgeData(e,t,r){const a=this.getEdge(e);this.batch((()=>{const d=a.data[t],s=r;a.data[t]=s,this.changes.push({type:\\\"EdgeDataUpdated\\\",id:e,propertyName:t,oldValue:d,newValue:s})}))}mergeEdgeData(e,t){this.batch((()=>{Object.entries(t).forEach((([t,r])=>{this.updateEdgeData(e,t,r)}))}))}checkTreeExistence(e){if(!this.treeIndices.has(e))throw new Error(\\\"Tree structure not found for treeKey: \\\"+e)}attachTreeStructure(e){this.treeIndices.has(e)||(this.treeIndices.set(e,{parentMap:new Map,childrenMap:new Map}),this.batch((()=>{this.changes.push({type:\\\"TreeStructureAttached\\\",treeKey:e})})))}detachTreeStructure(e){this.checkTreeExistence(e),this.treeIndices.delete(e),this.batch((()=>{this.changes.push({type:\\\"TreeStructureDetached\\\",treeKey:e})}))}addTree(e,t){this.batch((()=>{this.attachTreeStructure(t);const r=[],a=Array.isArray(e)?e:[e];for(;a.length;){const e=a.shift();r.push(e),e.children&&a.push(...e.children)}this.addNodes(r),r.forEach((e=>{e.children?.forEach((r=>{this.setParent(r.id,e.id,t)}))}))}))}getRoots(e){return this.checkTreeExistence(e),this.getAllNodes().filter((t=>!this.getParent(t.id,e)))}getChildren(e,t){this.checkNodeExistence(e),this.checkTreeExistence(t);const r=this.treeIndices.get(t).childrenMap.get(e);return Array.from(r||[])}getParent(e,t){return this.checkNodeExistence(e),this.checkTreeExistence(t),this.treeIndices.get(t).parentMap.get(e)||null}setParent(e,t,r){this.checkTreeExistence(r);const a=this.treeIndices.get(r),d=this.getNode(e),s=a.parentMap.get(e),n=this.getNode(t);a.parentMap.set(e,n),s&&a.childrenMap.get(s.id)?.delete(d);let i=a.childrenMap.get(n.id);i||(i=new Set,a.childrenMap.set(n.id,i)),i.add(d),this.batch((()=>{this.changes.push({type:\\\"TreeStructureChanged\\\",treeKey:r,nodeId:e,oldParentId:s?.id,newParentId:n.id})}))}getAllNodes(){return Array.from(this.nodeMap.values())}getAllEdges(){return Array.from(this.edgeMap.values())}doBFS(e,t,r){for(;e.length;){const a=e.shift();r(a),t.add(a.id),this.getSuccessors(a.id).forEach((r=>{t.has(r.id)||(t.add(r.id),e.push(r))}))}}bfs(e,t){this.doBFS([this.getNode(e)],new Set,t)}doDFS(e,t,r){r(e),t.add(e.id),this.getSuccessors(e.id).forEach((e=>{t.has(e.id)||this.doDFS(e,t,r)}))}dfs(e,t){this.doDFS(this.getNode(e),new Set,t)}clone(){const e=this.getAllNodes().map((e=>({...e,data:{...e.data}}))),t=this.getAllEdges().map((e=>({...e,data:{...e.data}}))),a=new r({nodes:e,edges:t});return this.treeIndices.forEach((({parentMap:e,childrenMap:t},r)=>{const d=new Map;e.forEach(((e,t)=>{d.set(t,a.getNode(e.id))}));const s=new Map;t.forEach(((e,t)=>{s.set(t,new Set(Array.from(e).map((e=>a.getNode(e.id)))))})),a.treeIndices.set(r,{parentMap:d,childrenMap:s})})),a}toJSON(){return JSON.stringify({nodes:this.getAllNodes(),edges:this.getAllEdges()})}}var a=function(){return a=Object.assign||function(e){for(var t,r=1,a=arguments.length;r<a;r++)for(var d in t=arguments[r])Object.prototype.hasOwnProperty.call(t,d)&&(e[d]=t[d]);return e},a.apply(this,arguments)};function d(e,t){var r=\\\"function\\\"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var a,d,s=r.call(e),n=[];try{for(;(void 0===t||t-- >0)&&!(a=s.next()).done;)n.push(a.value)}catch(e){d={error:e}}finally{try{a&&!a.done&&(r=s.return)&&r.call(s)}finally{if(d)throw d.error}}return n}Object.create,Object.create;var s=/-(\\\\w)/g,n=(function(e){return e.replace(s,(function(e,t){return t?t.toUpperCase():\\\"\\\"}))},Object.create(null),Array.isArray),i=function(e){return null!==e&&\\\"object\\\"==typeof e},o=function(e){if(null===e)return e;if(e instanceof Date)return new Date(e.getTime());if(e instanceof Array){var t=[];return e.forEach((function(e){t.push(e)})),t.map((function(e){return o(e)}))}if(\\\"object\\\"==typeof e&&Object.keys(e).length){var r=a({},e);return Object.keys(r).forEach((function(e){r[e]=o(r[e])})),r}return e},h=function(e,t){var r=e[t];return i(r)?r.cell:r},c=function(e,t,r){return void 0===r&&(r=!0),t||0===t?\\\"function\\\"==typeof t?t:\\\"number\\\"==typeof t?function(){return t}:n(t)?function(){if(r){var a=Math.max.apply(Math,function(e,t,r){if(r||2===arguments.length)for(var a,d=0,s=t.length;d<s;d++)!a&&d in t||(a||(a=Array.prototype.slice.call(t,0,d)),a[d]=t[d]);return e.concat(a||Array.prototype.slice.call(t))}([],d(t),!1));return isNaN(a)?e:a}return t}:i(t)?function(){if(r){var a=Math.max(t.width,t.height);return isNaN(a)?e:a}return[t.width,t.height]}:function(){return e}:function(t){return t.size?n(t.size)?t.size[0]>t.size[1]?t.size[0]:t.size[1]:i(t.size)?t.size.width>t.size.height?t.size.width:t.size.height:t.size:e}},u={radius:null,startRadius:null,endRadius:null,startAngle:0,endAngle:2*Math.PI,clockwise:!0,divisions:1,ordering:null,angleRatio:1};function g(e,t){var r=e.degree,a=t.degree;return r<a?-1:r>a?1:0}function p(e,t,r,a,d){void 0===d&&(d=!1);var s=o(t),n=[s[0]],i=[t[0]],c=[],u=t.length;c[0]=!0,function(e,t,r,a){e.forEach((function(t,r){e[r].children=[],e[r].parent=[]})),a?t.forEach((function(t){var a=h(t,\\\"source\\\"),d=h(t,\\\"target\\\"),s=0;a&&(s=r[a]);var n=0;d&&(n=r[d]);var i=e[s].children,o=e[n].parent;i.push(e[n].id),o.push(e[s].id)})):t.forEach((function(t){var a=h(t,\\\"source\\\"),d=h(t,\\\"target\\\"),s=0;a&&(s=r[a]);var n=0;d&&(n=r[d]);var i=e[s].children,o=e[n].children;i.push(e[n].id),o.push(e[s].id)}))}(s,r,a,d);var g=0;return s.forEach((function(d,o){if(0!==o)if(o!==u-1&&e[o].all===e[o+1].all&&!function(e,t,r){for(var a=r.length,d=0;d<a;d++){var s=h(r[d],\\\"source\\\"),n=h(r[d],\\\"target\\\");if(e.id===s&&t.id===n||t.id===s&&e.id===n)return!0}return!1}(n[g],d,r)||c[o]){for(var p=n[g].children,l=!1,f=0;f<p.length;f++){var E=a[p[f]];if(e[E].all===e[o].all&&!c[E]){n.push(s[E]),i.push(t[a[s[E].id]]),c[E]=!0,l=!0;break}}for(var y=0;!l&&(c[y]||(n.push(s[y]),i.push(t[a[s[y].id]]),c[y]=!0,l=!0),++y!==u););}else n.push(d),i.push(t[a[d.id]]),c[o]=!0,g++})),i}var l={circular:function(){function e(e){void 0===e&&(e={}),this.options=e,this.id=\\\"circular\\\",Object.assign(this.options,u,e)}return e.prototype.execute=function(e,t){return this.genericCircularLayout(!1,e,t)},e.prototype.assign=function(e,t){var r=this;e.batch((function(){r.genericCircularLayout(!0,e,t)}))},e.prototype.genericCircularLayout=function(e,t,r){var s=a(a({},this.options),r),n=s.width,i=s.height,o=s.center,u=s.divisions,l=s.startAngle,f=void 0===l?0:l,E=s.endAngle,y=void 0===E?2*Math.PI:E,v=s.angleRatio,N=s.ordering,M=s.clockwise,w=s.nodeSpacing,m=s.nodeSize,b=s.onLayoutEnd,A=t.getAllNodes(),S=t.getAllEdges(),k=A.length;if(0===k)return b&&b(),{nodes:[],edges:[]};var x=d(function(e,t,r){var a=e,d=t,s=r;return a||\\\"undefined\\\"==typeof window||(a=window.innerWidth),d||\\\"undefined\\\"==typeof window||(d=window.innerHeight),s||(s=[a/2,d/2]),[a,d,s]}(n,i,o),3),I=x[0],R=x[1],C=x[2];if(1===k)return e&&(t.updateNodeData(A[0].id,\\\"x\\\",C[0]),t.updateNodeData(A[0].id,\\\"y\\\",C[1])),b&&b(),{nodes:[{id:\\\"\\\".concat(A[0].id),x:C[0],y:C[1]}],edges:[]};var D=(y-f)/k,P={};A.forEach((function(e,t){P[e.id]=t}));var T=function(e,t,r){for(var a=[],d=0;d<e;d++)a[d]={in:0,out:0,all:0};return r?(r.forEach((function(e){var r=h(e,\\\"source\\\"),d=h(e,\\\"target\\\");r&&a[t[r]]&&(a[t[r]].out+=1,a[t[r]].all+=1),d&&a[t[d]]&&(a[t[d]].in+=1,a[t[d]].all+=1)})),a):a}(A.length,P,S),O=s.radius,j=s.startRadius,z=s.endRadius;if(w){var U=c(10,w),K=c(10,m),V=-1/0;A.forEach((function(e){var t=K(e);V<t&&(V=t)}));var L=0;A.forEach((function(e,t){L+=0===t?V||10:(U(e)||0)+(V||10)})),O=L/(2*Math.PI)}else O||j||z?!j&&z?j=z:j&&!z&&(z=j):O=R>I?I/2:R/2;var F=D*v,B=[],J=A.map((function(e){return e.data}));B=\\\"topology\\\"===N?p(T,J,S,P):\\\"topology-directed\\\"===N?p(T,J,S,P,!0):\\\"degree\\\"===N?function(e,t){var r=[];return t.forEach((function(t,a){t.degree=e[a].all,r.push(t)})),r.sort(g),r}(T,J):A;for(var H=Math.ceil(k/u),W=0;W<k;++W){var q=O;q||null===j||null===z||(q=j+W*(z-j)/(k-1)),q||(q=10+100*W/(k-1));var G=f+W%H*F+2*Math.PI/u*Math.floor(W/H);M||(G=y-W%H*F-2*Math.PI/u*Math.floor(W/H)),B[W].x=C[0]+Math.cos(G)*q,B[W].y=C[1]+Math.sin(G)*q,B[W].weight=T[W].all}return e&&B.forEach((function(e){t.mergeNodeData(e.id,{x:e.x,y:e.y,weight:e.weight})})),b&&b(),{nodes:B,edges:S}},e}()};function f(e,t){var a=e.layout,d=a.id,s=a.options,n=e.nodes,i=e.edges,o=new r({nodes:n,edges:i}),h=l[d];if(!h)throw new Error(\\\"Unknown layout id: \\\"+d);return[new h(s).execute(o),t]}addEventListener(\\\"message\\\",(function(e){var r,a=e.data,d=a.type,s=a.method,n=a.id,i=a.params;\\\"RPC\\\"===d&&s&&((r=t[s])?Promise.resolve().then((function(){return r.apply(t,i)})):Promise.reject(\\\"No such method\\\")).then((function(e){postMessage({type:\\\"RPC\\\",id:n,result:e})})).catch((function(e){var t={message:e};e.stack&&(t.message=e.message,t.stack=e.stack,t.name=e.name),postMessage({type:\\\"RPC\\\",id:n,error:t})}))})),postMessage({type:\\\"RPC\\\",method:\\\"ready\\\"})})();\\n//# sourceMappingURL=3a54d760230d1933f953.worker.js.map\"])));\n\t\t\t\t\taddMethods(w, methods)\n\t\t\t\t\t\n\t\t\t\t\treturn w\n\t\t\t\t}\n\t\t\t","function addMethods(worker, methods) {\n var c = 0;\n var callbacks = {};\n worker.addEventListener('message', function (e) {\n var d = e.data;\n if (d.type !== 'RPC') return;\n\n if (d.id) {\n var f = callbacks[d.id];\n\n if (f) {\n delete callbacks[d.id];\n\n if (d.error) {\n f[1](Object.assign(Error(d.error.message), d.error));\n } else {\n f[0](d.result);\n }\n }\n } else {\n var evt = document.createEvent('Event');\n evt.initEvent(d.method, false, false);\n evt.data = d.params;\n worker.dispatchEvent(evt);\n }\n });\n methods.forEach(function (method) {\n worker[method] = function () {\n var _arguments = arguments;\n return new Promise(function (a, b) {\n var id = ++c;\n callbacks[id] = [a, b];\n worker.postMessage({\n type: 'RPC',\n id: id,\n method: method,\n params: [].slice.call(_arguments)\n });\n });\n };\n });\n}\n\nmodule.exports = addMethods;\n//# sourceMappingURL=rpc-wrapper.js.map\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","export const isString = (val: unknown): val is string =>\n typeof val === \"string\";\n\nconst cacheStringFunction = <T extends (str: string) => string>(fn: T): T => {\n const cache: Record<string, string> = Object.create(null);\n return ((str: string) => {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n }) as any;\n};\n\nconst camelizeRE = /-(\\w)/g;\nexport const camelize = cacheStringFunction((str: string): string => {\n return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : \"\"));\n});\n\n// export const capitalize = cacheStringFunction(\n// (str: string) => str.charAt(0).toUpperCase() + str.slice(1),\n// )\n","export const isArray = Array.isArray;\n","export const isObject = (val: unknown): val is Record<any, any> =>\n val !== null && typeof val === \"object\";\n\nexport const clone = <T>(target: T): T => {\n if (target === null) {\n return target;\n }\n if (target instanceof Date) {\n return new Date(target.getTime()) as any;\n }\n if (target instanceof Array) {\n const cp = [] as any[];\n (target as any[]).forEach((v) => {\n cp.push(v);\n });\n return cp.map((n: any) => clone<any>(n)) as any;\n }\n if (typeof target === \"object\" && Object.keys(target).length) {\n const cp = { ...(target as { [key: string]: any }) } as {\n [key: string]: any;\n };\n Object.keys(cp).forEach((k) => {\n cp[k] = clone<any>(cp[k]);\n });\n return cp as T;\n }\n return target;\n};\n","import {\n Matrix,\n Model,\n IndexMap,\n Edge,\n Node,\n OutNode,\n Degree,\n NodeMap,\n} from \"../types\";\nimport { isArray } from \"./array\";\nimport { isNumber } from \"./number\";\nimport { isObject } from \"./object\";\n\nexport const getEdgeTerminal = (edge: Edge, type: \"source\" | \"target\") => {\n const terminal = edge[type];\n if (isObject(terminal)) {\n return terminal.cell;\n }\n return terminal;\n};\n\nexport const getDegree = (\n n: number,\n nodeIdxMap: IndexMap,\n edges: Edge[] | null\n) => {\n const degrees: Degree[] = [];\n for (let i = 0; i < n; i++) {\n degrees[i] = {\n in: 0,\n out: 0,\n all: 0,\n };\n }\n if (!edges) return degrees;\n edges.forEach((e) => {\n const source = getEdgeTerminal(e, \"source\");\n const target = getEdgeTerminal(e, \"target\");\n if (source && degrees[nodeIdxMap[source]]) {\n degrees[nodeIdxMap[source]].out += 1;\n degrees[nodeIdxMap[source]].all += 1;\n }\n if (target && degrees[nodeIdxMap[target]]) {\n degrees[nodeIdxMap[target]].in += 1;\n degrees[nodeIdxMap[target]].all += 1;\n }\n });\n return degrees;\n};\n\nexport const getDegreeMap = (nodes: Node[], edges: Edge[] | null) => {\n const degreesMap: { [id: string]: Degree } = {};\n nodes.forEach((node) => {\n degreesMap[node.id] = {\n in: 0,\n out: 0,\n all: 0,\n };\n });\n\n if (!edges) return degreesMap;\n edges.forEach((e) => {\n const source = getEdgeTerminal(e, \"source\");\n const target = getEdgeTerminal(e, \"target\");\n if (source) {\n degreesMap[source].out += 1;\n degreesMap[source].all += 1;\n }\n if (target) {\n degreesMap[target].in += 1;\n degreesMap[target].all += 1;\n }\n });\n return degreesMap;\n};\n\nexport const floydWarshall = (adjMatrix: Matrix[]): Matrix[] => {\n // initialize\n const dist: Matrix[] = [];\n const size = adjMatrix.length;\n for (let i = 0; i < size; i += 1) {\n dist[i] = [];\n for (let j = 0; j < size; j += 1) {\n if (i === j) {\n dist[i][j] = 0;\n } else if (adjMatrix[i][j] === 0 || !adjMatrix[i][j]) {\n dist[i][j] = Infinity;\n } else {\n dist[i][j] = adjMatrix[i][j];\n }\n }\n }\n // floyd\n for (let k = 0; k < size; k += 1) {\n for (let i = 0; i < size; i += 1) {\n for (let j = 0; j < size; j += 1) {\n if (dist[i][j] > dist[i][k] + dist[k][j]) {\n dist[i][j] = dist[i][k] + dist[k][j];\n }\n }\n }\n }\n return dist;\n};\n\nexport const getAdjMatrix = (data: Model, directed: boolean): Matrix[] => {\n const { nodes, edges } = data;\n const matrix: Matrix[] = [];\n // map node with index in data.nodes\n const nodeMap: {\n [key: string]: number;\n } = {};\n\n if (!nodes) {\n throw new Error(\"invalid nodes data!\");\n }\n if (nodes) {\n nodes.forEach((node, i) => {\n nodeMap[node.id] = i;\n const row: number[] = [];\n matrix.push(row);\n });\n }\n\n edges?.forEach((e) => {\n const source = getEdgeTerminal(e, \"source\");\n const target = getEdgeTerminal(e, \"target\");\n const sIndex = nodeMap[source as string];\n const tIndex = nodeMap[target as string];\n if (sIndex === undefined || tIndex === undefined) return;\n matrix[sIndex][tIndex] = 1;\n if (!directed) {\n matrix[tIndex][sIndex] = 1;\n }\n });\n return matrix;\n};\n\n/**\n * scale matrix\n * @param matrix [ [], [], [] ]\n * @param ratio\n */\nexport const scaleMatrix = (matrix: Matrix[], ratio: number) => {\n const result: Matrix[] = [];\n matrix.forEach((row) => {\n const newRow: number[] = [];\n row.forEach((v) => {\n newRow.push(v * ratio);\n });\n result.push(newRow);\n });\n return result;\n};\n\n/**\n * depth first traverse, from leaves to root, children in inverse order\n * if the fn returns false, terminate the traverse\n */\nconst traverseUp = <T extends { children?: T[] }>(\n data: T,\n fn: (param: T) => boolean\n) => {\n if (data && data.children) {\n for (let i = data.children.length - 1; i >= 0; i--) {\n if (!traverseUp(data.children[i], fn)) return;\n }\n }\n\n if (!fn(data)) {\n return false;\n }\n return true;\n};\n\n/**\n * depth first traverse, from leaves to root, children in inverse order\n * if the fn returns false, terminate the traverse\n */\nexport const traverseTreeUp = <T extends { children?: T[] }>(\n data: T,\n fn: (param: T) => boolean\n) => {\n if (typeof fn !== \"function\") {\n return;\n }\n traverseUp(data, fn);\n};\n\n/**\n * calculate the bounding box for the nodes according to their x, y, and size\n * @param nodes nodes in the layout\n * @returns\n */\nexport const getLayoutBBox = (nodes: OutNode[]) => {\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n nodes.forEach((node) => {\n let size = node.size;\n if (isArray(size)) {\n if (size.length === 1) size = [size[0], size[0]];\n } else if (isNumber(size)) {\n size = [size, size];\n } else if (size === undefined || isNaN(size as any)) {\n size = [30, 30];\n }\n\n const halfSize = [size[0] / 2, size[1] / 2];\n const left = node.x - halfSize[0];\n const right = node.x + halfSize[0];\n const top = node.y - halfSize[1];\n const bottom = node.y + halfSize[1];\n\n if (minX > left) minX = left;\n if (minY > top) minY = top;\n if (maxX < right) maxX = right;\n if (maxY < bottom) maxY = bottom;\n });\n return { minX, minY, maxX, maxY };\n};\n\n/**\n * 获取节点集合的平均位置信息\n * @param nodes 节点集合\n * @returns 平局内置\n */\nexport const getAvgNodePosition = (nodes: OutNode[]) => {\n const totalNodes = { x: 0, y: 0 };\n nodes.forEach((node) => {\n totalNodes.x += node.x || 0;\n totalNodes.y += node.y || 0;\n });\n // 获取均值向量\n const length = nodes.length || 1;\n return {\n x: totalNodes.x / length,\n y: totalNodes.y / length,\n };\n};\n\n// 找出指定节点关联的边的起点或终点\nconst getCoreNode = (type: \"source\" | \"target\", node: Node, edges: Edge[]) => {\n if (type === \"source\") {\n return (edges?.find((edge) => edge.target === node.id)?.source ||\n {}) as Node;\n }\n return (edges?.find((edge) => edge.source === node.id)?.target || {}) as Node;\n};\n\n// 找出指定节点为起点或终点的所有一度叶子节点\nconst getRelativeNodeIds = (\n type: \"source\" | \"target\" | \"both\",\n coreNode: Node,\n edges: Edge[]\n) => {\n let relativeNodes: string[] = [];\n switch (type) {\n case \"source\":\n relativeNodes = edges\n ?.filter((edge) => edge.source === coreNode.id)\n .map((edge) => edge.target);\n break;\n case \"target\":\n relativeNodes = edges\n ?.filter((edge) => edge.target === coreNode.id)\n .map((edge) => edge.source);\n break;\n case \"both\":\n relativeNodes = edges\n ?.filter((edge) => edge.source === coreNode.id)\n .map((edge) => edge.target)\n .concat(\n edges\n ?.filter((edge) => edge.target === coreNode.id)\n .map((edge) => edge.source)\n );\n break;\n default:\n break;\n }\n // 去重\n const set = new Set(relativeNodes);\n return Array.from(set);\n};\n// 找出同类型的节点\nconst getSameTypeNodes = (\n type: \"leaf\" | \"all\",\n nodeClusterBy: string,\n node: Node,\n relativeNodes: Node[],\n degreesMap: { [id: string]: Degree }\n) => {\n // @ts-ignore\n const typeName = node[nodeClusterBy] || \"\";\n // @ts-ignore\n let sameTypeNodes =\n relativeNodes?.filter((item) => item[nodeClusterBy] === typeName) || [];\n if (type === \"leaf\") {\n sameTypeNodes = sameTypeNodes.filter(\n (node) => degreesMap[node.id]?.in === 0 || degreesMap[node.id]?.out === 0\n );\n }\n return sameTypeNodes;\n};\n\n// 找出与指定节点关联的边的起点或终点出发的所有一度叶子节点\nexport const getCoreNodeAndRelativeLeafNodes = (\n type: \"leaf\" | \"all\",\n node: Node,\n edges: Edge[],\n nodeClusterBy: string,\n degreesMap: { [id: string]: Degree },\n nodeMap: NodeMap\n) => {\n const { in: inDegree, out: outDegree } = degreesMap[node.id];\n let coreNode: Node = node;\n let relativeLeafNodes: Node[] = [];\n if (inDegree === 0) {\n // 如果为没有出边的叶子节点,则找出与它关联的边的起点出发的所有一度节点\n coreNode = getCoreNode(\"source\", node, edges);\n relativeLeafNodes = getRelativeNodeIds(\"both\", coreNode, edges).map(\n (nodeId) => nodeMap[nodeId]\n );\n } else if (outDegree === 0) {\n // 如果为没有入边边的叶子节点,则找出与它关联的边的起点出发的所有一度节点\n coreNode = getCoreNode(\"target\", node, edges);\n relativeLeafNodes = getRelativeNodeIds(\"both\", coreNode, edges).map(\n (nodeId) => nodeMap[nodeId]\n );\n }\n relativeLeafNodes = relativeLeafNodes.filter(\n (node) =>\n degreesMap[node.id] &&\n (degreesMap[node.id].in === 0 || degreesMap[node.id].out === 0)\n );\n const sameTypeLeafNodes = getSameTypeNodes(\n type,\n nodeClusterBy,\n node,\n relativeLeafNodes,\n degreesMap\n );\n return { coreNode, relativeLeafNodes, sameTypeLeafNodes };\n};\n","import { isArray, isObject } from \".\";\nimport { isNumber } from \"./number\";\n\nexport const isFunction = (val: unknown): val is Function =>\n typeof val === \"function\";\n\nexport const getFunc = (\n value: number,\n defaultValue: number,\n func?: ((d?: any) => number) | undefined\n): Function => {\n let resultFunc;\n if (func) {\n resultFunc = func;\n } else if (isNumber(value)) {\n resultFunc = () => value;\n } else {\n resultFunc = () => defaultValue;\n }\n return resultFunc;\n};\n\nexport const getFuncByUnknownType = (\n defaultValue: number,\n value?:\n | number\n | number[]\n | { width: number; height: number }\n | ((d?: any) => number)\n | undefined,\n resultIsNumber: boolean = true\n): ((d?: any) => number | number[]) => {\n if (!value && value !== 0) {\n return (d) => {\n if (d.size) {\n if (isArray(d.size))\n return d.size[0] > d.size[1] ? d.size[0] : d.size[1];\n if (isObject(d.size))\n return d.size.width > d.size.height ? d.size.width : d.size.height;\n return d.size;\n }\n return defaultValue;\n };\n }\n if (isFunction(value)) {\n return value;\n }\n if (isNumber(value)) {\n return () => value;\n }\n if (isArray(value)) {\n return () => {\n if (resultIsNumber) {\n const max = Math.max(...(value as number[]));\n return isNaN(max) ? defaultValue : max;\n }\n return value;\n };\n }\n if (isObject(value)) {\n return () => {\n if (resultIsNumber) {\n const max = Math.max(value.width, value.height);\n return isNaN(max) ? defaultValue : max;\n }\n return [value.width, value.height];\n };\n }\n return () => defaultValue;\n};\n","export const isNumber = (val: unknown): val is Number =>\n typeof val === \"number\";\n\nexport const isNaN = (num: unknown) => Number.isNaN(Number(num));\n\nexport const toNumber = (val: any): any => {\n const n = parseFloat(val);\n return isNaN(n) ? val : n;\n};\n","import type { Graph } from \"@antv/graphlib\";\nimport type { CircularLayoutOptions, SyncLayout, LayoutMapping, PointTuple, IndexMap, OutNode, Edge, Degree } from \"./types\";\nimport { getDegree, getEdgeTerminal, getFuncByUnknownType, clone } from \"./util\";\n\ntype INodeData = OutNode & {\n degree: number;\n size: number | PointTuple;\n weight: number;\n children: string[];\n parent: string[];\n};\n\ntype IEdgeData = {};\n\nconst DEFAULTS_LAYOUT_OPTIONS: Partial<CircularLayoutOptions> = {\n radius: null,\n startRadius: null,\n endRadius: null,\n startAngle: 0,\n endAngle: 2 * Math.PI,\n clockwise: true,\n divisions: 1,\n ordering: null,\n angleRatio: 1\n}\n\n/**\n * Layout arranging the nodes in a circle.\n * \n * @example\n * // Assign layout options when initialization.\n * const layout = new CircularLayout({ radius: 10 });\n * const positions = layout.execute(graph); // { nodes: [], edges: [] }\n * \n * // Or use different options later.\n * const layout = new CircularLayout({ radius: 10 });\n * const positions = layout.execute(graph, { radius: 20 }); // { nodes: [], edges: [] }\n * \n * // If you want to assign the positions directly to the nodes, use assign method.\n * layout.assign(graph, { radius: 20 });\n */\nexport class CircularLayout implements SyncLayout<CircularLayoutOptions> {\n id = 'circular';\n\n constructor(public options: CircularLayoutOptions = {} as CircularLayoutOptions) {\n Object.assign(this.options, DEFAULTS_LAYOUT_OPTIONS, options);\n }\n\n /**\n * Return the positions of nodes and edges(if needed).\n */\n execute(graph: Graph<INodeData, IEdgeData>, options?: CircularLayoutOptions): LayoutMapping {\n return this.genericCircularLayout(false, graph, options) as LayoutMapping;\n }\n\n /**\n * To directly assign the positions to the nodes.\n */\n assign(graph: Graph<INodeData, IEdgeData>, options?: CircularLayoutOptions) {\n graph.batch(() => {\n this.genericCircularLayout(true, graph, options);\n });\n }\n\n private genericCircularLayout(assign: boolean, graph: Graph<INodeData, IEdgeData>, options?: CircularLayoutOptions): LayoutMapping | void {\n const mergedOptions = { ...this.options, ...options };\n const { width, height, center, divisions, startAngle = 0, endAngle = 2 * Math.PI, angleRatio, ordering, clockwise, nodeSpacing: paramNodeSpacing, nodeSize: paramNodeSize, onLayoutEnd } = mergedOptions;\n\n const nodes = graph.getAllNodes();\n const edges = graph.getAllEdges() as Edge[];\n const n = nodes.length;\n\n // Need no layout if there is no node.\n if (n === 0) {\n if (onLayoutEnd) {\n onLayoutEnd();\n }\n return {\n nodes: [],\n edges: [],\n };\n }\n\n // Calculate center according to `window` if not provided.\n const [calculatedWidth, calculatedHeight, calculatedCenter] = calculateCenter(width, height, center);\n\n // Layout easily if there is only one node.\n if (n === 1) {\n if (assign) {\n graph.updateNodeData(nodes[0].id, \"x\", calculatedCenter[0]);\n graph.updateNodeData(nodes[0].id, \"y\", calculatedCenter[1]);\n }\n \n if (onLayoutEnd) {\n onLayoutEnd();\n }\n return {\n nodes: [\n {\n id: `${nodes[0].id}`,\n x: calculatedCenter[0],\n y: calculatedCenter[1],\n }\n ],\n edges: [],\n };\n }\n\n const angleStep = (endAngle - startAngle) / n;\n const nodeMap: IndexMap = {};\n nodes.forEach((node, i) => {\n nodeMap[node.id] = i;\n });\n const degrees = getDegree(nodes.length, nodeMap, edges as Edge[]);\n\n let { radius, startRadius, endRadius } = mergedOptions;\n if (paramNodeSpacing) {\n const nodeSpacing: Function = getFuncByUnknownType(10, paramNodeSpacing);\n const nodeSize: Function = getFuncByUnknownType(10, paramNodeSize);\n let maxNodeSize = -Infinity;\n nodes.forEach((node) => {\n const nSize = nodeSize(node);\n if (maxNodeSize < nSize) maxNodeSize = nSize;\n });\n let length = 0;\n nodes.forEach((node, i) => {\n if (i === 0) length += (maxNodeSize || 10);\n else length += (nodeSpacing(node) || 0) + (maxNodeSize || 10);\n });\n radius = length / (2 * Math.PI);\n } else if (!radius && !startRadius && !endRadius) {\n radius = calculatedHeight > calculatedWidth ? calculatedWidth / 2 : calculatedHeight / 2;\n } else if (!startRadius && endRadius) {\n startRadius = endRadius;\n } else if (startRadius && !endRadius) {\n endRadius = startRadius;\n }\n const astep = angleStep * angleRatio!;\n\n let layoutNodes: any[] = [];\n let nodesData = nodes.map((node) => node.data);\n if (ordering === \"topology\") {\n // layout according to the topology\n layoutNodes = topologyOrdering(degrees, nodesData, edges, nodeMap);\n } else if (ordering === \"topology-directed\") {\n // layout according to the topology\n layoutNodes = topologyOrdering(degrees, nodesData, edges, nodeMap, true);\n } else if (ordering === \"degree\") {\n // layout according to the descent order of degrees\n layoutNodes = degreeOrdering(degrees, nodesData);\n } else {\n // layout according to the original order in the data.nodes\n layoutNodes = nodes;\n }\n\n const divN = Math.ceil(n / divisions!); // node number in each division\n for (let i = 0; i < n; ++i) {\n let r = radius;\n if (!r && startRadius !== null && endRadius !== null) {\n r = startRadius! + (i * (endRadius! - startRadius!)) / (n - 1);\n }\n if (!r) {\n r = 10 + (i * 100) / (n - 1);\n }\n let angle =\n startAngle +\n (i % divN) * astep +\n ((2 * Math.PI) / divisions!) * Math.floor(i / divN);\n if (!clockwise) {\n angle =\n endAngle -\n (i % divN) * astep -\n ((2 * Math.PI) / divisions!) * Math.floor(i / divN);\n }\n layoutNodes[i].x = calculatedCenter[0] + Math.cos(angle) * r;\n layoutNodes[i].y = calculatedCenter[1] + Math.sin(angle) * r;\n layoutNodes[i].weight = degrees[i].all;\n }\n\n if (assign) {\n layoutNodes.forEach((node) => {\n graph.mergeNodeData(node.id, {\n x: node.x,\n y: node.y,\n weight: node.weight,\n });\n });\n }\n\n if (onLayoutEnd) {\n onLayoutEnd();\n };\n\n return {\n nodes: layoutNodes,\n edges\n };\n }\n}\n\nfunction initHierarchy(\n nodes: INodeData[],\n edges: Edge[],\n nodeMap: IndexMap,\n directed: boolean\n) {\n nodes.forEach((_, i: number) => {\n nodes[i].children = [];\n nodes[i].parent = [];\n });\n if (directed) {\n edges.forEach((e) => {\n const source = getEdgeTerminal(e, 'source');\n const target = getEdgeTerminal(e, 'target');\n let sourceIdx = 0;\n if (source) {\n sourceIdx = nodeMap[source];\n }\n let targetIdx = 0;\n if (target) {\n targetIdx = nodeMap[target];\n }\n const child = nodes[sourceIdx].children!;\n const parent = nodes[targetIdx].parent!;\n child.push(nodes[targetIdx].id);\n parent.push(nodes[sourceIdx].id);\n });\n } else {\n edges.forEach((e) => {\n const source = getEdgeTerminal(e, 'source');\n const target = getEdgeTerminal(e, 'target');\n let sourceIdx = 0;\n if (source) {\n sourceIdx = nodeMap[source];\n }\n let targetIdx = 0;\n if (target) {\n targetIdx = nodeMap[target];\n }\n const sourceChildren = nodes[sourceIdx].children!;\n const targetChildren = nodes[targetIdx].children!;\n sourceChildren.push(nodes[targetIdx].id);\n targetChildren.push(nodes[sourceIdx].id);\n });\n }\n}\n\nfunction connect(a: INodeData, b: INodeData, edges: Edge[]) {\n const m = edges.length;\n for (let i = 0; i < m; i++) {\n const source = getEdgeTerminal(edges[i], 'source');\n const target = getEdgeTerminal(edges[i], 'target');\n if (\n (a.id === source && b.id === target) ||\n (b.id === source && a.id === target)\n ) {\n return true;\n }\n }\n return false;\n}\n\nfunction compareDegree(a: INodeData, b: INodeData) {\n const aDegree = a.degree!;\n const bDegree = b.degree!;\n if (aDegree < bDegree) {\n return -1;\n }\n if (aDegree > bDegree) {\n return 1;\n }\n return 0;\n}\n\nfunction topologyOrdering(\n degrees: Degree[],\n nodes: INodeData[],\n edges: Edge[],\n nodeMap: IndexMap, \n directed: boolean = false\n) {\n const cnodes = clone(nodes);\n const orderedCNodes = [cnodes[0]];\n const resNodes = [nodes[0]];\n const pickFlags: boolean[] = [];\n const n = nodes.length;\n pickFlags[0] = true;\n initHierarchy(cnodes, edges, nodeMap, directed);\n let k = 0;\n cnodes.forEach((cnode, i) => {\n if (i !== 0) {\n if (\n (i === n - 1 ||\n degrees[i].all !== degrees[i + 1].all ||\n connect(\n orderedCNodes[k],\n cnode,\n edges\n )) &&\n !pickFlags[i]\n ) {\n orderedCNodes.push(cnode);\n resNodes.push(nodes[nodeMap[cnode.id]]);\n pickFlags[i] = true;\n k++;\n } else {\n const children = orderedCNodes[k].children!;\n let foundChild = false;\n for (let j = 0; j < children.length; j++) {\n const childIdx = nodeMap[children[j]];\n if (degrees[childIdx].all === degrees[i].all && !pickFlags[childIdx]) {\n orderedCNodes.push(cnodes[childIdx]);\n resNodes.push(nodes[nodeMap[cnodes[childIdx].id]]);\n pickFlags[childIdx] = true;\n foundChild = true;\n break;\n }\n }\n let ii = 0;\n while (!foundChild) {\n if (!pickFlags[ii]) {\n orderedCNodes.push(cnodes[ii]);\n resNodes.push(nodes[nodeMap[cnodes[ii].id]]);\n pickFlags[ii] = true;\n foundChild = true;\n }\n ii++;\n if (ii === n) {\n break;\n }\n }\n }\n }\n });\n return resNodes;\n}\n\nfunction degreeOrdering(\n degrees: Degree[],\n nodes: INodeData[],\n): INodeData[] {\n const orderedNodes: INodeData[] = [];\n nodes.forEach((node, i) => {\n node.degree = degrees[i].all;\n orderedNodes.push(node);\n });\n orderedNodes.sort(compareDegree);\n return orderedNodes;\n}\n\nfunction calculateCenter(width: number | undefined, height: number | undefined, center: PointTuple | undefined): [number, number, PointTuple] {\n let calculatedWidth = width;\n let calculatedHeight = height;\n let calculatedCenter = center;\n if (!calculatedWidth && typeof window !== \"undefined\") {\n calculatedWidth = window.innerWidth;\n }\n if (!calculatedHeight && typeof window !== \"undefined\") {\n calculatedHeight = window.innerHeight;\n }\n if (!calculatedCenter) {\n calculatedCenter = [calculatedWidth! / 2, calculatedHeight! / 2];\n }\n return [calculatedWidth!, calculatedHeight!, calculatedCenter];\n}","import EventEmitter from 'eventemitter3';\nimport { Graph, Node, Edge } from \"@antv/graphlib\";\nimport type { LayoutMapping, SyncLayout } from \"./types\";\n// @ts-ignore\n// Inline the worker as a Blob. @see https://github.com/developit/workerize-loader#inline\nimport worker from \"workerize-loader?inline!./worker\";\n// import { setupTransferableMethodsOnMain } from \"@naoak/workerize-transferable\";\n\n/**\n * The payload transferred from main thread to the worker.\n */\nexport interface Payload {\n layout: {\n id: string;\n options: any;\n };\n nodes: Node<any>[];\n edges: Edge<any>[];\n}\n\nexport const SupervisorEvent = {\n /**\n * Get triggerred when each iteration finished.\n */\n LAYOUT_ITERATION: 'tick',\n\n /**\n * Get triggerred when layout calculation is done.\n */\n LAYOUT_END: 'layoutend',\n};\n\n/**\n * @example\n * const graph = new Graph();\n * const layout = new CircularLayout();\n * \n * const supervisor = new Supervisor(graph, layout, { auto: true });\n * supervisor.start();\n * supervisor.stop();\n * supervisor.kill();\n * \n * // lifecycle\n * supervisor.on('tick', () => {\n * });\n * supervisor.on('layoutend', () => {\n * });\n * \n * // Re-layout when graph changed.\n * graph.addNodes([{ id: 'node1' }, { id: 'node2' }]);\n * \n * // TODO: Custom layout.\n */\nexport class Supervisor extends EventEmitter {\n\n /**\n * Internal worker.\n */\n private worker: any;\n\n /**\n * Flag of running state.\n */\n private running: boolean;\n\n constructor(\n private graph: Graph<any, any>,\n private layout: SyncLayout<any>, \n options: {\n auto: boolean; // 默认手动模式\n }\n ) {\n super();\n\n // TODO: listen to the graph-changed events.\n // optional.\n // forcelayout\n // graph.onChanged = (e) => {\n // // node/edge added/dropped\n // };\n\n this.spawnWorker();\n }\n\n spawnWorker() {\n if (this.worker) {\n this.worker.terminate();\n }\n\n /**\n * Worker function\n */\n // this.worker = this.createWorker(workerFunctionString);\n // this.worker.addEventListener('message', this.handleWorkerMessage);\n\n // Use workerize-loader to create WebWorker.\n // @see https://github.com/developit/workerize-loader\n this.worker = worker();\n\n if (this.running) {\n this.running = false;\n this.start();\n }\n }\n\n start() {\n if (this.running) return this;\n\n this.running = true;\n\n // Payload should include nodes & edges(if needed).\n const payload = {\n layout: {\n id: this.layout.id,\n options: this.layout.options,\n },\n nodes: this.graph.getAllNodes(),\n edges: this.graph.getAllEdges(),\n };\n\n /**\n * TODO: Convert graph object to linear memory(e.g. csr, adjacency matrix), then transfer the ownership to worker.\n * @example\n * const arraybufferWithNodesEdges = graphToByteArrays(this.graph); // Float32Array\n */\n const arraybufferWithNodesEdges = new Float32Array([0]);\n\n // TODO: Support transferables.\n // @see https://www.npmjs.com/package/@naoak/workerize-transferable\n // setupTransferableMethodsOnMain(this.worker, {\n // calculateLayout: {\n // // pick a transferable object from the method parameters\n // pickTransferablesFromParams: (params) => [params[1].buffer],\n // },\n // });\n\n this.worker.calculateLayout(payload, [arraybufferWithNodesEdges]).then(([positions, transferables]: [LayoutMapping, Float32Array[]]) => {\n this.emit(SupervisorEvent.LAYOUT_END, positions);\n });\n\n return this;\n }\n\n stop() {\n this.running = false;\n return this;\n }\n\n kill() {\n if (this.worker) {\n this.worker.terminate();\n }\n\n // TODO: unbind listeners on graph.\n\n // TODO: release attached memory\n }\n\n isRunning() {\n return this.running;\n }\n}\n","import { CircularLayout } from \"./circular\";\nimport type { SyncLayoutConstructor } from \"./types\";\n\nexport const registry: Record<string, SyncLayoutConstructor<any>> = {\n circular: CircularLayout,\n};\nexport function registerLayout(id: string, layout: SyncLayoutConstructor<any>) {\n registry[id] = layout;\n}\n"],"names":["has","Object","prototype","hasOwnProperty","prefix","Events","EE","fn","context","once","this","addListener","emitter","event","TypeError","listener","evt","_events","push","_eventsCount","clearEvent","EventEmitter","create","__proto__","eventNames","events","name","names","call","slice","getOwnPropertySymbols","concat","listeners","handlers","i","l","length","ee","Array","listenerCount","emit","a1","a2","a3","a4","a5","args","len","arguments","removeListener","undefined","apply","j","on","removeAllListeners","off","prefixed","module","exports","addMethods","methods","w","Worker","URL","createObjectURL","Blob","revokeObjectURL","worker","c","callbacks","addEventListener","e","d","data","type","id","f","error","assign","Error","message","result","document","createEvent","initEvent","method","params","dispatchEvent","forEach","_arguments","Promise","a","b","postMessage","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","n","getter","__esModule","definition","key","o","defineProperty","enumerable","get","obj","prop","r","Symbol","toStringTag","value","extendStatics","setPrototypeOf","p","__assign","t","s","__read","m","iterator","ar","next","done","camelizeRE","str","replace","_","toUpperCase","isArray","isObject","val","clone","target","Date","getTime","v","map","keys","k","getEdgeTerminal","edge","terminal","cell","getFuncByUnknownType","defaultValue","resultIsNumber","max","Math","to","from","pack","isNaN","width","height","size","DEFAULTS_LAYOUT_OPTIONS","radius","startRadius","endRadius","startAngle","endAngle","PI","clockwise","divisions","ordering","angleRatio","options","execute","graph","genericCircularLayout","batch","mergedOptions","center","paramNodeSpacing","paramNodeSize","onLayoutEnd","nodes","getAllNodes","edges","getAllEdges","calculatedWidth","calculatedHeight","calculatedCenter","window","innerWidth","innerHeight","calculateCenter","updateNodeData","x","y","angleStep","nodeMap","node","degrees","nodeIdxMap","in","out","all","source","getDegree","nSize","astep","layoutNodes","nodesData","topologyOrdering","orderedNodes","degree","sort","compareDegree","degreeOrdering","divN","ceil","angle","floor","cos","sin","weight","mergeNodeData","aDegree","bDegree","directed","cnodes","orderedCNodes","resNodes","pickFlags","children","parent","sourceIdx","targetIdx","child","sourceChildren","targetChildren","initHierarchy","cnode","connect","foundChild","childIdx","ii","SupervisorEvent","LAYOUT_ITERATION","LAYOUT_END","layout","spawnWorker","String","__","constructor","terminate","running","start","payload","arraybufferWithNodesEdges","Float32Array","calculateLayout","then","positions","stop","kill","isRunning","registry","circular","CircularLayout","registerLayout"],"sourceRoot":""}