@antv/layout 1.0.0-alpha.8 → 1.0.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 (68) hide show
  1. package/README.md +223 -22
  2. package/dist/c1c68049e416ee50a3be.worker.js +2 -0
  3. package/dist/c1c68049e416ee50a3be.worker.js.map +1 -0
  4. package/dist/index.min.js +1 -1
  5. package/dist/index.min.js.map +1 -1
  6. package/esm/c1c68049e416ee50a3be.worker.js +2 -0
  7. package/esm/c1c68049e416ee50a3be.worker.js.map +1 -0
  8. package/esm/index.esm.js +1 -1
  9. package/esm/index.esm.js.map +1 -1
  10. package/lib/{Circular.d.ts → circular.d.ts} +7 -7
  11. package/lib/concentric.d.ts +7 -7
  12. package/lib/d3Force/forceInBox.d.ts +8 -8
  13. package/lib/d3Force/index.d.ts +26 -10
  14. package/lib/dagre/acyclic.d.ts +4 -0
  15. package/lib/dagre/add-border-segments.d.ts +2 -0
  16. package/lib/dagre/coordinate-system.d.ts +4 -0
  17. package/lib/dagre/data/list.d.ts +12 -0
  18. package/lib/dagre/greedy-fas.d.ts +3 -0
  19. package/lib/dagre/layout.d.ts +18 -0
  20. package/lib/dagre/nesting-graph.d.ts +8 -0
  21. package/lib/dagre/normalize.d.ts +5 -0
  22. package/lib/dagre/order/add-subgraph-constraints.d.ts +3 -0
  23. package/lib/dagre/order/barycenter.d.ts +14 -0
  24. package/lib/dagre/order/build-layer-graph.d.ts +3 -0
  25. package/lib/dagre/order/cross-count.d.ts +3 -0
  26. package/lib/dagre/order/index.d.ts +2 -0
  27. package/lib/dagre/order/init-data-order.d.ts +6 -0
  28. package/lib/dagre/order/init-order.d.ts +3 -0
  29. package/lib/dagre/order/resolve-conflicts.d.ts +20 -0
  30. package/lib/dagre/order/sort-subgraph.d.ts +7 -0
  31. package/lib/dagre/order/sort.d.ts +7 -0
  32. package/lib/dagre/parent-dummy-chains.d.ts +3 -0
  33. package/lib/dagre/position/bk.d.ts +25 -0
  34. package/lib/dagre/position/index.d.ts +7 -0
  35. package/lib/dagre/rank/feasible-tree.d.ts +5 -0
  36. package/lib/dagre/rank/index.d.ts +2 -0
  37. package/lib/dagre/rank/network-simplex.d.ts +16 -0
  38. package/lib/dagre/rank/util.d.ts +6 -0
  39. package/lib/dagre/util.d.ts +35 -0
  40. package/lib/dagre.d.ts +31 -0
  41. package/lib/force/index.d.ts +25 -12
  42. package/lib/force/types.d.ts +3 -3
  43. package/lib/forceAtlas2/body.d.ts +33 -0
  44. package/lib/forceAtlas2/index.d.ts +106 -0
  45. package/lib/forceAtlas2/quad.d.ts +27 -0
  46. package/lib/forceAtlas2/quadTree.d.ts +20 -0
  47. package/lib/fruchterman.d.ts +53 -0
  48. package/lib/grid.d.ts +7 -7
  49. package/lib/index.d.ts +5 -0
  50. package/lib/mds.d.ts +7 -7
  51. package/lib/radial/index.d.ts +7 -7
  52. package/lib/radial/{RadialNonoverlapForce.d.ts → radial-nonoverlap-force.d.ts} +1 -1
  53. package/lib/random.d.ts +7 -7
  54. package/lib/registry.d.ts +3 -3
  55. package/lib/supervisor.d.ts +51 -0
  56. package/lib/types.d.ts +137 -60
  57. package/lib/util/function.d.ts +7 -1
  58. package/lib/util/math.d.ts +1 -1
  59. package/lib/util/number.d.ts +0 -2
  60. package/lib/util/object.d.ts +5 -5
  61. package/lib/util/string.d.ts +0 -1
  62. package/lib/worker.d.ts +2 -1
  63. package/package.json +16 -5
  64. package/dist/e4d617f312325ea0e2e1.worker.js +0 -2
  65. package/dist/e4d617f312325ea0e2e1.worker.js.map +0 -1
  66. package/esm/e4d617f312325ea0e2e1.worker.js +0 -2
  67. package/esm/e4d617f312325ea0e2e1.worker.js.map +0 -1
  68. package/lib/Supervisor.d.ts +0 -65
package/lib/types.d.ts CHANGED
@@ -1,62 +1,111 @@
1
- import { Graph as IGraph, Node as INode, Edge as IEdge, PlainObject } from "@antv/graphlib";
1
+ import { Graph as IGraph, Node as INode, Edge as IEdge, PlainObject, GraphView as IGraphView, ID } from "@antv/graphlib";
2
2
  export interface NodeData extends PlainObject {
3
- visible?: boolean;
4
3
  size?: number | number[];
5
4
  bboxSize?: number[];
5
+ borderLeft?: ID | ID[];
6
+ borderRight?: ID | ID[];
7
+ x?: number;
8
+ y?: number;
9
+ height?: number;
10
+ width?: number;
11
+ e?: IEdge<EdgeData>;
12
+ selfEdges?: IEdge<EdgeData>[];
13
+ rank?: number;
14
+ _rank?: number;
15
+ order?: number;
16
+ fixorder?: number;
17
+ minRank?: number;
18
+ maxRank?: number;
19
+ layout?: boolean;
20
+ layer?: number;
21
+ low?: number;
22
+ lim?: number;
6
23
  }
7
24
  export interface OutNodeData extends NodeData {
8
25
  x: number;
9
26
  y: number;
10
27
  }
11
28
  export interface EdgeData extends PlainObject {
12
- visible?: boolean;
13
29
  virtual?: boolean;
30
+ weight?: number;
31
+ x?: number;
32
+ y?: number;
33
+ height?: number;
34
+ width?: number;
35
+ points?: Point[];
36
+ controlPoints?: Point[];
37
+ minlen?: number;
38
+ cutvalue?: number;
39
+ labeloffset?: number;
14
40
  }
15
41
  /** input node */
16
- export type Node = INode<NodeData>;
42
+ export declare type Node = INode<NodeData>;
17
43
  /** output node */
18
- export type OutNode = INode<OutNodeData>;
44
+ export declare type OutNode = INode<OutNodeData>;
19
45
  /** input and output edge */
20
- export type Edge = IEdge<EdgeData>;
21
- export type Degree = {
46
+ export declare type Edge = IEdge<EdgeData>;
47
+ export declare type Degree = {
22
48
  in: number;
23
49
  out: number;
24
50
  all: number;
25
51
  };
26
- export type IndexMap = {
52
+ export declare type IndexMap = {
27
53
  [nodeId: string]: number;
28
54
  };
29
- export type Graph = IGraph<NodeData, EdgeData>;
30
- export type PointTuple = [number, number];
31
- export type Point = {
55
+ export declare type Graph = IGraph<NodeData, EdgeData>;
56
+ export declare type GraphView = IGraphView<NodeData, EdgeData>;
57
+ export declare type PointTuple = [number, number];
58
+ export declare type Point = {
32
59
  x: number;
33
60
  y: number;
34
61
  };
35
- export type Matrix = number[];
36
- export type LayoutMapping = {
62
+ export declare type Matrix = number[];
63
+ export declare type LayoutMapping = {
37
64
  nodes: OutNode[];
38
65
  edges: Edge[];
39
66
  };
40
- export interface SyncLayout<LayoutOptions> {
41
- assign(graph: Graph, options?: LayoutOptions): void;
42
- execute(graph: Graph, options?: LayoutOptions): LayoutMapping;
67
+ export interface Layout<LayoutOptions> {
68
+ /**
69
+ * To directly assign the positions to the nodes.
70
+ */
71
+ assign(graph: Graph, options?: LayoutOptions): Promise<void>;
72
+ /**
73
+ * Return the positions of nodes and edges(if needed).
74
+ */
75
+ execute(graph: Graph, options?: LayoutOptions): Promise<LayoutMapping>;
76
+ /**
77
+ * Layout options, can be changed in runtime.
78
+ */
43
79
  options: LayoutOptions;
80
+ /**
81
+ * Unique ID, it will get registered and used on the webworker-side.
82
+ */
44
83
  id: string;
45
84
  }
46
- export interface SyncLayoutConstructor<LayoutOptions> {
47
- new (options?: LayoutOptions): SyncLayout<LayoutOptions>;
85
+ export declare function isLayoutWithIterations(layout: any): layout is LayoutWithIterations<any>;
86
+ export interface LayoutWithIterations<LayoutOptions> extends Layout<LayoutOptions> {
87
+ /**
88
+ * Some layout algorithm has n iterations so that the simulation needs to be stopped at any time.
89
+ * This method is useful for running the simulation manually.
90
+ * @see https://github.com/d3/d3-force#simulation_stop
91
+ */
92
+ stop: () => void;
93
+ /**
94
+ * Manually steps the simulation by the specified number of iterations.
95
+ * @see https://github.com/d3/d3-force#simulation_tick
96
+ */
97
+ tick: (iterations?: number) => LayoutMapping;
98
+ }
99
+ export interface LayoutConstructor<LayoutOptions> {
100
+ new (options?: LayoutOptions): Layout<LayoutOptions>;
48
101
  }
49
102
  export interface LayoutSupervisor {
50
- start(): void;
103
+ execute(): Promise<LayoutMapping>;
51
104
  stop(): void;
52
105
  kill(): void;
53
106
  isRunning(): boolean;
54
107
  }
55
- interface CommonOptions {
56
- layoutInvisibles?: boolean;
57
- onLayoutEnd?: (data: LayoutMapping) => void;
58
- }
59
- export interface CircularLayoutOptions extends CommonOptions {
108
+ export interface CircularLayoutOptions {
60
109
  center?: PointTuple;
61
110
  width?: number;
62
111
  height?: number;
@@ -72,7 +121,7 @@ export interface CircularLayoutOptions extends CommonOptions {
72
121
  nodeSpacing?: ((node?: Node) => number) | number;
73
122
  nodeSize?: number | number[];
74
123
  }
75
- export interface GridLayoutOptions extends CommonOptions {
124
+ export interface GridLayoutOptions {
76
125
  width?: number;
77
126
  height?: number;
78
127
  begin?: PointTuple;
@@ -83,26 +132,25 @@ export interface GridLayoutOptions extends CommonOptions {
83
132
  rows?: number;
84
133
  cols?: number;
85
134
  sortBy?: string;
86
- position?: ((node?: Node) => {
135
+ position?: (node?: Node) => {
87
136
  row?: number;
88
137
  col?: number;
89
- }) | undefined;
90
- nodeSpacing?: ((node?: Node) => number) | number | undefined;
138
+ };
139
+ nodeSpacing?: ((node?: Node) => number) | number;
91
140
  }
92
- export interface RandomLayoutOptions extends CommonOptions {
141
+ export interface RandomLayoutOptions {
93
142
  center?: PointTuple;
94
143
  width?: number;
95
144
  height?: number;
96
145
  }
97
- export interface MDSLayoutOptions extends CommonOptions {
146
+ export interface MDSLayoutOptions {
98
147
  center?: PointTuple;
99
148
  linkDistance?: number;
100
149
  }
101
- export interface ConcentricLayoutOptions extends CommonOptions {
150
+ export interface ConcentricLayoutOptions {
102
151
  center?: PointTuple;
103
152
  preventOverlap?: boolean;
104
153
  nodeSize?: number | PointTuple;
105
- minNodeSpacing?: number;
106
154
  sweep?: number;
107
155
  equidistant?: boolean;
108
156
  startAngle?: number;
@@ -111,9 +159,9 @@ export interface ConcentricLayoutOptions extends CommonOptions {
111
159
  sortBy?: string;
112
160
  width?: number;
113
161
  height?: number;
114
- nodeSpacing?: number | number[] | ((node?: Node) => number) | undefined;
162
+ nodeSpacing?: number | number[] | ((node?: Node) => number);
115
163
  }
116
- export interface RadialLayoutOptions extends CommonOptions {
164
+ export interface RadialLayoutOptions {
117
165
  center?: PointTuple;
118
166
  width?: number;
119
167
  height?: number;
@@ -122,18 +170,20 @@ export interface RadialLayoutOptions extends CommonOptions {
122
170
  focusNode?: string | Node | null;
123
171
  unitRadius?: number | null;
124
172
  preventOverlap?: boolean;
125
- nodeSize?: number | number[] | undefined;
126
- nodeSpacing?: number | Function | undefined;
173
+ nodeSize?: number | number[];
174
+ nodeSpacing?: number | Function;
127
175
  maxPreventOverlapIteration?: number;
128
176
  strictRadial?: boolean;
129
- sortBy?: string | undefined;
177
+ sortBy?: string;
130
178
  sortStrength?: number;
131
179
  }
132
- export interface DagreLayoutOptions extends CommonOptions {
133
- rankdir?: "TB" | "BT" | "LR" | "RL";
134
- align?: "UL" | "UR" | "DL" | "DR";
180
+ export declare type DagreRankdir = "TB" | "BT" | "LR" | "RL" | "tb" | "lr" | "rl" | "bt";
181
+ export declare type DagreAlign = "UL" | "UR" | "DL" | "DR";
182
+ export interface DagreLayoutOptions {
183
+ rankdir?: DagreRankdir;
184
+ align?: DagreAlign;
135
185
  begin?: PointTuple;
136
- nodeSize?: number | number[] | undefined;
186
+ nodeSize?: number | number[];
137
187
  nodesep?: number;
138
188
  ranksep?: number;
139
189
  controlPoints?: boolean;
@@ -141,23 +191,23 @@ export interface DagreLayoutOptions extends CommonOptions {
141
191
  edgeLabelSpace?: boolean;
142
192
  nodeOrder?: string[];
143
193
  radial?: boolean;
144
- focusNode: string | Node | null;
194
+ focusNode?: ID | Node | null;
145
195
  preset?: {
146
196
  nodes: OutNode[];
147
197
  edges: Edge[];
148
198
  };
149
- nodesepFunc?: ((d?: Node) => number) | undefined;
150
- ranksepFunc?: ((d?: Node) => number) | undefined;
199
+ nodesepFunc?: (d?: Node) => number;
200
+ ranksepFunc?: (d?: Node) => number;
151
201
  }
152
- export interface D3ForceLayoutOptions extends CommonOptions {
202
+ export interface D3ForceLayoutOptions {
153
203
  center?: PointTuple;
154
- linkDistance?: number | ((edge?: Edge) => number) | undefined;
155
- edgeStrength?: number | ((edge?: Edge) => number) | undefined;
156
- nodeStrength?: number | ((node: Node, i: number, nodes: Node[]) => number) | undefined;
204
+ linkDistance?: number | ((edge?: Edge) => number);
205
+ edgeStrength?: number | ((edge?: Edge) => number);
206
+ nodeStrength?: number | ((node?: Node) => number);
157
207
  preventOverlap?: boolean;
158
208
  collideStrength?: number;
159
- nodeSize?: number | number[] | ((node?: Node) => number) | undefined;
160
- nodeSpacing?: number | number[] | ((node?: Node) => number) | undefined;
209
+ nodeSize?: number | number[] | ((node?: Node) => number);
210
+ nodeSpacing?: number | number[] | ((node?: Node) => number);
161
211
  alpha?: number;
162
212
  alphaDecay?: number;
163
213
  alphaMin?: number;
@@ -184,18 +234,21 @@ export interface CentripetalOptions {
184
234
  centerStrength?: number;
185
235
  };
186
236
  }
187
- export interface ForceLayoutOptions extends CommonOptions {
237
+ interface CommonForceLayoutOptions {
188
238
  center?: PointTuple;
239
+ minMovement?: number;
240
+ maxIteration?: number;
241
+ distanceThresholdMode?: "mean" | "max" | "min";
242
+ }
243
+ export interface ForceLayoutOptions extends CommonForceLayoutOptions {
189
244
  width?: number;
190
245
  height?: number;
191
- linkDistance?: number | ((edge?: Edge, source?: any, target?: any) => number) | undefined;
192
- nodeStrength?: number | ((d?: Node) => number) | undefined;
193
- edgeStrength?: number | ((d?: Edge) => number) | undefined;
246
+ linkDistance?: number | ((edge?: Edge, source?: any, target?: any) => number);
247
+ nodeStrength?: number | ((d?: Node) => number);
248
+ edgeStrength?: number | ((d?: Edge) => number);
194
249
  preventOverlap?: boolean;
195
250
  nodeSize?: number | number[] | ((d?: Node) => number);
196
251
  nodeSpacing?: number | ((d?: Node) => number);
197
- minMovement?: number;
198
- maxIteration?: number;
199
252
  damping?: number;
200
253
  maxSpeed?: number;
201
254
  coulombDisScale?: number;
@@ -208,11 +261,9 @@ export interface ForceLayoutOptions extends CommonOptions {
208
261
  nodeClusterBy?: string;
209
262
  clusterNodeStrength?: number | ((node: Node) => number);
210
263
  collideStrength?: number;
211
- distanceThresholdMode?: "mean" | "max" | "min";
212
- animate?: boolean;
213
264
  onTick?: (data: LayoutMapping) => void;
214
- getMass?: ((d: Node) => number) | undefined;
215
- getCenter?: ((d?: Node, degree?: number) => number[]) | undefined;
265
+ getMass?: (node?: Node) => number;
266
+ getCenter?: (node?: Node, degree?: number) => number[];
216
267
  monitor?: (params: {
217
268
  energy: number;
218
269
  nodes: Node[];
@@ -220,4 +271,30 @@ export interface ForceLayoutOptions extends CommonOptions {
220
271
  iterations: number;
221
272
  }) => void;
222
273
  }
274
+ export interface ForceAtlas2LayoutOptions extends CommonForceLayoutOptions {
275
+ width?: number;
276
+ height?: number;
277
+ kr?: number;
278
+ kg?: number;
279
+ ks?: number;
280
+ ksmax?: number;
281
+ tao?: number;
282
+ mode?: "normal" | "linlog";
283
+ preventOverlap?: boolean;
284
+ dissuadeHubs?: boolean;
285
+ barnesHut?: boolean;
286
+ prune?: boolean;
287
+ nodeSize?: number | number[] | ((node?: Node) => number);
288
+ onTick?: (data: LayoutMapping) => void;
289
+ }
290
+ export interface FruchtermanLayoutOptions extends CommonForceLayoutOptions {
291
+ width?: number;
292
+ height?: number;
293
+ gravity?: number;
294
+ speed?: number;
295
+ clustering?: boolean;
296
+ clusterGravity?: number;
297
+ nodeClusterBy?: string;
298
+ onTick?: (data: LayoutMapping) => void;
299
+ }
223
300
  export {};
@@ -1,5 +1,4 @@
1
1
  import { Node } from "../types";
2
- export declare const isFunction: (val: unknown) => val is Function;
3
2
  /**
4
3
  * Format value with multiple types into a function returns number.
5
4
  * @param defaultValue default value when value is invalid
@@ -18,3 +17,10 @@ export declare function formatSizeFn<T extends Node>(defaultValue: number, value
18
17
  width: number;
19
18
  height: number;
20
19
  } | ((d?: T) => number) | undefined, resultIsNumber?: boolean): (d: T) => number | number[];
20
+ /**
21
+ * format the props nodeSize and nodeSpacing to a function
22
+ * @param nodeSize
23
+ * @param nodeSpacing
24
+ * @returns
25
+ */
26
+ export declare const formatNodeSize: (nodeSize: number | number[] | undefined, nodeSpacing: number | Function | undefined) => (nodeData: Node) => number;
@@ -15,7 +15,7 @@ export declare const scaleMatrix: (matrix: Matrix[], ratio: number) => Matrix[];
15
15
  * if the fn returns false, terminate the traverse
16
16
  */
17
17
  export declare const traverseTreeUp: <T extends {
18
- children?: T[] | undefined;
18
+ children?: T[];
19
19
  }>(data: T, fn: (param: T) => boolean) => void;
20
20
  /**
21
21
  * calculate the bounding box for the nodes according to their x, y, and size
@@ -1,3 +1 @@
1
- export declare const isNumber: (val: unknown) => val is Number;
2
- export declare const isNaN: (num: unknown) => boolean;
3
1
  export declare const toNumber: (val: any) => any;
@@ -1,9 +1,9 @@
1
- import { Node, Edge } from '../types';
2
- export declare const isObject: (val: unknown) => val is Record<any, any>;
1
+ import { Node, Edge } from "../types";
3
2
  export declare const clone: <T>(target: T) => T;
4
3
  /**
5
4
  * Clone node or edge data and format it
6
- * @param target
7
- * @returns
5
+ * @param target node/edge to be cloned
6
+ * @param initRange whether init the x and y in data with the range, which means [xRange, yRange]
7
+ * @returns cloned node/edge
8
8
  */
9
- export declare const cloneFormatData: <T extends Node | Edge>(target: T) => T;
9
+ export declare const cloneFormatData: <T extends Node | Edge>(target: T, initRange?: [number, number]) => T;
@@ -1,2 +1 @@
1
- export declare const isString: (val: unknown) => val is string;
2
1
  export declare const camelize: (str: string) => string;
package/lib/worker.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  import type { Payload } from "./supervisor";
2
- export declare function calculateLayout(payload: Payload, transferables: Float32Array[]): Promise<unknown>;
2
+ export declare function stopLayout(): void;
3
+ export declare function calculateLayout(payload: Payload, transferables: Float32Array[]): Promise<(import("./types").LayoutMapping | Float32Array[])[]>;
package/package.json CHANGED
@@ -1,7 +1,13 @@
1
1
  {
2
2
  "name": "@antv/layout",
3
- "version": "1.0.0-alpha.8",
3
+ "version": "1.0.0",
4
4
  "description": "graph layout algorithm",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/antvis/layout",
9
+ "directory": "packages/layout"
10
+ },
5
11
  "main": "dist/index.min.js",
6
12
  "module": "esm/index.esm.js",
7
13
  "types": "lib/index.d.ts",
@@ -21,27 +27,32 @@
21
27
  "antv"
22
28
  ],
23
29
  "dependencies": {
24
- "@antv/graphlib": "^2.0.0-alpha.2",
30
+ "@antv/graphlib": "^2.0.0",
31
+ "@antv/util": "^3.3.2",
25
32
  "@naoak/workerize-transferable": "^0.1.0",
26
33
  "d3-force": "^3.0.0",
27
34
  "d3-quadtree": "^3.0.1",
28
35
  "eventemitter3": "^4.0.0",
29
- "ml-matrix": "^6.10.4"
36
+ "ml-matrix": "^6.10.4",
37
+ "tslib": "^2.5.0"
30
38
  },
31
39
  "devDependencies": {
32
40
  "@babel/core": "^7.7.7",
33
41
  "@babel/plugin-proposal-class-properties": "^7.1.0",
34
42
  "@babel/preset-react": "^7.7.4",
43
+ "@types/d3-force": "^3.0.4",
35
44
  "babel-loader": "^8.0.6",
36
45
  "ts-loader": "^7.0.3",
37
46
  "typescript": "^4.0.3",
38
47
  "webpack": "^5.38.1",
39
- "webpack-cli": "^4.7.2",
48
+ "webpack-cli": "^5.0.2",
40
49
  "workerize-loader": "^2.0.2"
41
50
  },
42
51
  "scripts": {
52
+ "clean": "rimraf dist esm lib",
43
53
  "dev": "webpack --config webpack.dev.config.js --mode development",
44
- "build": "npm run build:esm && npm run build:umd",
54
+ "build": "npm run clean && npm run build:esm && npm run build:umd",
55
+ "build:ci": "npm run build",
45
56
  "build:esm": "webpack --config webpack.esm.config.js --mode production",
46
57
  "build:umd": "webpack --config webpack.config.js --mode production",
47
58
  "publish:alpha": "npm publish --tag alpha"