@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
@@ -1,741 +0,0 @@
1
- /**
2
- * @fileOverview fruchterman layout
3
- * @author shiwu.wyy@antfin.com
4
- */
5
-
6
- // @ts-nocheck
7
- import {
8
- OutNode,
9
- Edge,
10
- PointTuple,
11
- IndexMap,
12
- Point,
13
- GForceLayoutOptions,
14
- Degree,
15
- NodeMap,
16
- CentripetalOptions
17
- } from "../types";
18
- import { Base } from "../base";
19
- import { isNumber, isFunction, isArray, getDegreeMap, isObject, getEdgeTerminal, getAvgNodePosition, getCoreNodeAndRelativeLeafNodes } from "../../util";
20
- import { forceNBody } from "./ForceNBody";
21
-
22
- type INode = OutNode & {
23
- size: number | PointTuple;
24
- };
25
-
26
-
27
- const proccessToFunc = (
28
- value: number | Function | undefined,
29
- defaultV?: number
30
- ): ((d: any) => number) => {
31
- let func;
32
- if (!value) {
33
- func = (d: any): number => {
34
- return defaultV || 1;
35
- };
36
- } else if (isNumber(value)) {
37
- func = (d: any): number => {
38
- return value;
39
- };
40
- } else {
41
- func = value;
42
- }
43
- return func as any;
44
- };
45
-
46
- /**
47
- * graphin 中的 force 布局
48
- */
49
- export class Force2Layout extends Base {
50
- /** 布局中心 */
51
- public center: PointTuple;
52
-
53
- /** 停止迭代的最大迭代数 */
54
- public maxIteration: number = 1000;
55
-
56
- /** 是否启动 worker */
57
- public workerEnabled: boolean = false;
58
-
59
- /** 弹簧引力系数 */
60
- public edgeStrength: number | ((d?: any) => number) | undefined = 200;
61
-
62
- /** 斥力系数 */
63
- public nodeStrength: number | ((d?: any) => number) | undefined = 1000;
64
-
65
- /** 库伦系数 */
66
- public coulombDisScale: number = 0.005;
67
-
68
- /** 阻尼系数 */
69
- public damping: number = 0.9;
70
-
71
- /** 最大速度 */
72
- public maxSpeed: number = 500;
73
-
74
- /** 一次迭代的平均移动距离小于该值时停止迭代 */
75
- public minMovement: number = 0.4;
76
-
77
- /** 迭代中衰减 */
78
- public interval: number = 0.02;
79
-
80
- /** 斥力的一个系数 */
81
- public factor: number = 1;
82
-
83
- /** 每个节点质量的回调函数,若不指定,则默认使用度数作为节点质量 */
84
- public getMass: ((d?: any) => number) | undefined;
85
-
86
- /** 每个节点中心力的 x、y、强度的回调函数,若不指定,则没有额外中心力 */
87
- public getCenter: ((d?: any, degree?: number) => number[]) | undefined;
88
-
89
- /** 计算画布上下两侧对节点吸引力大小 */
90
- public defSideCoe?: (node: Node) => number;
91
-
92
- /** 理想边长 */
93
- public linkDistance: number | ((edge?: any, source?: any, target?: any) => number) | undefined = 200;
94
-
95
- /** 理想边长,兼容 graphin-force */
96
- public defSpringLen: number | ((edge?: any, source?: any, target?: any) => number) | undefined;
97
-
98
- /** 重力大小 */
99
- public gravity: number = 0;
100
-
101
- /** 向心力 */
102
- public centripetalOptions: CentripetalOptions;
103
-
104
- /** 是否需要叶子节点聚类 */
105
- public leafCluster: boolean;
106
-
107
- /** 是否需要全部节点聚类 */
108
- public clustering: boolean;
109
-
110
- /** 节点聚类的映射字段 */
111
- public nodeClusterBy: string;
112
-
113
- /** 节点聚类作用力系数 */
114
- public clusterNodeStrength: number | ((node: Node) => number) = 20;
115
-
116
- /** 是否防止重叠 */
117
- public preventOverlap: boolean = true;
118
-
119
- /** 防止重叠时的节点大小,默认从节点数据中取 size */
120
- public nodeSize: number | number[] | ((d?: any) => number) | undefined;
121
-
122
- /** 防止重叠时的节点之间最小间距 */
123
- public nodeSpacing: number | number[] | ((d?: any) => number) | undefined;
124
-
125
- /** 阈值的使用条件,mean 代表平均移动距离小于 minMovement 时停止迭代,max 代表最大移动距离大时 minMovement 时停时迭代。默认为 mean */
126
- public distanceThresholdMode: 'mean' | 'max' | 'min' = 'mean';
127
-
128
- /** 每次迭代结束的回调函数 */
129
- public tick: (() => void) | null = () => { };
130
-
131
- /** 是否允许每次迭代结束调用回调函数 */
132
- public enableTick: boolean;
133
-
134
- public nodes: INode[] | null = [];
135
-
136
- public edges: Edge[] | null = [];
137
-
138
- public width: number = 300;
139
-
140
- public height: number = 300;
141
-
142
- public nodeMap: NodeMap = {};
143
-
144
- public nodeIdxMap: IndexMap = {};
145
-
146
- public canvasEl: HTMLCanvasElement;
147
-
148
- public onLayoutEnd: () => void;
149
-
150
- /** 是否使用 window.setInterval 运行迭代 */
151
- public animate: Boolean;
152
-
153
- /** 监控信息,不配置则不计算 */
154
- public monitor: (params: { energy: number, nodes: INode[], edge: Edge[], iterations: number }) => void;
155
-
156
- /** 存储节点度数 */
157
- private degreesMap: { [id: string]: Degree };
158
-
159
- /** 迭代中的标识 */
160
- private timeInterval: number;
161
-
162
- /** 与 minMovement 进行对比的判断停止迭代节点移动距离 */
163
- private judgingDistance: number;
164
-
165
- constructor(options?: GForceLayoutOptions) {
166
- super();
167
- this.judgingDistance = 0;
168
- /** 默认的向心配置 */
169
- this.centripetalOptions = {
170
- leaf: 2,
171
- single: 2,
172
- others: 1,
173
- // eslint-disable-next-line
174
- center: (n: any) => {
175
- return {
176
- x: this.width / 2,
177
- y: this.height / 2,
178
- };
179
- },
180
- };
181
- const { getMass } = options;
182
- this.propsGetMass = getMass;
183
- this.updateCfg(options);
184
- }
185
-
186
- public getCentripetalOptions() {
187
- const { leafCluster, clustering, nodeClusterBy, nodes, nodeMap, clusterNodeStrength: propsClusterNodeStrength } = this;
188
-
189
- const getClusterNodeStrength = (node: Node) =>
190
- typeof propsClusterNodeStrength === 'function' ? propsClusterNodeStrength(node) : propsClusterNodeStrength;
191
-
192
- let centripetalOptions = {};
193
- let sameTypeLeafMap: any;
194
- // 如果传入了需要叶子节点聚类
195
- if (leafCluster) {
196
- sameTypeLeafMap = this.getSameTypeLeafMap() || {};
197
- const relativeNodesType = Array.from(new Set(nodes?.map((node) => node[nodeClusterBy]))) || [];
198
- centripetalOptions = {
199
- single: 100,
200
- leaf: (node, nodes, edges) => {
201
- // 找出与它关联的边的起点或终点出发的所有一度节点中同类型的叶子节点
202
- const { relativeLeafNodes, sameTypeLeafNodes } = sameTypeLeafMap[node.id] || {};
203
- // 如果都是同一类型或者每种类型只有1个,则施加默认向心力
204
- if (sameTypeLeafNodes?.length === relativeLeafNodes?.length || relativeNodesType?.length === 1) {
205
- return 1;
206
- }
207
- return getClusterNodeStrength(node);
208
- },
209
- others: 1,
210
- center: (node, nodes, edges) => {
211
- const { degree } = node.data?.layout || {};
212
- // 孤点默认给1个远离的中心点
213
- if (!degree) {
214
- return {
215
- x: 100,
216
- y: 100,
217
- };
218
- }
219
- let centerNode;
220
- if (degree === 1) {
221
- // 如果为叶子节点
222
- // 找出与它关联的边的起点出发的所有一度节点中同类型的叶子节点
223
- const { sameTypeLeafNodes = [] } = sameTypeLeafMap[node.id] || {};
224
- if (sameTypeLeafNodes.length === 1) {
225
- // 如果同类型的叶子节点只有1个,中心节点置为undefined
226
- centerNode = undefined;
227
- } else if (sameTypeLeafNodes.length > 1) {
228
- // 找出同类型节点平均位置节点的距离最近的节点作为中心节点
229
- centerNode = getAvgNodePosition(sameTypeLeafNodes);
230
- }
231
- } else {
232
- centerNode = undefined;
233
- }
234
- return {
235
- x: centerNode?.x as number,
236
- y: centerNode?.y as number,
237
- };
238
- },
239
- };
240
- }
241
-
242
- // 如果传入了全局节点聚类
243
- if (clustering) {
244
- if (!sameTypeLeafMap) sameTypeLeafMap = this.getSameTypeLeafMap();
245
- const clusters: string[] = Array.from(new Set(nodes.map((node, i) => {
246
- return node[nodeClusterBy];
247
- }))).filter(
248
- (item) => item !== undefined,
249
- );
250
- const centerNodeInfo: { [key: string]: { x: number; y: number } } = {};
251
- clusters.forEach((cluster) => {
252
- const sameTypeNodes = nodes.filter((item) => item[nodeClusterBy] === cluster).map((node) => nodeMap[node.id]);
253
- // 找出同类型节点平均位置节点的距离最近的节点作为中心节点
254
- centerNodeInfo[cluster] = getAvgNodePosition(sameTypeNodes);
255
- });
256
- centripetalOptions = {
257
- single: (node) => getClusterNodeStrength(node),
258
- leaf: (node) => getClusterNodeStrength(node),
259
- others: (node) => getClusterNodeStrength(node),
260
- center: (node, nodes, edges) => {
261
- // 找出同类型节点平均位置节点的距离最近的节点作为中心节点
262
- const centerNode = centerNodeInfo[node[nodeClusterBy]];
263
- return {
264
- x: centerNode?.x as number,
265
- y: centerNode?.y as number,
266
- };
267
- },
268
- };
269
- }
270
-
271
- this.centripetalOptions = {
272
- ...this.centripetalOptions,
273
- ...centripetalOptions,
274
- };
275
-
276
- const { leaf, single, others } = this.centripetalOptions;
277
- if (leaf && typeof leaf !== 'function') this.centripetalOptions.leaf = () => leaf;
278
- if (single && typeof single !== 'function') this.centripetalOptions.single = () => single;
279
- if (others && typeof others !== 'function') this.centripetalOptions.others = () => others;
280
- }
281
-
282
- public updateCfg(cfg: any) {
283
- if (cfg) Object.assign(this, cfg);
284
- }
285
-
286
- public getDefaultCfg() {
287
- return {
288
- maxIteration: 500,
289
- gravity: 10,
290
- enableTick: true,
291
- animate: true,
292
- };
293
- }
294
-
295
- /**
296
- * 执行布局
297
- */
298
- public execute() {
299
- const self = this;
300
- self.stop();
301
- const { nodes, edges, defSpringLen } = self;
302
-
303
- self.judgingDistance = 0;
304
-
305
- if (!nodes || nodes.length === 0) {
306
- self.onLayoutEnd([]);
307
- return;
308
- }
309
-
310
- if (!self.width && typeof window !== "undefined") {
311
- self.width = window.innerWidth;
312
- }
313
- if (!self.height && typeof window !== "undefined") {
314
- self.height = window.innerHeight;
315
- }
316
- if (!self.center) {
317
- self.center = [self.width / 2, self.height / 2];
318
- }
319
- const center = self.center;
320
-
321
- if (nodes.length === 1) {
322
- nodes[0].x = center[0];
323
- nodes[0].y = center[1];
324
- self.onLayoutEnd([{ ...nodes[0] }]);
325
- return;
326
- }
327
- self.degreesMap = getDegreeMap(nodes, edges);
328
- if (self.propsGetMass) {
329
- self.getMass = self.propsGetMass;
330
- } else {
331
- self.getMass = (d) => {
332
- let massWeight = 1;
333
- if (isNumber(d.mass)) massWeight = d.mass;
334
- const degree = self.degreesMap[d.id].all;
335
- return (!degree || degree < 5) ? massWeight : degree * 5 * massWeight;
336
- };
337
- }
338
-
339
-
340
- // node size function
341
- const nodeSize = self.nodeSize;
342
- let nodeSizeFunc;
343
- if (self.preventOverlap) {
344
- const nodeSpacing = self.nodeSpacing;
345
- let nodeSpacingFunc: (d?: any) => number;
346
- if (isNumber(nodeSpacing)) {
347
- nodeSpacingFunc = () => nodeSpacing as number;
348
- } else if (isFunction(nodeSpacing)) {
349
- nodeSpacingFunc = nodeSpacing as (d?: any) => number;
350
- } else {
351
- nodeSpacingFunc = () => 0;
352
- }
353
- if (!nodeSize) {
354
- nodeSizeFunc = (d: INode) => {
355
- if (d.size) {
356
- if (isArray(d.size)) {
357
- return Math.max(d.size[0], d.size[1]) + nodeSpacingFunc(d);
358
- } if (isObject(d.size)) {
359
- return Math.max(d.size.width, d.size.height) + nodeSpacingFunc(d);
360
- }
361
- return (d.size as number) + nodeSpacingFunc(d);
362
- }
363
- return 10 + nodeSpacingFunc(d);
364
- };
365
- } else if (isArray(nodeSize)) {
366
- nodeSizeFunc = (d: INode) => {
367
- return Math.max(nodeSize[0], nodeSize[1]) + nodeSpacingFunc(d);
368
- };
369
- } else {
370
- nodeSizeFunc = (d: INode) => (nodeSize as number) + nodeSpacingFunc(d);
371
- }
372
- }
373
- self.nodeSize = nodeSizeFunc;
374
-
375
- self.linkDistance = proccessToFunc(self.linkDistance, 1);
376
- self.nodeStrength = proccessToFunc(self.nodeStrength, 1);
377
- self.edgeStrength = proccessToFunc(self.edgeStrength, 1);
378
-
379
- const nodeMap: NodeMap = {};
380
- const nodeIdxMap: IndexMap = {};
381
- nodes.forEach((node, i) => {
382
- if (!isNumber(node.x)) node.x = Math.random() * self.width;
383
- if (!isNumber(node.y)) node.y = Math.random() * self.height;
384
- const degree = self.degreesMap[node.id];
385
- nodeMap[node.id] = {
386
- ...node,
387
- data: {
388
- ...node.data,
389
- size: self.nodeSize(node) || 30,
390
- layout: {
391
- inDegree: degree.in,
392
- outDegree: degree.out,
393
- degree: degree.all,
394
- tDegree: degree.in,
395
- sDegree: degree.out,
396
- force: {
397
- mass: self.getMass(node),
398
- nodeStrength: self.nodeStrength(node)
399
- }
400
- }
401
- }
402
- };
403
- nodeIdxMap[node.id] = i;
404
- });
405
- self.nodeMap = nodeMap;
406
- self.nodeIdxMap = nodeIdxMap;
407
-
408
-
409
- self.edgeInfos = [];
410
- edges?.forEach((edge) => {
411
- const sourceNode = nodeMap[edge.source];
412
- const targetNode = nodeMap[edge.target];
413
- if (!sourceNode || !targetNode) {
414
- elf.edgeInfos.push({});
415
- } else {
416
- self.edgeInfos.push({
417
- edgeStrength: self.edgeStrength(edge),
418
- linkDistance: defSpringLen ? defSpringLen(
419
- {
420
- ...edge,
421
- source: sourceNode,
422
- target: targetNode
423
- },
424
- sourceNode,
425
- targetNode
426
- ) : self.linkDistance(edge, sourceNode, targetNode) || 1 + ((nodeSize(sourceNode) + nodeSize(sourceNode)) || 0) / 2
427
- });
428
- }
429
- });
430
-
431
- this.getCentripetalOptions();
432
-
433
- self.onLayoutEnd = self.onLayoutEnd || (() => { });
434
-
435
- self.run();
436
- }
437
-
438
- public run() {
439
- const self = this;
440
- const { maxIteration, nodes, workerEnabled, minMovement, animate, nodeMap } = self;
441
-
442
- if (!nodes) return;
443
-
444
- const velArray: number[] = [];
445
- nodes.forEach((_, i) => {
446
- velArray[2 * i] = 0;
447
- velArray[2 * i + 1] = 0;
448
- });
449
-
450
- const maxIter = maxIteration;
451
- const silence = !animate;
452
- if (workerEnabled || silence) {
453
- let usedIter = 0;
454
- for (let i = 0; (self.judgingDistance > minMovement || i < 1) && i < maxIter; i++) {
455
- usedIter = i;
456
- self.runOneStep(i, velArray);
457
- }
458
- self.onLayoutEnd(Object.values(nodeMap));
459
- } else {
460
- if (typeof window === "undefined") return;
461
- let iter = 0;
462
- // interval for render the result after each iteration
463
- this.timeInterval = window.setInterval(() => {
464
- if (!nodes) return;
465
- self.runOneStep(iter, velArray);
466
- iter++;
467
- if (iter >= maxIter || self.judgingDistance < minMovement) {
468
- self.onLayoutEnd(Object.values(nodeMap));
469
- window.clearInterval(self.timeInterval);
470
- }
471
- }, 0);
472
- }
473
- }
474
-
475
- private runOneStep(iter: number, velArray: number[]) {
476
- const self = this;
477
- const { nodes, edges, nodeMap, monitor } = self;
478
- const accArray: number[] = [];
479
- if (!nodes?.length) return;
480
- self.calRepulsive(accArray);
481
- if (edges) self.calAttractive(accArray);
482
- self.calGravity(accArray);
483
- const stepInterval = self.interval; // Math.max(0.02, self.interval - iter * 0.002);
484
- self.updateVelocity(accArray, velArray, stepInterval);
485
- self.updatePosition(velArray, stepInterval);
486
- self.tick?.();
487
-
488
- /** 如果需要监控信息,则提供给用户 */
489
- if (monitor) {
490
- const energy = this.calTotalEnergy(accArray);
491
- monitor({ energy, nodes, edges, iterations: iter });
492
- }
493
- }
494
-
495
- private calTotalEnergy(accArray: number[]) {
496
- const { nodes, nodeMap } = this;
497
- if (!nodes?.length) return 0;
498
- let energy = 0.0;
499
-
500
- nodes.forEach((node, i) => {
501
- const vx = accArray[2 * i];
502
- const vy = accArray[2 * i + 1];
503
- const speed2 = vx * vx + vy * vy;
504
- const { mass = 1 } = nodeMap[node.id].data.layout.force;
505
- energy += mass * speed2 * 0.5; // p = 1/2*(mv^2)
506
- });
507
-
508
- return energy;
509
- }
510
-
511
- // coulombs law
512
- public calRepulsive(accArray: number[]) {
513
- const self = this;
514
- const { nodes, nodeMap, factor, coulombDisScale } = self;
515
- const nodeSize = self.nodeSize as Function;
516
- forceNBody(nodes, nodeMap, factor, coulombDisScale * coulombDisScale, accArray);
517
- }
518
-
519
- // hooks law
520
- public calAttractive(accArray: number[]) {
521
- const self = this;
522
- const { edges, nodeMap, nodeIdxMap, edgeInfos } = self;
523
- const nodeSize = self.nodeSize as Function;
524
- edges.forEach((edge, i) => {
525
- const source = getEdgeTerminal(edge, 'source');
526
- const target = getEdgeTerminal(edge, 'target');
527
- const sourceNode = nodeMap[source];
528
- const targetNode = nodeMap[target];
529
- if (!sourceNode || !targetNode) return;
530
- let vecX = targetNode.x - sourceNode.x;
531
- let vecY = targetNode.y - sourceNode.y;
532
- if (!vecX && !vecY) {
533
- vecX = Math.random() * 0.01;
534
- vecY = Math.random() * 0.01;
535
- }
536
- const vecLength = Math.sqrt(vecX * vecX + vecY * vecY);
537
- const direX = vecX / vecLength;
538
- const direY = vecY / vecLength;
539
- // @ts-ignore
540
- const { linkDistance = 200, edgeStrength = 200 } = edgeInfos[i] || {};
541
- const diff = linkDistance - vecLength;
542
- const param = diff * edgeStrength;
543
- const massSource = sourceNode.data.layout.force.mass || 1;
544
- const massTarget = targetNode.data.layout.force.mass || 1;
545
- // 质量占比越大,对另一端影响程度越大
546
- const sourceMassRatio = 1 / massSource;
547
- const targetMassRatio = 1 / massTarget;
548
- const disX = direX * param;
549
- const disY = direY * param;
550
- const sourceIdx = 2 * nodeIdxMap[source];
551
- const targetIdx = 2 * nodeIdxMap[target];
552
- accArray[sourceIdx] -= disX * sourceMassRatio;
553
- accArray[sourceIdx + 1] -= disY * sourceMassRatio;
554
- accArray[targetIdx] += disX * targetMassRatio;
555
- accArray[targetIdx + 1] += disY * targetMassRatio;
556
- });
557
- }
558
-
559
- // attract to center
560
- public calGravity(accArray: number[]) {
561
- const self = this;
562
- const { nodes, edges = [], nodeMap, width, height, center, gravity: defaultGravity, degreesMap, centripetalOptions } = self;
563
- if (!nodes) return;
564
- const nodeLength = nodes.length;
565
- for (let i = 0; i < nodeLength; i++) {
566
- const idx = 2 * i;
567
- const node = nodeMap[nodes[i].id];
568
- const { mass = 1 } = node.data.layout.force;
569
- let vecX = 0;
570
- let vecY = 0;
571
- let gravity = defaultGravity;
572
-
573
- const { in: inDegree, out: outDegree, all: degree } = degreesMap[node.id];
574
- const forceCenter = self.getCenter?.(node, degree);
575
- if (forceCenter) {
576
- const [centerX, centerY, strength] = forceCenter;
577
- vecX = node.x - centerX;
578
- vecY = node.y - centerY;
579
- gravity = strength;
580
- } else {
581
- vecX = node.x - center[0];
582
- vecY = node.y - center[1];
583
- }
584
-
585
- if (gravity) {
586
- accArray[idx] -= gravity * vecX / mass;
587
- accArray[idx + 1] -= gravity * vecY / mass;
588
- }
589
-
590
- if (centripetalOptions) {
591
- const { leaf, single, others, center: centriCenter } = centripetalOptions;
592
- const { x: centriX, y: centriY, centerStrength } = centriCenter?.(node, nodes, edges, width, height) || { x: 0, y: 0, centerStrength: 0 };
593
- if (!isNumber(centriX) || !isNumber(centriY)) continue;
594
- const vx = (node.x - centriX) / mass;
595
- const vy = (node.y - centriY) / mass;
596
- if (centerStrength) {
597
- accArray[idx] -= centerStrength * vx;
598
- accArray[idx + 1] -= centerStrength * vy;
599
- }
600
-
601
- // 孤点
602
- if (degree === 0) {
603
- const singleStrength = single(node);
604
- if (!singleStrength) continue;
605
- accArray[idx] -= singleStrength * vx;
606
- accArray[idx + 1] -= singleStrength * vy;
607
- continue;
608
- }
609
-
610
- // 没有出度或没有入度,都认为是叶子节点
611
- if (inDegree === 0 || outDegree === 0) {
612
- const leafStrength = leaf(node, nodes, edges);
613
- if (!leafStrength) continue;
614
- accArray[idx] -= leafStrength * vx;
615
- accArray[idx + 1] -= leafStrength * vy;
616
- continue;
617
- }
618
-
619
- /** others */
620
- const othersStrength = others(node);
621
- if (!othersStrength) continue;
622
- accArray[idx] -= othersStrength * vx;
623
- accArray[idx + 1] -= othersStrength * vy;
624
- }
625
- }
626
- }
627
-
628
- // TODO: 待 graphin 修改正确
629
- // public attractToSide(accArray: number[]) {
630
- // const { defSideCoe, height, nodes } = this;
631
- // if (!defSideCoe || typeof defSideCoe !== 'function' || !nodes?.length) return;
632
- // nodes.forEach((node, i) => {
633
- // const sideCoe = defSideCoe!(node);
634
- // if (sideCoe === 0) return;
635
- // const targetY = sideCoe > 0 ? 0 : height;
636
- // const strength = Math.abs(sideCoe);
637
- // accArray[2 * i + 1] -= strength * (targetY - node.y);
638
- // });
639
- // };
640
-
641
- public updateVelocity(
642
- accArray: number[],
643
- velArray: number[],
644
- stepInterval: number
645
- ) {
646
- const self = this;
647
- const { nodes, damping, maxSpeed } = self;
648
- if (!nodes?.length) return;
649
- nodes.forEach((_, i) => {
650
- let vx = (velArray[2 * i] + accArray[2 * i] * stepInterval) * damping || 0.01;
651
- let vy = (velArray[2 * i + 1] + accArray[2 * i + 1] * stepInterval) * damping || 0.01;
652
- const vLength = Math.sqrt(vx * vx + vy * vy);
653
- if (vLength > maxSpeed) {
654
- const param2 = maxSpeed / vLength;
655
- vx = param2 * vx;
656
- vy = param2 * vy;
657
- }
658
- velArray[2 * i] = vx;
659
- velArray[2 * i + 1] = vy;
660
- });
661
- }
662
-
663
- public updatePosition(
664
- velArray: number[],
665
- stepInterval: number,
666
- ) {
667
- const self = this;
668
- const { nodes, distanceThresholdMode, nodeMap } = self;
669
- if (!nodes?.length) {
670
- this.judgingDistance = 0;
671
- return;
672
- }
673
- let sum = 0;
674
- if (distanceThresholdMode === 'max') self.judgingDistance = -Infinity;
675
- else if (distanceThresholdMode === 'min') self.judgingDistance = Infinity;
676
-
677
- nodes.forEach((node: any, i) => {
678
- const mappedNode = nodeMap[node.id];
679
- if (isNumber(node.fx) && isNumber(node.fy)) {
680
- node.x = node.fx;
681
- node.y = node.fy;
682
- mappedNode.x = node.x;
683
- mappedNode.y = node.y;
684
- return;
685
- }
686
- const distX = velArray[2 * i] * stepInterval;
687
- const distY = velArray[2 * i + 1] * stepInterval;
688
- node.x += distX;
689
- node.y += distY;
690
- mappedNode.x = node.x;
691
- mappedNode.y = node.y;
692
-
693
- const distanceMagnitude = Math.sqrt(distX * distX + distY * distY);
694
- switch (distanceThresholdMode) {
695
- case 'max':
696
- if (self.judgingDistance < distanceMagnitude) self.judgingDistance = distanceMagnitude;
697
- break;
698
- case 'min':
699
- if (self.judgingDistance > distanceMagnitude) self.judgingDistance = distanceMagnitude;
700
- break;
701
- default:
702
- sum = sum + distanceMagnitude;
703
- break;
704
- }
705
- });
706
- if (!distanceThresholdMode || distanceThresholdMode === 'mean') self.judgingDistance = sum / nodes.length;
707
- }
708
-
709
- public stop() {
710
- if (this.timeInterval && typeof window !== "undefined") {
711
- window.clearInterval(this.timeInterval);
712
- }
713
- }
714
-
715
- public destroy() {
716
- const self = this;
717
- self.stop();
718
- self.tick = null;
719
- self.nodes = null;
720
- self.edges = null;
721
- self.destroyed = true;
722
- }
723
-
724
- public getType() {
725
- return "force2";
726
- }
727
-
728
- private getSameTypeLeafMap() {
729
- const { nodeClusterBy, nodes, edges, nodeMap, degreesMap } = this;
730
- if (!nodes?.length) return;
731
- // eslint-disable-next-line
732
- const sameTypeLeafMap: { [nodeId: string]: any } = {};
733
- nodes.forEach((node, i) => {
734
- const degree = degreesMap[node.id].all;
735
- if (degree === 1) {
736
- sameTypeLeafMap[node.id] = getCoreNodeAndRelativeLeafNodes('leaf', node, edges, nodeClusterBy, degreesMap, nodeMap);
737
- }
738
- });
739
- return sameTypeLeafMap;
740
- }
741
- }