@plait/graph-viz 0.77.3 → 0.78.0-next.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.
@@ -1,92 +0,0 @@
1
- // Credits to perfect-arrows
2
- // https://github.com/steveruizok/perfect-arrows/blob/master/src/lib/getArrow.ts
3
- import { getPointBetween } from '@plait/core';
4
- import { getAngle, getDistance, getAngliness, projectPoint, getSector, rotatePoint, modulate } from './utils';
5
- /**
6
- * getArrow
7
- * Get the points for a linking line between two points.
8
- * @description Draw an arrow between two points.
9
- * @param x0 The x position of the "from" point.
10
- * @param y0 The y position of the "from" point.
11
- * @param x1 The x position of the "to" point.
12
- * @param y1 The y position of the "to" point.
13
- * @param options Additional options for computing the line.
14
- * @returns [sx, sy, cx, cy, e1, e2, ae, as, ac]
15
- * @example
16
- * const arrow = getArrow(0, 0, 100, 200, {
17
- bow: 0
18
- stretch: .5
19
- stretchMin: 0
20
- stretchMax: 420
21
- padStart: 0
22
- padEnd: 0
23
- flip: false
24
- straights: true
25
- * })
26
- *
27
- * const [
28
- * startX, startY,
29
- * controlX, controlY,
30
- * endX, endY,
31
- * endAngle,
32
- * startAngle,
33
- * controlAngle
34
- * ] = arrow
35
- */
36
- export default function getArrow(x0, y0, x1, y1, options = {}) {
37
- const { bow = 0, stretch = 0.5, stretchMin = 0, stretchMax = 420, padStart = 0, padEnd = 0, flip = false, straights = true } = options;
38
- const angle = getAngle(x0, y0, x1, y1);
39
- const dist = getDistance(x0, y0, x1, y1);
40
- const angliness = getAngliness(x0, y0, x1, y1);
41
- // Step 0 ⤜⤏ Should the arrow be straight?
42
- if (dist < (padStart + padEnd) * 2 || // Too short
43
- (bow === 0 && stretch === 0) || // No bow, no stretch
44
- (straights && [0, 1, Infinity].includes(angliness)) // 45 degree angle
45
- ) {
46
- // ⤜⤏ Arrow is straight! Just pad start and end points.
47
- // Padding distances
48
- const ps = Math.max(0, Math.min(dist - padStart, padStart));
49
- const pe = Math.max(0, Math.min(dist - ps, padEnd));
50
- // Move start point toward end point
51
- let [px0, py0] = projectPoint(x0, y0, angle, ps);
52
- // Move end point toward start point
53
- let [px1, py1] = projectPoint(x1, y1, angle + Math.PI, pe);
54
- // Get midpoint between new points
55
- const [mx, my] = getPointBetween(px0, py0, px1, py1, 0.5);
56
- return [px0, py0, mx, my, px1, py1, angle, angle, angle];
57
- }
58
- // ⤜⤏ Arrow is an arc!
59
- // Is the arc clockwise or counterclockwise?
60
- let rot = (getSector(angle) % 2 === 0 ? 1 : -1) * (flip ? -1 : 1);
61
- // Calculate how much the line should "bow" away from center
62
- const arc = bow + modulate(dist, [stretchMin, stretchMax], [1, 0], true) * stretch;
63
- // Step 1 ⤜⤏ Find padded points.
64
- // Get midpoint.
65
- const [mx, my] = getPointBetween(x0, y0, x1, y1, 0.5);
66
- // Get control point.
67
- let [cx, cy] = getPointBetween(x0, y0, x1, y1, 0.5 - arc);
68
- // Rotate control point (clockwise or counterclockwise).
69
- [cx, cy] = rotatePoint(cx, cy, mx, my, (Math.PI / 2) * rot);
70
- // Get padded start point.
71
- const a0 = getAngle(x0, y0, cx, cy);
72
- const [px0, py0] = projectPoint(x0, y0, a0, padStart);
73
- // Get padded end point.
74
- const a1 = getAngle(x1, y1, cx, cy);
75
- const [px1, py1] = projectPoint(x1, y1, a1, padEnd);
76
- // Step 2 ⤜⤏ Find start and end angles.
77
- // Start angle
78
- const as = getAngle(cx, cy, x0, y0);
79
- // End angle
80
- const ae = getAngle(cx, cy, x1, y1);
81
- // Step 3 ⤜⤏ Find control point for padded points.
82
- // Get midpoint between padded start / end points.
83
- const [mx1, my1] = getPointBetween(px0, py0, px1, py1, 0.5);
84
- // Get control point for padded start / end points.
85
- let [cx1, cy1] = getPointBetween(px0, py0, px1, py1, 0.5 - arc);
86
- // Rotate control point (clockwise or counterclockwise).
87
- [cx1, cy1] = rotatePoint(cx1, cy1, mx1, my1, (Math.PI / 2) * rot);
88
- // Finally, average the two control points.
89
- let [cx2, cy2] = getPointBetween(cx, cy, cx1, cy1, 0.5);
90
- return [px0, py0, cx2, cy2, px1, py1, ae, as, angle];
91
- }
92
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWFycm93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZ3JhcGgtdml6L3NyYy9wZXJmZWN0LWFycm93cy9nZXQtYXJyb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNEJBQTRCO0FBQzVCLGdGQUFnRjtBQUVoRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFhOUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQThCSztBQUNMLE1BQU0sQ0FBQyxPQUFPLFVBQVUsUUFBUSxDQUFDLEVBQVUsRUFBRSxFQUFVLEVBQUUsRUFBVSxFQUFFLEVBQVUsRUFBRSxVQUF3QixFQUFrQjtJQUN2SCxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxPQUFPLEdBQUcsR0FBRyxFQUFFLFVBQVUsR0FBRyxDQUFDLEVBQUUsVUFBVSxHQUFHLEdBQUcsRUFBRSxRQUFRLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLEtBQUssRUFBRSxTQUFTLEdBQUcsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRXZJLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN2QyxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDekMsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRS9DLDBDQUEwQztJQUUxQyxJQUNJLElBQUksR0FBRyxD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SUFDM0MsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxlQUFlLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRXhELE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDcmVkaXRzIHRvIHBlcmZlY3QtYXJyb3dzXG4vLyBodHRwczovL2dpdGh1Yi5jb20vc3RldmVydWl6b2svcGVyZmVjdC1hcnJvd3MvYmxvYi9tYXN0ZXIvc3JjL2xpYi9nZXRBcnJvdy50c1xuXG5pbXBvcnQgeyBnZXRQb2ludEJldHdlZW4gfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBnZXRBbmdsZSwgZ2V0RGlzdGFuY2UsIGdldEFuZ2xpbmVzcywgcHJvamVjdFBvaW50LCBnZXRTZWN0b3IsIHJvdGF0ZVBvaW50LCBtb2R1bGF0ZSB9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgdHlwZSBBcnJvd09wdGlvbnMgPSB7XG4gICAgYm93PzogbnVtYmVyO1xuICAgIHN0cmV0Y2hNaW4/OiBudW1iZXI7XG4gICAgc3RyZXRjaE1heD86IG51bWJlcjtcbiAgICBzdHJldGNoPzogbnVtYmVyO1xuICAgIHBhZFN0YXJ0PzogbnVtYmVyO1xuICAgIHBhZEVuZD86IG51bWJlcjtcbiAgICBmbGlwPzogYm9vbGVhbjtcbiAgICBzdHJhaWdodHM/OiBib29sZWFuO1xufTtcblxuLyoqXG4gICAqIGdldEFycm93XG4gICAqIEdldCB0aGUgcG9pbnRzIGZvciBhIGxpbmtpbmcgbGluZSBiZXR3ZWVuIHR3byBwb2ludHMuXG4gICAqIEBkZXNjcmlwdGlvbiBEcmF3IGFuIGFycm93IGJldHdlZW4gdHdvIHBvaW50cy5cbiAgICogQHBhcmFtIHgwIFRoZSB4IHBvc2l0aW9uIG9mIHRoZSBcImZyb21cIiBwb2ludC5cbiAgICogQHBhcmFtIHkwIFRoZSB5IHBvc2l0aW9uIG9mIHRoZSBcImZyb21cIiBwb2ludC5cbiAgICogQHBhcmFtIHgxIFRoZSB4IHBvc2l0aW9uIG9mIHRoZSBcInRvXCIgcG9pbnQuXG4gICAqIEBwYXJhbSB5MSBUaGUgeSBwb3NpdGlvbiBvZiB0aGUgXCJ0b1wiIHBvaW50LlxuICAgKiBAcGFyYW0gb3B0aW9ucyBBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIGNvbXB1dGluZyB0aGUgbGluZS5cbiAgICogQHJldHVybnMgW3N4LCBzeSwgY3gsIGN5LCBlMSwgZTIsIGFlLCBhcywgYWNdXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IGFycm93ID0gZ2V0QXJyb3coMCwgMCwgMTAwLCAyMDAsIHtcbiAgICAgIGJvdzogMFxuICAgICAgc3RyZXRjaDogLjVcbiAgICAgIHN0cmV0Y2hNaW46IDBcbiAgICAgIHN0cmV0Y2hNYXg6IDQyMFxuICAgICAgcGFkU3RhcnQ6IDBcbiAgICAgIHBhZEVuZDogMFxuICAgICAgZmxpcDogZmFsc2VcbiAgICAgIHN0cmFpZ2h0czogdHJ1ZVxuICAgKiB9KVxuICAgKiBcbiAgICogY29uc3QgW1xuICAgKiAgc3RhcnRYLCBzdGFydFksIFxuICAgKiAgY29udHJvbFgsIGNvbnRyb2xZLCBcbiAgICogIGVuZFgsIGVuZFksIFxuICAgKiAgZW5kQW5nbGUsIFxuICAgKiAgc3RhcnRBbmdsZSxcbiAgICogIGNvbnRyb2xBbmdsZVxuICAgKiAgXSA9IGFycm93XG4gICAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QXJyb3coeDA6IG51bWJlciwgeTA6IG51bWJlciwgeDE6IG51bWJlciwgeTE6IG51bWJlciwgb3B0aW9uczogQXJyb3dPcHRpb25zID0ge30gYXMgQXJyb3dPcHRpb25zKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IHsgYm93ID0gMCwgc3RyZXRjaCA9IDAuNSwgc3RyZXRjaE1pbiA9IDAsIHN0cmV0Y2hNYXggPSA0MjAsIHBhZFN0YXJ0ID0gMCwgcGFkRW5kID0gMCwgZmxpcCA9IGZhbHNlLCBzdHJhaWdodHMgPSB0cnVlIH0gPSBvcHRpb25zO1xuXG4gICAgY29uc3QgYW5nbGUgPSBnZXRBbmdsZSh4MCwgeTAsIHgxLCB5MSk7XG4gICAgY29uc3QgZGlzdCA9IGdldERpc3RhbmNlKHgwLCB5MCwgeDEsIHkxKTtcbiAgICBjb25zdCBhbmdsaW5lc3MgPSBnZXRBbmdsaW5lc3MoeDAsIHkwLCB4MSwgeTEpO1xuXG4gICAgLy8gU3RlcCAwIOKknOKkjyBTaG91bGQgdGhlIGFycm93IGJlIHN0cmFpZ2h0P1xuXG4gICAgaWYgKFxuICAgICAgICBkaXN0IDwgKHBhZFN0YXJ0ICsgcGFkRW5kKSAqIDIgfHwgLy8gVG9vIHNob3J0XG4gICAgICAgIChib3cgPT09IDAgJiYgc3RyZXRjaCA9PT0gMCkgfHwgLy8gTm8gYm93LCBubyBzdHJldGNoXG4gICAgICAgIChzdHJhaWdodHMgJiYgWzAsIDEsIEluZmluaXR5XS5pbmNsdWRlcyhhbmdsaW5lc3MpKSAvLyA0NSBkZWdyZWUgYW5nbGVcbiAgICApIHtcbiAgICAgICAgLy8g4qSc4qSPIEFycm93IGlzIHN0cmFpZ2h0ISBKdXN0IHBhZCBzdGFydCBhbmQgZW5kIHBvaW50cy5cblxuICAgICAgICAvLyBQYWRkaW5nIGRpc3RhbmNlc1xuICAgICAgICBjb25zdCBwcyA9IE1hdGgubWF4KDAsIE1hdGgubWluKGRpc3QgLSBwYWRTdGFydCwgcGFkU3RhcnQpKTtcbiAgICAgICAgY29uc3QgcGUgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihkaXN0IC0gcHMsIHBhZEVuZCkpO1xuXG4gICAgICAgIC8vIE1vdmUgc3RhcnQgcG9pbnQgdG93YXJkIGVuZCBwb2ludFxuICAgICAgICBsZXQgW3B4MCwgcHkwXSA9IHByb2plY3RQb2ludCh4MCwgeTAsIGFuZ2xlLCBwcyk7XG5cbiAgICAgICAgLy8gTW92ZSBlbmQgcG9pbnQgdG93YXJkIHN0YXJ0IHBvaW50XG4gICAgICAgIGxldCBbcHgxLCBweTFdID0gcHJvamVjdFBvaW50KHgxLCB5MSwgYW5nbGUgKyBNYXRoLlBJLCBwZSk7XG5cbiAgICAgICAgLy8gR2V0IG1pZHBvaW50IGJldHdlZW4gbmV3IHBvaW50c1xuICAgICAgICBjb25zdCBbbXgsIG15XSA9IGdldFBvaW50QmV0d2VlbihweDAsIHB5MCwgcHgxLCBweTEsIDAuNSk7XG5cbiAgICAgICAgcmV0dXJuIFtweDAsIHB5MCwgbXgsIG15LCBweDEsIHB5MSwgYW5nbGUsIGFuZ2xlLCBhbmdsZV07XG4gICAgfVxuXG4gICAgLy8g4qSc4qSPIEFycm93IGlzIGFuIGFyYyFcblxuICAgIC8vIElzIHRoZSBhcmMgY2xvY2t3aXNlIG9yIGNvdW50ZXJjbG9ja3dpc2U/XG4gICAgbGV0IHJvdCA9IChnZXRTZWN0b3IoYW5nbGUpICUgMiA9PT0gMCA/IDEgOiAtMSkgKiAoZmxpcCA/IC0xIDogMSk7XG5cbiAgICAvLyBDYWxjdWxhdGUgaG93IG11Y2ggdGhlIGxpbmUgc2hvdWxkIFwiYm93XCIgYXdheSBmcm9tIGNlbnRlclxuICAgIGNvbnN0IGFyYyA9IGJvdyArIG1vZHVsYXRlKGRpc3QsIFtzdHJldGNoTWluLCBzdHJldGNoTWF4XSwgWzEsIDBdLCB0cnVlKSAqIHN0cmV0Y2g7XG5cbiAgICAvLyBTdGVwIDEg4qSc4qSPIEZpbmQgcGFkZGVkIHBvaW50cy5cblxuICAgIC8vIEdldCBtaWRwb2ludC5cbiAgICBjb25zdCBbbXgsIG15XSA9IGdldFBvaW50QmV0d2Vlbih4MCwgeTAsIHgxLCB5MSwgMC41KTtcblxuICAgIC8vIEdldCBjb250cm9sIHBvaW50LlxuICAgIGxldCBbY3gsIGN5XSA9IGdldFBvaW50QmV0d2Vlbih4MCwgeTAsIHgxLCB5MSwgMC41IC0gYXJjKTtcblxuICAgIC8vIFJvdGF0ZSBjb250cm9sIHBvaW50IChjbG9ja3dpc2Ugb3IgY291bnRlcmNsb2Nrd2lzZSkuXG4gICAgW2N4LCBjeV0gPSByb3RhdGVQb2ludChjeCwgY3ksIG14LCBteSwgKE1hdGguUEkgLyAyKSAqIHJvdCk7XG5cbiAgICAvLyBHZXQgcGFkZGVkIHN0YXJ0IHBvaW50LlxuICAgIGNvbnN0IGEwID0gZ2V0QW5nbGUoeDAsIHkwLCBjeCwgY3kpO1xuICAgIGNvbnN0IFtweDAsIHB5MF0gPSBwcm9qZWN0UG9pbnQoeDAsIHkwLCBhMCwgcGFkU3RhcnQpO1xuXG4gICAgLy8gR2V0IHBhZGRlZCBlbmQgcG9pbnQuXG4gICAgY29uc3QgYTEgPSBnZXRBbmdsZSh4MSwgeTEsIGN4LCBjeSk7XG4gICAgY29uc3QgW3B4MSwgcHkxXSA9IHByb2plY3RQb2ludCh4MSwgeTEsIGExLCBwYWRFbmQpO1xuXG4gICAgLy8gU3RlcCAyICDipJzipI8gRmluZCBzdGFydCBhbmQgZW5kIGFuZ2xlcy5cblxuICAgIC8vIFN0YXJ0IGFuZ2xlXG4gICAgY29uc3QgYXMgPSBnZXRBbmdsZShjeCwgY3ksIHgwLCB5MCk7XG5cbiAgICAvLyBFbmQgYW5nbGVcbiAgICBjb25zdCBhZSA9IGdldEFuZ2xlKGN4LCBjeSwgeDEsIHkxKTtcblxuICAgIC8vIFN0ZXAgMyDipJzipI8gRmluZCBjb250cm9sIHBvaW50IGZvciBwYWRkZWQgcG9pbnRzLlxuXG4gICAgLy8gR2V0IG1pZHBvaW50IGJldHdlZW4gcGFkZGVkIHN0YXJ0IC8gZW5kIHBvaW50cy5cbiAgICBjb25zdCBbbXgxLCBteTFdID0gZ2V0UG9pbnRCZXR3ZWVuKHB4MCwgcHkwLCBweDEsIHB5MSwgMC41KTtcblxuICAgIC8vIEdldCBjb250cm9sIHBvaW50IGZvciBwYWRkZWQgc3RhcnQgLyBlbmQgcG9pbnRzLlxuICAgIGxldCBbY3gxLCBjeTFdID0gZ2V0UG9pbnRCZXR3ZWVuKHB4MCwgcHkwLCBweDEsIHB5MSwgMC41IC0gYXJjKTtcblxuICAgIC8vIFJvdGF0ZSBjb250cm9sIHBvaW50IChjbG9ja3dpc2Ugb3IgY291bnRlcmNsb2Nrd2lzZSkuXG4gICAgW2N4MSwgY3kxXSA9IHJvdGF0ZVBvaW50KGN4MSwgY3kxLCBteDEsIG15MSwgKE1hdGguUEkgLyAyKSAqIHJvdCk7XG5cbiAgICAvLyBGaW5hbGx5LCBhdmVyYWdlIHRoZSB0d28gY29udHJvbCBwb2ludHMuXG4gICAgbGV0IFtjeDIsIGN5Ml0gPSBnZXRQb2ludEJldHdlZW4oY3gsIGN5LCBjeDEsIGN5MSwgMC41KTtcblxuICAgIHJldHVybiBbcHgwLCBweTAsIGN4MiwgY3kyLCBweDEsIHB5MSwgYWUsIGFzLCBhbmdsZV07XG59XG4iXX0=
@@ -1,100 +0,0 @@
1
- // Credits to perfect-arrows
2
- // https://github.com/steveruizok/perfect-arrows/blob/master/src/lib/utils.ts
3
- const PI = Math.PI;
4
- /**
5
- * Modulate a value between two ranges.
6
- * @param value
7
- * @param rangeA from [low, high]
8
- * @param rangeB to [low, high]
9
- * @param clamp
10
- */
11
- export function modulate(value, rangeA, rangeB, clamp = false) {
12
- const [fromLow, fromHigh] = rangeA;
13
- const [toLow, toHigh] = rangeB;
14
- const result = toLow + ((value - fromLow) / (fromHigh - fromLow)) * (toHigh - toLow);
15
- if (clamp === true) {
16
- if (toLow < toHigh) {
17
- if (result < toLow) {
18
- return toLow;
19
- }
20
- if (result > toHigh) {
21
- return toHigh;
22
- }
23
- }
24
- else {
25
- if (result > toLow) {
26
- return toLow;
27
- }
28
- if (result < toHigh) {
29
- return toHigh;
30
- }
31
- }
32
- }
33
- return result;
34
- }
35
- /**
36
- * Rotate a point around a center.
37
- * @param x The x-axis coordinate of the point.
38
- * @param y The y-axis coordinate of the point.
39
- * @param cx The x-axis coordinate of the point to rotate round.
40
- * @param cy The y-axis coordinate of the point to rotate round.
41
- * @param angle The distance (in radians) to rotate.
42
- */
43
- export function rotatePoint(x, y, cx, cy, angle) {
44
- const s = Math.sin(angle);
45
- const c = Math.cos(angle);
46
- const px = x - cx;
47
- const py = y - cy;
48
- const nx = px * c - py * s;
49
- const ny = px * s + py * c;
50
- return [nx + cx, ny + cy];
51
- }
52
- /**
53
- * Get the distance between two points.
54
- * @param x0 The x-axis coordinate of the first point.
55
- * @param y0 The y-axis coordinate of the first point.
56
- * @param x1 The x-axis coordinate of the second point.
57
- * @param y1 The y-axis coordinate of the second point.
58
- */
59
- export function getDistance(x0, y0, x1, y1) {
60
- return Math.hypot(y1 - y0, x1 - x0);
61
- }
62
- /**
63
- * Get an angle (radians) between two points.
64
- * @param x0 The x-axis coordinate of the first point.
65
- * @param y0 The y-axis coordinate of the first point.
66
- * @param x1 The x-axis coordinate of the second point.
67
- * @param y1 The y-axis coordinate of the second point.
68
- */
69
- export function getAngle(x0, y0, x1, y1) {
70
- return Math.atan2(y1 - y0, x1 - x0);
71
- }
72
- /**
73
- * Move a point in an angle by a distance.
74
- * @param x0
75
- * @param y0
76
- * @param a angle (radians)
77
- * @param d distance
78
- */
79
- export function projectPoint(x0, y0, a, d) {
80
- return [Math.cos(a) * d + x0, Math.sin(a) * d + y0];
81
- }
82
- /**
83
- * Get the sector of an angle (e.g. quadrant, octant)
84
- * @param a The angle to check.
85
- * @param s The number of sectors to check.
86
- */
87
- export function getSector(a, s = 8) {
88
- return Math.floor(s * (0.5 + ((a / (PI * 2)) % s)));
89
- }
90
- /**
91
- * Get a normal value representing how close two points are from being at a 45 degree angle.
92
- * @param x0 The x-axis coordinate of the first point.
93
- * @param y0 The y-axis coordinate of the first point.
94
- * @param x1 The x-axis coordinate of the second point.
95
- * @param y1 The y-axis coordinate of the second point.
96
- */
97
- export function getAngliness(x0, y0, x1, y1) {
98
- return Math.abs((x1 - x0) / 2 / ((y1 - y0) / 2));
99
- }
100
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmFwaC12aXovc3JjL3BlcmZlY3QtYXJyb3dzL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRCQUE0QjtBQUM1Qiw2RUFBNkU7QUFFN0UsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUVuQjs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFDLEtBQWEsRUFBRSxNQUFnQixFQUFFLE1BQWdCLEVBQUUsS0FBSyxHQUFHLEtBQUs7SUFDckYsTUFBTSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDL0IsTUFBTSxNQUFNLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQztJQUNyRixJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNqQixJQUFJLEtBQUssR0FBRyxNQUFNLEVBQUUsQ0FBQztZQUNqQixJQUFJLE1BQU0sR0FBRyxLQUFLLEVBQUUsQ0FBQztnQkFDakIsT0FBTyxLQUFLLENBQUM7WUFDakIsQ0FBQztZQUNELElBQUksTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDO2dCQUNsQixPQUFPLE1BQU0sQ0FBQztZQUNsQixDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLE1BQU0sR0FBRyxLQUFLLEVBQUUsQ0FBQztnQkFDakIsT0FBTyxLQUFLLENBQUM7WUFDakIsQ0FBQztZQUNELElBQUksTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDO2dCQUNsQixPQUFPLE1BQU0sQ0FBQztZQUNsQixDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxFQUFVLEVBQUUsRUFBVSxFQUFFLEtBQWE7SUFDbkYsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTFCLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDbEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUVsQixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDM0IsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRTNCLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUM5QixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxFQUFVLEVBQUUsRUFBVSxFQUFFLEVBQVUsRUFBRSxFQUFVO0lBQ3RFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBQyxFQUFVLEVBQUUsRUFBVSxFQUFFLEVBQVUsRUFBRSxFQUFVO0lBQ25FLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxFQUFVLEVBQUUsRUFBVSxFQUFFLENBQVMsRUFBRSxDQUFTO0lBQ3JFLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDeEQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLENBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUN0QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsRUFBVSxFQUFFLEVBQVUsRUFBRSxFQUFVLEVBQUUsRUFBVTtJQUN2RSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ3JlZGl0cyB0byBwZXJmZWN0LWFycm93c1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3N0ZXZlcnVpem9rL3BlcmZlY3QtYXJyb3dzL2Jsb2IvbWFzdGVyL3NyYy9saWIvdXRpbHMudHNcblxuY29uc3QgUEkgPSBNYXRoLlBJO1xuXG4vKipcbiAqIE1vZHVsYXRlIGEgdmFsdWUgYmV0d2VlbiB0d28gcmFuZ2VzLlxuICogQHBhcmFtIHZhbHVlXG4gKiBAcGFyYW0gcmFuZ2VBIGZyb20gW2xvdywgaGlnaF1cbiAqIEBwYXJhbSByYW5nZUIgdG8gW2xvdywgaGlnaF1cbiAqIEBwYXJhbSBjbGFtcFxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9kdWxhdGUodmFsdWU6IG51bWJlciwgcmFuZ2VBOiBudW1iZXJbXSwgcmFuZ2VCOiBudW1iZXJbXSwgY2xhbXAgPSBmYWxzZSkge1xuICAgIGNvbnN0IFtmcm9tTG93LCBmcm9tSGlnaF0gPSByYW5nZUE7XG4gICAgY29uc3QgW3RvTG93LCB0b0hpZ2hdID0gcmFuZ2VCO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRvTG93ICsgKCh2YWx1ZSAtIGZyb21Mb3cpIC8gKGZyb21IaWdoIC0gZnJvbUxvdykpICogKHRvSGlnaCAtIHRvTG93KTtcbiAgICBpZiAoY2xhbXAgPT09IHRydWUpIHtcbiAgICAgICAgaWYgKHRvTG93IDwgdG9IaWdoKSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0IDwgdG9Mb3cpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9Mb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzdWx0ID4gdG9IaWdoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvSGlnaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPiB0b0xvdykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0b0xvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXN1bHQgPCB0b0hpZ2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9IaWdoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogUm90YXRlIGEgcG9pbnQgYXJvdW5kIGEgY2VudGVyLlxuICogQHBhcmFtIHggVGhlIHgtYXhpcyBjb29yZGluYXRlIG9mIHRoZSBwb2ludC5cbiAqIEBwYXJhbSB5IFRoZSB5LWF4aXMgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQuXG4gKiBAcGFyYW0gY3ggVGhlIHgtYXhpcyBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byByb3RhdGUgcm91bmQuXG4gKiBAcGFyYW0gY3kgVGhlIHktYXhpcyBjb29yZGluYXRlIG9mIHRoZSBwb2ludCB0byByb3RhdGUgcm91bmQuXG4gKiBAcGFyYW0gYW5nbGUgVGhlIGRpc3RhbmNlIChpbiByYWRpYW5zKSB0byByb3RhdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVQb2ludCh4OiBudW1iZXIsIHk6IG51bWJlciwgY3g6IG51bWJlciwgY3k6IG51bWJlciwgYW5nbGU6IG51bWJlcikge1xuICAgIGNvbnN0IHMgPSBNYXRoLnNpbihhbmdsZSk7XG4gICAgY29uc3QgYyA9IE1hdGguY29zKGFuZ2xlKTtcblxuICAgIGNvbnN0IHB4ID0geCAtIGN4O1xuICAgIGNvbnN0IHB5ID0geSAtIGN5O1xuXG4gICAgY29uc3QgbnggPSBweCAqIGMgLSBweSAqIHM7XG4gICAgY29uc3QgbnkgPSBweCAqIHMgKyBweSAqIGM7XG5cbiAgICByZXR1cm4gW254ICsgY3gsIG55ICsgY3ldO1xufVxuXG4vKipcbiAqIEdldCB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0d28gcG9pbnRzLlxuICogQHBhcmFtIHgwIFRoZSB4LWF4aXMgY29vcmRpbmF0ZSBvZiB0aGUgZmlyc3QgcG9pbnQuXG4gKiBAcGFyYW0geTAgVGhlIHktYXhpcyBjb29yZGluYXRlIG9mIHRoZSBmaXJzdCBwb2ludC5cbiAqIEBwYXJhbSB4MSBUaGUgeC1heGlzIGNvb3JkaW5hdGUgb2YgdGhlIHNlY29uZCBwb2ludC5cbiAqIEBwYXJhbSB5MSBUaGUgeS1heGlzIGNvb3JkaW5hdGUgb2YgdGhlIHNlY29uZCBwb2ludC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERpc3RhbmNlKHgwOiBudW1iZXIsIHkwOiBudW1iZXIsIHgxOiBudW1iZXIsIHkxOiBudW1iZXIpIHtcbiAgICByZXR1cm4gTWF0aC5oeXBvdCh5MSAtIHkwLCB4MSAtIHgwKTtcbn1cblxuLyoqXG4gKiBHZXQgYW4gYW5nbGUgKHJhZGlhbnMpIGJldHdlZW4gdHdvIHBvaW50cy5cbiAqIEBwYXJhbSB4MCBUaGUgeC1heGlzIGNvb3JkaW5hdGUgb2YgdGhlIGZpcnN0IHBvaW50LlxuICogQHBhcmFtIHkwIFRoZSB5LWF4aXMgY29vcmRpbmF0ZSBvZiB0aGUgZmlyc3QgcG9pbnQuXG4gKiBAcGFyYW0geDEgVGhlIHgtYXhpcyBjb29yZGluYXRlIG9mIHRoZSBzZWNvbmQgcG9pbnQuXG4gKiBAcGFyYW0geTEgVGhlIHktYXhpcyBjb29yZGluYXRlIG9mIHRoZSBzZWNvbmQgcG9pbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbmdsZSh4MDogbnVtYmVyLCB5MDogbnVtYmVyLCB4MTogbnVtYmVyLCB5MTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIE1hdGguYXRhbjIoeTEgLSB5MCwgeDEgLSB4MCk7XG59XG5cbi8qKlxuICogTW92ZSBhIHBvaW50IGluIGFuIGFuZ2xlIGJ5IGEgZGlzdGFuY2UuXG4gKiBAcGFyYW0geDBcbiAqIEBwYXJhbSB5MFxuICogQHBhcmFtIGEgYW5nbGUgKHJhZGlhbnMpXG4gKiBAcGFyYW0gZCBkaXN0YW5jZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvamVjdFBvaW50KHgwOiBudW1iZXIsIHkwOiBudW1iZXIsIGE6IG51bWJlciwgZDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIFtNYXRoLmNvcyhhKSAqIGQgKyB4MCwgTWF0aC5zaW4oYSkgKiBkICsgeTBdO1xufVxuXG4vKipcbiAqIEdldCB0aGUgc2VjdG9yIG9mIGFuIGFuZ2xlIChlLmcuIHF1YWRyYW50LCBvY3RhbnQpXG4gKiBAcGFyYW0gYSBUaGUgYW5nbGUgdG8gY2hlY2suXG4gKiBAcGFyYW0gcyBUaGUgbnVtYmVyIG9mIHNlY3RvcnMgdG8gY2hlY2suXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWN0b3IoYTogbnVtYmVyLCBzID0gOCkge1xuICAgIHJldHVybiBNYXRoLmZsb29yKHMgKiAoMC41ICsgKChhIC8gKFBJICogMikpICUgcykpKTtcbn1cblxuLyoqXG4gKiBHZXQgYSBub3JtYWwgdmFsdWUgcmVwcmVzZW50aW5nIGhvdyBjbG9zZSB0d28gcG9pbnRzIGFyZSBmcm9tIGJlaW5nIGF0IGEgNDUgZGVncmVlIGFuZ2xlLlxuICogQHBhcmFtIHgwIFRoZSB4LWF4aXMgY29vcmRpbmF0ZSBvZiB0aGUgZmlyc3QgcG9pbnQuXG4gKiBAcGFyYW0geTAgVGhlIHktYXhpcyBjb29yZGluYXRlIG9mIHRoZSBmaXJzdCBwb2ludC5cbiAqIEBwYXJhbSB4MSBUaGUgeC1heGlzIGNvb3JkaW5hdGUgb2YgdGhlIHNlY29uZCBwb2ludC5cbiAqIEBwYXJhbSB5MSBUaGUgeS1heGlzIGNvb3JkaW5hdGUgb2YgdGhlIHNlY29uZCBwb2ludC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFuZ2xpbmVzcyh4MDogbnVtYmVyLCB5MDogbnVtYmVyLCB4MTogbnVtYmVyLCB5MTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKCh4MSAtIHgwKSAvIDIgLyAoKHkxIC0geTApIC8gMikpO1xufVxuIl19
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './public-api';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhaXQtZ3JhcGgtdml6LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvZ3JhcGgtdml6L3NyYy9wbGFpdC1ncmFwaC12aXoudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -1,10 +0,0 @@
1
- /*
2
- * Public API Surface of utils
3
- */
4
- export * from './force-atlas/constants';
5
- export * from './force-atlas/types';
6
- export * from './force-atlas/with-force-atlas';
7
- export * from './force-atlas/with-node-icon';
8
- export * from './interfaces/index';
9
- export * from './force-atlas/core/node-icon-base.component';
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL2dyYXBoLXZpei9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLDZDQUE2QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiB1dGlsc1xuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vZm9yY2UtYXRsYXMvY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vZm9yY2UtYXRsYXMvdHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9mb3JjZS1hdGxhcy93aXRoLWZvcmNlLWF0bGFzJztcbmV4cG9ydCAqIGZyb20gJy4vZm9yY2UtYXRsYXMvd2l0aC1ub2RlLWljb24nO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzL2luZGV4JztcbmV4cG9ydCAqIGZyb20gJy4vZm9yY2UtYXRsYXMvY29yZS9ub2RlLWljb24tYmFzZS5jb21wb25lbnQnO1xuIl19