@knowvah/dot-engine 2.0.1 → 2.0.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.
- package/dist/async/collect.d.ts.map +1 -1
- package/dist/async/render-async.d.ts.map +1 -1
- package/dist/gvc/device-labels.d.ts +30 -0
- package/dist/gvc/device-labels.d.ts.map +1 -0
- package/dist/gvc/device-transform.d.ts +22 -0
- package/dist/gvc/device-transform.d.ts.map +1 -0
- package/dist/gvc/device.d.ts +2 -42
- package/dist/gvc/device.d.ts.map +1 -1
- package/dist/index.js +73 -69
- package/dist/index.js.map +4 -4
- package/dist/layout/dot/graph-label.d.ts +10 -0
- package/dist/layout/dot/graph-label.d.ts.map +1 -1
- package/dist/layout/fdp/xlayout.d.ts +1 -1
- package/dist/layout/neato/dijkstra.d.ts +0 -32
- package/dist/layout/neato/dijkstra.d.ts.map +1 -1
- package/dist/layout/neato/fdp-adjust.d.ts +12 -1
- package/dist/layout/neato/fdp-adjust.d.ts.map +1 -1
- package/dist/layout/neato/index.d.ts +5 -5
- package/dist/layout/neato/index.d.ts.map +1 -1
- package/dist/layout/sfdp/index.d.ts.map +1 -1
- package/dist/render/public.d.ts +5 -0
- package/dist/render/public.d.ts.map +1 -1
- package/dist/render.js +70 -66
- package/dist/render.js.map +4 -4
- package/package.json +1 -1
- package/src/async/collect.ts +2 -14
- package/src/async/render-async.ts +1 -9
- package/src/gvc/device-labels.ts +98 -0
- package/src/gvc/device-transform.ts +58 -0
- package/src/gvc/device.ts +8 -132
- package/src/layout/dot/graph-label.ts +6 -1
- package/src/layout/fdp/xlayout.ts +3 -2
- package/src/layout/neato/dijkstra.ts +0 -141
- package/src/layout/neato/fdp-adjust.ts +25 -3
- package/src/layout/neato/index.ts +13 -12
- package/src/layout/sfdp/index.ts +2 -1
- package/src/render/public.ts +6 -5
- package/dist/layout/neato/overlap.d.ts +0 -85
- package/dist/layout/neato/overlap.d.ts.map +0 -1
- package/src/layout/neato/overlap.ts +0 -158
|
@@ -7,6 +7,16 @@ import type { Graph } from '../../model/graph.js';
|
|
|
7
7
|
import type { TextMeasurer } from '../../common/textmeasure.js';
|
|
8
8
|
/** Graph has a label. @see lib/common/const.h:GRAPH_LABEL */
|
|
9
9
|
export declare const GRAPH_LABEL: number;
|
|
10
|
+
/**
|
|
11
|
+
* Graph/cluster label font, read through graphAttrInherited.
|
|
12
|
+
* @internal also used by src/async/collect.ts to request the same face.
|
|
13
|
+
* @see lib/common/input.c:do_graph_label
|
|
14
|
+
*/
|
|
15
|
+
export declare function readFontParams(sg: Graph): {
|
|
16
|
+
fontsize: number;
|
|
17
|
+
fontname: string;
|
|
18
|
+
fontcolor: string;
|
|
19
|
+
};
|
|
10
20
|
/**
|
|
11
21
|
* Compute cluster label dimensions and set sg.info.border so that clustHt
|
|
12
22
|
* accounts for label height.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph-label.d.ts","sourceRoot":"","sources":["../../../src/layout/dot/graph-label.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAKhE,6DAA6D;AAC7D,eAAO,MAAM,WAAW,QAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"graph-label.d.ts","sourceRoot":"","sources":["../../../src/layout/dot/graph-label.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAKhE,6DAA6D;AAC7D,eAAO,MAAM,WAAW,QAAS,CAAC;AA8ClC;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,KAAK,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAMnG;AAeD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,CAuBhF"}
|
|
@@ -3,7 +3,7 @@ import { type XParams } from './fdp-model.js';
|
|
|
3
3
|
/**
|
|
4
4
|
* Overlap-removal dispatch on the overlap attribute:
|
|
5
5
|
* ""/null → default "9:prism"; "n:mode" → n x_layout tries, then
|
|
6
|
-
*
|
|
6
|
+
* removeOverlapAs with mode; "true" → keep overlaps.
|
|
7
7
|
* @see lib/fdpgen/xlayout.c:fdp_xLayout
|
|
8
8
|
*/
|
|
9
9
|
export declare function fdpXLayout(g: Graph, xpms: XParams): void;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
/** @see lib/neatogen/dijkstra.c */
|
|
2
|
-
import type { GraphSgd } from './sgd.js';
|
|
3
2
|
/**
|
|
4
3
|
* Sparse-graph vertex descriptor used by neato layout algorithms.
|
|
5
4
|
* Matches `vtx_data` in lib/neatogen/sparsegraph.h.
|
|
@@ -46,35 +45,4 @@ export declare function dijkstraRelax(closest: number, closestDist: number, grap
|
|
|
46
45
|
* @see lib/neatogen/dijkstra.c:dijkstra_f
|
|
47
46
|
*/
|
|
48
47
|
export declare function dijkstra(src: number, graph: VtxData[], n: number, dist: Float32Array): void;
|
|
49
|
-
/**
|
|
50
|
-
* BFS single-source distances for unweighted graphs.
|
|
51
|
-
* Fills `dist` with hop counts; unreachable nodes get BFS_INF (0x7fffffff).
|
|
52
|
-
* edges[0] of each vertex is the self-loop and is skipped.
|
|
53
|
-
* @see lib/neatogen/bfs.c:bfs
|
|
54
|
-
*/
|
|
55
|
-
export declare function bfsDistances(src: number, graph: VtxData[], n: number, dist: Float32Array): void;
|
|
56
|
-
/**
|
|
57
|
-
* All-pairs shortest paths (unweighted), packed upper-triangular.
|
|
58
|
-
* Length n*(n+1)/2; index for (i,j) j>=i: i*(2n-i-1)/2 + j.
|
|
59
|
-
* @see lib/neatogen/stress.c:compute_apsp_packed
|
|
60
|
-
*/
|
|
61
|
-
export declare function computeApspPacked(graph: VtxData[], n: number): Float32Array;
|
|
62
|
-
/**
|
|
63
|
-
* All-pairs shortest paths (weighted), packed upper-triangular.
|
|
64
|
-
* Length n*(n+1)/2.
|
|
65
|
-
* @see lib/neatogen/stress.c:compute_weighted_apsp_packed
|
|
66
|
-
*/
|
|
67
|
-
export declare function computeWeightedApspPacked(graph: VtxData[], n: number): Float32Array;
|
|
68
|
-
/** Initialise SGD dists from source's adjacency list. @internal */
|
|
69
|
-
export declare function sgdInitDist(graph: GraphSgd, src: number, dists: Float32Array): void;
|
|
70
|
-
/** Relax SGD neighbours of `closest` and push updates onto `heap`. @internal */
|
|
71
|
-
export declare function sgdRelaxNeighbors(graph: GraphSgd, closest: number, d: number, dists: Float32Array, heap: number[]): void;
|
|
72
|
-
/**
|
|
73
|
-
* Single-source shortest paths for the SGD engine.
|
|
74
|
-
* Writes terms for all reachable `j < src` and pinned nodes.
|
|
75
|
-
* Returns the count of terms written.
|
|
76
|
-
*
|
|
77
|
-
* @see lib/neatogen/dijkstra.c:dijkstra_sgd
|
|
78
|
-
*/
|
|
79
|
-
export declare function dijkstraSgd(graph: GraphSgd, src: number, terms: TermSgd[]): number;
|
|
80
48
|
//# sourceMappingURL=dijkstra.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dijkstra.d.ts","sourceRoot":"","sources":["../../../src/layout/neato/dijkstra.ts"],"names":[],"mappings":"AACA,mCAAmC;AAEnC
|
|
1
|
+
{"version":3,"file":"dijkstra.d.ts","sourceRoot":"","sources":["../../../src/layout/neato/dijkstra.ts"],"names":[],"mappings":"AACA,mCAAmC;AAEnC;;;;;;;;;GASG;AACH,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;;GAIG;AACH,MAAM,WAAW,OAAO;IACtB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAMD,uDAAuD;AACvD,wBAAgB,QAAQ,CACtB,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,EAAE,YAAY,EAClB,GAAG,EAAE,MAAM,GACV,IAAI,CAWN;AAED,6EAA6E;AAC7E,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CAcrE;AAED,iEAAiE;AACjE,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,YAAY,GAAG,MAAM,CAOlE;AAED,8DAA8D;AAC9D,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,CAAC,EAAE,MAAM,EACT,IAAI,EAAE,YAAY,GACjB,MAAM,EAAE,CAMV;AAMD,yDAAyD;AACzD,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,OAAO,EAAE,EAChB,CAAC,EAAE,MAAM,EACT,IAAI,EAAE,YAAY,GACjB,IAAI,CAKN;AAED,uDAAuD;AACvD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,OAAO,EAAE,EAChB,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,MAAM,EAAE,GACb,IAAI,CAUN;AAMD;;;;;;GAMG;AACH,wBAAgB,QAAQ,CACtB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,OAAO,EAAE,EAChB,CAAC,EAAE,MAAM,EACT,IAAI,EAAE,YAAY,GACjB,IAAI,CASN"}
|
|
@@ -38,9 +38,15 @@ export interface AdjustData {
|
|
|
38
38
|
print: string;
|
|
39
39
|
value: number;
|
|
40
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* getAdjustMode's fallback warning: a value that is not a mode name, not
|
|
43
|
+
* prism*, and not a boolean is used as `false` (prism) with this warning.
|
|
44
|
+
* @see lib/neatogen/adjust.c:getAdjustMode (unmappable branch)
|
|
45
|
+
*/
|
|
46
|
+
export declare function warnUnrecognizedOverlap(flag: string | undefined): void;
|
|
41
47
|
/**
|
|
42
48
|
* Resolve an `overlap` value to its adjust mode (the PRISM try count lands in
|
|
43
|
-
* `value`).
|
|
49
|
+
* `value`), warning as C does for an unrecognized value.
|
|
44
50
|
* @see lib/neatogen/adjust.c:getAdjustMode
|
|
45
51
|
*/
|
|
46
52
|
export declare function getAdjustMode(flag: string | undefined): AdjustData;
|
|
@@ -56,4 +62,9 @@ export declare function removeOverlapWith(g: Graph, am: AdjustData): number;
|
|
|
56
62
|
* @see lib/neatogen/adjust.c:adjustNodes / removeOverlapAs
|
|
57
63
|
*/
|
|
58
64
|
export declare function adjustNodesFull(g: Graph): number;
|
|
65
|
+
/**
|
|
66
|
+
* The graph's `overlap` value resolved once (agget falls back to the root).
|
|
67
|
+
* @see lib/neatogen/adjust.c:graphAdjustMode
|
|
68
|
+
*/
|
|
69
|
+
export declare function graphAdjustMode(g: Graph): AdjustData;
|
|
59
70
|
//# sourceMappingURL=fdp-adjust.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fdp-adjust.d.ts","sourceRoot":"","sources":["../../../src/layout/neato/fdp-adjust.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AA6ClD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAUzE;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAgCtD;AAED;wCACwC;AACxC,eAAO,MAAM,OAAO,IAAI,CAAC;AACzB,eAAO,MAAM,MAAM,IAAI,CAAC;AACxB,eAAO,MAAM,QAAQ,IAAI,CAAC;AAC1B,eAAO,MAAM,SAAS,IAAI,CAAC;AAC3B,eAAO,MAAM,UAAU,IAAI,CAAC;AAC5B,eAAO,MAAM,WAAW,KAAK,CAAC;AAC9B,eAAO,MAAM,OAAO,KAAK,CAAC;AAC1B,eAAO,MAAM,QAAQ,KAAK,CAAC;AAC3B,eAAO,MAAM,QAAQ,KAAK,CAAC;AAE3B,kEAAkE;AAClE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAsBD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,
|
|
1
|
+
{"version":3,"file":"fdp-adjust.d.ts","sourceRoot":"","sources":["../../../src/layout/neato/fdp-adjust.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AA6ClD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAUzE;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAgCtD;AAED;wCACwC;AACxC,eAAO,MAAM,OAAO,IAAI,CAAC;AACzB,eAAO,MAAM,MAAM,IAAI,CAAC;AACxB,eAAO,MAAM,QAAQ,IAAI,CAAC;AAC1B,eAAO,MAAM,SAAS,IAAI,CAAC;AAC3B,eAAO,MAAM,UAAU,IAAI,CAAC;AAC5B,eAAO,MAAM,WAAW,KAAK,CAAC;AAC9B,eAAO,MAAM,OAAO,KAAK,CAAC;AAC1B,eAAO,MAAM,QAAQ,KAAK,CAAC;AAC3B,eAAO,MAAM,QAAQ,KAAK,CAAC;AAE3B,kEAAkE;AAClE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAsBD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAMtE;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,CAOlE;AA8CD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,GAAG,MAAM,CAMlE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,KAAK,GAAG,MAAM,CAGhD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,KAAK,GAAG,UAAU,CAEpD"}
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
*/
|
|
12
12
|
import type { Graph } from '../../model/graph.js';
|
|
13
13
|
import type { LayoutEngine } from '../../gvc/context.js';
|
|
14
|
+
import { type AdjustData } from './fdp-adjust.js';
|
|
14
15
|
export { MODE_KK, MODE_MAJOR, MODE_HIER, MODE_IPSEP, MODE_SGD, MODEL_SHORTPATH, MODEL_CIRCUIT, MODEL_SUBSET, MODEL_MDS, neatoInitNode, setSeed, solveModel, neatoTranslate, neatoSetAspect, neatoCleanup, } from './init.js';
|
|
15
16
|
/**
|
|
16
17
|
* Parse the root `mode` attribute into a numeric mode constant (C neatoMode).
|
|
@@ -27,14 +28,13 @@ export declare function parseMode(g: Graph): number;
|
|
|
27
28
|
*/
|
|
28
29
|
export declare function parseModel(g: Graph): number;
|
|
29
30
|
/**
|
|
30
|
-
* Remove node overlaps
|
|
31
|
-
*
|
|
32
|
-
* every mode, as neato_layout's adjustNodes call does.
|
|
31
|
+
* Remove node overlaps with the mode neato_layout resolved once
|
|
32
|
+
* (graphAdjustMode): C's removeOverlapWith dispatch for every mode.
|
|
33
33
|
*
|
|
34
|
-
* @see lib/neatogen/neatoinit.c:neato_layout (
|
|
34
|
+
* @see lib/neatogen/neatoinit.c:neato_layout (removeOverlapWith calls)
|
|
35
35
|
* @see lib/neatogen/adjust.c:removeOverlapWith
|
|
36
36
|
*/
|
|
37
|
-
export declare function maybeRemoveOverlap(g: Graph): void;
|
|
37
|
+
export declare function maybeRemoveOverlap(g: Graph, am: AdjustData): void;
|
|
38
38
|
/**
|
|
39
39
|
* Full neato layout pipeline for a single graph.
|
|
40
40
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layout/neato/index.ts"],"names":[],"mappings":"AACA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layout/neato/index.ts"],"names":[],"mappings":"AACA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAazD,OAAO,EAAsC,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAwBtF,OAAO,EACL,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EACpD,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EACvD,aAAa,EAAE,OAAO,EAAE,UAAU,EAClC,cAAc,EAAE,cAAc,EAAE,YAAY,GAC7C,MAAM,WAAW,CAAC;AAMnB;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,GAAG,MAAM,CAE1C;AAcD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,GAAG,MAAM,CAK3C;AAMD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,GAAG,IAAI,CAEjE;AAMD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI,CA8D1C;AAsFD;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,EAAE,YAIjC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layout/sfdp/index.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAqBzD,OAAO,EACL,KAAK,uBAAuB,EAE7B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,mCAAmC,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EACL,aAAa,EACb,WAAW,EACX,WAAW,EACX,UAAU,EACV,QAAQ,EACR,MAAM,EACP,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AACjF,OAAO,EAAE,mCAAmC,EAAE,CAAC;AAK/C;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,uBAAuB,EAAE,GAAG,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GACrE,IAAI,CAYN;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layout/sfdp/index.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAqBzD,OAAO,EACL,KAAK,uBAAuB,EAE7B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,mCAAmC,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EACL,aAAa,EACb,WAAW,EACX,WAAW,EACX,UAAU,EACV,QAAQ,EACR,MAAM,EACP,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AACjF,OAAO,EAAE,mCAAmC,EAAE,CAAC;AAK/C;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,uBAAuB,EAAE,GAAG,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GACrE,IAAI,CAYN;AAgHD;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI,CA4BzC;AAED,gDAAgD;AAChD,eAAO,MAAM,kBAAkB,EAAE,YAIhC,CAAC"}
|
package/dist/render/public.d.ts
CHANGED
|
@@ -37,6 +37,11 @@ export interface RenderOptions {
|
|
|
37
37
|
*/
|
|
38
38
|
inlineImages?: boolean;
|
|
39
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* Reject a bad `g` / `format` / `opts` before any work starts.
|
|
42
|
+
* @internal shared with src/async/render-async.ts; not part of the public API.
|
|
43
|
+
*/
|
|
44
|
+
export declare function checkRenderArgs(g: unknown, format: unknown, opts: unknown): void;
|
|
40
45
|
/**
|
|
41
46
|
* Render a (parsed or built) graph to the requested format string.
|
|
42
47
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/render/public.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAI/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAMpD;;;GAGG;AACH,MAAM,MAAM,YAAY,GACpB,KAAK,GACL,KAAK,GACL,MAAM,GACN,MAAM,GACN,OAAO,GACP,WAAW,GACX,MAAM,GACN,OAAO,CAAC;AAEZ;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,UAAU,CAAC;IAEpB;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;
|
|
1
|
+
{"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/render/public.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAI/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAMpD;;;GAGG;AACH,MAAM,MAAM,YAAY,GACpB,KAAK,GACL,KAAK,GACL,MAAM,GACN,MAAM,GACN,OAAO,GACP,WAAW,GACX,MAAM,GACN,OAAO,CAAC;AAEZ;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,UAAU,CAAC;IAEpB;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAMD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAUhF;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,MAAM,CACpB,CAAC,EAAE,KAAK,EACR,MAAM,EAAE,YAAY,EACpB,IAAI,CAAC,EAAE,aAAa,GACnB,MAAM,CAaR"}
|
package/dist/render.js
CHANGED
|
@@ -19277,10 +19277,7 @@ function walkNodesAndEdges(g, renderer, job, info) {
|
|
|
19277
19277
|
}
|
|
19278
19278
|
}
|
|
19279
19279
|
|
|
19280
|
-
// src/gvc/device.ts
|
|
19281
|
-
function renderClusterLabel(sg, renderer, job) {
|
|
19282
|
-
renderOneLabel(sg.info.label, renderer, job, false);
|
|
19283
|
-
}
|
|
19280
|
+
// src/gvc/device-transform.ts
|
|
19284
19281
|
function transformPoint(p, job) {
|
|
19285
19282
|
if ((job.flags & GVRENDER_DOES_TRANSFORM) !== 0) {
|
|
19286
19283
|
return p;
|
|
@@ -19300,6 +19297,50 @@ function buildPoint(x, y) {
|
|
|
19300
19297
|
const pt = { x, y };
|
|
19301
19298
|
return pt;
|
|
19302
19299
|
}
|
|
19300
|
+
|
|
19301
|
+
// src/gvc/device-labels.ts
|
|
19302
|
+
var VALIGN_TOP = "t".charCodeAt(0);
|
|
19303
|
+
var VALIGN_BOTTOM = "b".charCodeAt(0);
|
|
19304
|
+
function labelFirstSpanY(lp) {
|
|
19305
|
+
if (lp.valign === VALIGN_TOP) return lp.pos.y + lp.space.y / 2 - lp.fontsize;
|
|
19306
|
+
if (lp.valign === VALIGN_BOTTOM) {
|
|
19307
|
+
return lp.pos.y - lp.space.y / 2 + lp.dimen.y - lp.fontsize;
|
|
19308
|
+
}
|
|
19309
|
+
return lp.pos.y + lp.dimen.y / 2 - lp.fontsize;
|
|
19310
|
+
}
|
|
19311
|
+
function labelSpanX(lp, just) {
|
|
19312
|
+
if (just === "l") return lp.pos.x - lp.space.x / 2;
|
|
19313
|
+
if (just === "r") return lp.pos.x + lp.space.x / 2;
|
|
19314
|
+
return lp.pos.x;
|
|
19315
|
+
}
|
|
19316
|
+
function renderOneLabel(lp, renderer, job, requireSet = true) {
|
|
19317
|
+
if (!lp) return;
|
|
19318
|
+
if (requireSet && !lp.set) return;
|
|
19319
|
+
if (lp.html) {
|
|
19320
|
+
if (lp.u.kind === "html") {
|
|
19321
|
+
const html = lp.u.html;
|
|
19322
|
+
const pos = lp.pos;
|
|
19323
|
+
withLabelEmitState(job, () => emitHtmlLabel(html, pos, renderer, job));
|
|
19324
|
+
}
|
|
19325
|
+
return;
|
|
19326
|
+
}
|
|
19327
|
+
if (lp.u.kind !== "txt" || lp.u.nspans < 1) return;
|
|
19328
|
+
let y = labelFirstSpanY(lp);
|
|
19329
|
+
for (let i = 0; i < lp.u.nspans; i++) {
|
|
19330
|
+
const span = lp.u.span[i];
|
|
19331
|
+
if (!span) break;
|
|
19332
|
+
gvrenderTextspan(renderer, { x: labelSpanX(lp, span.just), y }, span, job);
|
|
19333
|
+
y -= span.size.y;
|
|
19334
|
+
}
|
|
19335
|
+
}
|
|
19336
|
+
function renderNodeXLabel(n, renderer, job) {
|
|
19337
|
+
renderOneLabel(n.info.xlabel, renderer, job);
|
|
19338
|
+
}
|
|
19339
|
+
function renderClusterLabel(sg, renderer, job) {
|
|
19340
|
+
renderOneLabel(sg.info.label, renderer, job, false);
|
|
19341
|
+
}
|
|
19342
|
+
|
|
19343
|
+
// src/gvc/device.ts
|
|
19303
19344
|
function labelTextOf2(lp) {
|
|
19304
19345
|
return lp?.text ?? null;
|
|
19305
19346
|
}
|
|
@@ -19374,43 +19415,6 @@ function renderEdge(e, renderer, job) {
|
|
|
19374
19415
|
job.popObj();
|
|
19375
19416
|
}
|
|
19376
19417
|
}
|
|
19377
|
-
var VALIGN_TOP = "t".charCodeAt(0);
|
|
19378
|
-
var VALIGN_BOTTOM = "b".charCodeAt(0);
|
|
19379
|
-
function labelFirstSpanY(lp) {
|
|
19380
|
-
if (lp.valign === VALIGN_TOP) return lp.pos.y + lp.space.y / 2 - lp.fontsize;
|
|
19381
|
-
if (lp.valign === VALIGN_BOTTOM) {
|
|
19382
|
-
return lp.pos.y - lp.space.y / 2 + lp.dimen.y - lp.fontsize;
|
|
19383
|
-
}
|
|
19384
|
-
return lp.pos.y + lp.dimen.y / 2 - lp.fontsize;
|
|
19385
|
-
}
|
|
19386
|
-
function labelSpanX(lp, just) {
|
|
19387
|
-
if (just === "l") return lp.pos.x - lp.space.x / 2;
|
|
19388
|
-
if (just === "r") return lp.pos.x + lp.space.x / 2;
|
|
19389
|
-
return lp.pos.x;
|
|
19390
|
-
}
|
|
19391
|
-
function renderOneLabel(lp, renderer, job, requireSet = true) {
|
|
19392
|
-
if (!lp) return;
|
|
19393
|
-
if (requireSet && !lp.set) return;
|
|
19394
|
-
if (lp.html) {
|
|
19395
|
-
if (lp.u.kind === "html") {
|
|
19396
|
-
const html = lp.u.html;
|
|
19397
|
-
const pos = lp.pos;
|
|
19398
|
-
withLabelEmitState(job, () => emitHtmlLabel(html, pos, renderer, job));
|
|
19399
|
-
}
|
|
19400
|
-
return;
|
|
19401
|
-
}
|
|
19402
|
-
if (lp.u.kind !== "txt" || lp.u.nspans < 1) return;
|
|
19403
|
-
let y = labelFirstSpanY(lp);
|
|
19404
|
-
for (let i = 0; i < lp.u.nspans; i++) {
|
|
19405
|
-
const span = lp.u.span[i];
|
|
19406
|
-
if (!span) break;
|
|
19407
|
-
gvrenderTextspan(renderer, { x: labelSpanX(lp, span.just), y }, span, job);
|
|
19408
|
-
y -= span.size.y;
|
|
19409
|
-
}
|
|
19410
|
-
}
|
|
19411
|
-
function renderNodeXLabel(n, renderer, job) {
|
|
19412
|
-
renderOneLabel(n.info.xlabel, renderer, job);
|
|
19413
|
-
}
|
|
19414
19418
|
function renderGraphLabel(g, renderer, job) {
|
|
19415
19419
|
setHtmlAnchorObj(svgGraphId(g, job), labelTextOf2(g.info.label), job.obj ?? void 0);
|
|
19416
19420
|
renderOneLabel(g.info.label, renderer, job, false);
|
|
@@ -43693,7 +43697,15 @@ var ADJUST_MODES = /* @__PURE__ */ new Map([
|
|
|
43693
43697
|
["porthoxy", [AM_PORTHOXY, "xy pseudo-orthogonal constraints"]],
|
|
43694
43698
|
["porthoyx", [AM_PORTHOYX, "yx pseudo-orthogonal constraints"]]
|
|
43695
43699
|
]);
|
|
43700
|
+
function warnUnrecognizedOverlap(flag) {
|
|
43701
|
+
if (flag === void 0 || flag === "") return;
|
|
43702
|
+
const s = flag.toLowerCase();
|
|
43703
|
+
if (s.startsWith("prism") || NAMED_MODES.has(s)) return;
|
|
43704
|
+
if (mapBoolDflt(flag, false) === mapBoolDflt(flag, true)) return;
|
|
43705
|
+
console.warn(`Unrecognized overlap value "${flag}" - using false`);
|
|
43706
|
+
}
|
|
43696
43707
|
function getAdjustMode(flag) {
|
|
43708
|
+
warnUnrecognizedOverlap(flag);
|
|
43697
43709
|
const ntry = overlapPrismTries(flag);
|
|
43698
43710
|
if (ntry !== null) return { mode: AM_PRISM, print: "prism", value: ntry };
|
|
43699
43711
|
const named = ADJUST_MODES.get((flag ?? "").toLowerCase());
|
|
@@ -43742,8 +43754,11 @@ function removeOverlapWith(g, am) {
|
|
|
43742
43754
|
return nret + (am.mode === AM_SCALE ? sAdjustGraph(g) : adjustVoronoi(g, am));
|
|
43743
43755
|
}
|
|
43744
43756
|
function adjustNodesFull(g) {
|
|
43745
|
-
|
|
43746
|
-
return removeOverlapWith(g,
|
|
43757
|
+
if (g.nodes.size < 2) return 0;
|
|
43758
|
+
return removeOverlapWith(g, graphAdjustMode(g));
|
|
43759
|
+
}
|
|
43760
|
+
function graphAdjustMode(g) {
|
|
43761
|
+
return getAdjustMode(g.attrs.get("overlap") ?? g.root.attrs.get("overlap"));
|
|
43747
43762
|
}
|
|
43748
43763
|
|
|
43749
43764
|
// src/layout/twopi/init.ts
|
|
@@ -44110,8 +44125,8 @@ function parseModel(g) {
|
|
|
44110
44125
|
if (!s) return MODEL_SHORTPATH2;
|
|
44111
44126
|
return MODEL_MAP[s] ?? MODEL_SHORTPATH2;
|
|
44112
44127
|
}
|
|
44113
|
-
function maybeRemoveOverlap(g) {
|
|
44114
|
-
|
|
44128
|
+
function maybeRemoveOverlap(g, am) {
|
|
44129
|
+
removeOverlapWith(g, am);
|
|
44115
44130
|
}
|
|
44116
44131
|
function neatoLayout(g) {
|
|
44117
44132
|
graphInit(g, false);
|
|
@@ -44126,13 +44141,14 @@ function neatoLayout(g) {
|
|
|
44126
44141
|
for (const e of g.edges) initEdgeLabels(e, g, measurer);
|
|
44127
44142
|
}
|
|
44128
44143
|
const mode = parseMode(g);
|
|
44144
|
+
const am = graphAdjustMode(g);
|
|
44129
44145
|
const model = parseModel(g);
|
|
44130
44146
|
const { graphs: comps, pinned } = neatoPack(g, mode) >= 0 ? pccomps(g, "_neato_cc") : { graphs: [g], pinned: false };
|
|
44131
44147
|
if (comps.length > 1) {
|
|
44132
|
-
layoutComponents(g, comps, mode, model, pinned);
|
|
44148
|
+
layoutComponents(g, comps, { mode, model, am }, pinned);
|
|
44133
44149
|
} else {
|
|
44134
44150
|
solveModel2(g, mode, model);
|
|
44135
|
-
maybeRemoveOverlap(g);
|
|
44151
|
+
maybeRemoveOverlap(g, am);
|
|
44136
44152
|
splineEdgesShifted(g);
|
|
44137
44153
|
}
|
|
44138
44154
|
addClusters(g);
|
|
@@ -44168,11 +44184,11 @@ function addClusters(g) {
|
|
|
44168
44184
|
g.info.clust = clusters;
|
|
44169
44185
|
g.info.n_cluster = clusters.length;
|
|
44170
44186
|
}
|
|
44171
|
-
function layoutComponents(g, comps,
|
|
44187
|
+
function layoutComponents(g, comps, solve2, pinned) {
|
|
44172
44188
|
for (const gc of comps) {
|
|
44173
44189
|
setEdgeTypeFromAttr(gc, EDGETYPE_LINE);
|
|
44174
|
-
solveModel2(gc, mode, model);
|
|
44175
|
-
maybeRemoveOverlap(gc);
|
|
44190
|
+
solveModel2(gc, solve2.mode, solve2.model);
|
|
44191
|
+
maybeRemoveOverlap(gc, solve2.am);
|
|
44176
44192
|
splineEdgesShifted(gc);
|
|
44177
44193
|
}
|
|
44178
44194
|
const pinfo = {
|
|
@@ -45050,6 +45066,7 @@ function fdpXLayout(g, xpms) {
|
|
|
45050
45066
|
}
|
|
45051
45067
|
function removeOverlapAs(g, flag) {
|
|
45052
45068
|
if (g.nodes.size < 2) return;
|
|
45069
|
+
warnUnrecognizedOverlap(flag);
|
|
45053
45070
|
normalizeG(g);
|
|
45054
45071
|
simpleScale(g);
|
|
45055
45072
|
const ntry = overlapPrismTries(flag);
|
|
@@ -46200,6 +46217,7 @@ function resolveControl(g) {
|
|
|
46200
46217
|
const pad = { x: DFLT_MARGIN / 72, y: DFLT_MARGIN / 72 };
|
|
46201
46218
|
const overlap5 = aggetGraph(g, "overlap");
|
|
46202
46219
|
const flag = overlap5 === void 0 ? "prism0" : overlap5;
|
|
46220
|
+
warnUnrecognizedOverlap(flag);
|
|
46203
46221
|
const ntry = overlapPrismTries(flag);
|
|
46204
46222
|
if (ntry !== null) {
|
|
46205
46223
|
ctrl.overlap = ntry;
|
|
@@ -55120,16 +55138,9 @@ function collectEdge(acc, e) {
|
|
|
55120
55138
|
addLabel(acc, e.attrs.get("headlabel"), lfi);
|
|
55121
55139
|
addLabel(acc, e.attrs.get("taillabel"), lfi);
|
|
55122
55140
|
}
|
|
55123
|
-
function graphLabelFont(sg) {
|
|
55124
|
-
const get = (k) => sg.attrs.get(k) ?? sg.graphDefaultsSnapshot?.get(k);
|
|
55125
|
-
return {
|
|
55126
|
-
fontname: get("fontname") ?? DEFAULT_FONTNAME,
|
|
55127
|
-
fontsize: parseFloat(get("fontsize") ?? "") || DEFAULT_FONTSIZE2
|
|
55128
|
-
};
|
|
55129
|
-
}
|
|
55130
55141
|
function collectGraphLabels(acc, sg, root) {
|
|
55131
55142
|
if (isACluster(sg)) {
|
|
55132
|
-
addLabel(acc, sg.attrs.get("label") ?? sg.graphDefaultsSnapshot?.get("label"),
|
|
55143
|
+
addLabel(acc, sg.attrs.get("label") ?? sg.graphDefaultsSnapshot?.get("label"), readFontParams(sg));
|
|
55133
55144
|
}
|
|
55134
55145
|
for (const child of sg.subgraphs.values()) collectGraphLabels(acc, child, root);
|
|
55135
55146
|
}
|
|
@@ -55189,13 +55200,6 @@ async function loadFonts(fontSet, fonts, timeoutMs) {
|
|
|
55189
55200
|
|
|
55190
55201
|
// src/async/render-async.ts
|
|
55191
55202
|
var DEFAULT_FONT_TIMEOUT_MS = 3e3;
|
|
55192
|
-
function checkRenderArgs2(g, format, opts) {
|
|
55193
|
-
if (typeof g !== "object" || g === null) throw invalidArgType("g", "object", g);
|
|
55194
|
-
if (typeof format !== "string") throw invalidArgType("format", "string", format);
|
|
55195
|
-
if (opts !== void 0 && (typeof opts !== "object" || opts === null)) {
|
|
55196
|
-
throw invalidArgType("opts", "object or undefined", opts);
|
|
55197
|
-
}
|
|
55198
|
-
}
|
|
55199
55203
|
function defaultFontSet() {
|
|
55200
55204
|
const doc = Reflect.get(globalThis, "document");
|
|
55201
55205
|
if (typeof doc !== "object" || doc === null) return void 0;
|
|
@@ -55231,7 +55235,7 @@ async function prefetchAll(g, opts) {
|
|
|
55231
55235
|
return { fontIssues, sizes, bytes };
|
|
55232
55236
|
}
|
|
55233
55237
|
async function renderAsync(g, format, opts) {
|
|
55234
|
-
|
|
55238
|
+
checkRenderArgs(g, format, opts);
|
|
55235
55239
|
const engine = opts?.engine ?? "dot";
|
|
55236
55240
|
try {
|
|
55237
55241
|
const { fontIssues, sizes, bytes } = await prefetchAll(g, opts);
|