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