@pie-lib/plot 2.9.0-beta.0 → 2.9.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.
- package/CHANGELOG.json +0 -335
- package/CHANGELOG.md +156 -9
- package/package.json +7 -4
- package/src/root.jsx +0 -2
- package/lib/__tests__/draggable.test.js +0 -33
- package/lib/__tests__/grid-draggable.test.js +0 -438
- package/lib/__tests__/root.test.js +0 -151
- package/lib/__tests__/trig.test.js +0 -183
- package/lib/__tests__/utils.test.js +0 -312
- package/lib/draggable.js +0 -65
- package/lib/graph-props.js +0 -53
- package/lib/grid-draggable.js +0 -381
- package/lib/index.js +0 -59
- package/lib/label.js +0 -176
- package/lib/root.js +0 -424
- package/lib/trig.js +0 -196
- package/lib/types.js +0 -68
- package/lib/utils.js +0 -232
package/lib/trig.js
DELETED
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
exports.toRadians = exports.toDegrees = exports.hypotenuse = exports.getOpposingSide = exports.edges = exports.diffEdge = exports.angle = exports.acuteYAngle = exports.acuteXAngle = void 0;
|
|
9
|
-
|
|
10
|
-
var _utils = require("./utils");
|
|
11
|
-
|
|
12
|
-
var _pointGeometry = _interopRequireDefault(require("@mapbox/point-geometry"));
|
|
13
|
-
|
|
14
|
-
var _debug = _interopRequireDefault(require("debug"));
|
|
15
|
-
|
|
16
|
-
var log = (0, _debug["default"])('pie-lib:plot:trig');
|
|
17
|
-
|
|
18
|
-
var toDegrees = function toDegrees(radians) {
|
|
19
|
-
return radians * (180 / Math.PI);
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
exports.toDegrees = toDegrees;
|
|
23
|
-
|
|
24
|
-
var toRadians = function toRadians(degrees) {
|
|
25
|
-
return degrees * (Math.PI / 180);
|
|
26
|
-
};
|
|
27
|
-
/**
|
|
28
|
-
* return angle in radians between 2 points using counting degrees counter clockwise
|
|
29
|
-
*
|
|
30
|
-
* 0,0 + 1,1 = 45 in radians
|
|
31
|
-
* 1,1 + 0,0 = 45?
|
|
32
|
-
* @param {Point} a
|
|
33
|
-
* @param {Point} b
|
|
34
|
-
*/
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
exports.toRadians = toRadians;
|
|
38
|
-
|
|
39
|
-
var angle = function angle(a, b) {
|
|
40
|
-
var vd = b.y - a.y;
|
|
41
|
-
var hd = b.x - a.x;
|
|
42
|
-
log(a, b, 'vd: ', vd, 'hd: ', hd);
|
|
43
|
-
var radians = Math.atan2(vd, hd);
|
|
44
|
-
return radians < 0 ? radians + Math.PI * 2 : radians;
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
exports.angle = angle;
|
|
48
|
-
var NINETY = Math.PI / 2;
|
|
49
|
-
var ONE_EIGHTY = Math.PI;
|
|
50
|
-
var TWO_SEVENTY = ONE_EIGHTY + NINETY;
|
|
51
|
-
|
|
52
|
-
var acuteXAngle = function acuteXAngle(a) {
|
|
53
|
-
log(toDegrees(a));
|
|
54
|
-
|
|
55
|
-
if (a < NINETY) {
|
|
56
|
-
return a;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
if (a < ONE_EIGHTY) {
|
|
60
|
-
return Math.abs(ONE_EIGHTY - a);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
if (a < TWO_SEVENTY) {
|
|
64
|
-
return Math.abs(ONE_EIGHTY - a);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
return Math.abs(Math.PI * 2 - a);
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
exports.acuteXAngle = acuteXAngle;
|
|
71
|
-
|
|
72
|
-
var acuteYAngle = function acuteYAngle(a) {
|
|
73
|
-
return NINETY - acuteXAngle(a);
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
exports.acuteYAngle = acuteYAngle;
|
|
77
|
-
|
|
78
|
-
var hypotenuse = function hypotenuse(a, alpha) {
|
|
79
|
-
var out = Math.abs(a / Math.sin(alpha));
|
|
80
|
-
return out;
|
|
81
|
-
};
|
|
82
|
-
/**
|
|
83
|
-
* return 2 edge points for a,b within domain + range.
|
|
84
|
-
* - one edge is from following a -> b to the bounds
|
|
85
|
-
* - one edge is from following b -> a to the bounds
|
|
86
|
-
* @param {{min: number, max: number}} domain
|
|
87
|
-
* @param {{min: number, max: number}} range
|
|
88
|
-
* @param {{x: number, y: number}} a
|
|
89
|
-
* @param {{x: number, y: number}} b
|
|
90
|
-
* @returns [{x: number, y: number}, {x: number, y: number}]
|
|
91
|
-
*/
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
exports.hypotenuse = hypotenuse;
|
|
95
|
-
|
|
96
|
-
var edges = function edges(domain, range) {
|
|
97
|
-
return function (a, b) {
|
|
98
|
-
// const xDest =
|
|
99
|
-
var destX = a.x < b.x ? domain.max : domain.min;
|
|
100
|
-
var destY = a.y < b.y ? range.max : range.min;
|
|
101
|
-
var aToB = diffEdge((0, _utils.xy)(destX, destY), a, b);
|
|
102
|
-
var dX = b.x < a.x ? domain.max : domain.min;
|
|
103
|
-
var dY = b.y < a.y ? range.max : range.min;
|
|
104
|
-
var bToA = diffEdge((0, _utils.xy)(dX, dY), b, a);
|
|
105
|
-
return [aToB, bToA];
|
|
106
|
-
};
|
|
107
|
-
};
|
|
108
|
-
/** get length of side A of a triangle from H and angle Alpha */
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
exports.edges = edges;
|
|
112
|
-
|
|
113
|
-
var getOpposingSide = function getOpposingSide(hyp, angle) {
|
|
114
|
-
log('[getOpposingSide] hyp: ', hyp, 'angle:', angle);
|
|
115
|
-
return Math.abs(hyp * Math.sin(angle));
|
|
116
|
-
};
|
|
117
|
-
|
|
118
|
-
exports.getOpposingSide = getOpposingSide;
|
|
119
|
-
|
|
120
|
-
var getShortestSide = function getShortestSide(xh, yh) {
|
|
121
|
-
if (Number.isFinite(xh) && Number.isFinite(yh)) {
|
|
122
|
-
if (xh === 0 && yh > 0) {
|
|
123
|
-
return 'y';
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
if (yh === 0 && xh > 0) {
|
|
127
|
-
return 'x';
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
return xh < yh ? 'x' : 'y';
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
if (isNaN(xh) && !isNaN(yh)) {
|
|
134
|
-
return 'y';
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
if (!isNaN(xh) && isNaN(yh)) {
|
|
138
|
-
return 'x';
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
if (xh === Infinity) {
|
|
142
|
-
return 'y';
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
if (yh === Infinity) {
|
|
146
|
-
return 'x';
|
|
147
|
-
} // eslint-disable-next-line no-console
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
console.warn('hypotenuse - which is shorter? x:', xh, 'y:', yh);
|
|
151
|
-
};
|
|
152
|
-
/**
|
|
153
|
-
* return the difference between bounds and a as a Point
|
|
154
|
-
* @param {*} bounds
|
|
155
|
-
*/
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
var diffEdge = function diffEdge(bounds, a, b) {
|
|
159
|
-
var l = log.enabled ? log.bind(log, "diffEdge: [".concat(a.x, ",").concat(a.y, " -> ").concat(b.x, ",").concat(b.y, "]")) : function () {};
|
|
160
|
-
var xRadians = angle(a, b);
|
|
161
|
-
l('x angle', toDegrees(xRadians));
|
|
162
|
-
var yRadians = Math.abs(xRadians - toRadians(90));
|
|
163
|
-
l('y angle', toDegrees(yRadians));
|
|
164
|
-
var xSide = Math.abs(a.x - bounds.x);
|
|
165
|
-
/**
|
|
166
|
-
* Draw 2 triangles:
|
|
167
|
-
* 1 with a horizontal line from a to the graph x edge
|
|
168
|
-
* 1 with a vertical line from a to the graph y edge
|
|
169
|
-
* Calculate the hypotenuse for both, whichever is shorter
|
|
170
|
-
* indicates that we should use that triangle to get the edge point.
|
|
171
|
-
*/
|
|
172
|
-
|
|
173
|
-
var xH = hypotenuse(xSide, yRadians);
|
|
174
|
-
var ySide = Math.abs(a.y - bounds.y);
|
|
175
|
-
var yH = hypotenuse(ySide, xRadians);
|
|
176
|
-
l('x: side', xSide, 'h:', xH);
|
|
177
|
-
l('y: side', ySide, 'h:', yH);
|
|
178
|
-
var side = getShortestSide(xH, yH);
|
|
179
|
-
|
|
180
|
-
if (side !== 'x' && side !== 'y') {
|
|
181
|
-
throw new Error('Cant decide which hypotenuse to use');
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
var point = side === 'x' ? new _pointGeometry["default"](xSide, getOpposingSide(xH, xRadians)) : new _pointGeometry["default"](getOpposingSide(yH, yRadians), ySide);
|
|
185
|
-
l('point:', point);
|
|
186
|
-
var multiplier = new _pointGeometry["default"](b.x < a.x ? -1 : 1, b.y < a.y ? -1 : 1);
|
|
187
|
-
l('multiplier:', multiplier);
|
|
188
|
-
var out = point.multByPoint(multiplier);
|
|
189
|
-
l('out:', out);
|
|
190
|
-
var normalized = out.add(new _pointGeometry["default"](a.x, a.y));
|
|
191
|
-
l('normalized:', normalized);
|
|
192
|
-
return normalized;
|
|
193
|
-
};
|
|
194
|
-
|
|
195
|
-
exports.diffEdge = diffEdge;
|
|
196
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy90cmlnLmpzIl0sIm5hbWVzIjpbImxvZyIsInRvRGVncmVlcyIsInJhZGlhbnMiLCJNYXRoIiwiUEkiLCJ0b1JhZGlhbnMiLCJkZWdyZWVzIiwiYW5nbGUiLCJhIiwiYiIsInZkIiwieSIsImhkIiwieCIsImF0YW4yIiwiTklORVRZIiwiT05FX0VJR0hUWSIsIlRXT19TRVZFTlRZIiwiYWN1dGVYQW5nbGUiLCJhYnMiLCJhY3V0ZVlBbmdsZSIsImh5cG90ZW51c2UiLCJhbHBoYSIsIm91dCIsInNpbiIsImVkZ2VzIiwiZG9tYWluIiwicmFuZ2UiLCJkZXN0WCIsIm1heCIsIm1pbiIsImRlc3RZIiwiYVRvQiIsImRpZmZFZGdlIiwiZFgiLCJkWSIsImJUb0EiLCJnZXRPcHBvc2luZ1NpZGUiLCJoeXAiLCJnZXRTaG9ydGVzdFNpZGUiLCJ4aCIsInloIiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJpc05hTiIsIkluZmluaXR5IiwiY29uc29sZSIsIndhcm4iLCJib3VuZHMiLCJsIiwiZW5hYmxlZCIsImJpbmQiLCJ4UmFkaWFucyIsInlSYWRpYW5zIiwieFNpZGUiLCJ4SCIsInlTaWRlIiwieUgiLCJzaWRlIiwiRXJyb3IiLCJwb2ludCIsIlBvaW50IiwibXVsdGlwbGllciIsIm11bHRCeVBvaW50Iiwibm9ybWFsaXplZCIsImFkZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0EsSUFBTUEsR0FBRyxHQUFHLHVCQUFNLG1CQUFOLENBQVo7O0FBRU8sSUFBTUMsU0FBUyxHQUFHLFNBQVpBLFNBQVksQ0FBQ0MsT0FBRDtBQUFBLFNBQWFBLE9BQU8sSUFBSSxNQUFNQyxJQUFJLENBQUNDLEVBQWYsQ0FBcEI7QUFBQSxDQUFsQjs7OztBQUNBLElBQU1DLFNBQVMsR0FBRyxTQUFaQSxTQUFZLENBQUNDLE9BQUQ7QUFBQSxTQUFhQSxPQUFPLElBQUlILElBQUksQ0FBQ0MsRUFBTCxHQUFVLEdBQWQsQ0FBcEI7QUFBQSxDQUFs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QUFDb0IsRUFBRCxFQUFLSixRQUFMLENBQXpCLEVBQXlDRyxLQUF6QyxDQURuRTtBQUdBUCxFQUFBQSxDQUFDLENBQUMsUUFBRCxFQUFXVyxLQUFYLENBQUQ7QUFDQSxNQUFNRSxVQUFVLEdBQUcsSUFBSUQseUJBQUosQ0FBVXBELENBQUMsQ0FBQ0ksQ0FBRixHQUFNTCxDQUFDLENBQUNLLENBQVIsR0FBWSxDQUFDLENBQWIsR0FBaUIsQ0FBM0IsRUFBOEJKLENBQUMsQ0FBQ0UsQ0FBRixHQUFNSCxDQUFDLENBQUNHLENBQVIsR0FBWSxDQUFDLENBQWIsR0FBaUIsQ0FBL0MsQ0FBbkI7QUFDQXNDLEVBQUFBLENBQUMsQ0FBQyxhQUFELEVBQWdCYSxVQUFoQixDQUFEO0FBQ0EsTUFBTXZDLEdBQUcsR0FBR3FDLEtBQUssQ0FBQ0csV0FBTixDQUFrQkQsVUFBbEIsQ0FBWjtBQUNBYixFQUFBQSxDQUFDLENBQUMsTUFBRCxFQUFTMUIsR0FBVCxDQUFEO0FBQ0EsTUFBTXlDLFVBQVUsR0FBR3pDLEdBQUcsQ0FBQzBDLEdBQUosQ0FBUSxJQUFJSix5QkFBSixDQUFVckQsQ0FBQyxDQUFDSyxDQUFaLEVBQWVMLENBQUMsQ0FBQ0csQ0FBakIsQ0FBUixDQUFuQjtBQUNBc0MsRUFBQUEsQ0FBQyxDQUFDLGFBQUQsRUFBZ0JlLFVBQWhCLENBQUQ7QUFDQSxTQUFPQSxVQUFQO0FBQ0QsQ0F0Q00iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB4eSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmNvbnN0IGxvZyA9IGRlYnVnKCdwaWUtbGliOnBsb3Q6dHJpZycpO1xuXG5leHBvcnQgY29uc3QgdG9EZWdyZWVzID0gKHJhZGlhbnMpID0+IHJhZGlhbnMgKiAoMTgwIC8gTWF0aC5QSSk7XG5leHBvcnQgY29uc3QgdG9SYWRpYW5zID0gKGRlZ3JlZXMpID0+IGRlZ3JlZXMgKiAoTWF0aC5QSSAvIDE4MCk7XG4vKipcbiAqIHJldHVybiBhbmdsZSBpbiByYWRpYW5zIGJldHdlZW4gMiBwb2ludHMgdXNpbmcgY291bnRpbmcgZGVncmVlcyBjb3VudGVyIGNsb2Nrd2lzZVxuICpcbiAqIDAsMCArIDEsMSA9IDQ1IGluIHJhZGlhbnNcbiAqIDEsMSArIDAsMCA9IDQ1P1xuICogQHBhcmFtIHtQb2ludH0gYVxuICogQHBhcmFtIHtQb2ludH0gYlxuICovXG5leHBvcnQgY29uc3QgYW5nbGUgPSAoYSwgYikgPT4ge1xuICBjb25zdCB2ZCA9IGIueSAtIGEueTtcbiAgY29uc3QgaGQgPSBiLnggLSBhLng7XG4gIGxvZyhhLCBiLCAndmQ6ICcsIHZkLCAnaGQ6ICcsIGhkKTtcbiAgY29uc3QgcmFkaWFucyA9IE1hdGguYXRhbjIodmQsIGhkKTtcbiAgcmV0dXJuIHJhZGlhbnMgPCAwID8gcmFkaWFucyArIE1hdGguUEkgKiAyIDogcmFkaWFucztcbn07XG5cbmNvbnN0IE5JTkVUWSA9IE1hdGguUEkgLyAyO1xuY29uc3QgT05FX0VJR0hUWSA9IE1hdGguUEk7XG5jb25zdCBUV09fU0VWRU5UWSA9IE9ORV9FSUdIVFkgKyBOSU5FVFk7XG5cbmV4cG9ydCBjb25zdCBhY3V0ZVhBbmdsZSA9IChhKSA9PiB7XG4gIGxvZyh0b0RlZ3JlZXMoYSkpO1xuXG4gIGlmIChhIDwgTklORVRZKSB7XG4gICAgcmV0dXJuIGE7XG4gIH1cblxuICBpZiAoYSA8IE9ORV9FSUdIVFkpIHtcbiAgICByZXR1cm4gTWF0aC5hYnMoT05FX0VJR0hUWSAtIGEpO1xuICB9XG5cbiAgaWYgKGEgPCBUV09fU0VWRU5UWSkge1xuICAgIHJldHVybiBNYXRoLmFicyhPTkVfRUlHSFRZIC0gYSk7XG4gIH1cblxuICByZXR1cm4gTWF0aC5hYnMoTWF0aC5QSSAqIDIgLSBhKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhY3V0ZVlBbmdsZSA9IChhKSA9PiBOSU5FVFkgLSBhY3V0ZVhBbmdsZShhKTtcblxuZXhwb3J0IGNvbnN0IGh5cG90ZW51c2UgPSAoYSwgYWxwaGEpID0+IHtcbiAgY29uc3Qgb3V0ID0gTWF0aC5hYnMoYSAvIE1hdGguc2luKGFscGhhKSk7XG5cbiAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogcmV0dXJuIDIgZWRnZSBwb2ludHMgZm9yIGEsYiB3aXRoaW4gZG9tYWluICsgcmFuZ2UuXG4gKiAtIG9uZSBlZGdlIGlzIGZyb20gZm9sbG93aW5nIGEgLT4gYiB0byB0aGUgYm91bmRzXG4gKiAtIG9uZSBlZGdlIGlzIGZyb20gZm9sbG93aW5nIGIgLT4gYSB0byB0aGUgYm91bmRzXG4gKiBAcGFyYW0ge3ttaW46IG51bWJlciwgbWF4OiBudW1iZXJ9fSBkb21haW5cbiAqIEBwYXJhbSB7e21pbjogbnVtYmVyLCBtYXg6IG51bWJlcn19IHJhbmdlXG4gKiBAcGFyYW0ge3t4OiBudW1iZXIsIHk6IG51bWJlcn19IGFcbiAqIEBwYXJhbSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX0gYlxuICogQHJldHVybnMgW3t4OiBudW1iZXIsIHk6IG51bWJlcn0sIHt4OiBudW1iZXIsIHk6IG51bWJlcn1dXG4gKi9cbmV4cG9ydCBjb25zdCBlZGdlcyA9IChkb21haW4sIHJhbmdlKSA9PiAoYSwgYikgPT4ge1xuICAvLyBjb25zdCB4RGVzdCA9XG4gIGNvbnN0IGRlc3RYID0gYS54IDwgYi54ID8gZG9tYWluLm1heCA6IGRvbWFpbi5taW47XG4gIGNvbnN0IGRlc3RZID0gYS55IDwgYi55ID8gcmFuZ2UubWF4IDogcmFuZ2UubWluO1xuICBjb25zdCBhVG9CID0gZGlmZkVkZ2UoeHkoZGVzdFgsIGRlc3RZKSwgYSwgYik7XG5cbiAgY29uc3QgZFggPSBiLnggPCBhLnggPyBkb21haW4ubWF4IDogZG9tYWluLm1pbjtcbiAgY29uc3QgZFkgPSBiLnkgPCBhLnkgPyByYW5nZS5tYXggOiByYW5nZS5taW47XG4gIGNvbnN0IGJUb0EgPSBkaWZmRWRnZSh4eShkWCwgZFkpLCBiLCBhKTtcbiAgcmV0dXJuIFthVG9CLCBiVG9BXTtcbn07XG5cbi8qKiBnZXQgbGVuZ3RoIG9mIHNpZGUgQSBvZiBhIHRyaWFuZ2xlIGZyb20gSCBhbmQgYW5nbGUgQWxwaGEgKi9cbmV4cG9ydCBjb25zdCBnZXRPcHBvc2luZ1NpZGUgPSAoaHlwLCBhbmdsZSkgPT4ge1xuICBsb2coJ1tnZXRPcHBvc2luZ1NpZGVdIGh5cDogJywgaHlwLCAnYW5nbGU6JywgYW5nbGUpO1xuICByZXR1cm4gTWF0aC5hYnMoaHlwICogTWF0aC5zaW4oYW5nbGUpKTtcbn07XG5cbmNvbnN0IGdldFNob3J0ZXN0U2lkZSA9ICh4aCwgeWgpID0+IHtcbiAgaWYgKE51bWJlci5pc0Zpbml0ZSh4aCkgJiYgTnVtYmVyLmlzRmluaXRlKHloKSkge1xuICAgIGlmICh4aCA9PT0gMCAmJiB5aCA+IDApIHtcbiAgICAgIHJldHVybiAneSc7XG4gICAgfVxuICAgIGlmICh5aCA9PT0gMCAmJiB4aCA+IDApIHtcbiAgICAgIHJldHVybiAneCc7XG4gICAgfVxuICAgIHJldHVybiB4aCA8IHloID8gJ3gnIDogJ3knO1xuICB9XG4gIGlmIChpc05hTih4aCkgJiYgIWlzTmFOKHloKSkge1xuICAgIHJldHVybiAneSc7XG4gIH1cbiAgaWYgKCFpc05hTih4aCkgJiYgaXNOYU4oeWgpKSB7XG4gICAgcmV0dXJuICd4JztcbiAgfVxuICBpZiAoeGggPT09IEluZmluaXR5KSB7XG4gICAgcmV0dXJuICd5JztcbiAgfVxuICBpZiAoeWggPT09IEluZmluaXR5KSB7XG4gICAgcmV0dXJuICd4JztcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gIGNvbnNvbGUud2FybignaHlwb3RlbnVzZSAtIHdoaWNoIGlzIHNob3J0ZXI/IHg6JywgeGgsICd5OicsIHloKTtcbn07XG4vKipcbiAqIHJldHVybiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGJvdW5kcyBhbmQgYSBhcyBhIFBvaW50XG4gKiBAcGFyYW0geyp9IGJvdW5kc1xuICovXG5leHBvcnQgY29uc3QgZGlmZkVkZ2UgPSAoYm91bmRzLCBhLCBiKSA9PiB7XG4gIGxldCBsID0gbG9nLmVuYWJsZWQgPyBsb2cuYmluZChsb2csIGBkaWZmRWRnZTogWyR7YS54fSwke2EueX0gLT4gJHtiLnh9LCR7Yi55fV1gKSA6ICgpID0+IHt9O1xuICBjb25zdCB4UmFkaWFucyA9IGFuZ2xlKGEsIGIpO1xuICBsKCd4IGFuZ2xlJywgdG9EZWdyZWVzKHhSYWRpYW5zKSk7XG4gIGNvbnN0IHlSYWRpYW5zID0gTWF0aC5hYnMoeFJhZGlhbnMgLSB0b1JhZGlhbnMoOTApKTtcbiAgbCgneSBhbmdsZScsIHRvRGVncmVlcyh5UmFkaWFucykpO1xuICBjb25zdCB4U2lkZSA9IE1hdGguYWJzKGEueCAtIGJvdW5kcy54KTtcblxuICAvKipcbiAgICogRHJhdyAyIHRyaWFuZ2xlczpcbiAgICogMSB3aXRoIGEgaG9yaXpvbnRhbCBsaW5lIGZyb20gYSB0byB0aGUgZ3JhcGggeCBlZGdlXG4gICAqIDEgd2l0aCBhIHZlcnRpY2FsIGxpbmUgZnJvbSBhIHRvIHRoZSBncmFwaCB5IGVkZ2VcbiAgICogQ2FsY3VsYXRlIHRoZSBoeXBvdGVudXNlIGZvciBib3RoLCB3aGljaGV2ZXIgaXMgc2hvcnRlclxuICAgKiBpbmRpY2F0ZXMgdGhhdCB3ZSBzaG91bGQgdXNlIHRoYXQgdHJpYW5nbGUgdG8gZ2V0IHRoZSBlZGdlIHBvaW50LlxuICAgKi9cbiAgY29uc3QgeEggPSBoeXBvdGVudXNlKHhTaWRlLCB5UmFkaWFucyk7XG5cbiAgY29uc3QgeVNpZGUgPSBNYXRoLmFicyhhLnkgLSBib3VuZHMueSk7XG4gIGNvbnN0IHlIID0gaHlwb3RlbnVzZSh5U2lkZSwgeFJhZGlhbnMpO1xuXG4gIGwoJ3g6IHNpZGUnLCB4U2lkZSwgJ2g6JywgeEgpO1xuICBsKCd5OiBzaWRlJywgeVNpZGUsICdoOicsIHlIKTtcbiAgY29uc3Qgc2lkZSA9IGdldFNob3J0ZXN0U2lkZSh4SCwgeUgpO1xuXG4gIGlmIChzaWRlICE9PSAneCcgJiYgc2lkZSAhPT0gJ3knKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW50IGRlY2lkZSB3aGljaCBoeXBvdGVudXNlIHRvIHVzZScpO1xuICB9XG4gIGNvbnN0IHBvaW50ID1cbiAgICBzaWRlID09PSAneCcgPyBuZXcgUG9pbnQoeFNpZGUsIGdldE9wcG9zaW5nU2lkZSh4SCwgeFJhZGlhbnMpKSA6IG5ldyBQb2ludChnZXRPcHBvc2luZ1NpZGUoeUgsIHlSYWRpYW5zKSwgeVNpZGUpO1xuXG4gIGwoJ3BvaW50OicsIHBvaW50KTtcbiAgY29uc3QgbXVsdGlwbGllciA9IG5ldyBQb2ludChiLnggPCBhLnggPyAtMSA6IDEsIGIueSA8IGEueSA/IC0xIDogMSk7XG4gIGwoJ211bHRpcGxpZXI6JywgbXVsdGlwbGllcik7XG4gIGNvbnN0IG91dCA9IHBvaW50Lm11bHRCeVBvaW50KG11bHRpcGxpZXIpO1xuICBsKCdvdXQ6Jywgb3V0KTtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG91dC5hZGQobmV3IFBvaW50KGEueCwgYS55KSk7XG4gIGwoJ25vcm1hbGl6ZWQ6Jywgbm9ybWFsaXplZCk7XG4gIHJldHVybiBub3JtYWxpemVkO1xufTtcbiJdfQ==
|
package/lib/types.js
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
exports.SnapType = exports.SizeType = exports.ScaleType = exports.RangeType = exports.PointType = exports.GraphPropsType = exports.DomainType = exports.ChildrenType = exports.BaseDomainRangeType = void 0;
|
|
9
|
-
|
|
10
|
-
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
11
|
-
|
|
12
|
-
var BaseDomainRangeType = {
|
|
13
|
-
min: _propTypes["default"].number.isRequired,
|
|
14
|
-
max: _propTypes["default"].number.isRequired,
|
|
15
|
-
step: _propTypes["default"].number
|
|
16
|
-
};
|
|
17
|
-
exports.BaseDomainRangeType = BaseDomainRangeType;
|
|
18
|
-
|
|
19
|
-
var DomainType = _propTypes["default"].shape(BaseDomainRangeType);
|
|
20
|
-
|
|
21
|
-
exports.DomainType = DomainType;
|
|
22
|
-
|
|
23
|
-
var RangeType = _propTypes["default"].shape(BaseDomainRangeType);
|
|
24
|
-
|
|
25
|
-
exports.RangeType = RangeType;
|
|
26
|
-
|
|
27
|
-
var SizeType = _propTypes["default"].shape({
|
|
28
|
-
width: _propTypes["default"].number.isRequired,
|
|
29
|
-
height: _propTypes["default"].number.isRequired
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
exports.SizeType = SizeType;
|
|
33
|
-
|
|
34
|
-
var PointType = _propTypes["default"].shape({
|
|
35
|
-
x: _propTypes["default"].number.isRequired,
|
|
36
|
-
y: _propTypes["default"].number.isRequired
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
exports.PointType = PointType;
|
|
40
|
-
|
|
41
|
-
var ChildrenType = _propTypes["default"].oneOfType([_propTypes["default"].arrayOf(_propTypes["default"].node), _propTypes["default"].node]).isRequired;
|
|
42
|
-
|
|
43
|
-
exports.ChildrenType = ChildrenType;
|
|
44
|
-
|
|
45
|
-
var ScaleType = _propTypes["default"].shape({
|
|
46
|
-
x: _propTypes["default"].func.isRequired,
|
|
47
|
-
y: _propTypes["default"].func.isRequired
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
exports.ScaleType = ScaleType;
|
|
51
|
-
|
|
52
|
-
var SnapType = _propTypes["default"].shape({
|
|
53
|
-
x: _propTypes["default"].func.isRequired,
|
|
54
|
-
y: _propTypes["default"].func.isRequired
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
exports.SnapType = SnapType;
|
|
58
|
-
|
|
59
|
-
var GraphPropsType = _propTypes["default"].shape({
|
|
60
|
-
scale: ScaleType.isRequired,
|
|
61
|
-
snap: SnapType.isRequired,
|
|
62
|
-
domain: DomainType.isRequired,
|
|
63
|
-
range: RangeType.isRequired,
|
|
64
|
-
size: SizeType.isRequired
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
exports.GraphPropsType = GraphPropsType;
|
|
68
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy90eXBlcy5qcyJdLCJuYW1lcyI6WyJCYXNlRG9tYWluUmFuZ2VUeXBlIiwibWluIiwiUHJvcFR5cGVzIiwibnVtYmVyIiwiaXNSZXF1aXJlZCIsIm1heCIsInN0ZXAiLCJEb21haW5UeXBlIiwic2hhcGUiLCJSYW5nZVR5cGUiLCJTaXplVHlwZSIsIndpZHRoIiwiaGVpZ2h0IiwiUG9pbnRUeXBlIiwieCIsInkiLCJDaGlsZHJlblR5cGUiLCJvbmVPZlR5cGUiLCJhcnJheU9mIiwibm9kZSIsIlNjYWxlVHlwZSIsImZ1bmMiLCJTbmFwVHlwZSIsIkdyYXBoUHJvcHNUeXBlIiwic2NhbGUiLCJzbmFwIiwiZG9tYWluIiwicmFuZ2UiLCJzaXplIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFFTyxJQUFNQSxtQkFBbUIsR0FBRztBQUNqQ0MsRUFBQUEsR0FBRyxFQUFFQyxzQkFBVUMsTUFBVixDQUFpQkMsVUFEVztBQUVqQ0MsRUFBQUEsR0FBRyxFQUFFSCxzQkFBVUMsTUFBVixDQUFpQkMsVUFGVztBQUdqQ0UsRUFBQUEsSUFBSSxFQUFFSixzQkFBVUM7QUFIaUIsQ0FBNUI7OztBQU1BLElBQU1JLFVBQVUsR0FBR0wsc0JBQVVNLEtBQVYsQ0FBZ0JSLG1CQUFoQixDQUFuQjs7OztBQUVBLElBQU1TLFNBQVMsR0FBR1Asc0JBQVVNLEtBQVYsQ0FBZ0JSLG1CQUFoQixDQUFsQjs7OztBQUVBLElBQU1VLFFBQVEsR0FBR1Isc0JBQVVNLEtBQVYsQ0FBZ0I7QUFDdENHLEVBQUFBLEtBQUssRUFBRVQsc0JBQVVDLE1BQVYsQ0FBaUJDLFVBRGM7QUFFdENRLEVBQUFBLE1BQU0sRUFBRVYsc0JBQVVDLE1BQVYsQ0FBaUJDO0FBRmEsQ0FBaEIsQ0FBakI7Ozs7QUFLQSxJQUFNUyxTQUFTLEdBQUdYLHNCQUFVTSxLQUFWLENBQWdCO0FBQ3ZDTSxFQUFBQSxDQUFDLEVBQUVaLHNCQUFVQyxNQUFWLENBQWlCQyxVQURtQjtBQUV2Q1csRUFBQUEsQ0FBQyxFQUFFYixzQkFBVUMsTUFBVixDQUFpQkM7QUFGbUIsQ0FBaEIsQ0FBbEI7Ozs7QUFLQSxJQUFNWSxZQUFZLEdBQUdkLHNCQUFVZSxTQUFWLENBQW9CLENBQUNmLHNCQUFVZ0IsT0FBVixDQUFrQmhCLHNCQUFVaUIsSUFBNUIsQ0FBRCxFQUFvQ2pCLHNCQUFVaUIsSUFBOUMsQ0FBcEIsRUFBeUVmLFVBQTlGOzs7O0FBRUEsSUFBTWdCLFNBQVMsR0FBR2xCLHNCQUFVTSxLQUFWLENBQWdCO0FBQ3ZDTSxFQUFBQSxDQUFDLEVBQUVaLHNCQUFVbUIsSUFBVixDQUFlakIsVUFEcUI7QUFFdkNXLEVBQUFBLENBQUMsRUFBRWIsc0JBQVVtQixJQUFWLENBQWVqQjtBQUZxQixDQUFoQixDQUFsQjs7OztBQUtBLElBQU1rQixRQUFRLEdBQUdwQixzQkFBVU0sS0FBVixDQUFnQjtBQUN0Q00sRUFBQUEsQ0FBQyxFQUFFWixzQkFBVW1CLElBQVYsQ0FBZWpCLFVBRG9CO0FBRXRDVyxFQUFBQSxDQUFDLEVBQUViLHNCQUFVbUIsSUFBVixDQUFlakI7QUFGb0IsQ0FBaEIsQ0FBakI7Ozs7QUFLQSxJQUFNbUIsY0FBYyxHQUFHckIsc0JBQVVNLEtBQVYsQ0FBZ0I7QUFDNUNnQixFQUFBQSxLQUFLLEVBQUVKLFNBQVMsQ0FBQ2hCLFVBRDJCO0FBRTVDcUIsRUFBQUEsSUFBSSxFQUFFSCxRQUFRLENBQUNsQixVQUY2QjtBQUc1Q3NCLEVBQUFBLE1BQU0sRUFBRW5CLFVBQVUsQ0FBQ0gsVUFIeUI7QUFJNUN1QixFQUFBQSxLQUFLLEVBQUVsQixTQUFTLENBQUNMLFVBSjJCO0FBSzVDd0IsRUFBQUEsSUFBSSxFQUFFbEIsUUFBUSxDQUFDTjtBQUw2QixDQUFoQixDQUF2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBCYXNlRG9tYWluUmFuZ2VUeXBlID0ge1xuICBtaW46IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgbWF4OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIHN0ZXA6IFByb3BUeXBlcy5udW1iZXIsXG59O1xuXG5leHBvcnQgY29uc3QgRG9tYWluVHlwZSA9IFByb3BUeXBlcy5zaGFwZShCYXNlRG9tYWluUmFuZ2VUeXBlKTtcblxuZXhwb3J0IGNvbnN0IFJhbmdlVHlwZSA9IFByb3BUeXBlcy5zaGFwZShCYXNlRG9tYWluUmFuZ2VUeXBlKTtcblxuZXhwb3J0IGNvbnN0IFNpemVUeXBlID0gUHJvcFR5cGVzLnNoYXBlKHtcbiAgd2lkdGg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgaGVpZ2h0OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG59KTtcblxuZXhwb3J0IGNvbnN0IFBvaW50VHlwZSA9IFByb3BUeXBlcy5zaGFwZSh7XG4gIHg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgeTogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxufSk7XG5cbmV4cG9ydCBjb25zdCBDaGlsZHJlblR5cGUgPSBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMubm9kZSksIFByb3BUeXBlcy5ub2RlXSkuaXNSZXF1aXJlZDtcblxuZXhwb3J0IGNvbnN0IFNjYWxlVHlwZSA9IFByb3BUeXBlcy5zaGFwZSh7XG4gIHg6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIHk6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG59KTtcblxuZXhwb3J0IGNvbnN0IFNuYXBUeXBlID0gUHJvcFR5cGVzLnNoYXBlKHtcbiAgeDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgeTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbn0pO1xuXG5leHBvcnQgY29uc3QgR3JhcGhQcm9wc1R5cGUgPSBQcm9wVHlwZXMuc2hhcGUoe1xuICBzY2FsZTogU2NhbGVUeXBlLmlzUmVxdWlyZWQsXG4gIHNuYXA6IFNuYXBUeXBlLmlzUmVxdWlyZWQsXG4gIGRvbWFpbjogRG9tYWluVHlwZS5pc1JlcXVpcmVkLFxuICByYW5nZTogUmFuZ2VUeXBlLmlzUmVxdWlyZWQsXG4gIHNpemU6IFNpemVUeXBlLmlzUmVxdWlyZWQsXG59KTtcbiJdfQ==
|
package/lib/utils.js
DELETED
|
@@ -1,232 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
exports.buildSizeArray = exports.bounds = exports.bandKey = exports.amountToIncreaseWidth = void 0;
|
|
9
|
-
exports.buildTickModel = buildTickModel;
|
|
10
|
-
exports.getDelta = exports.findLongestWord = exports.extractTextFromHTML = void 0;
|
|
11
|
-
exports.getInterval = getInterval;
|
|
12
|
-
exports.polygonToArea = exports.point = exports.lineToArea = exports.isEmptyString = exports.isEmptyObject = exports.isDomainRangeEqual = void 0;
|
|
13
|
-
exports.snapTo = snapTo;
|
|
14
|
-
exports.xy = exports.tickCount = void 0;
|
|
15
|
-
|
|
16
|
-
var _invariant = _interopRequireDefault(require("invariant"));
|
|
17
|
-
|
|
18
|
-
var _range = _interopRequireDefault(require("lodash/range"));
|
|
19
|
-
|
|
20
|
-
var _pointGeometry = _interopRequireDefault(require("@mapbox/point-geometry"));
|
|
21
|
-
|
|
22
|
-
var _head = _interopRequireDefault(require("lodash/head"));
|
|
23
|
-
|
|
24
|
-
var _tail = _interopRequireDefault(require("lodash/tail"));
|
|
25
|
-
|
|
26
|
-
var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
|
|
27
|
-
|
|
28
|
-
var xy = function xy(x, y) {
|
|
29
|
-
return {
|
|
30
|
-
x: x,
|
|
31
|
-
y: y
|
|
32
|
-
};
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
exports.xy = xy;
|
|
36
|
-
|
|
37
|
-
var buildSizeArray = function buildSizeArray(size, padding) {
|
|
38
|
-
padding = Number.isFinite(padding) ? Math.max(padding, 0) : 0;
|
|
39
|
-
(0, _invariant["default"])(padding < size, 'padding must be less than size');
|
|
40
|
-
var half = Math.round(padding * 0.5);
|
|
41
|
-
return [half, size - half];
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
exports.buildSizeArray = buildSizeArray;
|
|
45
|
-
|
|
46
|
-
var tickCount = function tickCount(min, max, step) {
|
|
47
|
-
(0, _invariant["default"])(min < max, 'min must be less than max');
|
|
48
|
-
var size = Math.abs(min - max);
|
|
49
|
-
return Math.round(size / step);
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
exports.tickCount = tickCount;
|
|
53
|
-
|
|
54
|
-
function getInterval(domain, ticks) {
|
|
55
|
-
var min = domain.min,
|
|
56
|
-
max = domain.max;
|
|
57
|
-
var major = ticks.major,
|
|
58
|
-
minor = ticks.minor;
|
|
59
|
-
|
|
60
|
-
if (min >= max) {
|
|
61
|
-
throw new Error("min is > max: ".concat(min, " > ").concat(max));
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
var distance = max - min;
|
|
65
|
-
var minorTicks = minor > 0 ? minor + 1 : 1;
|
|
66
|
-
var normalizedMajor = major - 1;
|
|
67
|
-
|
|
68
|
-
if (isNaN(normalizedMajor)) {
|
|
69
|
-
throw new Error('Tick Frequency must be 2 or higher');
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
if (normalizedMajor <= 0) {
|
|
73
|
-
throw new Error('Tick Frequency must be 2 or higher');
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
var divider = normalizedMajor * minorTicks;
|
|
77
|
-
var raw = distance / divider;
|
|
78
|
-
return parseFloat(Number(raw).toFixed(4));
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
var mkRange = function mkRange(min, max, interval) {
|
|
82
|
-
var raw = (0, _range["default"])(min, max, interval);
|
|
83
|
-
/* Fix the last step due to rounding errors */
|
|
84
|
-
|
|
85
|
-
raw.splice(raw.length, 1, max);
|
|
86
|
-
return raw;
|
|
87
|
-
};
|
|
88
|
-
|
|
89
|
-
function snapTo(min, max, interval, value) {
|
|
90
|
-
if (value >= max) {
|
|
91
|
-
return max;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
if (value <= min) {
|
|
95
|
-
return min;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
var rng = mkRange(min, max, interval);
|
|
99
|
-
rng = rng.filter(function (v) {
|
|
100
|
-
return Math.abs(value - v) <= interval;
|
|
101
|
-
});
|
|
102
|
-
return rng.length && rng.reduce(function (prev, curr) {
|
|
103
|
-
var currentDistance = Math.abs(curr - value);
|
|
104
|
-
var previousDistance = Math.abs(prev - value);
|
|
105
|
-
return currentDistance <= previousDistance ? curr : prev;
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
function buildTickModel(domain, ticks, interval, scaleFn) {
|
|
110
|
-
var rng = mkRange(domain.min, domain.max, interval);
|
|
111
|
-
return rng.map(function (r, index) {
|
|
112
|
-
var isMajor = index % (ticks.minor + 1) === 0;
|
|
113
|
-
return {
|
|
114
|
-
value: r,
|
|
115
|
-
major: isMajor,
|
|
116
|
-
x: scaleFn(r)
|
|
117
|
-
};
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
var polygonToArea = function polygonToArea(points) {
|
|
122
|
-
var h = (0, _head["default"])(points);
|
|
123
|
-
var area = {
|
|
124
|
-
left: h.x,
|
|
125
|
-
top: h.y,
|
|
126
|
-
bottom: h.y,
|
|
127
|
-
right: h.x
|
|
128
|
-
};
|
|
129
|
-
return (0, _tail["default"])(points).reduce(function (a, p) {
|
|
130
|
-
a.left = Math.min(a.left, p.x);
|
|
131
|
-
a.top = Math.max(a.top, p.y);
|
|
132
|
-
a.bottom = Math.min(a.bottom, p.y);
|
|
133
|
-
a.right = Math.max(a.right, p.x);
|
|
134
|
-
return a;
|
|
135
|
-
}, area);
|
|
136
|
-
};
|
|
137
|
-
|
|
138
|
-
exports.polygonToArea = polygonToArea;
|
|
139
|
-
|
|
140
|
-
var lineToArea = function lineToArea(from, to) {
|
|
141
|
-
var left = Math.min(from.x, to.x);
|
|
142
|
-
var top = Math.max(from.y, to.y);
|
|
143
|
-
var bottom = Math.min(from.y, to.y);
|
|
144
|
-
var right = Math.max(from.x, to.x);
|
|
145
|
-
return {
|
|
146
|
-
left: left,
|
|
147
|
-
top: top,
|
|
148
|
-
bottom: bottom,
|
|
149
|
-
right: right
|
|
150
|
-
};
|
|
151
|
-
};
|
|
152
|
-
|
|
153
|
-
exports.lineToArea = lineToArea;
|
|
154
|
-
|
|
155
|
-
var bounds = function bounds(area, domain, range) {
|
|
156
|
-
return {
|
|
157
|
-
left: domain.min - area.left,
|
|
158
|
-
right: Math.abs(area.right - domain.max),
|
|
159
|
-
top: Math.abs(area.top - range.max),
|
|
160
|
-
bottom: range.min - area.bottom
|
|
161
|
-
};
|
|
162
|
-
};
|
|
163
|
-
|
|
164
|
-
exports.bounds = bounds;
|
|
165
|
-
|
|
166
|
-
var point = function point(o) {
|
|
167
|
-
return new _pointGeometry["default"](o.x, o.y);
|
|
168
|
-
};
|
|
169
|
-
|
|
170
|
-
exports.point = point;
|
|
171
|
-
|
|
172
|
-
var getDelta = function getDelta(from, to) {
|
|
173
|
-
return point(to).sub(point(from));
|
|
174
|
-
};
|
|
175
|
-
|
|
176
|
-
exports.getDelta = getDelta;
|
|
177
|
-
|
|
178
|
-
var bandKey = function bandKey(d, index) {
|
|
179
|
-
return "".concat(index, "-").concat(d.label || '-');
|
|
180
|
-
};
|
|
181
|
-
|
|
182
|
-
exports.bandKey = bandKey;
|
|
183
|
-
|
|
184
|
-
var isDomainRangeEqual = function isDomainRangeEqual(graphProps, nextGraphProps) {
|
|
185
|
-
return (0, _isEqual["default"])(graphProps.domain, nextGraphProps.domain) && (0, _isEqual["default"])(graphProps.range, nextGraphProps.range);
|
|
186
|
-
}; // findLongestWord is also used in graphing
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
exports.isDomainRangeEqual = isDomainRangeEqual;
|
|
190
|
-
|
|
191
|
-
var findLongestWord = function findLongestWord(label) {
|
|
192
|
-
var longestWord = (label || '').replace(/<[^>]+>/g, '').split(' ').sort(function (a, b) {
|
|
193
|
-
return b.length - a.length;
|
|
194
|
-
});
|
|
195
|
-
return longestWord[0].length;
|
|
196
|
-
}; // amountToIncreaseWidth is also used in graphing
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
exports.findLongestWord = findLongestWord;
|
|
200
|
-
|
|
201
|
-
var amountToIncreaseWidth = function amountToIncreaseWidth(longestWord) {
|
|
202
|
-
if (!longestWord) {
|
|
203
|
-
return 0;
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
return longestWord * 20;
|
|
207
|
-
};
|
|
208
|
-
|
|
209
|
-
exports.amountToIncreaseWidth = amountToIncreaseWidth;
|
|
210
|
-
|
|
211
|
-
var extractTextFromHTML = function extractTextFromHTML(htmlString) {
|
|
212
|
-
var _doc$body;
|
|
213
|
-
|
|
214
|
-
var parser = new DOMParser();
|
|
215
|
-
var doc = parser === null || parser === void 0 ? void 0 : parser.parseFromString(htmlString, 'text/html');
|
|
216
|
-
return (doc === null || doc === void 0 ? void 0 : (_doc$body = doc.body) === null || _doc$body === void 0 ? void 0 : _doc$body.textContent) || '';
|
|
217
|
-
};
|
|
218
|
-
|
|
219
|
-
exports.extractTextFromHTML = extractTextFromHTML;
|
|
220
|
-
|
|
221
|
-
var isEmptyObject = function isEmptyObject(obj) {
|
|
222
|
-
return obj && Object.keys(obj).length === 0 && obj.constructor === Object;
|
|
223
|
-
};
|
|
224
|
-
|
|
225
|
-
exports.isEmptyObject = isEmptyObject;
|
|
226
|
-
|
|
227
|
-
var isEmptyString = function isEmptyString(str) {
|
|
228
|
-
return typeof str === 'string' && str.trim() === '';
|
|
229
|
-
};
|
|
230
|
-
|
|
231
|
-
exports.isEmptyString = isEmptyString;
|
|
232
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy5qcyJdLCJuYW1lcyI6WyJ4eSIsIngiLCJ5IiwiYnVpbGRTaXplQXJyYXkiLCJzaXplIiwicGFkZGluZyIsIk51bWJlciIsImlzRmluaXRlIiwiTWF0aCIsIm1heCIsImhhbGYiLCJyb3VuZCIsInRpY2tDb3VudCIsIm1pbiIsInN0ZXAiLCJhYnMiLCJnZXRJbnRlcnZhbCIsImRvbWFpbiIsInRpY2tzIiwibWFqb3IiLCJtaW5vciIsIkVycm9yIiwiZGlzdGFuY2UiLCJtaW5vclRpY2tzIiwibm9ybWFsaXplZE1ham9yIiwiaXNOYU4iLCJkaXZpZGVyIiwicmF3IiwicGFyc2VGbG9hdCIsInRvRml4ZWQiLCJta1JhbmdlIiwiaW50ZXJ2YWwiLCJzcGxpY2UiLCJsZW5ndGgiLCJzbmFwVG8iLCJ2YWx1ZSIsInJuZyIsImZpbHRlciIsInYiLCJyZWR1Y2UiLCJwcmV2IiwiY3VyciIsImN1cnJlbnREaXN0YW5jZSIsInByZXZpb3VzRGlzdGFuY2UiLCJidWlsZFRpY2tNb2RlbCIsInNjYWxlRm4iLCJtYXAiLCJyIiwiaW5kZXgiLCJpc01ham9yIiwicG9seWdvblRvQXJlYSIsInBvaW50cyIsImgiLCJhcmVhIiwibGVmdCIsInRvcCIsImJvdHRvbSIsInJpZ2h0IiwiYSIsInAiLCJsaW5lVG9BcmVhIiwiZnJvbSIsInRvIiwiYm91bmRzIiwicmFuZ2UiLCJwb2ludCIsIm8iLCJQb2ludCIsImdldERlbHRhIiwic3ViIiwiYmFuZEtleSIsImQiLCJsYWJlbCIsImlzRG9tYWluUmFuZ2VFcXVhbCIsImdyYXBoUHJvcHMiLCJuZXh0R3JhcGhQcm9wcyIsImZpbmRMb25nZXN0V29yZCIsImxvbmdlc3RXb3JkIiwicmVwbGFjZSIsInNwbGl0Iiwic29ydCIsImIiLCJhbW91bnRUb0luY3JlYXNlV2lkdGgiLCJleHRyYWN0VGV4dEZyb21IVE1MIiwiaHRtbFN0cmluZyIsInBhcnNlciIsIkRPTVBhcnNlciIsImRvYyIsInBhcnNlRnJvbVN0cmluZyIsImJvZHkiLCJ0ZXh0Q29udGVudCIsImlzRW1wdHlPYmplY3QiLCJvYmoiLCJPYmplY3QiLCJrZXlzIiwiY29uc3RydWN0b3IiLCJpc0VtcHR5U3RyaW5nIiwic3RyIiwidHJpbSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRU8sSUFBTUEsRUFBRSxHQUFHLFNBQUxBLEVBQUssQ0FBQ0MsQ0FBRCxFQUFJQyxDQUFKO0FBQUEsU0FBVztBQUFFRCxJQUFBQSxDQUFDLEVBQURBLENBQUY7QUFBS0MsSUFBQUEsQ0FBQyxFQUFEQTtBQUFMLEdBQVg7QUFBQSxDQUFYOzs7O0FBRUEsSUFBTUMsY0FBYyxHQUFHLFNBQWpCQSxjQUFpQixDQUFDQyxJQUFELEVBQU9DLE9BQVAsRUFBbUI7QUFDL0NBLEVBQUFBLE9BQU8sR0FBR0MsTUFBTSxDQUFDQyxRQUFQLENBQWdCRixPQUFoQixJQUEyQkcsSUFBSSxDQUFDQyxHQUFMLENBQVNKLE9BQVQsRUFBa0IsQ0FBbEIsQ0FBM0IsR0FBa0QsQ0FBNUQ7QUFDQSw2QkFBVUEsT0FBTyxHQUFHRCxJQUFwQixFQUEwQixnQ0FBMUI7QUFDQSxNQUFNTSxJQUFJLEdBQUdGLElBQUksQ0FBQ0csS0FBTCxDQUFXTixPQUFPLEdBQUcsR0FBckIsQ0FBYjtBQUNBLFNBQU8sQ0FBQ0ssSUFBRCxFQUFPTixJQUFJLEdBQUdNLElBQWQsQ0FBUDtBQUNELENBTE07Ozs7QUFPQSxJQUFNRSxTQUFTLEdBQUcsU0FBWkEsU0FBWSxDQUFDQyxHQUFELEVBQU1KLEdBQU4sRUFBV0ssSUFBWCxFQUFvQjtBQUMzQyw2QkFBVUQsR0FBRyxHQUFHSixHQUFoQixFQUFxQiwyQkFBckI7QUFDQSxNQUFNTCxJQUFJLEdBQUdJLElBQUksQ0FBQ08sR0FBTCxDQUFTRixHQUFHLEdBQUdKLEdBQWYsQ0FBYjtBQUNBLFNBQU9ELElBQUksQ0FBQ0csS0FBTCxDQUFXUCxJQUFJLEdBQUdVLElBQWxCLENBQVA7QUFDRCxDQUpNOzs7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QUFELEVBQVM7QUFDcEMsU0FBT0EsR0FBRyxJQUFJQyxNQUFNLENBQUNDLElBQVAsQ0FBWUYsR0FBWixFQUFpQjNELE1BQWpCLEtBQTRCLENBQW5DLElBQXdDMkQsR0FBRyxDQUFDRyxXQUFKLEtBQW9CRixNQUFuRTtBQUNELENBRk07Ozs7QUFJQSxJQUFNRyxhQUFhLEdBQUcsU0FBaEJBLGFBQWdCLENBQUNDLEdBQUQsRUFBUztBQUNwQyxTQUFPLE9BQU9BLEdBQVAsS0FBZSxRQUFmLElBQTJCQSxHQUFHLENBQUNDLElBQUosT0FBZSxFQUFqRDtBQUNELENBRk0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW52YXJpYW50IGZyb20gJ2ludmFyaWFudCc7XG5pbXBvcnQgcmFuZ2UgZnJvbSAnbG9kYXNoL3JhbmdlJztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCBoZWFkIGZyb20gJ2xvZGFzaC9oZWFkJztcbmltcG9ydCB0YWlsIGZyb20gJ2xvZGFzaC90YWlsJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcblxuZXhwb3J0IGNvbnN0IHh5ID0gKHgsIHkpID0+ICh7IHgsIHkgfSk7XG5cbmV4cG9ydCBjb25zdCBidWlsZFNpemVBcnJheSA9IChzaXplLCBwYWRkaW5nKSA9PiB7XG4gIHBhZGRpbmcgPSBOdW1iZXIuaXNGaW5pdGUocGFkZGluZykgPyBNYXRoLm1heChwYWRkaW5nLCAwKSA6IDA7XG4gIGludmFyaWFudChwYWRkaW5nIDwgc2l6ZSwgJ3BhZGRpbmcgbXVzdCBiZSBsZXNzIHRoYW4gc2l6ZScpO1xuICBjb25zdCBoYWxmID0gTWF0aC5yb3VuZChwYWRkaW5nICogMC41KTtcbiAgcmV0dXJuIFtoYWxmLCBzaXplIC0gaGFsZl07XG59O1xuXG5leHBvcnQgY29uc3QgdGlja0NvdW50ID0gKG1pbiwgbWF4LCBzdGVwKSA9PiB7XG4gIGludmFyaWFudChtaW4gPCBtYXgsICdtaW4gbXVzdCBiZSBsZXNzIHRoYW4gbWF4Jyk7XG4gIGNvbnN0IHNpemUgPSBNYXRoLmFicyhtaW4gLSBtYXgpO1xuICByZXR1cm4gTWF0aC5yb3VuZChzaXplIC8gc3RlcCk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW50ZXJ2YWwoZG9tYWluLCB0aWNrcykge1xuICBjb25zdCB7IG1pbiwgbWF4IH0gPSBkb21haW47XG4gIGNvbnN0IHsgbWFqb3IsIG1pbm9yIH0gPSB0aWNrcztcblxuICBpZiAobWluID49IG1heCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgbWluIGlzID4gbWF4OiAke21pbn0gPiAke21heH1gKTtcbiAgfVxuXG4gIGNvbnN0IGRpc3RhbmNlID0gbWF4IC0gbWluO1xuICBjb25zdCBtaW5vclRpY2tzID0gbWlub3IgPiAwID8gbWlub3IgKyAxIDogMTtcbiAgY29uc3Qgbm9ybWFsaXplZE1ham9yID0gbWFqb3IgLSAxO1xuXG4gIGlmIChpc05hTihub3JtYWxpemVkTWFqb3IpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaWNrIEZyZXF1ZW5jeSBtdXN0IGJlIDIgb3IgaGlnaGVyJyk7XG4gIH1cblxuICBpZiAobm9ybWFsaXplZE1ham9yIDw9IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RpY2sgRnJlcXVlbmN5IG11c3QgYmUgMiBvciBoaWdoZXInKTtcbiAgfVxuXG4gIGNvbnN0IGRpdmlkZXIgPSBub3JtYWxpemVkTWFqb3IgKiBtaW5vclRpY2tzO1xuICBjb25zdCByYXcgPSBkaXN0YW5jZSAvIGRpdmlkZXI7XG4gIHJldHVybiBwYXJzZUZsb2F0KE51bWJlcihyYXcpLnRvRml4ZWQoNCkpO1xufVxuXG5jb25zdCBta1JhbmdlID0gKG1pbiwgbWF4LCBpbnRlcnZhbCkgPT4ge1xuICBjb25zdCByYXcgPSByYW5nZShtaW4sIG1heCwgaW50ZXJ2YWwpO1xuICAvKiBGaXggdGhlIGxhc3Qgc3RlcCBkdWUgdG8gcm91bmRpbmcgZXJyb3JzICovXG4gIHJhdy5zcGxpY2UocmF3Lmxlbmd0aCwgMSwgbWF4KTtcbiAgcmV0dXJuIHJhdztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBzbmFwVG8obWluLCBtYXgsIGludGVydmFsLCB2YWx1ZSkge1xuICBpZiAodmFsdWUgPj0gbWF4KSB7XG4gICAgcmV0dXJuIG1heDtcbiAgfVxuXG4gIGlmICh2YWx1ZSA8PSBtaW4pIHtcbiAgICByZXR1cm4gbWluO1xuICB9XG5cbiAgbGV0IHJuZyA9IG1rUmFuZ2UobWluLCBtYXgsIGludGVydmFsKTtcblxuICBybmcgPSBybmcuZmlsdGVyKCh2KSA9PiB7XG4gICAgcmV0dXJuIE1hdGguYWJzKHZhbHVlIC0gdikgPD0gaW50ZXJ2YWw7XG4gIH0pO1xuXG4gIHJldHVybiAoXG4gICAgcm5nLmxlbmd0aCAmJlxuICAgIHJuZy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnREaXN0YW5jZSA9IE1hdGguYWJzKGN1cnIgLSB2YWx1ZSk7XG4gICAgICBjb25zdCBwcmV2aW91c0Rpc3RhbmNlID0gTWF0aC5hYnMocHJldiAtIHZhbHVlKTtcbiAgICAgIHJldHVybiBjdXJyZW50RGlzdGFuY2UgPD0gcHJldmlvdXNEaXN0YW5jZSA/IGN1cnIgOiBwcmV2O1xuICAgIH0pXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFRpY2tNb2RlbChkb21haW4sIHRpY2tzLCBpbnRlcnZhbCwgc2NhbGVGbikge1xuICBjb25zdCBybmcgPSBta1JhbmdlKGRvbWFpbi5taW4sIGRvbWFpbi5tYXgsIGludGVydmFsKTtcblxuICByZXR1cm4gcm5nLm1hcCgociwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBpc01ham9yID0gaW5kZXggJSAodGlja3MubWlub3IgKyAxKSA9PT0gMDtcblxuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogcixcbiAgICAgIG1ham9yOiBpc01ham9yLFxuICAgICAgeDogc2NhbGVGbihyKSxcbiAgICB9O1xuICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IHBvbHlnb25Ub0FyZWEgPSAocG9pbnRzKSA9PiB7XG4gIGNvbnN0IGggPSBoZWFkKHBvaW50cyk7XG4gIGNvbnN0IGFyZWEgPSB7XG4gICAgbGVmdDogaC54LFxuICAgIHRvcDogaC55LFxuICAgIGJvdHRvbTogaC55LFxuICAgIHJpZ2h0OiBoLngsXG4gIH07XG4gIHJldHVybiB0YWlsKHBvaW50cykucmVkdWNlKChhLCBwKSA9PiB7XG4gICAgYS5sZWZ0ID0gTWF0aC5taW4oYS5sZWZ0LCBwLngpO1xuICAgIGEudG9wID0gTWF0aC5tYXgoYS50b3AsIHAueSk7XG4gICAgYS5ib3R0b20gPSBNYXRoLm1pbihhLmJvdHRvbSwgcC55KTtcbiAgICBhLnJpZ2h0ID0gTWF0aC5tYXgoYS5yaWdodCwgcC54KTtcbiAgICByZXR1cm4gYTtcbiAgfSwgYXJlYSk7XG59O1xuXG5leHBvcnQgY29uc3QgbGluZVRvQXJlYSA9IChmcm9tLCB0bykgPT4ge1xuICBjb25zdCBsZWZ0ID0gTWF0aC5taW4oZnJvbS54LCB0by54KTtcbiAgY29uc3QgdG9wID0gTWF0aC5tYXgoZnJvbS55LCB0by55KTtcbiAgY29uc3QgYm90dG9tID0gTWF0aC5taW4oZnJvbS55LCB0by55KTtcbiAgY29uc3QgcmlnaHQgPSBNYXRoLm1heChmcm9tLngsIHRvLngpO1xuICByZXR1cm4geyBsZWZ0LCB0b3AsIGJvdHRvbSwgcmlnaHQgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBib3VuZHMgPSAoYXJlYSwgZG9tYWluLCByYW5nZSkgPT4ge1xuICByZXR1cm4ge1xuICAgIGxlZnQ6IGRvbWFpbi5taW4gLSBhcmVhLmxlZnQsXG4gICAgcmlnaHQ6IE1hdGguYWJzKGFyZWEucmlnaHQgLSBkb21haW4ubWF4KSxcbiAgICB0b3A6IE1hdGguYWJzKGFyZWEudG9wIC0gcmFuZ2UubWF4KSxcbiAgICBib3R0b206IHJhbmdlLm1pbiAtIGFyZWEuYm90dG9tLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHBvaW50ID0gKG8pID0+IG5ldyBQb2ludChvLngsIG8ueSk7XG5leHBvcnQgY29uc3QgZ2V0RGVsdGEgPSAoZnJvbSwgdG8pID0+IHtcbiAgcmV0dXJuIHBvaW50KHRvKS5zdWIocG9pbnQoZnJvbSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGJhbmRLZXkgPSAoZCwgaW5kZXgpID0+IGAke2luZGV4fS0ke2QubGFiZWwgfHwgJy0nfWA7XG5cbmV4cG9ydCBjb25zdCBpc0RvbWFpblJhbmdlRXF1YWwgPSAoZ3JhcGhQcm9wcywgbmV4dEdyYXBoUHJvcHMpID0+IHtcbiAgcmV0dXJuIGlzRXF1YWwoZ3JhcGhQcm9wcy5kb21haW4sIG5leHRHcmFwaFByb3BzLmRvbWFpbikgJiYgaXNFcXVhbChncmFwaFByb3BzLnJhbmdlLCBuZXh0R3JhcGhQcm9wcy5yYW5nZSk7XG59O1xuXG4vLyBmaW5kTG9uZ2VzdFdvcmQgaXMgYWxzbyB1c2VkIGluIGdyYXBoaW5nXG5leHBvcnQgY29uc3QgZmluZExvbmdlc3RXb3JkID0gKGxhYmVsKSA9PiB7XG4gIGxldCBsb25nZXN0V29yZCA9IChsYWJlbCB8fCAnJylcbiAgICAucmVwbGFjZSgvPFtePl0rPi9nLCAnJylcbiAgICAuc3BsaXQoJyAnKVxuICAgIC5zb3J0KChhLCBiKSA9PiBiLmxlbmd0aCAtIGEubGVuZ3RoKTtcblxuICByZXR1cm4gbG9uZ2VzdFdvcmRbMF0ubGVuZ3RoO1xufTtcblxuLy8gYW1vdW50VG9JbmNyZWFzZVdpZHRoIGlzIGFsc28gdXNlZCBpbiBncmFwaGluZ1xuZXhwb3J0IGNvbnN0IGFtb3VudFRvSW5jcmVhc2VXaWR0aCA9IChsb25nZXN0V29yZCkgPT4ge1xuICBpZiAoIWxvbmdlc3RXb3JkKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICByZXR1cm4gbG9uZ2VzdFdvcmQgKiAyMDtcbn07XG5cbmV4cG9ydCBjb25zdCBleHRyYWN0VGV4dEZyb21IVE1MID0gKGh0bWxTdHJpbmcpID0+IHtcbiAgY29uc3QgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICBjb25zdCBkb2MgPSBwYXJzZXI/LnBhcnNlRnJvbVN0cmluZyhodG1sU3RyaW5nLCAndGV4dC9odG1sJyk7XG4gIHJldHVybiBkb2M/LmJvZHk/LnRleHRDb250ZW50IHx8ICcnO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzRW1wdHlPYmplY3QgPSAob2JqKSA9PiB7XG4gIHJldHVybiBvYmogJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDAgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBPYmplY3Q7XG59O1xuXG5leHBvcnQgY29uc3QgaXNFbXB0eVN0cmluZyA9IChzdHIpID0+IHtcbiAgcmV0dXJuIHR5cGVvZiBzdHIgPT09ICdzdHJpbmcnICYmIHN0ci50cmltKCkgPT09ICcnO1xufTtcbiJdfQ==
|