@antv/layout 1.2.0 → 1.2.2

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 (142) hide show
  1. package/dist/0229766b7896aada2515.worker.js +2 -0
  2. package/dist/0229766b7896aada2515.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.d.ts +18 -0
  6. package/lib/bundle-entry.js +19 -0
  7. package/lib/bundle-entry.js.map +1 -0
  8. package/lib/bundle-supervisor.d.ts +51 -0
  9. package/lib/bundle-supervisor.js +93 -0
  10. package/lib/bundle-supervisor.js.map +1 -0
  11. package/lib/bundle-worker.d.ts +3 -0
  12. package/lib/bundle-worker.js +53 -0
  13. package/lib/bundle-worker.js.map +1 -0
  14. package/lib/circular.js +258 -0
  15. package/lib/circular.js.map +1 -0
  16. package/lib/concentric.js +221 -0
  17. package/lib/concentric.js.map +1 -0
  18. package/lib/d3Force/forceInBox.js +331 -0
  19. package/lib/d3Force/forceInBox.js.map +1 -0
  20. package/lib/d3Force/index.js +339 -0
  21. package/lib/d3Force/index.js.map +1 -0
  22. package/lib/dagre/acyclic.js +62 -0
  23. package/lib/dagre/acyclic.js.map +1 -0
  24. package/lib/dagre/add-border-segments.js +37 -0
  25. package/lib/dagre/add-border-segments.js.map +1 -0
  26. package/lib/dagre/coordinate-system.js +65 -0
  27. package/lib/dagre/coordinate-system.js.map +1 -0
  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 +468 -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 +41 -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.js +121 -0
  53. package/lib/dagre/order/resolve-conflicts.js.map +1 -0
  54. package/lib/dagre/order/sort-subgraph.js +84 -0
  55. package/lib/dagre/order/sort-subgraph.js.map +1 -0
  56. package/lib/dagre/order/sort.js +74 -0
  57. package/lib/dagre/order/sort.js.map +1 -0
  58. package/lib/dagre/parent-dummy-chains.js +80 -0
  59. package/lib/dagre/parent-dummy-chains.js.map +1 -0
  60. package/lib/dagre/position/bk.js +398 -0
  61. package/lib/dagre/position/bk.js.map +1 -0
  62. package/lib/dagre/position/index.js +54 -0
  63. package/lib/dagre/position/index.js.map +1 -0
  64. package/lib/dagre/rank/feasible-tree.js +164 -0
  65. package/lib/dagre/rank/feasible-tree.js.map +1 -0
  66. package/lib/dagre/rank/index.js +48 -0
  67. package/lib/dagre/rank/index.js.map +1 -0
  68. package/lib/dagre/rank/network-simplex.js +232 -0
  69. package/lib/dagre/rank/network-simplex.js.map +1 -0
  70. package/lib/dagre/rank/util.js +138 -0
  71. package/lib/dagre/rank/util.js.map +1 -0
  72. package/lib/dagre/util.js +289 -0
  73. package/lib/dagre/util.js.map +1 -0
  74. package/lib/dagre.d.ts +1 -2
  75. package/lib/dagre.js +543 -0
  76. package/lib/dagre.js.map +1 -0
  77. package/lib/force/forceNBody.js +103 -0
  78. package/lib/force/forceNBody.js.map +1 -0
  79. package/lib/force/index.js +797 -0
  80. package/lib/force/index.js.map +1 -0
  81. package/lib/force/types.js +2 -0
  82. package/lib/force/types.js.map +1 -0
  83. package/lib/forceAtlas2/body.js +91 -0
  84. package/lib/forceAtlas2/body.js.map +1 -0
  85. package/lib/forceAtlas2/index.js +562 -0
  86. package/lib/forceAtlas2/index.js.map +1 -0
  87. package/lib/forceAtlas2/quad.js +98 -0
  88. package/lib/forceAtlas2/quad.js.map +1 -0
  89. package/lib/forceAtlas2/quadTree.js +105 -0
  90. package/lib/forceAtlas2/quadTree.js.map +1 -0
  91. package/lib/fruchterman.js +376 -0
  92. package/lib/fruchterman.js.map +1 -0
  93. package/lib/grid.js +308 -0
  94. package/lib/grid.js.map +1 -0
  95. package/lib/index.js +16 -0
  96. package/lib/index.js.map +1 -0
  97. package/lib/mds.js +137 -0
  98. package/lib/mds.js.map +1 -0
  99. package/lib/radial/index.js +355 -0
  100. package/lib/radial/index.js.map +1 -0
  101. package/lib/radial/mds.js +29 -0
  102. package/lib/radial/mds.js.map +1 -0
  103. package/lib/radial/radial-nonoverlap-force.js +100 -0
  104. package/lib/radial/radial-nonoverlap-force.js.map +1 -0
  105. package/lib/random.js +98 -0
  106. package/lib/random.js.map +1 -0
  107. package/lib/registry.d.ts +0 -1
  108. package/lib/registry.js +25 -0
  109. package/lib/registry.js.map +1 -0
  110. package/lib/supervisor.js +86 -0
  111. package/lib/supervisor.js.map +1 -0
  112. package/lib/types.js +4 -0
  113. package/lib/types.js.map +1 -0
  114. package/lib/util/array.js +2 -0
  115. package/lib/util/array.js.map +1 -0
  116. package/lib/util/common.d.ts +12 -0
  117. package/lib/util/common.js +32 -0
  118. package/lib/util/common.js.map +1 -0
  119. package/lib/util/function.js +124 -0
  120. package/lib/util/function.js.map +1 -0
  121. package/lib/util/gpu.js +214 -0
  122. package/lib/util/gpu.js.map +1 -0
  123. package/lib/util/index.js +7 -0
  124. package/lib/util/index.js.map +1 -0
  125. package/lib/util/math.js +228 -0
  126. package/lib/util/math.js.map +1 -0
  127. package/lib/util/number.js +5 -0
  128. package/lib/util/number.js.map +1 -0
  129. package/lib/util/object.js +42 -0
  130. package/lib/util/object.js.map +1 -0
  131. package/lib/util/string.js +15 -0
  132. package/lib/util/string.js.map +1 -0
  133. package/lib/worker.d.ts +1 -3
  134. package/lib/worker.js +45 -0
  135. package/lib/worker.js.map +1 -0
  136. package/package.json +6 -5
  137. package/dist/5e37927bd3e57252658c.worker.js +0 -2
  138. package/dist/5e37927bd3e57252658c.worker.js.map +0 -1
  139. package/esm/5e37927bd3e57252658c.worker.js +0 -2
  140. package/esm/5e37927bd3e57252658c.worker.js.map +0 -1
  141. package/esm/index.esm.js +0 -2
  142. package/esm/index.esm.js.map +0 -1
@@ -0,0 +1,18 @@
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";
@@ -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,51 @@
1
+ import EventEmitter from "eventemitter3";
2
+ import { Graph, Node, Edge } from "@antv/graphlib";
3
+ import type { Layout, LayoutSupervisor } from "./types";
4
+ /**
5
+ * The payload transferred from main thread to the worker.
6
+ */
7
+ export interface Payload {
8
+ layout: {
9
+ id: string;
10
+ options: any;
11
+ iterations: number;
12
+ };
13
+ nodes: Node<any>[];
14
+ edges: Edge<any>[];
15
+ }
16
+ interface SupervisorOptions {
17
+ /**
18
+ * Iterations run in algorithm such as d3force, will be passed in `tick()` later.
19
+ */
20
+ iterations: number;
21
+ }
22
+ /**
23
+ * @example
24
+ * const graph = new Graph();
25
+ * const layout = new CircularLayout();
26
+ *
27
+ * const supervisor = new Supervisor(graph, layout, { iterations: 1000 });
28
+ * const positions = await supervisor.execute();
29
+ * supervisor.stop();
30
+ * supervisor.kill();
31
+ */
32
+ export declare class Supervisor extends EventEmitter implements LayoutSupervisor {
33
+ private graph;
34
+ private layout;
35
+ private options?;
36
+ /**
37
+ * Internal worker.
38
+ */
39
+ private worker;
40
+ /**
41
+ * Flag of running state.
42
+ */
43
+ private running;
44
+ constructor(graph: Graph<any, any>, layout: Layout<any>, options?: Partial<SupervisorOptions>);
45
+ spawnWorker(): void;
46
+ execute(): Promise<any>;
47
+ stop(): this;
48
+ kill(): void;
49
+ isRunning(): boolean;
50
+ }
51
+ export {};
@@ -0,0 +1,93 @@
1
+ import { __awaiter, __extends, __generator, __read, __rest } from "tslib";
2
+ import EventEmitter from "eventemitter3";
3
+ // @ts-ignore
4
+ // Inline the worker as a Blob. @see https://github.com/developit/workerize-loader#inline
5
+ import worker from "workerize-loader?inline!./worker";
6
+ /**
7
+ * @example
8
+ * const graph = new Graph();
9
+ * const layout = new CircularLayout();
10
+ *
11
+ * const supervisor = new Supervisor(graph, layout, { iterations: 1000 });
12
+ * const positions = await supervisor.execute();
13
+ * supervisor.stop();
14
+ * supervisor.kill();
15
+ */
16
+ var Supervisor = /** @class */ (function (_super) {
17
+ __extends(Supervisor, _super);
18
+ function Supervisor(graph, layout, options) {
19
+ var _this = _super.call(this) || this;
20
+ _this.graph = graph;
21
+ _this.layout = layout;
22
+ _this.options = options;
23
+ _this.spawnWorker();
24
+ return _this;
25
+ }
26
+ Supervisor.prototype.spawnWorker = function () {
27
+ if (this.worker) {
28
+ this.worker.terminate();
29
+ }
30
+ /**
31
+ * Worker function
32
+ */
33
+ // this.worker = this.createWorker(workerFunctionString);
34
+ // this.worker.addEventListener('message', this.handleWorkerMessage);
35
+ // Use workerize-loader to create WebWorker.
36
+ // @see https://github.com/developit/workerize-loader
37
+ this.worker = worker();
38
+ if (this.running) {
39
+ this.running = false;
40
+ this.execute();
41
+ }
42
+ };
43
+ Supervisor.prototype.execute = function () {
44
+ var _a;
45
+ return __awaiter(this, void 0, void 0, function () {
46
+ var _b, onTick, rest, payload, arraybufferWithNodesEdges, _c, positions;
47
+ return __generator(this, function (_d) {
48
+ switch (_d.label) {
49
+ case 0:
50
+ if (this.running)
51
+ return [2 /*return*/, this];
52
+ this.running = true;
53
+ _b = this.layout.options, onTick = _b.onTick, rest = __rest(_b, ["onTick"]);
54
+ payload = {
55
+ layout: {
56
+ id: this.layout.id,
57
+ options: rest,
58
+ iterations: (_a = this.options) === null || _a === void 0 ? void 0 : _a.iterations,
59
+ },
60
+ nodes: this.graph.getAllNodes(),
61
+ edges: this.graph.getAllEdges(),
62
+ };
63
+ arraybufferWithNodesEdges = new Float32Array([0]);
64
+ return [4 /*yield*/, this.worker.calculateLayout(payload, [
65
+ arraybufferWithNodesEdges,
66
+ ])];
67
+ case 1:
68
+ _c = __read.apply(void 0, [_d.sent(), 1]), positions = _c[0];
69
+ return [2 /*return*/, positions];
70
+ }
71
+ });
72
+ });
73
+ };
74
+ Supervisor.prototype.stop = function () {
75
+ this.running = false;
76
+ // trigger `layout.stop()` if needed
77
+ this.worker.stopLayout();
78
+ return this;
79
+ };
80
+ Supervisor.prototype.kill = function () {
81
+ if (this.worker) {
82
+ this.worker.terminate();
83
+ }
84
+ // TODO: unbind listeners on graph.
85
+ // TODO: release attached memory
86
+ };
87
+ Supervisor.prototype.isRunning = function () {
88
+ return this.running;
89
+ };
90
+ return Supervisor;
91
+ }(EventEmitter));
92
+ export { Supervisor };
93
+ //# sourceMappingURL=bundle-supervisor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle-supervisor.js","sourceRoot":"","sources":["../src/bundle-supervisor.ts"],"names":[],"mappings":";AAAA,OAAO,YAAY,MAAM,eAAe,CAAC;AAGzC,aAAa;AACb,yFAAyF;AACzF,OAAO,MAAM,MAAM,kCAAkC,CAAC;AAuBtD;;;;;;;;;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,3 @@
1
+ import type { Payload } from "./supervisor";
2
+ export declare function stopLayout(): void;
3
+ export declare function calculateLayout(payload: Payload, transferables: Float32Array[]): Promise<(import("./types").LayoutMapping | Float32Array[])[]>;
@@ -0,0 +1,53 @@
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
+ var _a;
19
+ if ((_a = currentLayout) === null || _a === void 0 ? void 0 : _a.stop) {
20
+ currentLayout.stop();
21
+ }
22
+ }
23
+ export function calculateLayout(payload, transferables) {
24
+ return __awaiter(this, void 0, void 0, function () {
25
+ var _a, id, options, iterations, nodes, edges, graph, layoutCtor, positions;
26
+ return __generator(this, function (_b) {
27
+ switch (_b.label) {
28
+ case 0:
29
+ _a = payload.layout, id = _a.id, options = _a.options, iterations = _a.iterations, nodes = payload.nodes, edges = payload.edges;
30
+ graph = new Graph({
31
+ nodes: nodes,
32
+ edges: edges,
33
+ });
34
+ layoutCtor = registry[id];
35
+ if (layoutCtor) {
36
+ currentLayout = new layoutCtor(options);
37
+ }
38
+ else {
39
+ throw new Error("Unknown layout id: " + id);
40
+ }
41
+ return [4 /*yield*/, currentLayout.execute(graph)];
42
+ case 1:
43
+ positions = _b.sent();
44
+ if (isLayoutWithIterations(currentLayout)) {
45
+ currentLayout.stop();
46
+ positions = currentLayout.tick(iterations);
47
+ }
48
+ return [2 /*return*/, [positions, transferables]];
49
+ }
50
+ });
51
+ });
52
+ }
53
+ //# 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,IAAI,MAAC,aAA2C,0CAAE,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,wBAAsB,EAAI,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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"}