@pie-lib/plot 2.7.3 → 2.9.0-beta.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.md +16 -0
- package/NEXT.CHANGELOG.json +1 -0
- package/lib/__tests__/draggable.test.js +33 -0
- package/lib/__tests__/grid-draggable.test.js +438 -0
- package/lib/__tests__/root.test.js +151 -0
- package/lib/__tests__/trig.test.js +183 -0
- package/lib/__tests__/utils.test.js +312 -0
- package/lib/draggable.js +1 -1
- package/lib/graph-props.js +1 -1
- package/lib/grid-draggable.js +53 -17
- package/lib/index.js +1 -1
- package/lib/label.js +18 -6
- package/lib/root.js +77 -32
- package/lib/trig.js +2 -2
- package/lib/types.js +1 -1
- package/lib/utils.js +25 -3
- package/package.json +2 -2
- package/src/__tests__/__snapshots__/grid-draggable.test.jsx.snap +185 -0
- package/src/__tests__/__snapshots__/root.test.jsx.snap +18 -0
- package/src/__tests__/draggable.test.jsx +23 -0
- package/src/__tests__/grid-draggable.test.jsx +326 -0
- package/src/__tests__/root.test.jsx +118 -0
- package/src/__tests__/trig.test.js +174 -0
- package/src/__tests__/utils.test.js +233 -0
- package/src/grid-draggable.jsx +52 -8
- package/src/label.jsx +14 -3
- package/src/root.jsx +82 -35
- package/src/trig.js +1 -1
- package/src/utils.js +14 -0
- package/lib/draggable.js.map +0 -1
- package/lib/graph-props.js.map +0 -1
- package/lib/grid-draggable.js.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/label.js.map +0 -1
- package/lib/root.js.map +0 -1
- package/lib/trig.js.map +0 -1
- package/lib/types.js.map +0 -1
- package/lib/utils.js.map +0 -1
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
4
|
+
|
|
5
|
+
var _assert = require("assert");
|
|
6
|
+
|
|
7
|
+
var utils = _interopRequireWildcard(require("../utils"));
|
|
8
|
+
|
|
9
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
10
|
+
|
|
11
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
12
|
+
|
|
13
|
+
var xy = utils.xy;
|
|
14
|
+
|
|
15
|
+
var tick = function tick(isMajor, v) {
|
|
16
|
+
return {
|
|
17
|
+
major: isMajor,
|
|
18
|
+
value: v,
|
|
19
|
+
x: v
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
var major = tick.bind(null, true);
|
|
24
|
+
var minor = tick.bind(null, false);
|
|
25
|
+
describe('utils', function () {
|
|
26
|
+
describe('getDelta', function () {
|
|
27
|
+
var assertDelta = function assertDelta(from, to, delta) {
|
|
28
|
+
it("returns a delta of: ".concat(delta, " for ").concat(from, " -> ").concat(to), function () {
|
|
29
|
+
var d = utils.getDelta(from, to);
|
|
30
|
+
expect(d.x).toEqual(delta.x);
|
|
31
|
+
expect(d.y).toEqual(delta.y);
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
assertDelta(xy(0, 0), xy(0, 1), xy(0, 1));
|
|
36
|
+
assertDelta(xy(0, 1), xy(0, 0), xy(0, -1));
|
|
37
|
+
assertDelta(xy(1, 1), xy(3, 3), xy(2, 2));
|
|
38
|
+
assertDelta(xy(-1, -1), xy(3, 3), xy(4, 4));
|
|
39
|
+
assertDelta(xy(-1, -1), xy(-2, -5), xy(-1, -4));
|
|
40
|
+
});
|
|
41
|
+
describe('polygonToArea', function () {
|
|
42
|
+
var assertPolygon = function assertPolygon(points, area) {
|
|
43
|
+
it("converts ".concat(points, " -> ").concat(area), function () {
|
|
44
|
+
var result = utils.polygonToArea(points);
|
|
45
|
+
expect(result).toEqual(area);
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
assertPolygon([xy(0, 0), xy(1, 1), xy(1, -1)], {
|
|
50
|
+
left: 0,
|
|
51
|
+
top: 1,
|
|
52
|
+
bottom: -1,
|
|
53
|
+
right: 1
|
|
54
|
+
});
|
|
55
|
+
assertPolygon([xy(0, 0), xy(3, 0), xy(2, -1), xy(4, -3), xy(1, -4), xy(2, -2)], {
|
|
56
|
+
left: 0,
|
|
57
|
+
top: 0,
|
|
58
|
+
bottom: -4,
|
|
59
|
+
right: 4
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
describe('buildTickModel', function () {
|
|
63
|
+
var scaleFn;
|
|
64
|
+
beforeEach(function () {
|
|
65
|
+
scaleFn = jest.fn(function (v) {
|
|
66
|
+
return v;
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
it('builds major only ticks', function () {
|
|
70
|
+
var result = utils.buildTickModel({
|
|
71
|
+
min: 0,
|
|
72
|
+
max: 2
|
|
73
|
+
}, {
|
|
74
|
+
minor: 0
|
|
75
|
+
}, 1, scaleFn);
|
|
76
|
+
expect(result).toEqual([major(0), major(1), major(2)]);
|
|
77
|
+
});
|
|
78
|
+
it('builds minor + major ticks', function () {
|
|
79
|
+
var result = utils.buildTickModel({
|
|
80
|
+
min: 0,
|
|
81
|
+
max: 2
|
|
82
|
+
}, {
|
|
83
|
+
minor: 1
|
|
84
|
+
}, 0.5, scaleFn);
|
|
85
|
+
expect(result).toEqual([major(0), minor(0.5), major(1), minor(1.5), major(2)]);
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
describe('snapTo', function () {
|
|
89
|
+
var assertSnapTo = function assertSnapTo(min, max, interval, value, expected) {
|
|
90
|
+
it("snaps ".concat(value, " to ").concat(expected, " with domain ").concat(min, "<->").concat(max, " with interval: ").concat(interval, " "), function () {
|
|
91
|
+
var result = utils.snapTo(min, max, interval, value);
|
|
92
|
+
expect(result).toEqual(expected);
|
|
93
|
+
});
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
describe('with 0, 10, 0.25', function () {
|
|
97
|
+
var a = assertSnapTo.bind(null, 0, 10, 0.25);
|
|
98
|
+
a(1, 1);
|
|
99
|
+
a(1.2, 1.25);
|
|
100
|
+
a(0.2, 0.25);
|
|
101
|
+
a(5.2, 5.25);
|
|
102
|
+
a(5.125, 5.25);
|
|
103
|
+
a(5.124, 5);
|
|
104
|
+
});
|
|
105
|
+
describe('with 0, 10, 1', function () {
|
|
106
|
+
var a = assertSnapTo.bind(null, 0, 10, 1);
|
|
107
|
+
a(0, 0);
|
|
108
|
+
a(10, 10);
|
|
109
|
+
a(100, 10);
|
|
110
|
+
a(1, 1);
|
|
111
|
+
a(1.2, 1);
|
|
112
|
+
a(0.2, 0);
|
|
113
|
+
a(5.2, 5);
|
|
114
|
+
a(5.001, 5);
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
describe('getInterval', function () {
|
|
118
|
+
var assertGetInterval = function assertGetInterval(min, max, ticks, expected) {
|
|
119
|
+
var paramsDescription = JSON.stringify(ticks);
|
|
120
|
+
it("converts: ".concat(paramsDescription, " to ").concat(JSON.stringify(expected)), function () {
|
|
121
|
+
var result = utils.getInterval({
|
|
122
|
+
min: min,
|
|
123
|
+
max: max
|
|
124
|
+
}, ticks);
|
|
125
|
+
expect(result).toEqual(expected);
|
|
126
|
+
});
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
describe('with bad params', function () {
|
|
130
|
+
it('throws an error if min > max', function () {
|
|
131
|
+
expect(function () {
|
|
132
|
+
var result = utils.convertFrequencyToInterval({
|
|
133
|
+
min: 11,
|
|
134
|
+
max: 10,
|
|
135
|
+
tickFrequency: 1,
|
|
136
|
+
betweenTickCount: 0
|
|
137
|
+
}, {
|
|
138
|
+
interval: 10,
|
|
139
|
+
major: 10
|
|
140
|
+
});
|
|
141
|
+
console.log('result: ', result);
|
|
142
|
+
}).toThrow(Error);
|
|
143
|
+
});
|
|
144
|
+
it('throws an error if min = max', function () {
|
|
145
|
+
expect(function () {
|
|
146
|
+
var result = utils.convertFrequencyToInterval({
|
|
147
|
+
min: 10,
|
|
148
|
+
max: 10,
|
|
149
|
+
tickFrequency: 1,
|
|
150
|
+
betweenTickCount: 0
|
|
151
|
+
}, {
|
|
152
|
+
interval: 10,
|
|
153
|
+
major: 10
|
|
154
|
+
});
|
|
155
|
+
console.log('result: ', result);
|
|
156
|
+
}).toThrow(Error);
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
describe('with domain 0 -> 1', function () {
|
|
160
|
+
var a = assertGetInterval.bind(null, 0, 1);
|
|
161
|
+
a({
|
|
162
|
+
major: 2,
|
|
163
|
+
minor: 0
|
|
164
|
+
}, 1);
|
|
165
|
+
a({
|
|
166
|
+
major: 2,
|
|
167
|
+
minor: 1
|
|
168
|
+
}, 0.5);
|
|
169
|
+
});
|
|
170
|
+
describe('with domain 0 -> 10', function () {
|
|
171
|
+
var a = assertGetInterval.bind(null, 0, 10);
|
|
172
|
+
it('throws an error if the tick frequency is less than 2', function () {
|
|
173
|
+
expect(function () {
|
|
174
|
+
var result = utils.convertFrequencyToInterval({
|
|
175
|
+
min: 0,
|
|
176
|
+
max: 10,
|
|
177
|
+
tickFrequency: 1,
|
|
178
|
+
betweenTickCount: 0
|
|
179
|
+
}, {
|
|
180
|
+
interval: 10,
|
|
181
|
+
major: 10
|
|
182
|
+
});
|
|
183
|
+
console.log('result: ', result);
|
|
184
|
+
}).toThrow(Error);
|
|
185
|
+
});
|
|
186
|
+
a({
|
|
187
|
+
major: 2,
|
|
188
|
+
minor: 9
|
|
189
|
+
}, 1);
|
|
190
|
+
a({
|
|
191
|
+
major: 2,
|
|
192
|
+
minor: 0
|
|
193
|
+
}, 10);
|
|
194
|
+
a({
|
|
195
|
+
major: 3,
|
|
196
|
+
minor: 0
|
|
197
|
+
}, 5);
|
|
198
|
+
a({
|
|
199
|
+
major: 3,
|
|
200
|
+
minor: 1
|
|
201
|
+
}, 2.5);
|
|
202
|
+
a({
|
|
203
|
+
major: 4,
|
|
204
|
+
minor: 0
|
|
205
|
+
}, 3.3333);
|
|
206
|
+
a({
|
|
207
|
+
major: 5,
|
|
208
|
+
minor: 0
|
|
209
|
+
}, 2.5);
|
|
210
|
+
a({
|
|
211
|
+
major: 6,
|
|
212
|
+
minor: 0
|
|
213
|
+
}, 2);
|
|
214
|
+
a({
|
|
215
|
+
major: 7,
|
|
216
|
+
minor: 0
|
|
217
|
+
}, 1.6667);
|
|
218
|
+
a({
|
|
219
|
+
major: 8,
|
|
220
|
+
minor: 0
|
|
221
|
+
}, 1.4286);
|
|
222
|
+
a({
|
|
223
|
+
major: 9,
|
|
224
|
+
minor: 0
|
|
225
|
+
}, 1.25);
|
|
226
|
+
a({
|
|
227
|
+
major: 10,
|
|
228
|
+
minor: 0
|
|
229
|
+
}, 1.1111);
|
|
230
|
+
a({
|
|
231
|
+
major: 11,
|
|
232
|
+
minor: 0
|
|
233
|
+
}, 1);
|
|
234
|
+
a({
|
|
235
|
+
major: 11,
|
|
236
|
+
minor: 1
|
|
237
|
+
}, 0.5);
|
|
238
|
+
a({
|
|
239
|
+
major: 11,
|
|
240
|
+
minor: 2
|
|
241
|
+
}, 0.3333);
|
|
242
|
+
});
|
|
243
|
+
describe('with domain 0 -> 100', function () {
|
|
244
|
+
var a = assertGetInterval.bind(null, 0, 100);
|
|
245
|
+
a({
|
|
246
|
+
major: 11,
|
|
247
|
+
minor: 1
|
|
248
|
+
}, 5);
|
|
249
|
+
a({
|
|
250
|
+
major: 101,
|
|
251
|
+
minor: 0
|
|
252
|
+
}, 1);
|
|
253
|
+
});
|
|
254
|
+
describe('with domain -5 - 5', function () {
|
|
255
|
+
var a = assertGetInterval.bind(null, -5, 5);
|
|
256
|
+
a({
|
|
257
|
+
major: 11,
|
|
258
|
+
minor: 0
|
|
259
|
+
}, 1);
|
|
260
|
+
});
|
|
261
|
+
describe('with domain 0 - 5', function () {
|
|
262
|
+
var a = assertGetInterval.bind(null, 0, 5);
|
|
263
|
+
a({
|
|
264
|
+
major: 11,
|
|
265
|
+
minor: 0
|
|
266
|
+
}, 0.5);
|
|
267
|
+
a({
|
|
268
|
+
major: 11,
|
|
269
|
+
minor: 2
|
|
270
|
+
}, 0.1667);
|
|
271
|
+
a({
|
|
272
|
+
major: 11,
|
|
273
|
+
minor: 1
|
|
274
|
+
}, 0.25);
|
|
275
|
+
});
|
|
276
|
+
});
|
|
277
|
+
describe('findLongestWord', function () {
|
|
278
|
+
it('should return 0 if label is undefined', function () {
|
|
279
|
+
var label = undefined;
|
|
280
|
+
var result = utils.findLongestWord(label);
|
|
281
|
+
expect(result).toEqual(0);
|
|
282
|
+
});
|
|
283
|
+
it('should return 0 if label is null', function () {
|
|
284
|
+
var label = null;
|
|
285
|
+
var result = utils.findLongestWord(label);
|
|
286
|
+
expect(result).toEqual(0);
|
|
287
|
+
});
|
|
288
|
+
it('should return 6 if the longest word from label has 6 letters', function () {
|
|
289
|
+
var label = 'Number of months';
|
|
290
|
+
var result = utils.findLongestWord(label);
|
|
291
|
+
expect(result).toEqual(6);
|
|
292
|
+
});
|
|
293
|
+
});
|
|
294
|
+
describe('amountToIncreaseWidth', function () {
|
|
295
|
+
it('should return 0 if longestWord is undefined', function () {
|
|
296
|
+
var longestWord = undefined;
|
|
297
|
+
var result = utils.amountToIncreaseWidth(longestWord);
|
|
298
|
+
expect(result).toEqual(0);
|
|
299
|
+
});
|
|
300
|
+
it('should return 0 if longestWord is null', function () {
|
|
301
|
+
var longestWord = null;
|
|
302
|
+
var result = utils.amountToIncreaseWidth(longestWord);
|
|
303
|
+
expect(result).toEqual(0);
|
|
304
|
+
});
|
|
305
|
+
it('should return 150 if longestWord is 10', function () {
|
|
306
|
+
var longestWord = 10;
|
|
307
|
+
var result = utils.amountToIncreaseWidth(longestWord);
|
|
308
|
+
expect(result).toEqual(200);
|
|
309
|
+
});
|
|
310
|
+
});
|
|
311
|
+
});
|
|
312
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vdXRpbHMudGVzdC5qcyJdLCJuYW1lcyI6WyJ4eSIsInV0aWxzIiwidGljayIsImlzTWFqb3IiLCJ2IiwibWFqb3IiLCJ2YWx1ZSIsIngiLCJiaW5kIiwibWlub3IiLCJkZXNjcmliZSIsImFzc2VydERlbHRhIiwiZnJvbSIsInRvIiwiZGVsdGEiLCJpdCIsImQiLCJnZXREZWx0YSIsImV4cGVjdCIsInRvRXF1YWwiLCJ5IiwiYXNzZXJ0UG9seWdvbiIsInBvaW50cyIsImFyZWEiLCJyZXN1bHQiLCJwb2x5Z29uVG9BcmVhIiwibGVmdCIsInRvcCIsImJvdHRvbSIsInJpZ2h0Iiwic2NhbGVGbiIsImJlZm9yZUVhY2giLCJqZXN0IiwiZm4iLCJidWlsZFRpY2tNb2RlbCIsIm1pbiIsIm1heCIsImFzc2VydFNuYXBUbyIsImludGVydmFsIiwiZXhwZWN0ZWQiLCJzbmFwVG8iLCJhIiwiYXNzZXJ0R2V0SW50ZXJ2YWwiLCJ0aWNrcyIsInBhcmFtc0Rlc2NyaXB0aW9uIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldEludGVydmFsIiwiY29udmVydEZyZXF1ZW5jeVRvSW50ZXJ2YWwiLCJ0aWNrRnJlcXVlbmN5IiwiYmV0d2VlblRpY2tDb3VudCIsImNvbnNvbGUiLCJsb2ciLCJ0b1Rocm93IiwiRXJyb3IiLCJsYWJlbCIsInVuZGVmaW5lZCIsImZpbmRMb25nZXN0V29yZCIsImxvbmdlc3RXb3JkIiwiYW1vdW50VG9JbmNyZWFzZVdpZHRoIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7O0FBQ0E7Ozs7OztBQUVBLElBQU1BLEVBQUUsR0FBR0MsS0FBSyxDQUFDRCxFQUFqQjs7QUFFQSxJQUFNRSxJQUFJLEdBQUcsU0FBUEEsSUFBTyxDQUFDQyxPQUFELEVBQVVDLENBQVY7QUFBQSxTQUFpQjtBQUM1QkMsSUFBQUEsS0FBSyxFQUFFRixPQURxQjtBQUU1QkcsSUFBQUEsS0FBSyxFQUFFRixDQUZxQjtBQUc1QkcsSUFBQUEsQ0FBQyxF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QUNBLFVBQU0vQixNQUFNLEdBQUd2QixLQUFLLENBQUN3RCxlQUFOLENBQXNCRixLQUF0QixDQUFmO0FBRUFyQyxNQUFBQSxNQUFNLENBQUNNLE1BQUQsQ0FBTixDQUFlTCxPQUFmLENBQXVCLENBQXZCO0FBQ0QsS0FMQyxDQUFGO0FBTUQsR0FyQk8sQ0FBUjtBQXVCQVQsRUFBQUEsUUFBUSxDQUFDLHVCQUFELEVBQTBCLFlBQU07QUFDdENLLElBQUFBLEVBQUUsQ0FBQyw2Q0FBRCxFQUFnRCxZQUFNO0FBQ3RELFVBQU0yQyxXQUFXLEdBQUdGLFNBQXBCO0FBQ0EsVUFBTWhDLE1BQU0sR0FBR3ZCLEtBQUssQ0FBQzBELHFCQUFOLENBQTRCRCxXQUE1QixDQUFmO0FBRUF4QyxNQUFBQSxNQUFNLENBQUNNLE1BQUQsQ0FBTixDQUFlTCxPQUFmLENBQXVCLENBQXZCO0FBQ0QsS0FMQyxDQUFGO0FBT0FKLElBQUFBLEVBQUUsQ0FBQyx3Q0FBRCxFQUEyQyxZQUFNO0FBQ2pELFVBQU0yQyxXQUFXLEdBQUcsSUFBcEI7QUFDQSxVQUFNbEMsTUFBTSxHQUFHdkIsS0FBSyxDQUFDMEQscUJBQU4sQ0FBNEJELFdBQTVCLENBQWY7QUFFQXhDLE1BQUFBLE1BQU0sQ0FBQ00sTUFBRCxDQUFOLENBQWVMLE9BQWYsQ0FBdUIsQ0FBdkI7QUFDRCxLQUxDLENBQUY7QUFPQUosSUFBQUEsRUFBRSxDQUFDLHdDQUFELEVBQTJDLFlBQU07QUFDakQsVUFBTTJDLFdBQVcsR0FBRyxFQUFwQjtBQUNBLFVBQU1sQyxNQUFNLEdBQUd2QixLQUFLLENBQUMwRCxxQkFBTixDQUE0QkQsV0FBNUIsQ0FBZjtBQUVBeEMsTUFBQUEsTUFBTSxDQUFDTSxNQUFELENBQU4sQ0FBZUwsT0FBZixDQUF1QixHQUF2QjtBQUNELEtBTEMsQ0FBRjtBQU1ELEdBckJPLENBQVI7QUFzQkQsQ0ExTk8sQ0FBUiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzc2VydGlvbkVycm9yIH0gZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4uL3V0aWxzJztcblxuY29uc3QgeHkgPSB1dGlscy54eTtcblxuY29uc3QgdGljayA9IChpc01ham9yLCB2KSA9PiAoe1xuICBtYWpvcjogaXNNYWpvcixcbiAgdmFsdWU6IHYsXG4gIHg6IHYsXG59KTtcblxuY29uc3QgbWFqb3IgPSB0aWNrLmJpbmQobnVsbCwgdHJ1ZSk7XG5jb25zdCBtaW5vciA9IHRpY2suYmluZChudWxsLCBmYWxzZSk7XG5cbmRlc2NyaWJlKCd1dGlscycsICgpID0+IHtcbiAgZGVzY3JpYmUoJ2dldERlbHRhJywgKCkgPT4ge1xuICAgIGNvbnN0IGFzc2VydERlbHRhID0gKGZyb20sIHRvLCBkZWx0YSkgPT4ge1xuICAgICAgaXQoYHJldHVybnMgYSBkZWx0YSBvZjogJHtkZWx0YX0gZm9yICR7ZnJvbX0gLT4gJHt0b31gLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGQgPSB1dGlscy5nZXREZWx0YShmcm9tLCB0byk7XG4gICAgICAgIGV4cGVjdChkLngpLnRvRXF1YWwoZGVsdGEueCk7XG4gICAgICAgIGV4cGVjdChkLnkpLnRvRXF1YWwoZGVsdGEueSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGFzc2VydERlbHRhKHh5KDAsIDApLCB4eSgwLCAxKSwgeHkoMCwgMSkpO1xuICAgIGFzc2VydERlbHRhKHh5KDAsIDEpLCB4eSgwLCAwKSwgeHkoMCwgLTEpKTtcbiAgICBhc3NlcnREZWx0YSh4eSgxLCAxKSwgeHkoMywgMyksIHh5KDIsIDIpKTtcbiAgICBhc3NlcnREZWx0YSh4eSgtMSwgLTEpLCB4eSgzLCAzKSwgeHkoNCwgNCkpO1xuICAgIGFzc2VydERlbHRhKHh5KC0xLCAtMSksIHh5KC0yLCAtNSksIHh5KC0xLCAtNCkpO1xuICB9KTtcblxuICBkZXNjcmliZSgncG9seWdvblRvQXJlYScsICgpID0+IHtcbiAgICBjb25zdCBhc3NlcnRQb2x5Z29uID0gKHBvaW50cywgYXJlYSkgPT4ge1xuICAgICAgaXQoYGNvbnZlcnRzICR7cG9pbnRzfSAtPiAke2FyZWF9YCwgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB1dGlscy5wb2x5Z29uVG9BcmVhKHBvaW50cyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoYXJlYSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGFzc2VydFBvbHlnb24oW3h5KDAsIDApLCB4eSgxLCAxKSwgeHkoMSwgLTEpXSwge1xuICAgICAgbGVmdDogMCxcbiAgICAgIHRvcDogMSxcbiAgICAgIGJvdHRvbTogLTEsXG4gICAgICByaWdodDogMSxcbiAgICB9KTtcbiAgICBhc3NlcnRQb2x5Z29uKFt4eSgwLCAwKSwgeHkoMywgMCksIHh5KDIsIC0xKSwgeHkoNCwgLTMpLCB4eSgxLCAtNCksIHh5KDIsIC0yKV0sIHtcbiAgICAgIGxlZnQ6IDAsXG4gICAgICB0b3A6IDAsXG4gICAgICBib3R0b206IC00LFxuICAgICAgcmlnaHQ6IDQsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdidWlsZFRpY2tNb2RlbCcsICgpID0+IHtcbiAgICBsZXQgc2NhbGVGbjtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgc2NhbGVGbiA9IGplc3QuZm4oZnVuY3Rpb24odikge1xuICAgICAgICByZXR1cm4gdjtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2J1aWxkcyBtYWpvciBvbmx5IHRpY2tzJywgKCkgPT4ge1xuICAgICAgbGV0IHJlc3VsdCA9IHV0aWxzLmJ1aWxkVGlja01vZGVsKHsgbWluOiAwLCBtYXg6IDIgfSwgeyBtaW5vcjogMCB9LCAxLCBzY2FsZUZuKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW21ham9yKDApLCBtYWpvcigxKSwgbWFqb3IoMildKTtcbiAgICB9KTtcblxuICAgIGl0KCdidWlsZHMgbWlub3IgKyBtYWpvciB0aWNrcycsICgpID0+IHtcbiAgICAgIGxldCByZXN1bHQgPSB1dGlscy5idWlsZFRpY2tNb2RlbCh7IG1pbjogMCwgbWF4OiAyIH0sIHsgbWlub3I6IDEgfSwgMC41LCBzY2FsZUZuKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW21ham9yKDApLCBtaW5vcigwLjUpLCBtYWpvcigxKSwgbWlub3IoMS41KSwgbWFqb3IoMildKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NuYXBUbycsICgpID0+IHtcbiAgICBsZXQgYXNzZXJ0U25hcFRvID0gKG1pbiwgbWF4LCBpbnRlcnZhbCwgdmFsdWUsIGV4cGVjdGVkKSA9PiB7XG4gICAgICBpdChgc25hcHMgJHt2YWx1ZX0gdG8gJHtleHBlY3RlZH0gd2l0aCBkb21haW4gJHttaW59PC0+JHttYXh9IHdpdGggaW50ZXJ2YWw6ICR7aW50ZXJ2YWx9IGAsICgpID0+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHV0aWxzLnNuYXBUbyhtaW4sIG1heCwgaW50ZXJ2YWwsIHZhbHVlKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgZGVzY3JpYmUoJ3dpdGggMCwgMTAsIDAuMjUnLCAoKSA9PiB7XG4gICAgICBsZXQgYSA9IGFzc2VydFNuYXBUby5iaW5kKG51bGwsIDAsIDEwLCAwLjI1KTtcbiAgICAgIGEoMSwgMSk7XG4gICAgICBhKDEuMiwgMS4yNSk7XG4gICAgICBhKDAuMiwgMC4yNSk7XG4gICAgICBhKDUuMiwgNS4yNSk7XG4gICAgICBhKDUuMTI1LCA1LjI1KTtcbiAgICAgIGEoNS4xMjQsIDUpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3dpdGggMCwgMTAsIDEnLCAoKSA9PiB7XG4gICAgICBsZXQgYSA9IGFzc2VydFNuYXBUby5iaW5kKG51bGwsIDAsIDEwLCAxKTtcbiAgICAgIGEoMCwgMCk7XG4gICAgICBhKDEwLCAxMCk7XG4gICAgICBhKDEwMCwgMTApO1xuICAgICAgYSgxLCAxKTtcbiAgICAgIGEoMS4yLCAxKTtcbiAgICAgIGEoMC4yLCAwKTtcbiAgICAgIGEoNS4yLCA1KTtcbiAgICAgIGEoNS4wMDEsIDUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0SW50ZXJ2YWwnLCAoKSA9PiB7XG4gICAgbGV0IGFzc2VydEdldEludGVydmFsID0gKG1pbiwgbWF4LCB0aWNrcywgZXhwZWN0ZWQpID0+IHtcbiAgICAgIGxldCBwYXJhbXNEZXNjcmlwdGlvbiA9IEpTT04uc3RyaW5naWZ5KHRpY2tzKTtcbiAgICAgIGl0KGBjb252ZXJ0czogJHtwYXJhbXNEZXNjcmlwdGlvbn0gdG8gJHtKU09OLnN0cmluZ2lmeShleHBlY3RlZCl9YCwgKCkgPT4ge1xuICAgICAgICBsZXQgcmVzdWx0ID0gdXRpbHMuZ2V0SW50ZXJ2YWwoeyBtaW46IG1pbiwgbWF4OiBtYXggfSwgdGlja3MpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBkZXNjcmliZSgnd2l0aCBiYWQgcGFyYW1zJywgKCkgPT4ge1xuICAgICAgaXQoJ3Rocm93cyBhbiBlcnJvciBpZiBtaW4gPiBtYXgnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgbGV0IHJlc3VsdCA9IHV0aWxzLmNvbnZlcnRGcmVxdWVuY3lUb0ludGVydmFsKFxuICAgICAgICAgICAgeyBtaW46IDExLCBtYXg6IDEwLCB0aWNrRnJlcXVlbmN5OiAxLCBiZXR3ZWVuVGlja0NvdW50OiAwIH0sXG4gICAgICAgICAgICB7IGludGVydmFsOiAxMCwgbWFqb3I6IDEwIH0sXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zb2xlLmxvZygncmVzdWx0OiAnLCByZXN1bHQpO1xuICAgICAgICB9KS50b1Rocm93KEVycm9yKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgndGhyb3dzIGFuIGVycm9yIGlmIG1pbiA9IG1heCcsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICBsZXQgcmVzdWx0ID0gdXRpbHMuY29udmVydEZyZXF1ZW5jeVRvSW50ZXJ2YWwoXG4gICAgICAgICAgICB7IG1pbjogMTAsIG1heDogMTAsIHRpY2tGcmVxdWVuY3k6IDEsIGJldHdlZW5UaWNrQ291bnQ6IDAgfSxcbiAgICAgICAgICAgIHsgaW50ZXJ2YWw6IDEwLCBtYWpvcjogMTAgfSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdyZXN1bHQ6ICcsIHJlc3VsdCk7XG4gICAgICAgIH0pLnRvVGhyb3coRXJyb3IpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnd2l0aCBkb21haW4gMCAtPiAxJywgKCkgPT4ge1xuICAgICAgbGV0IGEgPSBhc3NlcnRHZXRJbnRlcnZhbC5iaW5kKG51bGwsIDAsIDEpO1xuICAgICAgYSh7IG1ham9yOiAyLCBtaW5vcjogMCB9LCAxKTtcbiAgICAgIGEoeyBtYWpvcjogMiwgbWlub3I6IDEgfSwgMC41KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd3aXRoIGRvbWFpbiAwIC0+IDEwJywgKCkgPT4ge1xuICAgICAgbGV0IGEgPSBhc3NlcnRHZXRJbnRlcnZhbC5iaW5kKG51bGwsIDAsIDEwKTtcblxuICAgICAgaXQoJ3Rocm93cyBhbiBlcnJvciBpZiB0aGUgdGljayBmcmVxdWVuY3kgaXMgbGVzcyB0aGFuIDInLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgbGV0IHJlc3VsdCA9IHV0aWxzLmNvbnZlcnRGcmVxdWVuY3lUb0ludGVydmFsKFxuICAgICAgICAgICAgeyBtaW46IDAsIG1heDogMTAsIHRpY2tGcmVxdWVuY3k6IDEsIGJldHdlZW5UaWNrQ291bnQ6IDAgfSxcbiAgICAgICAgICAgIHsgaW50ZXJ2YWw6IDEwLCBtYWpvcjogMTAgfSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdyZXN1bHQ6ICcsIHJlc3VsdCk7XG4gICAgICAgIH0pLnRvVGhyb3coRXJyb3IpO1xuICAgICAgfSk7XG5cbiAgICAgIGEoeyBtYWpvcjogMiwgbWlub3I6IDkgfSwgMSk7XG4gICAgICBhKHsgbWFqb3I6IDIsIG1pbm9yOiAwIH0sIDEwKTtcbiAgICAgIGEoeyBtYWpvcjogMywgbWlub3I6IDAgfSwgNSk7XG4gICAgICBhKHsgbWFqb3I6IDMsIG1pbm9yOiAxIH0sIDIuNSk7XG4gICAgICBhKHsgbWFqb3I6IDQsIG1pbm9yOiAwIH0sIDMuMzMzMyk7XG4gICAgICBhKHsgbWFqb3I6IDUsIG1pbm9yOiAwIH0sIDIuNSk7XG4gICAgICBhKHsgbWFqb3I6IDYsIG1pbm9yOiAwIH0sIDIpO1xuICAgICAgYSh7IG1ham9yOiA3LCBtaW5vcjogMCB9LCAxLjY2NjcpO1xuICAgICAgYSh7IG1ham9yOiA4LCBtaW5vcjogMCB9LCAxLjQyODYpO1xuICAgICAgYSh7IG1ham9yOiA5LCBtaW5vcjogMCB9LCAxLjI1KTtcbiAgICAgIGEoeyBtYWpvcjogMTAsIG1pbm9yOiAwIH0sIDEuMTExMSk7XG4gICAgICBhKHsgbWFqb3I6IDExLCBtaW5vcjogMCB9LCAxKTtcbiAgICAgIGEoeyBtYWpvcjogMTEsIG1pbm9yOiAxIH0sIDAuNSk7XG4gICAgICBhKHsgbWFqb3I6IDExLCBtaW5vcjogMiB9LCAwLjMzMzMpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3dpdGggZG9tYWluIDAgLT4gMTAwJywgKCkgPT4ge1xuICAgICAgbGV0IGEgPSBhc3NlcnRHZXRJbnRlcnZhbC5iaW5kKG51bGwsIDAsIDEwMCk7XG4gICAgICBhKHsgbWFqb3I6IDExLCBtaW5vcjogMSB9LCA1KTtcbiAgICAgIGEoeyBtYWpvcjogMTAxLCBtaW5vcjogMCB9LCAxKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd3aXRoIGRvbWFpbiAtNSAtIDUnLCAoKSA9PiB7XG4gICAgICBsZXQgYSA9IGFzc2VydEdldEludGVydmFsLmJpbmQobnVsbCwgLTUsIDUpO1xuICAgICAgYSh7IG1ham9yOiAxMSwgbWlub3I6IDAgfSwgMSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnd2l0aCBkb21haW4gMCAtIDUnLCAoKSA9PiB7XG4gICAgICBsZXQgYSA9IGFzc2VydEdldEludGVydmFsLmJpbmQobnVsbCwgMCwgNSk7XG4gICAgICBhKHsgbWFqb3I6IDExLCBtaW5vcjogMCB9LCAwLjUpO1xuICAgICAgYSh7IG1ham9yOiAxMSwgbWlub3I6IDIgfSwgMC4xNjY3KTtcbiAgICAgIGEoeyBtYWpvcjogMTEsIG1pbm9yOiAxIH0sIDAuMjUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZmluZExvbmdlc3RXb3JkJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIDAgaWYgbGFiZWwgaXMgdW5kZWZpbmVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgbGFiZWwgPSB1bmRlZmluZWQ7XG4gICAgICBjb25zdCByZXN1bHQgPSB1dGlscy5maW5kTG9uZ2VzdFdvcmQobGFiZWwpO1xuXG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKDApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gMCBpZiBsYWJlbCBpcyBudWxsJywgKCkgPT4ge1xuICAgICAgY29uc3QgbGFiZWwgPSBudWxsO1xuICAgICAgY29uc3QgcmVzdWx0ID0gdXRpbHMuZmluZExvbmdlc3RXb3JkKGxhYmVsKTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCgwKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIDYgaWYgdGhlIGxvbmdlc3Qgd29yZCBmcm9tIGxhYmVsIGhhcyA2IGxldHRlcnMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBsYWJlbCA9ICdOdW1iZXIgb2YgbW9udGhzJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHV0aWxzLmZpbmRMb25nZXN0V29yZChsYWJlbCk7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoNik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdhbW91bnRUb0luY3JlYXNlV2lkdGgnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gMCBpZiBsb25nZXN0V29yZCBpcyB1bmRlZmluZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBsb25nZXN0V29yZCA9IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHV0aWxzLmFtb3VudFRvSW5jcmVhc2VXaWR0aChsb25nZXN0V29yZCk7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiAwIGlmIGxvbmdlc3RXb3JkIGlzIG51bGwnLCAoKSA9PiB7XG4gICAgICBjb25zdCBsb25nZXN0V29yZCA9IG51bGw7XG4gICAgICBjb25zdCByZXN1bHQgPSB1dGlscy5hbW91bnRUb0luY3JlYXNlV2lkdGgobG9uZ2VzdFdvcmQpO1xuXG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKDApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gMTUwIGlmIGxvbmdlc3RXb3JkIGlzIDEwJywgKCkgPT4ge1xuICAgICAgY29uc3QgbG9uZ2VzdFdvcmQgPSAxMDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHV0aWxzLmFtb3VudFRvSW5jcmVhc2VXaWR0aChsb25nZXN0V29yZCk7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoMjAwKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
package/lib/draggable.js
CHANGED
|
@@ -62,4 +62,4 @@ var LocalDraggable = /*#__PURE__*/function (_Draggable) {
|
|
|
62
62
|
}(_reactDraggable["default"]);
|
|
63
63
|
|
|
64
64
|
exports["default"] = LocalDraggable;
|
|
65
|
-
//# sourceMappingURL=
|
|
65
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kcmFnZ2FibGUuanN4Il0sIm5hbWVzIjpbIkxvY2FsRHJhZ2dhYmxlIiwibmV4dCIsInNldFN0YXRlIiwieCIsInkiLCJEcmFnZ2FibGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7Ozs7Ozs7SUFFcUJBLGM7Ozs7Ozs7Ozs7OztXQUNuQixtQ0FBMEJDLElBQTFCLEVBQWdDO0FBQzlCLHNJQUFnQ0EsSUFBaEMsRUFEOEIsQ0FFOUI7O0FBQ0EsV0FBS0MsUUFBTCxDQUFjO0FBQUVDLFFBQUFBLENBQUMsRUFBRSxDQUFMO0FBQVFDLFFBQUFBLENBQUMsRUFBRTtBQUFYLE9BQWQ7QUFDRDs7O0VBTHlDQywwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBEcmFnZ2FibGUsIHsgRHJhZ2dhYmxlQ29yZSB9IGZyb20gJ3JlYWN0LWRyYWdnYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvY2FsRHJhZ2dhYmxlIGV4dGVuZHMgRHJhZ2dhYmxlIHtcbiAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0KSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0KTtcbiAgICAvL1JlbW92ZSB0aGUgeC95IHN0YXRlIGFzIHRoZXNlIHZhbHVlcyBoYXZlIG5vdyBiZWVuIHVwZGF0ZWQgYW5kIHdpbGwgY29tZSB0aHJvdWdoIGFzIHByb3BzLlxuICAgIHRoaXMuc2V0U3RhdGUoeyB4OiAwLCB5OiAwIH0pO1xuICB9XG59XG5cbmV4cG9ydCB7IERyYWdnYWJsZUNvcmUgfTtcbiJdfQ==
|
package/lib/graph-props.js
CHANGED
|
@@ -50,4 +50,4 @@ var create = function create(domain, range, size, getRootNode) {
|
|
|
50
50
|
};
|
|
51
51
|
|
|
52
52
|
exports.create = create;
|
|
53
|
-
//# sourceMappingURL=
|
|
53
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9ncmFwaC1wcm9wcy5qcyJdLCJuYW1lcyI6WyJjcmVhdGVTbmFwTWluQW5kTWF4IiwibWluIiwibWF4Iiwic3RlcCIsInBhcnNlSW50IiwiY3JlYXRlIiwiZG9tYWluIiwicmFuZ2UiLCJzaXplIiwiZ2V0Um9vdE5vZGUiLCJkb21haW5NaW5NYXgiLCJyYW5nZU1pbk1heCIsInNjYWxlIiwieCIsIndpZHRoIiwieSIsImhlaWdodCIsInNuYXAiLCJzbmFwVG8iLCJiaW5kIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFFQSxJQUFNQSxtQkFBbUIsR0FBRyxTQUF0QkEsbUJBQXNCLE9BQXdCO0FBQUEsTUFBckJDLEdBQXFCLFFBQXJCQSxHQUFxQjtBQUFBLE1BQWhCQyxHQUFnQixRQUFoQkEsR0FBZ0I7QUFBQSxNQUFYQyxJQUFXLFFBQVhBLElBQVc7QUFDbEQ7QUFDQTtBQUVBLFNBQU87QUFDTEEsSUFBQUEsSUFBSSxFQUFKQSxJQURLO0FBRUxGLElBQUFBLEdBQUcsRUFBRUcsUUFBUSxDQUFDSCxHQUFHLEdBQUdFLElBQVAsQ0FBUixHQUF1QkEsSUFGdkI7QUFHTEQsSUFBQUEsR0FBRyxFQUFFRSxRQUFRLENBQUNGLEdBQUcsR0FBR0MsSUFBUCxDQUFSLEdBQXVCQTtBQUh2QixHQUFQO0FBS0QsQ0FURDs7QUFXTyxJQUFNRSxNQUFNLEdBQUcsU0FBVEEsTUFBUyxDQUFDQyxNQUFELEVBQVNDLEtBQVQsRUFBZ0JDLElBQWhCLEVBQXNCQyxXQUF0QixFQUFzQztBQUMxRCw2QkFBVUgsTUFBTSxDQUFDTCxHQUFQLEdBQWFLLE1BQU0sQ0FBQ0osR0FBOUIsRUFBbUMsbUNBQW5DO0FBQ0EsNkJBQVVLLEtBQUssQ0FBQ04sR0FBTixHQUFZTSxLQUFLLENBQUNMLEdBQTVCLEVBQWlDLGtDQUFqQztBQUVBLE1BQU1RLFlBQVksR0FBR1YsbUJBQW1CLENBQUNNLE1BQUQsQ0FBeEM7QUFDQSxNQUFNSyxXQUFXLEdBQUdYLG1CQUFtQixDQUFDTyxLQUFELENBQXZDO0FBRUEsTUFBTUssS0FBSyxHQUFHO0FBQ1pDLElBQUFBLENBQUMsRUFBRSw0QkFDQVAsTUFEQSxDQUNPLENBQUNBLE1BQU0sQ0FBQ0wsR0FBUixFQUFhSyxNQUFNLENBQUNKLEdBQXBCLENBRFAsRUFFQUssS0FGQSxDQUVNLENBQUMsQ0FBRCxFQUFJQyxJQUFJLENBQUNNLEtBQVQsQ0FGTixDQURTO0FBSVpDLElBQUFBLENBQUMsRUFBRSw0QkFDQVQsTUFEQSxDQUNPLENBQUNDLEtBQUssQ0FBQ0wsR0FBUCxFQUFZSyxLQUFLLENBQUNOLEdBQWxCLENBRFAsRUFFQU0sS0FGQSxDQUVNLENBQUMsQ0FBRCxFQUFJQyxJQUFJLENBQUNRLE1BQVQsQ0FGTjtBQUpTLEdBQWQ7QUFTQSxNQUFNQyxJQUFJLEdBQUc7QUFDWEosSUFBQUEsQ0FBQyxFQUFFSyxjQUFPQyxJQUFQLENBQVksSUFBWixFQUFrQlQsWUFBWSxDQUFDVCxHQUEvQixFQUFvQ1MsWUFBWSxDQUFDUixHQUFqRCxFQUFzRFEsWUFBWSxDQUFDUCxJQUFuRSxDQURRO0FBRVhZLElBQUFBLENBQUMsRUFBRUcsY0FBT0MsSUFBUCxDQUFZLElBQVosRUFBa0JSLFdBQVcsQ0FBQ1YsR0FBOUIsRUFBbUNVLFdBQVcsQ0FBQ1QsR0FBL0MsRUFBb0RTLFdBQVcsQ0FBQ1IsSUFBaEU7QUFGUSxHQUFiO0FBS0EsU0FBTztBQUFFUyxJQUFBQSxLQUFLLEVBQUxBLEtBQUY7QUFBU0ssSUFBQUEsSUFBSSxFQUFKQSxJQUFUO0FBQWVYLElBQUFBLE1BQU0sRUFBTkEsTUFBZjtBQUF1QkMsSUFBQUEsS0FBSyxFQUFMQSxLQUF2QjtBQUE4QkMsSUFBQUEsSUFBSSxFQUFKQSxJQUE5QjtBQUFvQ0MsSUFBQUEsV0FBVyxFQUFYQTtBQUFwQyxHQUFQO0FBQ0QsQ0F0Qk0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW52YXJpYW50IGZyb20gJ2ludmFyaWFudCc7XG5pbXBvcnQgeyBzbmFwVG8gfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IHNjYWxlTGluZWFyIH0gZnJvbSAnZDMtc2NhbGUnO1xuXG5jb25zdCBjcmVhdGVTbmFwTWluQW5kTWF4ID0gKHsgbWluLCBtYXgsIHN0ZXAgfSkgPT4ge1xuICAvLyBmb3IgZ3JhcGhpbmcsIGlmIHN0ZXAgaXMgYSB2YWx1ZSB3aXRoIGRlY2ltYWxzLCB3ZSBoYXZlIHRvIGNhbGN1bGF0ZSB0aGUgbWluICYgbWF4IGZvciB0aGUgZ3JpZCB0YWtpbmcgaW4gY29uc2lkZXJhdGlvbiB0aGF0IDAgaGFzIHRvIGJlIGV4YWN0bHkgaW4gdGhlIG1pZGRsZVxuICAvLyBmb3IgZXhhbXBsZSwgaWYgbWluOiAtNSAmIG1heDogNSAmIHN0ZXA6IDAuNzUsIGluIG9yZGVyIHRvIGtlZXAgMCBpbiB0aGUgbWlkZGxlIHdlIGhhdmUgdG8gc2V0IG1pbjogLTQuNSAmIG1heDogNC41XG5cbiAgcmV0dXJuIHtcbiAgICBzdGVwLFxuICAgIG1pbjogcGFyc2VJbnQobWluIC8gc3RlcCkgKiBzdGVwLFxuICAgIG1heDogcGFyc2VJbnQobWF4IC8gc3RlcCkgKiBzdGVwLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZSA9IChkb21haW4sIHJhbmdlLCBzaXplLCBnZXRSb290Tm9kZSkgPT4ge1xuICBpbnZhcmlhbnQoZG9tYWluLm1pbiA8IGRvbWFpbi5tYXgsICdkb21haW46IG1pbiBtdXN0IGJlIGxlc3MgdGhhbiBtYXgnKTtcbiAgaW52YXJpYW50KHJhbmdlLm1pbiA8IHJhbmdlLm1heCwgJ3JhbmdlOiBtaW4gbXVzdCBiZSBsZXNzIHRoYW4gbWF4Jyk7XG5cbiAgY29uc3QgZG9tYWluTWluTWF4ID0gY3JlYXRlU25hcE1pbkFuZE1heChkb21haW4pO1xuICBjb25zdCByYW5nZU1pbk1heCA9IGNyZWF0ZVNuYXBNaW5BbmRNYXgocmFuZ2UpO1xuXG4gIGNvbnN0IHNjYWxlID0ge1xuICAgIHg6IHNjYWxlTGluZWFyKClcbiAgICAgIC5kb21haW4oW2RvbWFpbi5taW4sIGRvbWFpbi5tYXhdKVxuICAgICAgLnJhbmdlKFswLCBzaXplLndpZHRoXSksXG4gICAgeTogc2NhbGVMaW5lYXIoKVxuICAgICAgLmRvbWFpbihbcmFuZ2UubWF4LCByYW5nZS5taW5dKVxuICAgICAgLnJhbmdlKFswLCBzaXplLmhlaWdodF0pLFxuICB9O1xuXG4gIGNvbnN0IHNuYXAgPSB7XG4gICAgeDogc25hcFRvLmJpbmQobnVsbCwgZG9tYWluTWluTWF4Lm1pbiwgZG9tYWluTWluTWF4Lm1heCwgZG9tYWluTWluTWF4LnN0ZXApLFxuICAgIHk6IHNuYXBUby5iaW5kKG51bGwsIHJhbmdlTWluTWF4Lm1pbiwgcmFuZ2VNaW5NYXgubWF4LCByYW5nZU1pbk1heC5zdGVwKSxcbiAgfTtcblxuICByZXR1cm4geyBzY2FsZSwgc25hcCwgZG9tYWluLCByYW5nZSwgc2l6ZSwgZ2V0Um9vdE5vZGUgfTtcbn07XG4iXX0=
|
package/lib/grid-draggable.js
CHANGED
|
@@ -47,7 +47,7 @@ var _invariant = _interopRequireDefault(require("invariant"));
|
|
|
47
47
|
|
|
48
48
|
var _d3Selection = require("d3-selection");
|
|
49
49
|
|
|
50
|
-
var _excluded = ["disabled"
|
|
50
|
+
var _excluded = ["disabled"];
|
|
51
51
|
|
|
52
52
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
53
53
|
|
|
@@ -164,14 +164,55 @@ var gridDraggable = function gridDraggable(opts) {
|
|
|
164
164
|
log('[getScaledBounds]: ', scaled);
|
|
165
165
|
return scaled;
|
|
166
166
|
});
|
|
167
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getClientPoint", function (node, event) {
|
|
168
|
+
if (!node || !event) {
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
var svg = node.ownerSVGElement || node;
|
|
173
|
+
|
|
174
|
+
if (svg && svg.createSVGPoint) {
|
|
175
|
+
var point = svg.createSVGPoint(); // Check if it's a touch event and use the first touch point
|
|
176
|
+
|
|
177
|
+
if (event.touches && event.touches.length > 0) {
|
|
178
|
+
var touch = event.touches[0];
|
|
179
|
+
point.x = touch.clientX;
|
|
180
|
+
point.y = touch.clientY;
|
|
181
|
+
} else {
|
|
182
|
+
// Fall back to mouse event properties
|
|
183
|
+
point.x = event.clientX;
|
|
184
|
+
point.y = event.clientY;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
if (node.getScreenCTM) {
|
|
188
|
+
point = point.matrixTransform(node.getScreenCTM().inverse());
|
|
189
|
+
return [point.x, point.y];
|
|
190
|
+
} else {
|
|
191
|
+
return null;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
var rect = node.getBoundingClientRect();
|
|
196
|
+
|
|
197
|
+
if (rect) {
|
|
198
|
+
return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];
|
|
199
|
+
} else {
|
|
200
|
+
return null;
|
|
201
|
+
}
|
|
202
|
+
});
|
|
167
203
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "skipDragOutsideOfBounds", function (dd, e, graphProps) {
|
|
168
|
-
//
|
|
204
|
+
// Ignore drag movement outside of the domain and range.
|
|
169
205
|
var rootNode = graphProps.getRootNode();
|
|
170
206
|
|
|
171
|
-
var
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
207
|
+
var clientPoint = _this.getClientPoint(rootNode, e);
|
|
208
|
+
|
|
209
|
+
if (clientPoint === null) {
|
|
210
|
+
return true; // Indicate that the drag is outside of bounds
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
var _clientPoint = (0, _slicedToArray2["default"])(clientPoint, 2),
|
|
214
|
+
rawX = _clientPoint[0],
|
|
215
|
+
rawY = _clientPoint[1];
|
|
175
216
|
|
|
176
217
|
var scale = graphProps.scale,
|
|
177
218
|
domain = graphProps.domain,
|
|
@@ -263,10 +304,10 @@ var gridDraggable = function gridDraggable(opts) {
|
|
|
263
304
|
var scale = graphProps.scale,
|
|
264
305
|
snap = graphProps.snap;
|
|
265
306
|
|
|
266
|
-
var
|
|
267
|
-
|
|
268
|
-
rawX =
|
|
269
|
-
rawY =
|
|
307
|
+
var _clientPoint2 = (0, _d3Selection.clientPoint)(e.target, e),
|
|
308
|
+
_clientPoint3 = (0, _slicedToArray2["default"])(_clientPoint2, 2),
|
|
309
|
+
rawX = _clientPoint3[0],
|
|
310
|
+
rawY = _clientPoint3[1];
|
|
270
311
|
|
|
271
312
|
var x = scale.x.invert(rawX);
|
|
272
313
|
var y = scale.y.invert(rawY);
|
|
@@ -294,15 +335,10 @@ var gridDraggable = function gridDraggable(opts) {
|
|
|
294
335
|
(0, _createClass2["default"])(GridDraggable, [{
|
|
295
336
|
key: "render",
|
|
296
337
|
value: function render() {
|
|
297
|
-
/* eslint-disable no-unused-vars */
|
|
298
|
-
//Note: we pull onClick out so that it's not in ...rest.
|
|
299
338
|
var _this$props3 = this.props,
|
|
300
339
|
disabled = _this$props3.disabled,
|
|
301
|
-
onClick = _this$props3.onClick,
|
|
302
340
|
rest = (0, _objectWithoutProperties2["default"])(_this$props3, _excluded);
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
var grid = this.grid(); //prevent the text select icon from rendering.
|
|
341
|
+
var grid = this.grid(); // prevent the text select icon from rendering.
|
|
306
342
|
|
|
307
343
|
var onMouseDown = function onMouseDown(e) {
|
|
308
344
|
return e.nativeEvent.preventDefault();
|
|
@@ -342,4 +378,4 @@ var gridDraggable = function gridDraggable(opts) {
|
|
|
342
378
|
};
|
|
343
379
|
|
|
344
380
|
exports.gridDraggable = gridDraggable;
|
|
345
|
-
//# sourceMappingURL=grid-draggable.js.map
|
|
381
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9ncmlkLWRyYWdnYWJsZS5qc3giXSwibmFtZXMiOlsibG9nIiwiZGVsdGFGbiIsInNjYWxlIiwic25hcCIsInZhbCIsImRlbHRhIiwibm9ybWFsaXplZCIsImludmVydGVkIiwiaW52ZXJ0IiwiZml4RGVjaW1hbHNBcml0aG1ldGljIiwidG9GaXhlZCIsImdyaWREcmFnZ2FibGUiLCJvcHRzIiwiQ29tcCIsImZyb21EZWx0YSIsImJvdW5kcyIsImFuY2hvclBvaW50IiwiZ3JhcGhQcm9wcyIsInByb3BzIiwiZG9tYWluIiwicmFuZ2UiLCJ4Iiwic3RlcCIsInkiLCJlIiwib25EcmFnU3RhcnQiLCJkb2N1bWVudCIsImFjdGl2ZUVsZW1lbnQiLCJibHVyIiwic2V0U3RhdGUiLCJzdGFydFgiLCJjbGllbnRYIiwic3RhcnRZIiwiY2xpZW50WSIsImtleSIsImV2ZW50IiwiSyIsInRvVXBwZXJDYXNlIiwiZW5kIiwic3RhcnQiLCJzdGF0ZSIsIk1hdGgiLCJhYnMiLCJvdXQiLCJncmlkIiwic2NhbGVkIiwibGVmdCIsImludGVydmFsIiwicmlnaHQiLCJ0b3AiLCJib3R0b20iLCJub2RlIiwic3ZnIiwib3duZXJTVkdFbGVtZW50IiwiY3JlYXRlU1ZHUG9pbnQiLCJwb2ludCIsInRvdWNoZXMiLCJsZW5ndGgiLCJ0b3VjaCIsImdldFNjcmVlbkNUTSIsIm1hdHJpeFRyYW5zZm9ybSIsImludmVyc2UiLCJyZWN0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiY2xpZW50TGVmdCIsImNsaWVudFRvcCIsImRkIiwicm9vdE5vZGUiLCJnZXRSb290Tm9kZSIsImNsaWVudFBvaW50IiwiZ2V0Q2xpZW50UG9pbnQiLCJyYXdYIiwicmF3WSIsInhPdXRzaWRlIiwiZGVsdGFYIiwibWluIiwibWF4IiwieU91dHNpZGUiLCJkZWx0YVkiLCJvbkRyYWciLCJnZXRTY2FsZWRCb3VuZHMiLCJza2lwRHJhZ091dHNpZGVPZkJvdW5kcyIsImRyYWdBcmciLCJhcHBseURlbHRhIiwidW5kZWZpbmVkIiwicG9zIiwicG9zaXRpb24iLCJwIiwidXRpbHMiLCJnZXREZWx0YSIsIm9uRHJhZ1N0b3AiLCJvbkNsaWNrIiwibGFzdFgiLCJsYXN0WSIsImlzQ2xpY2siLCJ0aW55IiwidGFyZ2V0IiwiZGlzYWJsZWQiLCJyZXN0Iiwib25Nb3VzZURvd24iLCJuYXRpdmVFdmVudCIsInByZXZlbnREZWZhdWx0IiwiaXNEcmFnZ2luZyIsIm9uU3RhcnQiLCJvblN0b3AiLCJheGlzIiwiUmVhY3QiLCJDb21wb25lbnQiLCJQcm9wVHlwZXMiLCJib29sIiwiZnVuYyIsIm9uTW92ZSIsIkdyYXBoUHJvcHNUeXBlIiwiaXNSZXF1aXJlZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7QUFFQSxJQUFNQSxHQUFHLEdBQUcsdUJBQU0sNkJBQU4sQ0FBWjs7QUFFTyxJQUFNQyxPQUFPLEdBQUcsU0FBVkEsT0FBVSxDQUFDQyxLQUFELEVBQVFDLElBQVIsRUFBY0MsR0FBZDtBQUFBLFNBQXNCLFVBQUNDLEtBQUQsRUFBVztBQUN0RCxRQUFNQyxVQUFVLEdBQUdELEtBQUssR0FBR0gsS0FBSyxDQUFDLENBQUQsQ0FBaEM7QUFDQSxRQUFNSyxRQUFRLEdBQUdMLEtBQUssQ0FBQ00sTUFBTixDQUFhRixVQUFiLENBQWpCO0FBRUEsUUFBTUcscUJBQXFCLEdBQUlOLElBQUksQ0FBQ0MsR0FBRyxHQUFHRyxRQUFQLENBQUosQ0FBcUJHLE9BQXJCLENBQTZCLENBQTdCLElBQWtDLElBQW5DLEdBQTJDLElBQXpFO0FBRUEsV0FBT0QscUJBQVA7QUFDRCxHQVBzQjtBQUFBLENBQWhCO0FBU1A7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sSUFBTUUsYUFBYSxHQUFHLFNBQWhCQSxhQUFnQixDQUFDQyxJQUFEO0FBQUEsU0FBVSxVQUFDQyxJQUFELEVBQVU7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QVUyRSxJQUFWO0FBQWdCLFlBQUEsUUFBUSxFQUFFRCxRQUExQjtBQUFvQyxZQUFBLFVBQVUsRUFBRUs7QUFBaEQsYUFURixDQURGO0FBYUQ7QUEvT0g7QUFBQTtBQUFBLE1BQW1DSSxrQkFBTUMsU0FBekMseURBQ3FCO0FBQ2pCVixNQUFBQSxRQUFRLEVBQUVXLHNCQUFVQyxJQURIO0FBRWpCcEYsTUFBQUEsV0FBVyxFQUFFbUYsc0JBQVVFLElBRk47QUFHakIvQixNQUFBQSxNQUFNLEVBQUU2QixzQkFBVUUsSUFIRDtBQUlqQnBCLE1BQUFBLFVBQVUsRUFBRWtCLHNCQUFVRSxJQUpMO0FBS2pCbkIsTUFBQUEsT0FBTyxFQUFFaUIsc0JBQVVFLElBTEY7QUFNakJDLE1BQUFBLE1BQU0sRUFBRUgsc0JBQVVFLElBTkQ7QUFPakI3RixNQUFBQSxVQUFVLEVBQUUrRixzQkFBZUM7QUFQVixLQURyQjtBQWlQRCxHQXRQNEI7QUFBQSxDQUF0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgR3JhcGhQcm9wc1R5cGUgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IERyYWdnYWJsZUNvcmUgfSBmcm9tICcuL2RyYWdnYWJsZSc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgaXNGdW5jdGlvbiBmcm9tICdsb2Rhc2gvaXNGdW5jdGlvbic7XG5pbXBvcnQgaW52YXJpYW50IGZyb20gJ2ludmFyaWFudCc7XG5pbXBvcnQgeyBjbGllbnRQb2ludCB9IGZyb20gJ2QzLXNlbGVjdGlvbic7XG5cbmNvbnN0IGxvZyA9IGRlYnVnKCdwaWUtbGliOnBsb3Q6Z3JpZC1kcmFnZ2FibGUnKTtcblxuZXhwb3J0IGNvbnN0IGRlbHRhRm4gPSAoc2NhbGUsIHNuYXAsIHZhbCkgPT4gKGRlbHRhKSA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBkZWx0YSArIHNjYWxlKDApO1xuICBjb25zdCBpbnZlcnRlZCA9IHNjYWxlLmludmVydChub3JtYWxpemVkKTtcblxuICBjb25zdCBmaXhEZWNpbWFsc0FyaXRobWV0aWMgPSAoc25hcCh2YWwgKyBpbnZlcnRlZCkudG9GaXhlZCg0KSAqIDEwMDApIC8gMTAwMDtcblxuICByZXR1cm4gZml4RGVjaW1hbHNBcml0aG1ldGljO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgQ29tcG9uZW50IHRoYXQgaXMgZHJhZ2dhYmxlLCB3aXRoaW4gYSBib3VuZGVkIGdyaWQuXG4gKiBAcGFyYW0geyp9IG9wdHNcbiAqL1xuZXhwb3J0IGNvbnN0IGdyaWREcmFnZ2FibGUgPSAob3B0cykgPT4gKENvbXApID0+IHtcbiAgaW52YXJpYW50KFxuICAgICEhb3B0cyAmJiBpc0Z1bmN0aW9uKG9wdHMuZnJvbURlbHRhKSAmJiBpc0Z1bmN0aW9uKG9wdHMuYm91bmRzKSAmJiBpc0Z1bmN0aW9uKG9wdHMuYW5jaG9yUG9pbnQpLFxuICAgICdZb3UgbXVzdCBzdXBwbHkgYW4gb2JqZWN0IHdpdGg6IHsgYW5jaG9yUG9pbnQ6IEZ1bmN0aW9uLCBmcm9tRGVsdGE6IEZ1bmN0aW9uLCBib3VuZHM6IEZ1bmN0aW9uIH0nLFxuICApO1xuICByZXR1cm4gY2xhc3MgR3JpZERyYWdnYWJsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIG9uRHJhZ1N0YXJ0OiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgIG9uRHJhZzogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICBvbkRyYWdTdG9wOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgb25Nb3ZlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgIGdyYXBoUHJvcHM6IEdyYXBoUHJvcHNUeXBlLmlzUmVxdWlyZWQsXG4gICAgfTtcbiAgICBncmlkID0gKCkgPT4ge1xuICAgICAgY29uc3QgeyBncmFwaFByb3BzIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBzY2FsZSwgZG9tYWluLCByYW5nZSB9ID0gZ3JhcGhQcm9wcztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHNjYWxlLngoZG9tYWluLnN0ZXApIC0gc2NhbGUueCgwKSxcbiAgICAgICAgeTogc2NhbGUueShyYW5nZS5zdGVwKSAtIHNjYWxlLnkoMCksXG4gICAgICB9O1xuICAgIH07XG4gICAgb25TdGFydCA9IChlKSA9PiB7XG4gICAgICBjb25zdCB7IG9uRHJhZ1N0YXJ0IH0gPSB0aGlzLnByb3BzO1xuICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKHsgc3RhcnRYOiBlLmNsaWVudFgsIHN0YXJ0WTogZS5jbGllbnRZIH0pO1xuICAgICAgaWYgKG9uRHJhZ1N0YXJ0KSB7XG4gICAgICAgIG9uRHJhZ1N0YXJ0KCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBwb3NpdGlvbiA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHsgeCwgeSB9ID0gb3B0cy5hbmNob3JQb2ludCh0aGlzLnByb3BzKTtcbiAgICAgIGNvbnN0IHsgZ3JhcGhQcm9wcyB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgc2NhbGUsIHNuYXAgfSA9IGdyYXBoUHJvcHM7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFuY2hvclBvaW50OiB7XG4gICAgICAgICAgeCxcbiAgICAgICAgICB5LFxuICAgICAgICB9LFxuICAgICAgICB4OiBkZWx0YUZuKHNjYWxlLngsIHNuYXAueCwgeCksXG4gICAgICAgIHk6IGRlbHRhRm4oc2NhbGUueSwgc25hcC55LCB5KSxcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHRpbnkgPSAoa2V5LCBldmVudCkgPT4ge1xuICAgICAgY29uc3QgSyA9IGtleS50b1VwcGVyQ2FzZSgpO1xuICAgICAgY29uc3QgZW5kID0gZXZlbnRbYGNsaWVudCR7S31gXTtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5zdGF0ZVtgc3RhcnQke0t9YF07XG4gICAgICBjb25zdCBkZWx0YSA9IE1hdGguYWJzKGVuZCAtIHN0YXJ0KTtcbiAgICAgIGNvbnN0IG91dCA9IGRlbHRhIDwgTWF0aC5hYnModGhpcy5ncmlkKClba2V5XSkgLyAxMDtcbiAgICAgIGxvZygnW3RpbnldIGtleTogJywga2V5LCAnZGVsdGE6ICcsIGRlbHRhLCAnb3V0OiAnLCBvdXQpO1xuICAgICAgcmV0dXJuIG91dDtcbiAgICB9O1xuXG4gICAgZ2V0U2NhbGVkQm91bmRzID0gKCkgPT4ge1xuICAgICAgY29uc3QgYm91bmRzID0gb3B0cy5ib3VuZHModGhpcy5wcm9wcywgdGhpcy5wcm9wcy5ncmFwaFByb3BzKTtcbiAgICAgIGxvZygnYm91bmRzOiAnLCBib3VuZHMpO1xuICAgICAgY29uc3QgZ3JpZCA9IHRoaXMuZ3JpZCgpO1xuXG4gICAgICBjb25zdCBzY2FsZWQgPSB7XG4gICAgICAgIGxlZnQ6IChib3VuZHMubGVmdCAvIGdyaWQuaW50ZXJ2YWwpICogZ3JpZC54LFxuICAgICAgICByaWdodDogKGJvdW5kcy5yaWdodCAvIGdyaWQuaW50ZXJ2YWwpICogZ3JpZC54LFxuICAgICAgICB0b3A6IChib3VuZHMudG9wIC8gZ3JpZC5pbnRlcnZhbCkgKiBncmlkLnksXG4gICAgICAgIGJvdHRvbTogKGJvdW5kcy5ib3R0b20gLyBncmlkLmludGVydmFsKSAqIGdyaWQueSxcbiAgICAgIH07XG4gICAgICBsb2coJ1tnZXRTY2FsZWRCb3VuZHNdOiAnLCBzY2FsZWQpO1xuICAgICAgcmV0dXJuIHNjYWxlZDtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBjb29yZGluYXRlcyBvZiBhIG1vdXNlIG9yIHRvdWNoIGV2ZW50IHJlbGF0aXZlIHRvIGFuIFNWRyBlbGVtZW50LlxuICAgICAqIFRoaXMgbWV0aG9kIGhhcyBiZWVuIG92ZXJ3cml0dGVuIGZyb20gdGhlIGQzLXNlbGVjdGlvbiBsaWJyYXJ5J3MgY2xpZW50UG9pbnQgdG8gaGFuZGxlIHRvdWNoIGV2ZW50cyBhbmQgaW1wcm92ZSBjbGFyaXR5LlxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gbm9kZSAtIFRoZSBTVkcgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudCAtIFRoZSBtb3VzZSBvciB0b3VjaCBldmVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IC0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgW3gsIHldIHJlbGF0aXZlIHRvIHRoZSBTVkcgZWxlbWVudC5cbiAgICAgKi9cbiAgICBnZXRDbGllbnRQb2ludCA9IChub2RlLCBldmVudCkgPT4ge1xuICAgICAgaWYgKCFub2RlIHx8ICFldmVudCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN2ZyA9IG5vZGUub3duZXJTVkdFbGVtZW50IHx8IG5vZGU7XG5cbiAgICAgIGlmIChzdmcgJiYgc3ZnLmNyZWF0ZVNWR1BvaW50KSB7XG4gICAgICAgIGxldCBwb2ludCA9IHN2Zy5jcmVhdGVTVkdQb2ludCgpO1xuICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGEgdG91Y2ggZXZlbnQgYW5kIHVzZSB0aGUgZmlyc3QgdG91Y2ggcG9pbnRcbiAgICAgICAgaWYgKGV2ZW50LnRvdWNoZXMgJiYgZXZlbnQudG91Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgdG91Y2ggPSBldmVudC50b3VjaGVzWzBdO1xuICAgICAgICAgIHBvaW50LnggPSB0b3VjaC5jbGllbnRYO1xuICAgICAgICAgIHBvaW50LnkgPSB0b3VjaC5jbGllbnRZO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEZhbGwgYmFjayB0byBtb3VzZSBldmVudCBwcm9wZXJ0aWVzXG4gICAgICAgICAgcG9pbnQueCA9IGV2ZW50LmNsaWVudFg7XG4gICAgICAgICAgcG9pbnQueSA9IGV2ZW50LmNsaWVudFk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZ2V0U2NyZWVuQ1RNKSB7XG4gICAgICAgICAgcG9pbnQgPSBwb2ludC5tYXRyaXhUcmFuc2Zvcm0obm9kZS5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpO1xuICAgICAgICAgIHJldHVybiBbcG9pbnQueCwgcG9pbnQueV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVjdCA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBpZiAocmVjdCkge1xuICAgICAgICByZXR1cm4gW2V2ZW50LmNsaWVudFggLSByZWN0LmxlZnQgLSBub2RlLmNsaWVudExlZnQsIGV2ZW50LmNsaWVudFkgLSByZWN0LnRvcCAtIG5vZGUuY2xpZW50VG9wXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBza2lwRHJhZ091dHNpZGVPZkJvdW5kcyA9IChkZCwgZSwgZ3JhcGhQcm9wcykgPT4ge1xuICAgICAgLy8gSWdub3JlIGRyYWcgbW92ZW1lbnQgb3V0c2lkZSBvZiB0aGUgZG9tYWluIGFuZCByYW5nZS5cbiAgICAgIGNvbnN0IHJvb3ROb2RlID0gZ3JhcGhQcm9wcy5nZXRSb290Tm9kZSgpO1xuICAgICAgY29uc3QgY2xpZW50UG9pbnQgPSB0aGlzLmdldENsaWVudFBvaW50KHJvb3ROb2RlLCBlKTtcblxuICAgICAgaWYgKGNsaWVudFBvaW50ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0cnVlOyAvLyBJbmRpY2F0ZSB0aGF0IHRoZSBkcmFnIGlzIG91dHNpZGUgb2YgYm91bmRzXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IFtyYXdYLCByYXdZXSA9IGNsaWVudFBvaW50O1xuICAgICAgY29uc3QgeyBzY2FsZSwgZG9tYWluLCByYW5nZSB9ID0gZ3JhcGhQcm9wcztcbiAgICAgIGxldCB4ID0gc2NhbGUueC5pbnZlcnQocmF3WCk7XG4gICAgICBsZXQgeSA9IHNjYWxlLnkuaW52ZXJ0KHJhd1kpO1xuXG4gICAgICBjb25zdCB4T3V0c2lkZSA9IChkZC5kZWx0YVggPiAwICYmIHggPCBkb21haW4ubWluKSB8fCAoZGQuZGVsdGFYIDwgMCAmJiB4ID4gZG9tYWluLm1heCk7XG4gICAgICBjb25zdCB5T3V0c2lkZSA9IChkZC5kZWx0YVkgPiAwICYmIHkgPiByYW5nZS5tYXgpIHx8IChkZC5kZWx0YVkgPCAwICYmIHkgPCByYW5nZS5taW4pO1xuICAgICAgcmV0dXJuIHhPdXRzaWRlIHx8IHlPdXRzaWRlO1xuICAgIH07XG5cbiAgICBvbkRyYWcgPSAoZSwgZGQpID0+IHtcbiAgICAgIGNvbnN0IHsgb25EcmFnLCBncmFwaFByb3BzIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBpZiAoIW9uRHJhZykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuZ2V0U2NhbGVkQm91bmRzKCk7XG5cbiAgICAgIGlmIChkZC5kZWx0YVggPCAwICYmIGRkLmRlbHRhWCA8IGJvdW5kcy5sZWZ0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGRkLmRlbHRhWCA+IDAgJiYgZGQuZGVsdGFYID4gYm91bmRzLnJpZ2h0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGRkLmRlbHRhWSA8IDAgJiYgZGQuZGVsdGFZIDwgYm91bmRzLnRvcCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChkZC5kZWx0YVkgPiAwICYmIGRkLmRlbHRhWSA+IGJvdW5kcy5ib3R0b20pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5za2lwRHJhZ091dHNpZGVPZkJvdW5kcyhkZCwgZSwgZ3JhcGhQcm9wcykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkcmFnQXJnID0gdGhpcy5hcHBseURlbHRhKHsgeDogZGQuZGVsdGFYLCB5OiBkZC5kZWx0YVkgfSk7XG5cbiAgICAgIGlmIChkcmFnQXJnICE9PSB1bmRlZmluZWQgfHwgZHJhZ0FyZyAhPT0gbnVsbCkge1xuICAgICAgICBvbkRyYWcoZHJhZ0FyZyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGdldERlbHRhID0gKHBvaW50KSA9PiB7XG4gICAgICBjb25zdCBwb3MgPSB0aGlzLnBvc2l0aW9uKCk7XG5cbiAgICAgIGNvbnN0IHAgPSB7XG4gICAgICAgIHg6IHBvcy54KHBvaW50LngpLFxuICAgICAgICB5OiBwb3MueShwb2ludC55KSxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB1dGlscy5nZXREZWx0YShwb3MuYW5jaG9yUG9pbnQsIHApO1xuICAgIH07XG5cbiAgICBhcHBseURlbHRhID0gKHBvaW50KSA9PiB7XG4gICAgICBjb25zdCBkZWx0YSA9IHRoaXMuZ2V0RGVsdGEocG9pbnQpO1xuICAgICAgbG9nKCdbYXBwbHlEZWx0YV0gZGVsdGE6JywgZGVsdGEpO1xuICAgICAgcmV0dXJuIG9wdHMuZnJvbURlbHRhKHRoaXMucHJvcHMsIGRlbHRhKTtcbiAgICB9O1xuXG4gICAgb25TdG9wID0gKGUsIGRkKSA9PiB7XG4gICAgICBsb2coJ1tvblN0b3BdIGRkOicsIGRkKTtcbiAgICAgIGNvbnN0IHsgb25EcmFnU3RvcCwgb25DbGljayB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgaWYgKG9uRHJhZ1N0b3ApIHtcbiAgICAgICAgb25EcmFnU3RvcCgpO1xuICAgICAgfVxuXG4gICAgICBsb2coJ1tvblN0b3BdIGxhc3RYL1k6ICcsIGRkLmxhc3RYLCBkZC5sYXN0WSk7XG4gICAgICBjb25zdCBpc0NsaWNrID0gdGhpcy50aW55KCd4JywgZSkgJiYgdGhpcy50aW55KCd5JywgZSk7XG5cbiAgICAgIGlmIChpc0NsaWNrKSB7XG4gICAgICAgIGlmIChvbkNsaWNrKSB7XG4gICAgICAgICAgbG9nKCdjYWxsIG9uQ2xpY2snKTtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgc3RhcnRYOiBudWxsIH0pO1xuICAgICAgICAgIGNvbnN0IHsgZ3JhcGhQcm9wcyB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgICBjb25zdCB7IHNjYWxlLCBzbmFwIH0gPSBncmFwaFByb3BzO1xuICAgICAgICAgIGNvbnN0IFtyYXdYLCByYXdZXSA9IGNsaWVudFBvaW50KGUudGFyZ2V0LCBlKTtcbiAgICAgICAgICBsZXQgeCA9IHNjYWxlLnguaW52ZXJ0KHJhd1gpO1xuICAgICAgICAgIGxldCB5ID0gc2NhbGUueS5pbnZlcnQocmF3WSk7XG4gICAgICAgICAgeCA9IHNuYXAueCh4KTtcbiAgICAgICAgICB5ID0gc25hcC55KHkpO1xuICAgICAgICAgIG9uQ2xpY2soeyB4LCB5IH0pO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnNldFN0YXRlKHsgc3RhcnRYOiBudWxsLCBzdGFydFk6IG51bGwgfSk7XG4gICAgICAvLyByZXR1cm4gZmFsc2UgdG8gcHJldmVudCBzdGF0ZSB1cGRhdGVzIGluIHRoZSB1bmRlcmx5aW5nIGRyYWdnYWJsZSAtIGEgbW92ZSB3aWxsIGhhdmUgdHJpZ2dlcmVkIGFuIHVwZGF0ZSBhbHJlYWR5LlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7IGRpc2FibGVkLCAuLi5yZXN0IH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgZ3JpZCA9IHRoaXMuZ3JpZCgpO1xuXG4gICAgICAvLyBwcmV2ZW50IHRoZSB0ZXh0IHNlbGVjdCBpY29uIGZyb20gcmVuZGVyaW5nLlxuICAgICAgY29uc3Qgb25Nb3VzZURvd24gPSAoZSkgPT4gZS5uYXRpdmVFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAvKipcbiAgICAgICAqIFRPRE86IFRoaXMgc2hvdWxkbnQgYmUgbmVjZXNzYXJ5LCB3ZSBzaG91bGQgYmUgYWJsZSB0byB1c2UgdGhlIHItZCBjbGFzc25hbWVzLlxuICAgICAgICogQnV0IHRoZXkgYXJlbid0IGJlaW5nIHVuc2V0LiBJZiB3ZSBjb250aW51ZSB3aXRoIHRoaXMgbGliLCB3ZSdsbCBoYXZlIHRvIGZpeCB0aGlzLlxuICAgICAgICovXG4gICAgICBjb25zdCBpc0RyYWdnaW5nID0gdGhpcy5zdGF0ZSA/ICEhdGhpcy5zdGF0ZS5zdGFydFggOiBmYWxzZTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPERyYWdnYWJsZUNvcmVcbiAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgb25Nb3VzZURvd249e29uTW91c2VEb3dufVxuICAgICAgICAgIG9uU3RhcnQ9e3RoaXMub25TdGFydH1cbiAgICAgICAgICBvbkRyYWc9e3RoaXMub25EcmFnfVxuICAgICAgICAgIG9uU3RvcD17dGhpcy5vblN0b3B9XG4gICAgICAgICAgYXhpcz17b3B0cy5heGlzIHx8ICdib3RoJ31cbiAgICAgICAgICBncmlkPXtbZ3JpZC54LCBncmlkLnldfVxuICAgICAgICA+XG4gICAgICAgICAgPENvbXAgey4uLnJlc3R9IGRpc2FibGVkPXtkaXNhYmxlZH0gaXNEcmFnZ2luZz17aXNEcmFnZ2luZ30gLz5cbiAgICAgICAgPC9EcmFnZ2FibGVDb3JlPlxuICAgICAgKTtcbiAgICB9XG4gIH07XG59O1xuIl19
|
package/lib/index.js
CHANGED
|
@@ -56,4 +56,4 @@ var _graphProps = require("./graph-props");
|
|
|
56
56
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
57
57
|
|
|
58
58
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
59
|
-
//# sourceMappingURL=
|
|
59
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJvb3QgZnJvbSAnLi9yb290JztcbmltcG9ydCBEcmFnZ2FibGUgZnJvbSAnLi9kcmFnZ2FibGUnO1xuaW1wb3J0IHsgZ3JpZERyYWdnYWJsZSB9IGZyb20gJy4vZ3JpZC1kcmFnZ2FibGUnO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgKiBhcyB0cmlnIGZyb20gJy4vdHJpZyc7XG5pbXBvcnQgKiBhcyB0eXBlcyBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGNyZWF0ZSBhcyBjcmVhdGVHcmFwaFByb3BzIH0gZnJvbSAnLi9ncmFwaC1wcm9wcyc7XG5cbmV4cG9ydCB7IFJvb3QsIERyYWdnYWJsZSwgZ3JpZERyYWdnYWJsZSwgdXRpbHMsIHRyaWcsIHR5cGVzLCBjcmVhdGVHcmFwaFByb3BzIH07XG4iXX0=
|