@coldtea/pr-lens-renderer 0.3.0 → 0.3.1
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/bounds.d.ts +6 -1
- package/dist/bounds.d.ts.map +1 -1
- package/dist/bounds.js +21 -0
- package/dist/bounds.js.map +1 -1
- package/dist/design.d.ts +5 -0
- package/dist/design.d.ts.map +1 -1
- package/dist/design.js +5 -0
- package/dist/design.js.map +1 -1
- package/dist/layout/architecture.d.ts +2 -0
- package/dist/layout/architecture.d.ts.map +1 -1
- package/dist/layout/architecture.js +5 -0
- package/dist/layout/architecture.js.map +1 -1
- package/dist/layout/congestion.d.ts +5 -0
- package/dist/layout/congestion.d.ts.map +1 -1
- package/dist/layout/congestion.js +50 -12
- package/dist/layout/congestion.js.map +1 -1
- package/dist/layout/edges.d.ts +18 -3
- package/dist/layout/edges.d.ts.map +1 -1
- package/dist/layout/edges.js +93 -23
- package/dist/layout/edges.js.map +1 -1
- package/dist/layout/labels.d.ts +15 -4
- package/dist/layout/labels.d.ts.map +1 -1
- package/dist/layout/labels.js +404 -119
- package/dist/layout/labels.js.map +1 -1
- package/dist/svg/architecture.d.ts.map +1 -1
- package/dist/svg/architecture.js +3 -8
- package/dist/svg/architecture.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/src/bounds.ts +29 -1
- package/src/design.ts +5 -0
- package/src/layout/architecture.ts +7 -0
- package/src/layout/congestion.ts +71 -12
- package/src/layout/edges.ts +126 -21
- package/src/layout/labels.ts +495 -136
- package/src/svg/architecture.ts +3 -7
- package/src/version.ts +1 -1
package/dist/bounds.d.ts
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
import type { Box } from "./geometry.js";
|
|
1
|
+
import type { Box, Point } from "./geometry.js";
|
|
2
2
|
/** The smallest box containing both of them. */
|
|
3
3
|
export declare const covering: (a: Box, b: Box) => Box;
|
|
4
4
|
/** The smallest box containing all of them, or nothing when there are none. */
|
|
5
5
|
export declare const union: (boxes: readonly Box[]) => Box | undefined;
|
|
6
|
+
/** Zero-sized at the origin when there are no points. */
|
|
7
|
+
export declare const boundsOf: (points: readonly Point[]) => Box;
|
|
8
|
+
export declare const inflate: (box: Box, by: number) => Box;
|
|
9
|
+
/** Zero when the boxes touch or overlap. */
|
|
10
|
+
export declare const gapBetween: (a: Box, b: Box) => number;
|
|
6
11
|
export type Canvas = {
|
|
7
12
|
width: number;
|
|
8
13
|
height: number;
|
package/dist/bounds.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bounds.d.ts","sourceRoot":"","sources":["../src/bounds.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"bounds.d.ts","sourceRoot":"","sources":["../src/bounds.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEhD,gDAAgD;AAChD,eAAO,MAAM,QAAQ,MAAO,GAAG,KAAK,GAAG,KAAG,GAOzC,CAAC;AAEF,+EAA+E;AAC/E,eAAO,MAAM,KAAK,UAAW,SAAS,GAAG,EAAE,KAAG,GAAG,GAAG,SAIjD,CAAC;AAEJ,yDAAyD;AACzD,eAAO,MAAM,QAAQ,WAAY,SAAS,KAAK,EAAE,KAAG,GAWnD,CAAC;AAEF,eAAO,MAAM,OAAO,QAAS,GAAG,MAAM,MAAM,KAAG,GAK7C,CAAC;AAEH,4CAA4C;AAC5C,eAAO,MAAM,UAAU,MAAO,GAAG,KAAK,GAAG,KAAG,MAIzC,CAAC;AAEJ,MAAM,MAAM,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvF;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,SACd;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,SAChC,GAAG,GAAG,SAAS,UACd,MAAM,KACb,MAYF,CAAC"}
|
package/dist/bounds.js
CHANGED
|
@@ -8,6 +8,27 @@ export const covering = (a, b) => {
|
|
|
8
8
|
};
|
|
9
9
|
/** The smallest box containing all of them, or nothing when there are none. */
|
|
10
10
|
export const union = (boxes) => boxes.reduce((grown, box) => (grown === undefined ? box : covering(grown, box)), undefined);
|
|
11
|
+
/** Zero-sized at the origin when there are no points. */
|
|
12
|
+
export const boundsOf = (points) => {
|
|
13
|
+
const xs = points.map(({ x }) => x);
|
|
14
|
+
const ys = points.map(({ y }) => y);
|
|
15
|
+
const left = xs.length === 0 ? 0 : Math.min(...xs);
|
|
16
|
+
const top = ys.length === 0 ? 0 : Math.min(...ys);
|
|
17
|
+
return {
|
|
18
|
+
x: left,
|
|
19
|
+
y: top,
|
|
20
|
+
width: xs.length === 0 ? 0 : Math.max(...xs) - left,
|
|
21
|
+
height: ys.length === 0 ? 0 : Math.max(...ys) - top,
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
export const inflate = (box, by) => ({
|
|
25
|
+
x: box.x - by,
|
|
26
|
+
y: box.y - by,
|
|
27
|
+
width: box.width + by * 2,
|
|
28
|
+
height: box.height + by * 2,
|
|
29
|
+
});
|
|
30
|
+
/** Zero when the boxes touch or overlap. */
|
|
31
|
+
export const gapBetween = (a, b) => Math.hypot(Math.max(b.x - (a.x + a.width), a.x - (b.x + b.width), 0), Math.max(b.y - (a.y + a.height), a.y - (b.y + b.height), 0));
|
|
11
32
|
/**
|
|
12
33
|
* A canvas big enough for everything that was drawn.
|
|
13
34
|
*
|
package/dist/bounds.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bounds.js","sourceRoot":"","sources":["../src/bounds.ts"],"names":[],"mappings":"AAEA,gDAAgD;AAChD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAM,EAAE,CAAM,EAAO,EAAE;IAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IAExD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE,CAAC;AACxE,CAAC,CAAC;AAEF,+EAA+E;AAC/E,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,KAAqB,EAAmB,EAAE,CAC9D,KAAK,CAAC,MAAM,CACV,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,EAClE,SAAS,CACV,CAAC;AAIJ;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,IAAuC,EACvC,KAAsB,EACtB,MAAc,EACN,EAAE;IACV,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IAEjG,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAE7C,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;QAC/E,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;QAClF,MAAM;QACN,MAAM;KACP,CAAC;AACJ,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"bounds.js","sourceRoot":"","sources":["../src/bounds.ts"],"names":[],"mappings":"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"}
|
package/dist/design.d.ts
CHANGED
|
@@ -66,6 +66,11 @@ export declare const PILL_PADDING_X = 8;
|
|
|
66
66
|
export declare const PILL_TEXT_SIZE = 9.5;
|
|
67
67
|
/** Two label pills never sit closer than this, in either direction. */
|
|
68
68
|
export declare const PILL_CLEARANCE = 2;
|
|
69
|
+
/**
|
|
70
|
+
* A pill never comes closer than this to a card or its badges: any nearer and
|
|
71
|
+
* the label reads as part of the card instead of the line it rides.
|
|
72
|
+
*/
|
|
73
|
+
export declare const PILL_CARD_CLEARANCE = 6;
|
|
69
74
|
/**
|
|
70
75
|
* Routes travel in the gaps of the grid: vertical corridors beside lanes and
|
|
71
76
|
* horizontal bands between rows. Both gaps are physically 52px across — lane
|
package/dist/design.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"design.d.ts","sourceRoot":"","sources":["../src/design.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,cAAc,KAAK,CAAC;AAEjC,eAAO,MAAM,QAAQ,KAAK,CAAC;AAC3B,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,QAAQ,KAAK,CAAC;AAC3B,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC,eAAO,MAAM,WAAW,KAAK,CAAC;AAC9B,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,mBAAmB,OAAO,CAAC;AAExC,eAAO,MAAM,WAAW,KAAK,CAAC;AAC9B,eAAO,MAAM,OAAO,KAAK,CAAC;AAE1B,eAAO,MAAM,WAAW,KAAK,CAAC;AAC9B,eAAO,MAAM,UAAU,KAAK,CAAC;AAC7B,eAAO,MAAM,WAAW,KAAK,CAAC;AAC9B,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAC5C,eAAO,MAAM,cAAc,KAAK,CAAC;AAEjC,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,aAAa,KAAK,CAAC;AAChC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,sEAAsE;AACtE,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,eAAO,MAAM,UAAU,KAAK,CAAC;AAC7B,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAErC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,cAAc,OAAO,CAAC;AACnC,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC,eAAO,MAAM,aAAa,MAAM,CAAC;AAEjC,eAAO,MAAM,YAAY,KAAK,CAAC;AAC/B,eAAO,MAAM,eAAe,IAAI,CAAC;AACjC,eAAO,MAAM,eAAe,MAAM,CAAC;AACnC,eAAO,MAAM,cAAc,OAAO,CAAC;AACnC,eAAO,MAAM,SAAS,IAAI,CAAC;AAC3B,eAAO,MAAM,YAAY,IAAI,CAAC;AAC9B,4EAA4E;AAC5E,eAAO,MAAM,UAAU,IAAI,CAAC;AAE5B,eAAO,MAAM,WAAW,KAAK,CAAC;AAC9B,eAAO,MAAM,cAAc,IAAI,CAAC;AAChC,eAAO,MAAM,cAAc,MAAM,CAAC;AAClC,uEAAuE;AACvE,eAAO,MAAM,cAAc,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"design.d.ts","sourceRoot":"","sources":["../src/design.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,cAAc,KAAK,CAAC;AAEjC,eAAO,MAAM,QAAQ,KAAK,CAAC;AAC3B,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,QAAQ,KAAK,CAAC;AAC3B,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC,eAAO,MAAM,WAAW,KAAK,CAAC;AAC9B,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,mBAAmB,OAAO,CAAC;AAExC,eAAO,MAAM,WAAW,KAAK,CAAC;AAC9B,eAAO,MAAM,OAAO,KAAK,CAAC;AAE1B,eAAO,MAAM,WAAW,KAAK,CAAC;AAC9B,eAAO,MAAM,UAAU,KAAK,CAAC;AAC7B,eAAO,MAAM,WAAW,KAAK,CAAC;AAC9B,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAC5C,eAAO,MAAM,cAAc,KAAK,CAAC;AAEjC,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,aAAa,KAAK,CAAC;AAChC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,sEAAsE;AACtE,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,eAAO,MAAM,UAAU,KAAK,CAAC;AAC7B,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAErC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,cAAc,OAAO,CAAC;AACnC,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC,eAAO,MAAM,aAAa,MAAM,CAAC;AAEjC,eAAO,MAAM,YAAY,KAAK,CAAC;AAC/B,eAAO,MAAM,eAAe,IAAI,CAAC;AACjC,eAAO,MAAM,eAAe,MAAM,CAAC;AACnC,eAAO,MAAM,cAAc,OAAO,CAAC;AACnC,eAAO,MAAM,SAAS,IAAI,CAAC;AAC3B,eAAO,MAAM,YAAY,IAAI,CAAC;AAC9B,4EAA4E;AAC5E,eAAO,MAAM,UAAU,IAAI,CAAC;AAE5B,eAAO,MAAM,WAAW,KAAK,CAAC;AAC9B,eAAO,MAAM,cAAc,IAAI,CAAC;AAChC,eAAO,MAAM,cAAc,MAAM,CAAC;AAClC,uEAAuE;AACvE,eAAO,MAAM,cAAc,IAAI,CAAC;AAChC;;;GAGG;AACH,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC;;;;;GAKG;AACH,eAAO,MAAM,eAAe,IAAI,CAAC;AACjC;;;;;GAKG;AACH,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,KAAK,CAAC;AAElC,iEAAiE;AACjE,eAAO,MAAM,UAAU,KAAK,CAAC;AAC7B,sDAAsD;AACtD,eAAO,MAAM,UAAU,KAAK,CAAC;AAE7B;;;;GAIG;AACH,eAAO,MAAM,eAAe,KAAK,CAAC;AAElC,oEAAoE;AACpE,eAAO,MAAM,cAAc,MAAM,CAAC;AAClC,eAAO,MAAM,mBAAmB,MAAM,CAAC;AACvC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC;;;;GAIG;AACH,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,+EAA+E;AAC/E,eAAO,MAAM,eAAe,OAAO,CAAC;AACpC,4EAA4E;AAC5E,eAAO,MAAM,2BAA2B,IAAI,CAAC"}
|
package/dist/design.js
CHANGED
|
@@ -66,6 +66,11 @@ export const PILL_PADDING_X = 8;
|
|
|
66
66
|
export const PILL_TEXT_SIZE = 9.5;
|
|
67
67
|
/** Two label pills never sit closer than this, in either direction. */
|
|
68
68
|
export const PILL_CLEARANCE = 2;
|
|
69
|
+
/**
|
|
70
|
+
* A pill never comes closer than this to a card or its badges: any nearer and
|
|
71
|
+
* the label reads as part of the card instead of the line it rides.
|
|
72
|
+
*/
|
|
73
|
+
export const PILL_CARD_CLEARANCE = 6;
|
|
69
74
|
/**
|
|
70
75
|
* Routes travel in the gaps of the grid: vertical corridors beside lanes and
|
|
71
76
|
* horizontal bands between rows. Both gaps are physically 52px across — lane
|
package/dist/design.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"design.js","sourceRoot":"","sources":["../src/design.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AAEjC,MAAM,CAAC,MAAM,QAAQ,GAAG,EAAE,CAAC;AAC3B,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AACvC,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AACjC,MAAM,CAAC,MAAM,QAAQ,GAAG,EAAE,CAAC;AAC3B,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAEtC;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AACtC,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;AAC9B,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC;AAClC,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAExC,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;AAC9B,MAAM,CAAC,MAAM,OAAO,GAAG,EAAE,CAAC;AAE1B,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;AAC9B,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,CAAC;AAC7B,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;AAC9B,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAC5C,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AAEjC,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AACjC,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,CAAC;AAChC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAClC,sEAAsE;AACtE,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEvC,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,CAAC;AAC7B,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAErC;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AACnC,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAC;AAEnC,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAC;AAEjC,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAAC;AAC/B,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC;AACjC,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAC;AACnC,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AACnC,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC;AAC3B,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC;AAC9B,4EAA4E;AAC5E,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC;AAE5B,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;AAC9B,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC;AAChC,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC;AAClC,uEAAuE;AACvE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"design.js","sourceRoot":"","sources":["../src/design.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,6 +37,8 @@ export declare const badgeRow: (placed: PlacedNode) => {
|
|
|
37
37
|
badges: string[];
|
|
38
38
|
box: Box;
|
|
39
39
|
} | undefined;
|
|
40
|
+
/** Every card and badge strip: what a label pill must keep clear of. */
|
|
41
|
+
export declare const occupiedBoxes: (nodes: readonly PlacedNode[]) => Box[];
|
|
40
42
|
/**
|
|
41
43
|
* The gaps of the grid, for the router: the vertical corridors beside each
|
|
42
44
|
* lane's cards and the horizontal extents of every row. Corridor `i` runs to
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"architecture.d.ts","sourceRoot":"","sources":["../../src/layout/architecture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AA+BnF,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C,eAAO,MAAM,cAAc,UAAW,KAAK,KAAG,MAAM,GAAG,SAatD,CAAC;AAUF,eAAO,MAAM,UAAU,SAAU,MAAM,KAAG,MAC8C,CAAC;AAEzF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,SAAU,SAAS,KAAG,MAAM,EAKlD,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,GAAG,EAAE,GAAG,CAAC;IACT,wDAAwD;IACxD,QAAQ,EAAE,OAAO,CAAC;IAClB,2EAA2E;IAC3E,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,GAAG,CAAA;CAAE,CAAC;AAElD;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ,WAAY,UAAU,KAAG;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,EAAE,GAAG,CAAA;CAAE,GAAG,SAyB9E,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACxC,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7C,+EAA+E;IAC/E,UAAU,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,IAAI,EAAE,UAAU,CAAC;CAClB,CAAC;AAkDF;;;;GAIG;AACH,eAAO,MAAM,aAAa,cAAe,MAAM,YAAY,OAAO,KAAG,MACa,CAAC;AAgBnF,eAAO,MAAM,kBAAkB,UACtB,WAAW,SACX,WAAW,GAAG,SAAS,eACjB,aAAa,KACzB,kBAiGF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,SAAU,IAAI,KAAG,MAM3C,CAAC"}
|
|
1
|
+
{"version":3,"file":"architecture.d.ts","sourceRoot":"","sources":["../../src/layout/architecture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AA+BnF,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C,eAAO,MAAM,cAAc,UAAW,KAAK,KAAG,MAAM,GAAG,SAatD,CAAC;AAUF,eAAO,MAAM,UAAU,SAAU,MAAM,KAAG,MAC8C,CAAC;AAEzF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,SAAU,SAAS,KAAG,MAAM,EAKlD,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,GAAG,EAAE,GAAG,CAAC;IACT,wDAAwD;IACxD,QAAQ,EAAE,OAAO,CAAC;IAClB,2EAA2E;IAC3E,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,GAAG,CAAA;CAAE,CAAC;AAElD;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ,WAAY,UAAU,KAAG;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,EAAE,GAAG,CAAA;CAAE,GAAG,SAyB9E,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,aAAa,UAAW,SAAS,UAAU,EAAE,KAAG,GAAG,EAI5D,CAAC;AAEL;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACxC,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7C,+EAA+E;IAC/E,UAAU,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,IAAI,EAAE,UAAU,CAAC;CAClB,CAAC;AAkDF;;;;GAIG;AACH,eAAO,MAAM,aAAa,cAAe,MAAM,YAAY,OAAO,KAAG,MACa,CAAC;AAgBnF,eAAO,MAAM,kBAAkB,UACtB,WAAW,SACX,WAAW,GAAG,SAAS,eACjB,aAAa,KACzB,kBAiGF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,SAAU,IAAI,KAAG,MAM3C,CAAC"}
|
|
@@ -68,6 +68,11 @@ export const badgeRow = (placed) => {
|
|
|
68
68
|
},
|
|
69
69
|
};
|
|
70
70
|
};
|
|
71
|
+
/** Every card and badge strip: what a label pill must keep clear of. */
|
|
72
|
+
export const occupiedBoxes = (nodes) => nodes.flatMap((node) => {
|
|
73
|
+
const row = badgeRow(node);
|
|
74
|
+
return row === undefined ? [node.box] : [node.box, row.box];
|
|
75
|
+
});
|
|
71
76
|
const cardHeight = (node) => node.subtitle === undefined ? CARD_HEIGHT : CARD_HEIGHT_WITH_SUBTITLE;
|
|
72
77
|
/**
|
|
73
78
|
* Lane order: the document's explicit list first, for the lanes it names,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"architecture.js","sourceRoot":"","sources":["../../src/layout/architecture.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"architecture.js","sourceRoot":"","sources":["../../src/layout/architecture.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { LayoutHints } from "@coldtea/pr-lens-schema";
|
|
2
|
+
import type { Box } from "../geometry.js";
|
|
2
3
|
import type { ScopedGraph } from "../scope.js";
|
|
3
4
|
import { type ArchitectureLayout } from "./architecture.js";
|
|
4
5
|
import { type RoutedEdge } from "./edges.js";
|
|
@@ -10,9 +11,13 @@ import { type RoutedEdge } from "./edges.js";
|
|
|
10
11
|
* moves the lanes or rows beside a saturated gap by one pitch step — a small
|
|
11
12
|
* change staying a small move — and an uncrowded document is laid out
|
|
12
13
|
* exactly as if this pass did not exist.
|
|
14
|
+
*
|
|
15
|
+
* A corridor is also widened when a label has nowhere on or beside its line
|
|
16
|
+
* to sit — a straight line across a corridor has only its width for a pill.
|
|
13
17
|
*/
|
|
14
18
|
export declare const relieveCongestion: (graph: ScopedGraph, hints: LayoutHints | undefined) => {
|
|
15
19
|
layout: ArchitectureLayout;
|
|
16
20
|
routed: RoutedEdge[];
|
|
21
|
+
pills: Map<string, Box>;
|
|
17
22
|
};
|
|
18
23
|
//# sourceMappingURL=congestion.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"congestion.d.ts","sourceRoot":"","sources":["../../src/layout/congestion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"congestion.d.ts","sourceRoot":"","sources":["../../src/layout/congestion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAU3D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAGL,KAAK,kBAAkB,EAGxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAKL,KAAK,UAAU,EAChB,MAAM,YAAY,CAAC;AAGpB;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB,UACrB,WAAW,SACX,WAAW,GAAG,SAAS,KAC7B;IAAE,MAAM,EAAE,kBAAkB,CAAC;IAAC,MAAM,EAAE,UAAU,EAAE,CAAC;IAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAkC7E,CAAC"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { LANE_BOTTOM_PADDING, LANE_GAP, LANE_PADDING_X, ROW_GAP, TRACK_CLEARANCE, TRACK_PITCH_MIN, } from "../design.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { union } from "../bounds.js";
|
|
3
|
+
import { layoutArchitecture, occupiedBoxes, } from "./architecture.js";
|
|
4
|
+
import { chooseRetiredRoutes, routeAndCount, routeEdges, } from "./edges.js";
|
|
5
|
+
import { placeLabelPills } from "./labels.js";
|
|
4
6
|
/**
|
|
5
7
|
* Layout and routing with the pitch floor held: any gap whose traffic would
|
|
6
8
|
* compress its tracks below TRACK_PITCH_MIN is widened to exactly what that
|
|
@@ -9,29 +11,65 @@ import { channelTraffic, routeEdges } from "./edges.js";
|
|
|
9
11
|
* moves the lanes or rows beside a saturated gap by one pitch step — a small
|
|
10
12
|
* change staying a small move — and an uncrowded document is laid out
|
|
11
13
|
* exactly as if this pass did not exist.
|
|
14
|
+
*
|
|
15
|
+
* A corridor is also widened when a label has nowhere on or beside its line
|
|
16
|
+
* to sit — a straight line across a corridor has only its width for a pill.
|
|
12
17
|
*/
|
|
13
18
|
export const relieveCongestion = (graph, hints) => {
|
|
14
19
|
let expansions = { corridors: new Map(), bands: new Map() };
|
|
20
|
+
let labelRoom = new Map();
|
|
15
21
|
let layout = layoutArchitecture(graph, hints, expansions);
|
|
22
|
+
const retired = chooseRetiredRoutes(graph.edges, layout);
|
|
23
|
+
let placed;
|
|
16
24
|
// Widening never changes which gaps the routes choose — plans are made of
|
|
17
|
-
// lane and row indices
|
|
18
|
-
//
|
|
19
|
-
for (let round = 0; round <
|
|
20
|
-
const
|
|
21
|
-
|
|
25
|
+
// lane and row indices — so traffic settles after one widening. Label room
|
|
26
|
+
// only grows, so that settles too. The bound is a backstop.
|
|
27
|
+
for (let round = 0; round < 6; round += 1) {
|
|
28
|
+
const { routed, traffic } = routeAndCount(graph.edges, layout, retired);
|
|
29
|
+
const needed = expansionsFor(traffic, layout.grid, labelRoom);
|
|
30
|
+
if (!sameExpansions(needed, expansions)) {
|
|
31
|
+
expansions = needed;
|
|
32
|
+
layout = layoutArchitecture(graph, hints, expansions);
|
|
33
|
+
placed = undefined;
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
placed = { routed, labels: labelsOn(layout, routed) };
|
|
37
|
+
const grown = grownRoom(labelRoom, placed.labels.cramped, traffic);
|
|
38
|
+
if (sameEntries(grown, labelRoom))
|
|
22
39
|
break;
|
|
23
|
-
|
|
40
|
+
labelRoom = grown;
|
|
41
|
+
expansions = expansionsFor(traffic, layout.grid, labelRoom);
|
|
24
42
|
layout = layoutArchitecture(graph, hints, expansions);
|
|
43
|
+
placed = undefined;
|
|
25
44
|
}
|
|
26
|
-
|
|
45
|
+
if (placed === undefined) {
|
|
46
|
+
const routed = routeEdges(graph.edges, layout, retired);
|
|
47
|
+
placed = { routed, labels: labelsOn(layout, routed) };
|
|
48
|
+
}
|
|
49
|
+
return { layout, routed: placed.routed, pills: placed.labels.boxes };
|
|
50
|
+
};
|
|
51
|
+
const labelsOn = (layout, routed) => placeLabelPills(routed, occupiedBoxes(layout.nodes), union(layout.lanes.map(({ box }) => box)));
|
|
52
|
+
/** Air either side of a corridor-filling pill, so the arrowheads still show. */
|
|
53
|
+
const LABEL_CORRIDOR_AIR = 12;
|
|
54
|
+
/** Only ever grows, which is what lets the loop settle. */
|
|
55
|
+
const grownRoom = (room, cramped, traffic) => {
|
|
56
|
+
const grown = new Map(room);
|
|
57
|
+
for (const [id, pillWidth] of cramped) {
|
|
58
|
+
const width = pillWidth + LABEL_CORRIDOR_AIR * 2;
|
|
59
|
+
for (const index of traffic.corridorsByEdge.get(id) ?? [])
|
|
60
|
+
grown.set(index, Math.max(grown.get(index) ?? 0, width));
|
|
61
|
+
}
|
|
62
|
+
return grown;
|
|
27
63
|
};
|
|
28
64
|
/** Room for this many tracks at the floor pitch, plus clearance to the cards. */
|
|
29
65
|
const widthNeeded = (traffic) => (traffic - 1) * TRACK_PITCH_MIN + TRACK_CLEARANCE * 2;
|
|
30
66
|
const CORRIDOR_WIDTH = LANE_PADDING_X * 2 + LANE_GAP;
|
|
31
|
-
const expansionsFor = (traffic, grid) => {
|
|
67
|
+
const expansionsFor = (traffic, grid, labelRoom) => {
|
|
32
68
|
const corridors = new Map();
|
|
33
|
-
for (const
|
|
34
|
-
const
|
|
69
|
+
for (const index of new Set([...traffic.corridors.keys(), ...labelRoom.keys()])) {
|
|
70
|
+
const count = traffic.corridors.get(index) ?? 0;
|
|
71
|
+
const width = Math.max(count > 0 ? widthNeeded(count) : 0, labelRoom.get(index) ?? 0);
|
|
72
|
+
const extra = width - CORRIDOR_WIDTH;
|
|
35
73
|
if (extra > 0)
|
|
36
74
|
corridors.set(index, extra);
|
|
37
75
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"congestion.js","sourceRoot":"","sources":["../../src/layout/congestion.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,EACnB,QAAQ,EACR,cAAc,EACd,OAAO,EACP,eAAe,EACf,eAAe,GAChB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"congestion.js","sourceRoot":"","sources":["../../src/layout/congestion.ts"],"names":[],"mappings":"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"}
|
package/dist/layout/edges.d.ts
CHANGED
|
@@ -22,7 +22,7 @@ export type RoutedEdge = {
|
|
|
22
22
|
edge: GraphEdge;
|
|
23
23
|
path: string;
|
|
24
24
|
curve: Curve;
|
|
25
|
-
/** Centre of the longest straight run — where
|
|
25
|
+
/** Centre of the longest straight run — where a pill with no room on its route starts looking. */
|
|
26
26
|
labelAnchor: Point | undefined;
|
|
27
27
|
};
|
|
28
28
|
/**
|
|
@@ -32,10 +32,20 @@ export type RoutedEdge = {
|
|
|
32
32
|
* off the edge would simply be clipped.
|
|
33
33
|
*/
|
|
34
34
|
export declare const curveBounds: (curve: Curve) => Box;
|
|
35
|
-
export
|
|
35
|
+
export type RetiredRoutes = ReadonlyMap<string, "direct" | "exile">;
|
|
36
|
+
/**
|
|
37
|
+
* Direct or exile for each retired connection, whichever costs less in
|
|
38
|
+
* length plus crossings. Exile keeps retired paths out of the living graph,
|
|
39
|
+
* but in a wide diagram it sends the reader around everything. Decided on
|
|
40
|
+
* the first layout and held, so widening a gap can never flip a route.
|
|
41
|
+
*/
|
|
42
|
+
export declare const chooseRetiredRoutes: (edges: readonly GraphEdge[], layout: ArchitectureLayout) => RetiredRoutes;
|
|
43
|
+
export declare const routeEdges: (edges: readonly GraphEdge[], layout: ArchitectureLayout, retired: RetiredRoutes) => RoutedEdge[];
|
|
36
44
|
export type ChannelTraffic = {
|
|
37
45
|
corridors: ReadonlyMap<number, number>;
|
|
38
46
|
bands: ReadonlyMap<number, number>;
|
|
47
|
+
/** Where room for each edge's label would have to come from. */
|
|
48
|
+
corridorsByEdge: ReadonlyMap<string, readonly number[]>;
|
|
39
49
|
};
|
|
40
50
|
/**
|
|
41
51
|
* How many runs each gap of this layout would carry, counted from the same
|
|
@@ -43,6 +53,11 @@ export type ChannelTraffic = {
|
|
|
43
53
|
* whether a gap is wide enough for its traffic before anything is drawn
|
|
44
54
|
* into it.
|
|
45
55
|
*/
|
|
46
|
-
export declare const channelTraffic: (edges: readonly GraphEdge[], layout: ArchitectureLayout) => ChannelTraffic;
|
|
56
|
+
export declare const channelTraffic: (edges: readonly GraphEdge[], layout: ArchitectureLayout, retired: RetiredRoutes) => ChannelTraffic;
|
|
57
|
+
/** One routing pass, shared by drawing and gap sizing. */
|
|
58
|
+
export declare const routeAndCount: (edges: readonly GraphEdge[], layout: ArchitectureLayout, retired: RetiredRoutes) => {
|
|
59
|
+
routed: RoutedEdge[];
|
|
60
|
+
traffic: ChannelTraffic;
|
|
61
|
+
};
|
|
47
62
|
export {};
|
|
48
63
|
//# sourceMappingURL=edges.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edges.d.ts","sourceRoot":"","sources":["../../src/layout/edges.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"edges.d.ts","sourceRoot":"","sources":["../../src/layout/edges.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAYzD,OAAO,EAAoB,KAAK,GAAG,EAAE,KAAK,KAAK,EAAa,MAAM,gBAAgB,CAAC;AACnF,OAAO,KAAK,EAAE,kBAAkB,EAAsC,MAAM,mBAAmB,CAAC;AAGhG;;;GAGG;AACH,KAAK,OAAO,GACR;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,KAAK,CAAA;CAAE,GAC3B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC;IAAC,EAAE,EAAE,KAAK,CAAA;CAAE,CAAC;AAE9D,MAAM,MAAM,KAAK,GAAG;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,OAAO,EAAE,CAAA;CAAE,CAAC;AAEzD,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;IACb,kGAAkG;IAClG,WAAW,EAAE,KAAK,GAAG,SAAS,CAAC;CAChC,CAAC;AAoDF;;;;;GAKG;AACH,eAAO,MAAM,WAAW,UAAW,KAAK,KAAG,GAoB1C,CAAC;AA+eF,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC;AAKpE;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,UACvB,SAAS,SAAS,EAAE,UACnB,kBAAkB,KACzB,aAqCF,CAAC;AAYF,eAAO,MAAM,UAAU,UACd,SAAS,SAAS,EAAE,UACnB,kBAAkB,WACjB,aAAa,KACrB,UAAU,EAA8C,CAAC;AAE5D,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,gEAAgE;IAChE,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;CACzD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,UAClB,SAAS,SAAS,EAAE,UACnB,kBAAkB,WACjB,aAAa,KACrB,cAA+D,CAAC;AAEnE,0DAA0D;AAC1D,eAAO,MAAM,aAAa,UACjB,SAAS,SAAS,EAAE,UACnB,kBAAkB,WACjB,aAAa,KACrB;IAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAAC,OAAO,EAAE,cAAc,CAAA;CAsBjD,CAAC"}
|
package/dist/layout/edges.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { assertNever } from "@coldtea/pr-lens-schema";
|
|
2
|
-
import { BEND_RADIUS_MAX, PORT_INSET, PORT_PITCH, TRACK_CLEARANCE, TRACK_PITCH_MAX, } from "../design.js";
|
|
2
|
+
import { BEND_RADIUS_MAX, CARD_HEIGHT, PILL_CARD_CLEARANCE, PORT_INSET, PORT_PITCH, ROW_GAP, TRACK_CLEARANCE, TRACK_PITCH_MAX, } from "../design.js";
|
|
3
3
|
import { boxCentre, coord } from "../geometry.js";
|
|
4
|
+
import { pillSize } from "./labels.js";
|
|
4
5
|
const segmentStart = (curve, index) => index === 0 ? curve.from : (curve.segments[index - 1]?.to ?? curve.from);
|
|
5
6
|
const pointOnSegment = (from, segment, t) => {
|
|
6
7
|
switch (segment.kind) {
|
|
@@ -94,12 +95,11 @@ const selfLoop = (box) => {
|
|
|
94
95
|
};
|
|
95
96
|
const isDead = (placed) => placed.node.delta === "removed";
|
|
96
97
|
/**
|
|
97
|
-
* A retired connection with a living end
|
|
98
|
-
*
|
|
99
|
-
* dead cards keeps its short run
|
|
100
|
-
* structure of the retired path.
|
|
98
|
+
* A retired connection with a living end goes directly or into exile, out
|
|
99
|
+
* past the last lane and back.
|
|
100
|
+
* One wholly between dead cards always keeps its short run in the dead band.
|
|
101
101
|
*/
|
|
102
|
-
const
|
|
102
|
+
const isRetiredWithLivingEnd = (edge, from, to) => !(isDead(from) && isDead(to)) && (edge.delta === "removed" || isDead(from) || isDead(to));
|
|
103
103
|
const clampBand = (index, grid) => Math.min(Math.max(index, 1), grid.rows.length);
|
|
104
104
|
/** The band a route leaves into, or arrives from, on its way up or down. */
|
|
105
105
|
const bandToward = (row, headingDown, grid) => clampBand(headingDown ? row + 1 : row, grid);
|
|
@@ -456,36 +456,94 @@ const labelAnchorOf = (curve) => {
|
|
|
456
456
|
});
|
|
457
457
|
return best?.middle ?? pointAt(curve, 0.5);
|
|
458
458
|
};
|
|
459
|
-
|
|
459
|
+
/** A crossing of a living line is worth one row's pitch of extra travel. */
|
|
460
|
+
const CROSSING_COST = CARD_HEIGHT + ROW_GAP;
|
|
461
|
+
/**
|
|
462
|
+
* Direct or exile for each retired connection, whichever costs less in
|
|
463
|
+
* length plus crossings. Exile keeps retired paths out of the living graph,
|
|
464
|
+
* but in a wide diagram it sends the reader around everything. Decided on
|
|
465
|
+
* the first layout and held, so widening a gap can never flip a route.
|
|
466
|
+
*/
|
|
467
|
+
export const chooseRetiredRoutes = (edges, layout) => {
|
|
468
|
+
const nodes = new Map(layout.nodes.map((node) => [node.node.id, node]));
|
|
469
|
+
const retired = edges.filter((edge) => {
|
|
470
|
+
const from = nodes.get(edge.from);
|
|
471
|
+
const to = nodes.get(edge.to);
|
|
472
|
+
if (from === undefined || to === undefined || edge.from === edge.to)
|
|
473
|
+
return false;
|
|
474
|
+
return isRetiredWithLivingEnd(edge, from, to);
|
|
475
|
+
});
|
|
476
|
+
if (retired.length === 0)
|
|
477
|
+
return new Map();
|
|
478
|
+
const everyone = (way) => new Map(retired.map(({ id }) => [id, way]));
|
|
479
|
+
const retiredIds = new Set(retired.map(({ id }) => id));
|
|
480
|
+
const costs = (pass) => {
|
|
481
|
+
const living = [...pass.waypoints]
|
|
482
|
+
.filter(([id]) => !retiredIds.has(id))
|
|
483
|
+
.map(([, points]) => points);
|
|
484
|
+
return new Map(retired.map(({ id }) => {
|
|
485
|
+
const points = pass.waypoints.get(id) ?? [];
|
|
486
|
+
const crossings = living.reduce((sum, other) => sum + crossingCount(points, other), 0);
|
|
487
|
+
return [id, polylineLength(points) + crossings * CROSSING_COST];
|
|
488
|
+
}));
|
|
489
|
+
};
|
|
490
|
+
const directPass = finalPass(edges, layout, everyone("direct"));
|
|
491
|
+
const direct = costs(directPass);
|
|
492
|
+
const exile = costs(finalPass(edges, layout, everyone("exile")));
|
|
493
|
+
return new Map(retired.map(({ id, label }) => {
|
|
494
|
+
const points = directPass.waypoints.get(id) ?? [];
|
|
495
|
+
const fits = label === undefined || holdsPill(points, pillSize(label));
|
|
496
|
+
const cheaper = (direct.get(id) ?? Number.POSITIVE_INFINITY) < (exile.get(id) ?? 0);
|
|
497
|
+
return [id, fits && cheaper ? "direct" : "exile"];
|
|
498
|
+
}));
|
|
499
|
+
};
|
|
500
|
+
/** No label fits on the direct line between a pair's halves; exile gives it room. */
|
|
501
|
+
const holdsPill = (points, pill) => points.some((point, index) => {
|
|
502
|
+
const previous = points[index - 1];
|
|
503
|
+
if (previous === undefined)
|
|
504
|
+
return false;
|
|
505
|
+
const horizontal = Math.abs(point.y - previous.y) < EPSILON;
|
|
506
|
+
const length = Math.hypot(point.x - previous.x, point.y - previous.y);
|
|
507
|
+
return length >= (horizontal ? pill.width : pill.height) + PILL_CARD_CLEARANCE * 2;
|
|
508
|
+
});
|
|
509
|
+
export const routeEdges = (edges, layout, retired) => finalPass(edges, layout, retired).routed;
|
|
460
510
|
/**
|
|
461
511
|
* How many runs each gap of this layout would carry, counted from the same
|
|
462
512
|
* routing that would be drawn — braid guard included. This is what decides
|
|
463
513
|
* whether a gap is wide enough for its traffic before anything is drawn
|
|
464
514
|
* into it.
|
|
465
515
|
*/
|
|
466
|
-
export const channelTraffic = (edges, layout) =>
|
|
516
|
+
export const channelTraffic = (edges, layout, retired) => routeAndCount(edges, layout, retired).traffic;
|
|
517
|
+
/** One routing pass, shared by drawing and gap sizing. */
|
|
518
|
+
export const routeAndCount = (edges, layout, retired) => {
|
|
519
|
+
const pass = finalPass(edges, layout, retired);
|
|
467
520
|
const corridors = new Map();
|
|
468
521
|
const bands = new Map();
|
|
469
|
-
|
|
522
|
+
const corridorsByEdge = new Map();
|
|
523
|
+
for (const route of pass.plans)
|
|
470
524
|
for (const channel of route.channels)
|
|
471
525
|
switch (channel.kind) {
|
|
472
|
-
case "corridor":
|
|
526
|
+
case "corridor": {
|
|
473
527
|
corridors.set(channel.index, (corridors.get(channel.index) ?? 0) + 1);
|
|
528
|
+
const through = corridorsByEdge.get(route.edge.id) ?? [];
|
|
529
|
+
through.push(channel.index);
|
|
530
|
+
corridorsByEdge.set(route.edge.id, through);
|
|
474
531
|
break;
|
|
532
|
+
}
|
|
475
533
|
case "band":
|
|
476
534
|
bands.set(channel.index, (bands.get(channel.index) ?? 0) + 1);
|
|
477
535
|
break;
|
|
478
536
|
default:
|
|
479
537
|
assertNever(channel, "Unhandled channel");
|
|
480
538
|
}
|
|
481
|
-
return { corridors, bands };
|
|
539
|
+
return { routed: pass.routed, traffic: { corridors, bands, corridorsByEdge } };
|
|
482
540
|
};
|
|
483
|
-
const finalPass = (edges, layout) => {
|
|
484
|
-
const first = routePass(edges, layout, new Set());
|
|
541
|
+
const finalPass = (edges, layout, retired) => {
|
|
542
|
+
const first = routePass(edges, layout, new Set(), retired);
|
|
485
543
|
const braiding = braidingTrunks(first.branches);
|
|
486
|
-
return braiding.size === 0 ? first : routePass(edges, layout, braiding);
|
|
544
|
+
return braiding.size === 0 ? first : routePass(edges, layout, braiding, retired);
|
|
487
545
|
};
|
|
488
|
-
const routePass = (edges, layout, blockedTrunks) => {
|
|
546
|
+
const routePass = (edges, layout, blockedTrunks, retired) => {
|
|
489
547
|
const nodes = new Map(layout.nodes.map((node) => [node.node.id, node]));
|
|
490
548
|
const blocked = blockedFaces(layout.nodes);
|
|
491
549
|
const laneCount = layout.lanes.length;
|
|
@@ -500,7 +558,7 @@ const routePass = (edges, layout, blockedTrunks) => {
|
|
|
500
558
|
const loops = new Set(drawable.filter(({ edge }) => edge.from === edge.to).map(({ edge }) => edge.id));
|
|
501
559
|
const trunkCounts = new Map();
|
|
502
560
|
for (const { edge, from, to } of drawable) {
|
|
503
|
-
if (loops.has(edge.id) ||
|
|
561
|
+
if (loops.has(edge.id) || isRetiredWithLivingEnd(edge, from, to) || isDead(from))
|
|
504
562
|
continue;
|
|
505
563
|
const key = trunkKey(edge, from, to);
|
|
506
564
|
if (key === undefined || blockedTrunks.has(key))
|
|
@@ -510,14 +568,16 @@ const routePass = (edges, layout, blockedTrunks) => {
|
|
|
510
568
|
const routes = drawable
|
|
511
569
|
.filter(({ edge }) => !loops.has(edge.id))
|
|
512
570
|
.map(({ edge, order, from, to }) => {
|
|
513
|
-
if (
|
|
571
|
+
if (isRetiredWithLivingEnd(edge, from, to))
|
|
514
572
|
return {
|
|
515
573
|
edge,
|
|
516
574
|
order,
|
|
517
575
|
from,
|
|
518
576
|
to,
|
|
519
577
|
trunk: undefined,
|
|
520
|
-
...
|
|
578
|
+
...(retired.get(edge.id) === "direct"
|
|
579
|
+
? planRoute(from, to, layout.lanes, grid, blocked)
|
|
580
|
+
: planExile(from, to, grid, laneCount, blocked)),
|
|
521
581
|
};
|
|
522
582
|
const key = isDead(from) ? undefined : trunkKey(edge, from, to);
|
|
523
583
|
const trunk = key !== undefined && (trunkCounts.get(key) ?? 0) >= 2 ? key : undefined;
|
|
@@ -529,9 +589,11 @@ const routePass = (edges, layout, blockedTrunks) => {
|
|
|
529
589
|
snapNeighbours(routes, ports);
|
|
530
590
|
const tracks = allocateTracks(routes, ports, grid);
|
|
531
591
|
const branches = new Map();
|
|
592
|
+
const waypoints = new Map();
|
|
532
593
|
const routedById = new Map();
|
|
533
594
|
for (const route of routes) {
|
|
534
595
|
const points = buildPoints(route, resolvedPort(ports, fromSlot(route), route.from.box, route.fromSide), resolvedPort(ports, toSlot(route), route.to.box, route.toSide), (index) => tracks.get(`${route.edge.id}#${index}`) ?? 0);
|
|
596
|
+
waypoints.set(route.edge.id, points);
|
|
535
597
|
if (route.trunk !== undefined) {
|
|
536
598
|
const list = branches.get(route.trunk) ?? [];
|
|
537
599
|
list.push(points.slice(1));
|
|
@@ -557,7 +619,7 @@ const routePass = (edges, layout, blockedTrunks) => {
|
|
|
557
619
|
labelAnchor: edge.label === undefined ? undefined : labelAnchorOf(curve),
|
|
558
620
|
};
|
|
559
621
|
});
|
|
560
|
-
return { routed, plans: routes, branches };
|
|
622
|
+
return { routed, plans: routes, branches, waypoints };
|
|
561
623
|
};
|
|
562
624
|
const resolvedPort = (ports, slot, box, side) => {
|
|
563
625
|
const span = faceSpan(box, side);
|
|
@@ -799,7 +861,8 @@ const braidingTrunks = (branches) => {
|
|
|
799
861
|
}
|
|
800
862
|
return braiding;
|
|
801
863
|
};
|
|
802
|
-
const
|
|
864
|
+
const crossingCount = (a, b) => {
|
|
865
|
+
let count = 0;
|
|
803
866
|
for (let i = 0; i + 1 < a.length; i += 1)
|
|
804
867
|
for (let j = 0; j + 1 < b.length; j += 1) {
|
|
805
868
|
const a1 = a[i];
|
|
@@ -809,10 +872,17 @@ const polylinesCross = (a, b) => {
|
|
|
809
872
|
if (a1 === undefined || a2 === undefined || b1 === undefined || b2 === undefined)
|
|
810
873
|
continue;
|
|
811
874
|
if (segmentsCross(a1, a2, b1, b2))
|
|
812
|
-
|
|
875
|
+
count += 1;
|
|
813
876
|
}
|
|
814
|
-
return
|
|
815
|
-
};
|
|
877
|
+
return count;
|
|
878
|
+
};
|
|
879
|
+
const polylineLength = (points) => points.reduce((sum, point, index) => {
|
|
880
|
+
const previous = points[index - 1];
|
|
881
|
+
if (previous === undefined)
|
|
882
|
+
return sum;
|
|
883
|
+
return sum + Math.hypot(point.x - previous.x, point.y - previous.y);
|
|
884
|
+
}, 0);
|
|
885
|
+
const polylinesCross = (a, b) => crossingCount(a, b) > 0;
|
|
816
886
|
const EPSILON = 0.01;
|
|
817
887
|
/** Proper crossing or collinear overlap of two axis-aligned segments. */
|
|
818
888
|
const segmentsCross = (a1, a2, b1, b2) => {
|