@antv/layout 1.2.10 → 1.2.11

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 (143) hide show
  1. package/dist/747bfdc8efc94bc1fa90.worker.js +2 -0
  2. package/dist/747bfdc8efc94bc1fa90.worker.js.map +1 -0
  3. package/dist/index.min.js +1 -1
  4. package/dist/index.min.js.map +1 -1
  5. package/lib/bundle-entry.js +19 -0
  6. package/lib/bundle-entry.js.map +1 -0
  7. package/lib/bundle-supervisor.js +94 -0
  8. package/lib/bundle-supervisor.js.map +1 -0
  9. package/lib/bundle-worker.js +52 -0
  10. package/lib/bundle-worker.js.map +1 -0
  11. package/lib/circular.js +258 -0
  12. package/lib/circular.js.map +1 -0
  13. package/lib/comboCombined.js +440 -0
  14. package/lib/comboCombined.js.map +1 -0
  15. package/lib/concentric.js +229 -0
  16. package/lib/concentric.js.map +1 -0
  17. package/lib/d3Force/forceInBox.js +331 -0
  18. package/lib/d3Force/forceInBox.js.map +1 -0
  19. package/lib/d3Force/index.js +338 -0
  20. package/lib/d3Force/index.js.map +1 -0
  21. package/lib/dagre/acyclic.js +62 -0
  22. package/lib/dagre/acyclic.js.map +1 -0
  23. package/lib/dagre/add-border-segments.js +37 -0
  24. package/lib/dagre/add-border-segments.js.map +1 -0
  25. package/lib/dagre/coordinate-system.js +65 -0
  26. package/lib/dagre/coordinate-system.js.map +1 -0
  27. package/lib/dagre/data/list.d.ts +1 -1
  28. package/lib/dagre/data/list.js +50 -0
  29. package/lib/dagre/data/list.js.map +1 -0
  30. package/lib/dagre/greedy-fas.js +147 -0
  31. package/lib/dagre/greedy-fas.js.map +1 -0
  32. package/lib/dagre/layout.js +470 -0
  33. package/lib/dagre/layout.js.map +1 -0
  34. package/lib/dagre/nesting-graph.js +153 -0
  35. package/lib/dagre/nesting-graph.js.map +1 -0
  36. package/lib/dagre/normalize.js +98 -0
  37. package/lib/dagre/normalize.js.map +1 -0
  38. package/lib/dagre/order/add-subgraph-constraints.js +45 -0
  39. package/lib/dagre/order/add-subgraph-constraints.js.map +1 -0
  40. package/lib/dagre/order/barycenter.js +23 -0
  41. package/lib/dagre/order/barycenter.js.map +1 -0
  42. package/lib/dagre/order/build-layer-graph.js +96 -0
  43. package/lib/dagre/order/build-layer-graph.js.map +1 -0
  44. package/lib/dagre/order/cross-count.js +63 -0
  45. package/lib/dagre/order/cross-count.js.map +1 -0
  46. package/lib/dagre/order/index.js +91 -0
  47. package/lib/dagre/order/index.js.map +1 -0
  48. package/lib/dagre/order/init-data-order.js +28 -0
  49. package/lib/dagre/order/init-data-order.js.map +1 -0
  50. package/lib/dagre/order/init-order.js +50 -0
  51. package/lib/dagre/order/init-order.js.map +1 -0
  52. package/lib/dagre/order/resolve-conflicts.d.ts +1 -1
  53. package/lib/dagre/order/resolve-conflicts.js +121 -0
  54. package/lib/dagre/order/resolve-conflicts.js.map +1 -0
  55. package/lib/dagre/order/sort-subgraph.js +84 -0
  56. package/lib/dagre/order/sort-subgraph.js.map +1 -0
  57. package/lib/dagre/order/sort.js +74 -0
  58. package/lib/dagre/order/sort.js.map +1 -0
  59. package/lib/dagre/parent-dummy-chains.js +80 -0
  60. package/lib/dagre/parent-dummy-chains.js.map +1 -0
  61. package/lib/dagre/position/bk.d.ts +1 -1
  62. package/lib/dagre/position/bk.js +398 -0
  63. package/lib/dagre/position/bk.js.map +1 -0
  64. package/lib/dagre/position/index.js +54 -0
  65. package/lib/dagre/position/index.js.map +1 -0
  66. package/lib/dagre/rank/feasible-tree.js +164 -0
  67. package/lib/dagre/rank/feasible-tree.js.map +1 -0
  68. package/lib/dagre/rank/index.js +48 -0
  69. package/lib/dagre/rank/index.js.map +1 -0
  70. package/lib/dagre/rank/network-simplex.js +232 -0
  71. package/lib/dagre/rank/network-simplex.js.map +1 -0
  72. package/lib/dagre/rank/util.js +138 -0
  73. package/lib/dagre/rank/util.js.map +1 -0
  74. package/lib/dagre/util.js +289 -0
  75. package/lib/dagre/util.js.map +1 -0
  76. package/lib/dagre.js +545 -0
  77. package/lib/dagre.js.map +1 -0
  78. package/lib/force/forceNBody.js +123 -0
  79. package/lib/force/forceNBody.js.map +1 -0
  80. package/lib/force/index.js +805 -0
  81. package/lib/force/index.js.map +1 -0
  82. package/lib/force/types.d.ts +3 -3
  83. package/lib/force/types.js +2 -0
  84. package/lib/force/types.js.map +1 -0
  85. package/lib/forceAtlas2/body.d.ts +1 -1
  86. package/lib/forceAtlas2/body.js +91 -0
  87. package/lib/forceAtlas2/body.js.map +1 -0
  88. package/lib/forceAtlas2/index.js +562 -0
  89. package/lib/forceAtlas2/index.js.map +1 -0
  90. package/lib/forceAtlas2/quad.d.ts +1 -1
  91. package/lib/forceAtlas2/quad.js +98 -0
  92. package/lib/forceAtlas2/quad.js.map +1 -0
  93. package/lib/forceAtlas2/quadTree.js +105 -0
  94. package/lib/forceAtlas2/quadTree.js.map +1 -0
  95. package/lib/fruchterman.js +376 -0
  96. package/lib/fruchterman.js.map +1 -0
  97. package/lib/grid.js +308 -0
  98. package/lib/grid.js.map +1 -0
  99. package/lib/index.js +17 -0
  100. package/lib/index.js.map +1 -0
  101. package/lib/mds.js +137 -0
  102. package/lib/mds.js.map +1 -0
  103. package/lib/radial/index.js +355 -0
  104. package/lib/radial/index.js.map +1 -0
  105. package/lib/radial/mds.js +29 -0
  106. package/lib/radial/mds.js.map +1 -0
  107. package/lib/radial/radial-nonoverlap-force.d.ts +1 -1
  108. package/lib/radial/radial-nonoverlap-force.js +100 -0
  109. package/lib/radial/radial-nonoverlap-force.js.map +1 -0
  110. package/lib/random.js +98 -0
  111. package/lib/random.js.map +1 -0
  112. package/lib/registry.js +27 -0
  113. package/lib/registry.js.map +1 -0
  114. package/lib/supervisor.js +90 -0
  115. package/lib/supervisor.js.map +1 -0
  116. package/lib/types.d.ts +13 -13
  117. package/lib/types.js +4 -0
  118. package/lib/types.js.map +1 -0
  119. package/lib/util/array.js +2 -0
  120. package/lib/util/array.js.map +1 -0
  121. package/lib/util/common.d.ts +12 -0
  122. package/lib/util/common.js +32 -0
  123. package/lib/util/common.js.map +1 -0
  124. package/lib/util/function.js +126 -0
  125. package/lib/util/function.js.map +1 -0
  126. package/lib/util/gpu.js +214 -0
  127. package/lib/util/gpu.js.map +1 -0
  128. package/lib/util/index.js +7 -0
  129. package/lib/util/index.js.map +1 -0
  130. package/lib/util/math.js +257 -0
  131. package/lib/util/math.js.map +1 -0
  132. package/lib/util/number.js +5 -0
  133. package/lib/util/number.js.map +1 -0
  134. package/lib/util/object.js +42 -0
  135. package/lib/util/object.js.map +1 -0
  136. package/lib/util/string.js +15 -0
  137. package/lib/util/string.js.map +1 -0
  138. package/lib/worker.d.ts +1 -0
  139. package/lib/worker.js +45 -0
  140. package/lib/worker.js.map +1 -0
  141. package/package.json +2 -2
  142. package/dist/5fc550bbb6f708833d84.worker.js +0 -2
  143. package/dist/5fc550bbb6f708833d84.worker.js.map +0 -1
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Use as entry for webpack bundle
3
+ */
4
+ export * from "./circular";
5
+ export * from "./bundle-supervisor";
6
+ export * from "./registry";
7
+ export * from "./grid";
8
+ export * from "./random";
9
+ export * from "./mds";
10
+ export * from "./concentric";
11
+ export * from "./radial";
12
+ export * from "./fruchterman";
13
+ export * from "./d3Force";
14
+ export * from "./force";
15
+ export * from "./forceAtlas2";
16
+ export * from "./dagre";
17
+ export * from "./types";
18
+ export * from "./util";
19
+ //# sourceMappingURL=bundle-entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle-entry.js","sourceRoot":"","sources":["../src/bundle-entry.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC;AACtB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC"}
@@ -0,0 +1,94 @@
1
+ import { __awaiter, __extends, __generator, __read, __rest } from "tslib";
2
+ // @ts-ignore
3
+ import EventEmitter from "@antv/event-emitter";
4
+ // @ts-ignore
5
+ // Inline the worker as a Blob. @see https://github.com/developit/workerize-loader#inline
6
+ import worker from "workerize-loader?inline!./bundle-worker";
7
+ /**
8
+ * @example
9
+ * const graph = new Graph();
10
+ * const layout = new CircularLayout();
11
+ *
12
+ * const supervisor = new Supervisor(graph, layout, { iterations: 1000 });
13
+ * const positions = await supervisor.execute();
14
+ * supervisor.stop();
15
+ * supervisor.kill();
16
+ */
17
+ var Supervisor = /** @class */ (function (_super) {
18
+ __extends(Supervisor, _super);
19
+ function Supervisor(graph, layout, options) {
20
+ var _this = _super.call(this) || this;
21
+ _this.graph = graph;
22
+ _this.layout = layout;
23
+ _this.options = options;
24
+ _this.spawnWorker();
25
+ return _this;
26
+ }
27
+ Supervisor.prototype.spawnWorker = function () {
28
+ if (this.worker) {
29
+ this.worker.terminate();
30
+ }
31
+ /**
32
+ * Worker function
33
+ */
34
+ // this.worker = this.createWorker(workerFunctionString);
35
+ // this.worker.addEventListener('message', this.handleWorkerMessage);
36
+ // Use workerize-loader to create WebWorker.
37
+ // @see https://github.com/developit/workerize-loader
38
+ this.worker = worker();
39
+ if (this.running) {
40
+ this.running = false;
41
+ this.execute();
42
+ }
43
+ };
44
+ Supervisor.prototype.execute = function () {
45
+ var _a;
46
+ return __awaiter(this, void 0, void 0, function () {
47
+ var _b, onTick, rest, payload, arraybufferWithNodesEdges, _c, positions;
48
+ return __generator(this, function (_d) {
49
+ switch (_d.label) {
50
+ case 0:
51
+ if (this.running)
52
+ return [2 /*return*/, this];
53
+ this.running = true;
54
+ _b = this.layout.options, onTick = _b.onTick, rest = __rest(_b, ["onTick"]);
55
+ payload = {
56
+ layout: {
57
+ id: this.layout.id,
58
+ options: rest,
59
+ iterations: (_a = this.options) === null || _a === void 0 ? void 0 : _a.iterations,
60
+ },
61
+ nodes: this.graph.getAllNodes(),
62
+ edges: this.graph.getAllEdges(),
63
+ };
64
+ arraybufferWithNodesEdges = new Float32Array([0]);
65
+ return [4 /*yield*/, this.worker.calculateLayout(payload, [
66
+ arraybufferWithNodesEdges,
67
+ ])];
68
+ case 1:
69
+ _c = __read.apply(void 0, [_d.sent(), 1]), positions = _c[0];
70
+ return [2 /*return*/, positions];
71
+ }
72
+ });
73
+ });
74
+ };
75
+ Supervisor.prototype.stop = function () {
76
+ this.running = false;
77
+ // trigger `layout.stop()` if needed
78
+ this.worker.stopLayout();
79
+ return this;
80
+ };
81
+ Supervisor.prototype.kill = function () {
82
+ if (this.worker) {
83
+ this.worker.terminate();
84
+ }
85
+ // TODO: unbind listeners on graph.
86
+ // TODO: release attached memory
87
+ };
88
+ Supervisor.prototype.isRunning = function () {
89
+ return this.running;
90
+ };
91
+ return Supervisor;
92
+ }(EventEmitter));
93
+ export { Supervisor };
94
+ //# sourceMappingURL=bundle-supervisor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle-supervisor.js","sourceRoot":"","sources":["../src/bundle-supervisor.ts"],"names":[],"mappings":";AAAA,aAAa;AACb,OAAO,YAAY,MAAM,qBAAqB,CAAC;AAG/C,aAAa;AACb,yFAAyF;AACzF,OAAO,MAAM,MAAM,yCAAyC,CAAC;AAuB7D;;;;;;;;;GASG;AACH;IAAgC,8BAAY;IAW1C,oBACU,KAAsB,EACtB,MAAmB,EACnB,OAAoC;QAH9C,YAKE,iBAAO,SAGR;QAPS,WAAK,GAAL,KAAK,CAAiB;QACtB,YAAM,GAAN,MAAM,CAAa;QACnB,aAAO,GAAP,OAAO,CAA6B;QAI5C,KAAI,CAAC,WAAW,EAAE,CAAC;;IACrB,CAAC;IAED,gCAAW,GAAX;QACE,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;SACzB;QAED;;WAEG;QACH,yDAAyD;QACzD,qEAAqE;QAErE,4CAA4C;QAC5C,qDAAqD;QACrD,IAAI,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;QAEvB,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,IAAI,CAAC,OAAO,EAAE,CAAC;SAChB;IACH,CAAC;IAEK,4BAAO,GAAb;;;;;;;wBACE,IAAI,IAAI,CAAC,OAAO;4BAAE,sBAAO,IAAI,EAAC;wBAE9B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;wBAGd,KAAsB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAvC,MAAM,YAAA,EAAK,IAAI,cAAjB,UAAmB,CAAF,CAAyB;wBAC1C,OAAO,GAAG;4BACd,MAAM,EAAE;gCACN,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;gCAClB,OAAO,EAAE,IAAI;gCACb,UAAU,EAAE,MAAA,IAAI,CAAC,OAAO,0CAAE,UAAU;6BACrC;4BACD,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;4BAC/B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;yBAChC,CAAC;wBAOI,yBAAyB,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBAWpC,qBAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE;gCAC7D,yBAAyB;6BAC1B,CAAC,EAAA;;wBAFI,KAAA,sBAAc,SAElB,KAAA,EAFK,SAAS,QAAA;wBAIhB,sBAAO,SAAS,EAAC;;;;KAClB;IAED,yBAAI,GAAJ;QACE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QAErB,oCAAoC;QACpC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QAEzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,yBAAI,GAAJ;QACE,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;SACzB;QAED,mCAAmC;QAEnC,gCAAgC;IAClC,CAAC;IAED,8BAAS,GAAT;QACE,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IACH,iBAAC;AAAD,CAAC,AAxGD,CAAgC,YAAY,GAwG3C"}
@@ -0,0 +1,52 @@
1
+ import { __awaiter, __generator } from "tslib";
2
+ import { Graph } from "@antv/graphlib";
3
+ // import { setupTransferableMethodsOnWorker } from "@naoak/workerize-transferable";
4
+ import { registry } from "./registry";
5
+ import { isLayoutWithIterations } from "./types";
6
+ // @see https://www.npmjs.com/package/@naoak/workerize-transferable
7
+ // setupTransferableMethodsOnWorker({
8
+ // // The name of function which use some transferables.
9
+ // calculateLayout: {
10
+ // // Specify an instance of the function
11
+ // fn: calculateLayout,
12
+ // // Pick a transferable object from the result which is an instance of Float32Array
13
+ // pickTransferablesFromResult: (result) => [result[1].buffer],
14
+ // },
15
+ // });
16
+ var currentLayout;
17
+ export function stopLayout() {
18
+ if (currentLayout === null || currentLayout === void 0 ? void 0 : currentLayout.stop) {
19
+ currentLayout.stop();
20
+ }
21
+ }
22
+ export function calculateLayout(payload, transferables) {
23
+ return __awaiter(this, void 0, void 0, function () {
24
+ var _a, id, options, iterations, nodes, edges, graph, layoutCtor, positions;
25
+ return __generator(this, function (_b) {
26
+ switch (_b.label) {
27
+ case 0:
28
+ _a = payload.layout, id = _a.id, options = _a.options, iterations = _a.iterations, nodes = payload.nodes, edges = payload.edges;
29
+ graph = new Graph({
30
+ nodes: nodes,
31
+ edges: edges,
32
+ });
33
+ layoutCtor = registry[id];
34
+ if (layoutCtor) {
35
+ currentLayout = new layoutCtor(options);
36
+ }
37
+ else {
38
+ throw new Error("Unknown layout id: ".concat(id));
39
+ }
40
+ return [4 /*yield*/, currentLayout.execute(graph)];
41
+ case 1:
42
+ positions = _b.sent();
43
+ if (isLayoutWithIterations(currentLayout)) {
44
+ currentLayout.stop();
45
+ positions = currentLayout.tick(iterations);
46
+ }
47
+ return [2 /*return*/, [positions, transferables]];
48
+ }
49
+ });
50
+ });
51
+ }
52
+ //# sourceMappingURL=bundle-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle-worker.js","sourceRoot":"","sources":["../src/bundle-worker.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,oFAAoF;AACpF,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAgC,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAE/E,mEAAmE;AACnE,qCAAqC;AACrC,0DAA0D;AAC1D,uBAAuB;AACvB,6CAA6C;AAC7C,2BAA2B;AAC3B,yFAAyF;AACzF,mEAAmE;AACnE,OAAO;AACP,MAAM;AAEN,IAAI,aAA0B,CAAC;AAE/B,MAAM,UAAU,UAAU;IACxB,IAAK,aAA2C,aAA3C,aAAa,uBAAb,aAAa,CAAgC,IAAI,EAAE;QACrD,aAA2C,CAAC,IAAI,EAAE,CAAC;KACrD;AACH,CAAC;AAED,MAAM,UAAgB,eAAe,CACnC,OAAgB,EAChB,aAA6B;;;;;;oBAG3B,KAGE,OAAO,OAH0B,EAAzB,EAAE,QAAA,EAAE,OAAO,aAAA,EAAE,UAAU,gBAAA,EACjC,KAAK,GAEH,OAAO,MAFJ,EACL,KAAK,GACH,OAAO,MADJ,CACK;oBAMN,KAAK,GAAG,IAAI,KAAK,CAAC;wBACtB,KAAK,OAAA;wBACL,KAAK,OAAA;qBACN,CAAC,CAAC;oBAMG,UAAU,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;oBAChC,IAAI,UAAU,EAAE;wBACd,aAAa,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;qBACzC;yBAAM;wBACL,MAAM,IAAI,KAAK,CAAC,6BAAsB,EAAE,CAAE,CAAC,CAAC;qBAC7C;oBAEe,qBAAM,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,EAAA;;oBAA9C,SAAS,GAAG,SAAkC;oBAClD,IAAI,sBAAsB,CAAC,aAAa,CAAC,EAAE;wBACzC,aAAa,CAAC,IAAI,EAAE,CAAC;wBACrB,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;qBAC5C;oBACD,sBAAO,CAAC,SAAS,EAAE,aAAa,CAAC,EAAC;;;;CACnC"}
@@ -0,0 +1,258 @@
1
+ import { __assign, __awaiter, __generator, __read } from "tslib";
2
+ import { formatSizeFn, formatNumberFn, cloneFormatData } from './util';
3
+ import { handleSingleNodeGraph } from './util/common';
4
+ var DEFAULTS_LAYOUT_OPTIONS = {
5
+ radius: null,
6
+ startRadius: null,
7
+ endRadius: null,
8
+ startAngle: 0,
9
+ endAngle: 2 * Math.PI,
10
+ clockwise: true,
11
+ divisions: 1,
12
+ ordering: null,
13
+ angleRatio: 1,
14
+ };
15
+ /**
16
+ * Layout arranging the nodes in a circle.
17
+ *
18
+ * @example
19
+ * // Assign layout options when initialization.
20
+ * const layout = new CircularLayout({ radius: 10 });
21
+ * const positions = await layout.execute(graph); // { nodes: [], edges: [] }
22
+ *
23
+ * // Or use different options later.
24
+ * const layout = new CircularLayout({ radius: 10 });
25
+ * const positions = await layout.execute(graph, { radius: 20 }); // { nodes: [], edges: [] }
26
+ *
27
+ * // If you want to assign the positions directly to the nodes, use assign method.
28
+ * await layout.assign(graph, { radius: 20 });
29
+ */
30
+ var CircularLayout = /** @class */ (function () {
31
+ function CircularLayout(options) {
32
+ if (options === void 0) { options = {}; }
33
+ this.options = options;
34
+ this.id = 'circular';
35
+ this.options = __assign(__assign({}, DEFAULTS_LAYOUT_OPTIONS), options);
36
+ }
37
+ /**
38
+ * Return the positions of nodes and edges(if needed).
39
+ */
40
+ CircularLayout.prototype.execute = function (graph, options) {
41
+ return __awaiter(this, void 0, void 0, function () {
42
+ return __generator(this, function (_a) {
43
+ return [2 /*return*/, this.genericCircularLayout(false, graph, options)];
44
+ });
45
+ });
46
+ };
47
+ /**
48
+ * To directly assign the positions to the nodes.
49
+ */
50
+ CircularLayout.prototype.assign = function (graph, options) {
51
+ return __awaiter(this, void 0, void 0, function () {
52
+ return __generator(this, function (_a) {
53
+ switch (_a.label) {
54
+ case 0: return [4 /*yield*/, this.genericCircularLayout(true, graph, options)];
55
+ case 1:
56
+ _a.sent();
57
+ return [2 /*return*/];
58
+ }
59
+ });
60
+ });
61
+ };
62
+ CircularLayout.prototype.genericCircularLayout = function (assign, graph, options) {
63
+ return __awaiter(this, void 0, void 0, function () {
64
+ var mergedOptions, width, height, center, divisions, _a, startAngle, _b, endAngle, angleRatio, ordering, clockwise, paramNodeSpacing, paramNodeSize, nodes, edges, _c, calculatedWidth, calculatedHeight, calculatedCenter, n, angleStep, radius, startRadius, endRadius, nodeSpacing_1, nodeSize_1, maxNodeSize_1, perimeter_1, astep, layoutNodes, divN, i, r, angle, result;
65
+ return __generator(this, function (_d) {
66
+ mergedOptions = __assign(__assign({}, this.options), options);
67
+ width = mergedOptions.width, height = mergedOptions.height, center = mergedOptions.center, divisions = mergedOptions.divisions, _a = mergedOptions.startAngle, startAngle = _a === void 0 ? 0 : _a, _b = mergedOptions.endAngle, endAngle = _b === void 0 ? 2 * Math.PI : _b, angleRatio = mergedOptions.angleRatio, ordering = mergedOptions.ordering, clockwise = mergedOptions.clockwise, paramNodeSpacing = mergedOptions.nodeSpacing, paramNodeSize = mergedOptions.nodeSize;
68
+ nodes = graph.getAllNodes();
69
+ edges = graph.getAllEdges();
70
+ _c = __read(calculateCenter(width, height, center), 3), calculatedWidth = _c[0], calculatedHeight = _c[1], calculatedCenter = _c[2];
71
+ n = nodes === null || nodes === void 0 ? void 0 : nodes.length;
72
+ if (!n || n === 1) {
73
+ return [2 /*return*/, handleSingleNodeGraph(graph, assign, calculatedCenter)];
74
+ }
75
+ angleStep = (endAngle - startAngle) / n;
76
+ radius = mergedOptions.radius, startRadius = mergedOptions.startRadius, endRadius = mergedOptions.endRadius;
77
+ if (paramNodeSpacing) {
78
+ nodeSpacing_1 = formatNumberFn(10, paramNodeSpacing);
79
+ nodeSize_1 = formatSizeFn(10, paramNodeSize);
80
+ maxNodeSize_1 = -Infinity;
81
+ nodes.forEach(function (node) {
82
+ var nSize = nodeSize_1(node);
83
+ if (maxNodeSize_1 < nSize)
84
+ maxNodeSize_1 = nSize;
85
+ });
86
+ perimeter_1 = 0;
87
+ nodes.forEach(function (node, i) {
88
+ if (i === 0)
89
+ perimeter_1 += maxNodeSize_1 || 10;
90
+ else
91
+ perimeter_1 += (nodeSpacing_1(node) || 0) + (maxNodeSize_1 || 10);
92
+ });
93
+ radius = perimeter_1 / (2 * Math.PI);
94
+ }
95
+ else if (!radius && !startRadius && !endRadius) {
96
+ radius = Math.min(calculatedHeight, calculatedWidth) / 2;
97
+ }
98
+ else if (!startRadius && endRadius) {
99
+ startRadius = endRadius;
100
+ }
101
+ else if (startRadius && !endRadius) {
102
+ endRadius = startRadius;
103
+ }
104
+ astep = angleStep * angleRatio;
105
+ layoutNodes = [];
106
+ if (ordering === 'topology') {
107
+ // layout according to the topology
108
+ layoutNodes = topologyOrdering(graph, nodes);
109
+ }
110
+ else if (ordering === 'topology-directed') {
111
+ // layout according to the topology
112
+ layoutNodes = topologyOrdering(graph, nodes, true);
113
+ }
114
+ else if (ordering === 'degree') {
115
+ // layout according to the descent order of degrees
116
+ layoutNodes = degreeOrdering(graph, nodes);
117
+ }
118
+ else {
119
+ // layout according to the original order in the data.nodes
120
+ layoutNodes = nodes.map(function (node) { return cloneFormatData(node); });
121
+ }
122
+ divN = Math.ceil(n / divisions);
123
+ for (i = 0; i < n; ++i) {
124
+ r = radius;
125
+ if (!r && startRadius !== null && endRadius !== null) {
126
+ r = startRadius + (i * (endRadius - startRadius)) / (n - 1);
127
+ }
128
+ if (!r) {
129
+ r = 10 + (i * 100) / (n - 1);
130
+ }
131
+ angle = startAngle +
132
+ (i % divN) * astep +
133
+ ((2 * Math.PI) / divisions) * Math.floor(i / divN);
134
+ if (!clockwise) {
135
+ angle =
136
+ endAngle -
137
+ (i % divN) * astep -
138
+ ((2 * Math.PI) / divisions) * Math.floor(i / divN);
139
+ }
140
+ layoutNodes[i].data.x = calculatedCenter[0] + Math.cos(angle) * r;
141
+ layoutNodes[i].data.y = calculatedCenter[1] + Math.sin(angle) * r;
142
+ }
143
+ if (assign) {
144
+ layoutNodes.forEach(function (node) {
145
+ graph.mergeNodeData(node.id, {
146
+ x: node.data.x,
147
+ y: node.data.y,
148
+ });
149
+ });
150
+ }
151
+ result = {
152
+ nodes: layoutNodes,
153
+ edges: edges,
154
+ };
155
+ return [2 /*return*/, result];
156
+ });
157
+ });
158
+ };
159
+ return CircularLayout;
160
+ }());
161
+ export { CircularLayout };
162
+ /**
163
+ * order the nodes acoording to the graph topology
164
+ * @param graph
165
+ * @param nodes
166
+ * @param directed
167
+ * @returns
168
+ */
169
+ var topologyOrdering = function (graph, nodes, directed) {
170
+ if (directed === void 0) { directed = false; }
171
+ var orderedCNodes = [cloneFormatData(nodes[0])];
172
+ var pickFlags = {};
173
+ var n = nodes.length;
174
+ pickFlags[nodes[0].id] = true;
175
+ // write children into cnodes
176
+ var k = 0;
177
+ nodes.forEach(function (node, i) {
178
+ if (i !== 0) {
179
+ if ((i === n - 1 ||
180
+ graph.getDegree(node.id, 'both') !==
181
+ graph.getDegree(nodes[i + 1].id, 'both') ||
182
+ graph.areNeighbors(orderedCNodes[k].id, node.id)) &&
183
+ !pickFlags[node.id]) {
184
+ orderedCNodes.push(cloneFormatData(node));
185
+ pickFlags[node.id] = true;
186
+ k++;
187
+ }
188
+ else {
189
+ var children = directed
190
+ ? graph.getSuccessors(orderedCNodes[k].id)
191
+ : graph.getNeighbors(orderedCNodes[k].id);
192
+ var foundChild = false;
193
+ for (var j = 0; j < children.length; j++) {
194
+ var child = children[j];
195
+ if (graph.getDegree(child.id) === graph.getDegree(node.id) &&
196
+ !pickFlags[child.id]) {
197
+ orderedCNodes.push(cloneFormatData(child));
198
+ pickFlags[child.id] = true;
199
+ foundChild = true;
200
+ break;
201
+ }
202
+ }
203
+ var ii = 0;
204
+ while (!foundChild) {
205
+ if (!pickFlags[nodes[ii].id]) {
206
+ orderedCNodes.push(cloneFormatData(nodes[ii]));
207
+ pickFlags[nodes[ii].id] = true;
208
+ foundChild = true;
209
+ }
210
+ ii++;
211
+ if (ii === n) {
212
+ break;
213
+ }
214
+ }
215
+ }
216
+ }
217
+ });
218
+ return orderedCNodes;
219
+ };
220
+ /**
221
+ * order the nodes according to their degree
222
+ * @param graph
223
+ * @param nodes
224
+ * @returns
225
+ */
226
+ function degreeOrdering(graph, nodes) {
227
+ var orderedNodes = [];
228
+ nodes.forEach(function (node, i) {
229
+ orderedNodes.push(cloneFormatData(node));
230
+ });
231
+ orderedNodes.sort(function (nodeA, nodeB) {
232
+ return graph.getDegree(nodeA.id, 'both') - graph.getDegree(nodeB.id, 'both');
233
+ });
234
+ return orderedNodes;
235
+ }
236
+ /**
237
+ * format the invalide width and height, and get the center position
238
+ * @param width
239
+ * @param height
240
+ * @param center
241
+ * @returns
242
+ */
243
+ var calculateCenter = function (width, height, center) {
244
+ var calculatedWidth = width;
245
+ var calculatedHeight = height;
246
+ var calculatedCenter = center;
247
+ if (!calculatedWidth && typeof window !== 'undefined') {
248
+ calculatedWidth = window.innerWidth;
249
+ }
250
+ if (!calculatedHeight && typeof window !== 'undefined') {
251
+ calculatedHeight = window.innerHeight;
252
+ }
253
+ if (!calculatedCenter) {
254
+ calculatedCenter = [calculatedWidth / 2, calculatedHeight / 2];
255
+ }
256
+ return [calculatedWidth, calculatedHeight, calculatedCenter];
257
+ };
258
+ //# sourceMappingURL=circular.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circular.js","sourceRoot":"","sources":["../src/circular.ts"],"names":[],"mappings":"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"}