@pie-lib/graphing 2.16.0-beta.0 → 2.16.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.
Files changed (117) hide show
  1. package/CHANGELOG.json +1 -1017
  2. package/CHANGELOG.md +104 -27
  3. package/package.json +13 -9
  4. package/src/axis/axes.jsx +1 -1
  5. package/src/coordinates-label.jsx +1 -1
  6. package/src/graph-with-controls.jsx +1 -1
  7. package/src/grid-setup.jsx +7 -10
  8. package/src/key-legend.jsx +131 -101
  9. package/src/labels.jsx +1 -1
  10. package/src/mark-label.jsx +1 -1
  11. package/src/toggle-bar.jsx +1 -1
  12. package/src/tools/circle/bg-circle.jsx +1 -1
  13. package/src/tools/circle/component.jsx +1 -1
  14. package/src/tools/polygon/line.jsx +1 -1
  15. package/src/tools/polygon/polygon.jsx +3 -3
  16. package/src/tools/shared/line/index.jsx +1 -1
  17. package/src/tools/shared/line/line-path.jsx +1 -1
  18. package/src/tools/shared/point/index.jsx +1 -1
  19. package/src/tools/shared/styles.js +1 -1
  20. package/src/undo-redo.jsx +1 -1
  21. package/lib/__tests__/graph-with-controls.test.js +0 -215
  22. package/lib/__tests__/graph.test.js +0 -290
  23. package/lib/__tests__/grid.test.js +0 -40
  24. package/lib/__tests__/labels.test.js +0 -59
  25. package/lib/__tests__/mark-label.test.js +0 -154
  26. package/lib/__tests__/toggle-bar.test.js +0 -54
  27. package/lib/__tests__/tool-menu.test.js +0 -43
  28. package/lib/__tests__/undo-redo.test.js +0 -42
  29. package/lib/__tests__/use-debounce.test.js +0 -28
  30. package/lib/__tests__/utils.js +0 -72
  31. package/lib/__tests__/utils.test.js +0 -133
  32. package/lib/axis/__tests__/arrow.test.js +0 -68
  33. package/lib/axis/__tests__/axes.test.js +0 -214
  34. package/lib/axis/arrow.js +0 -115
  35. package/lib/axis/axes.js +0 -415
  36. package/lib/axis/index.js +0 -26
  37. package/lib/bg.js +0 -139
  38. package/lib/container/actions.js +0 -24
  39. package/lib/container/index.js +0 -163
  40. package/lib/container/marks.js +0 -27
  41. package/lib/container/middleware.js +0 -25
  42. package/lib/container/reducer.js +0 -25
  43. package/lib/coordinates-label.js +0 -109
  44. package/lib/graph-with-controls.js +0 -359
  45. package/lib/graph.js +0 -371
  46. package/lib/grid-setup.js +0 -462
  47. package/lib/grid.js +0 -176
  48. package/lib/index.js +0 -59
  49. package/lib/key-legend.js +0 -246
  50. package/lib/label-svg-icon.js +0 -56
  51. package/lib/labels.js +0 -299
  52. package/lib/mark-label.js +0 -321
  53. package/lib/toggle-bar.js +0 -336
  54. package/lib/tool-menu.js +0 -112
  55. package/lib/tools/absolute/__tests__/component.test.js +0 -74
  56. package/lib/tools/absolute/component.js +0 -35
  57. package/lib/tools/absolute/index.js +0 -63
  58. package/lib/tools/circle/__tests__/bg-circle.test.js +0 -46
  59. package/lib/tools/circle/__tests__/component.test.js +0 -259
  60. package/lib/tools/circle/bg-circle.js +0 -173
  61. package/lib/tools/circle/component.js +0 -406
  62. package/lib/tools/circle/index.js +0 -51
  63. package/lib/tools/exponential/__tests__/component.test.js +0 -73
  64. package/lib/tools/exponential/component.js +0 -34
  65. package/lib/tools/exponential/index.js +0 -71
  66. package/lib/tools/index.js +0 -99
  67. package/lib/tools/line/__tests__/component.test.js +0 -56
  68. package/lib/tools/line/component.js +0 -103
  69. package/lib/tools/line/index.js +0 -16
  70. package/lib/tools/parabola/__tests__/component.test.js +0 -73
  71. package/lib/tools/parabola/component.js +0 -34
  72. package/lib/tools/parabola/index.js +0 -63
  73. package/lib/tools/point/__tests__/component.test.js +0 -97
  74. package/lib/tools/point/component.js +0 -186
  75. package/lib/tools/point/index.js +0 -32
  76. package/lib/tools/polygon/__tests__/component.test.js +0 -255
  77. package/lib/tools/polygon/__tests__/index.test.js +0 -95
  78. package/lib/tools/polygon/__tests__/line.test.js +0 -43
  79. package/lib/tools/polygon/__tests__/polygon.test.js +0 -73
  80. package/lib/tools/polygon/component.js +0 -518
  81. package/lib/tools/polygon/index.js +0 -106
  82. package/lib/tools/polygon/line.js +0 -157
  83. package/lib/tools/polygon/polygon.js +0 -165
  84. package/lib/tools/ray/__tests__/component.test.js +0 -48
  85. package/lib/tools/ray/component.js +0 -102
  86. package/lib/tools/ray/index.js +0 -16
  87. package/lib/tools/segment/__tests__/component.test.js +0 -48
  88. package/lib/tools/segment/component.js +0 -75
  89. package/lib/tools/segment/index.js +0 -16
  90. package/lib/tools/shared/__tests__/arrow-head.test.js +0 -62
  91. package/lib/tools/shared/arrow-head.js +0 -70
  92. package/lib/tools/shared/icons/CorrectSVG.js +0 -36
  93. package/lib/tools/shared/icons/IncorrectSVG.js +0 -36
  94. package/lib/tools/shared/icons/MissingSVG.js +0 -35
  95. package/lib/tools/shared/line/__tests__/index.test.js +0 -301
  96. package/lib/tools/shared/line/__tests__/line-path.test.js +0 -78
  97. package/lib/tools/shared/line/__tests__/with-root-edge.test.js +0 -122
  98. package/lib/tools/shared/line/index.js +0 -599
  99. package/lib/tools/shared/line/line-path.js +0 -151
  100. package/lib/tools/shared/line/with-root-edge.js +0 -155
  101. package/lib/tools/shared/point/__tests__/arrow-point.test.js +0 -137
  102. package/lib/tools/shared/point/__tests__/base-point.test.js +0 -134
  103. package/lib/tools/shared/point/arrow-point.js +0 -113
  104. package/lib/tools/shared/point/arrow.js +0 -96
  105. package/lib/tools/shared/point/base-point.js +0 -175
  106. package/lib/tools/shared/point/index.js +0 -97
  107. package/lib/tools/shared/styles.js +0 -58
  108. package/lib/tools/shared/types.js +0 -23
  109. package/lib/tools/sine/__tests__/component.test.js +0 -81
  110. package/lib/tools/sine/component.js +0 -51
  111. package/lib/tools/sine/index.js +0 -63
  112. package/lib/tools/vector/__tests__/component.test.js +0 -45
  113. package/lib/tools/vector/component.js +0 -88
  114. package/lib/tools/vector/index.js +0 -16
  115. package/lib/undo-redo.js +0 -123
  116. package/lib/use-debounce.js +0 -32
  117. package/lib/utils.js +0 -307
@@ -1,518 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- var _typeof = require("@babel/runtime/helpers/typeof");
6
-
7
- Object.defineProperty(exports, "__esModule", {
8
- value: true
9
- });
10
- exports.swap = exports["default"] = exports.buildLines = exports.RawBaseComponent = exports.BaseComponent = void 0;
11
-
12
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
-
14
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
15
-
16
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
17
-
18
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
19
-
20
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
21
-
22
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
23
-
24
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
25
-
26
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
27
-
28
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
29
-
30
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
31
-
32
- var _react = _interopRequireDefault(require("react"));
33
-
34
- var _propTypes = _interopRequireDefault(require("prop-types"));
35
-
36
- var _styles = require("@material-ui/core/styles");
37
-
38
- var _types = require("../shared/types");
39
-
40
- var _point = require("../shared/point");
41
-
42
- var _chunk = _interopRequireDefault(require("lodash/chunk"));
43
-
44
- var _initial = _interopRequireDefault(require("lodash/initial"));
45
-
46
- var _debug = _interopRequireDefault(require("debug"));
47
-
48
- var _line = _interopRequireDefault(require("./line"));
49
-
50
- var _polygon = _interopRequireWildcard(require("./polygon"));
51
-
52
- var _plot = require("@pie-lib/plot");
53
-
54
- var _invariant = _interopRequireDefault(require("invariant"));
55
-
56
- var _reactDom = _interopRequireDefault(require("react-dom"));
57
-
58
- var _markLabel = _interopRequireDefault(require("../../mark-label"));
59
-
60
- var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
61
-
62
- var _utils = require("../../utils");
63
-
64
- 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); }
65
-
66
- 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; }
67
-
68
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
69
-
70
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
71
-
72
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
73
-
74
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
75
-
76
- var log = (0, _debug["default"])('pie-lib:graphing:polygon');
77
-
78
- var buildLines = function buildLines(points, closed) {
79
- var expanded = points.reduce(function (acc, p, index) {
80
- acc.push(_objectSpread(_objectSpread({}, p), {}, {
81
- index: index
82
- }));
83
- var isLast = index === points.length - 1;
84
- var next = isLast ? 0 : index + 1;
85
- acc.push(_objectSpread(_objectSpread({}, points[next]), {}, {
86
- index: next
87
- }));
88
- return acc;
89
- }, []);
90
- var all = (0, _chunk["default"])(expanded, 2).map(function (_ref) {
91
- var _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
92
- from = _ref2[0],
93
- to = _ref2[1];
94
-
95
- return {
96
- from: from,
97
- to: to
98
- };
99
- });
100
- return closed ? all : (0, _initial["default"])(all);
101
- };
102
-
103
- exports.buildLines = buildLines;
104
-
105
- var swap = function swap(arr) {
106
- for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
107
- rest[_key - 1] = arguments[_key];
108
- }
109
-
110
- var pairs = (0, _chunk["default"])(rest, 2);
111
- return pairs.reduce(function (acc, pr) {
112
- if (pr.length === 2) {
113
- var _pr = (0, _slicedToArray2["default"])(pr, 2),
114
- e = _pr[0],
115
- replacement = _pr[1];
116
-
117
- (0, _invariant["default"])(Number.isFinite(e.index), 'Index must be defined');
118
- var index = e.index; // const i = acc.findIndex(pt => pt.x === e.x && pt.y === e.y);
119
-
120
- if (index >= 0) {
121
- acc.splice(index, 1, replacement);
122
- return acc;
123
- } else {
124
- return acc;
125
- }
126
- } else {
127
- return acc;
128
- }
129
- }, (0, _toConsumableArray2["default"])(arr));
130
- };
131
-
132
- exports.swap = swap;
133
-
134
- var RawBaseComponent = /*#__PURE__*/function (_React$Component) {
135
- (0, _inherits2["default"])(RawBaseComponent, _React$Component);
136
-
137
- var _super = _createSuper(RawBaseComponent);
138
-
139
- function RawBaseComponent() {
140
- var _this;
141
-
142
- (0, _classCallCheck2["default"])(this, RawBaseComponent);
143
-
144
- for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
145
- args[_key2] = arguments[_key2];
146
- }
147
-
148
- _this = _super.call.apply(_super, [this].concat(args));
149
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "dragPoint", function (index, from, to) {
150
- log('[dragPoint] from, to:', from, to);
151
- var _this$props = _this.props,
152
- onChange = _this$props.onChange,
153
- points = _this$props.points;
154
- var update = (0, _toConsumableArray2["default"])(points);
155
- var overlapPoint = !!(points || []).find(function (p) {
156
- return (0, _utils.equalPoints)(p, to);
157
- });
158
-
159
- if ((0, _utils.equalPoints)(from, to) || overlapPoint) {
160
- return;
161
- }
162
-
163
- if (points[index].label) {
164
- to.label = points[index].label;
165
- }
166
-
167
- update.splice(index, 1, to);
168
- onChange(update);
169
- });
170
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "dragLine", function (existing, next) {
171
- log('[dragLine]: ', existing, next);
172
- var onChange = _this.props.onChange;
173
-
174
- if (existing.from.label) {
175
- next.from.label = existing.from.label;
176
- }
177
-
178
- if (existing.to.label) {
179
- next.to.label = existing.to.label;
180
- }
181
-
182
- var points = swap(_this.props.points, existing.from, next.from, existing.to, next.to);
183
- onChange(points);
184
- });
185
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "dragPoly", function (existing, next) {
186
- log('[dragPoly] ', existing, next);
187
- var onChange = _this.props.onChange;
188
- next.forEach(function (point, index) {
189
- if (existing[index].label) {
190
- next[index].label = existing[index].label;
191
- }
192
- });
193
- onChange(next);
194
- });
195
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "close", function () {
196
- var _this$props2 = _this.props,
197
- points = _this$props2.points,
198
- onClosePolygon = _this$props2.onClosePolygon;
199
- log('[close] ...');
200
-
201
- if (points.length >= 3) {
202
- onClosePolygon();
203
- } else {
204
- log('[close] - nope');
205
- }
206
- });
207
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "labelChange", function (point, index) {
208
- var _this$props3 = _this.props,
209
- points = _this$props3.points,
210
- onChangeProps = _this$props3.onChangeProps;
211
-
212
- var updatedPoint = _objectSpread({}, point);
213
-
214
- if (!point.label || (0, _isEmpty["default"])(point.label)) {
215
- delete updatedPoint.label;
216
- }
217
-
218
- var update = (0, _toConsumableArray2["default"])(points);
219
- update.splice(index, 1, updatedPoint);
220
- onChangeProps(update);
221
- });
222
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "clickPoint", function (point, index, data) {
223
- var _this$props4 = _this.props,
224
- closed = _this$props4.closed,
225
- disabled = _this$props4.disabled,
226
- onClick = _this$props4.onClick,
227
- isToolActive = _this$props4.isToolActive,
228
- labelModeEnabled = _this$props4.labelModeEnabled,
229
- limitLabeling = _this$props4.limitLabeling,
230
- onChangeProps = _this$props4.onChangeProps,
231
- onChangeLabelProps = _this$props4.onChangeLabelProps,
232
- points = _this$props4.points;
233
-
234
- if (labelModeEnabled) {
235
- // limit labeling the points of the polygon
236
- if (disabled || limitLabeling) {
237
- return;
238
- }
239
-
240
- if (points && index === points.length) {
241
- var _getRightestPoints = (0, _utils.getRightestPoints)(points),
242
- a = _getRightestPoints.a,
243
- b = _getRightestPoints.b;
244
-
245
- var middle = _objectSpread(_objectSpread({
246
- label: ''
247
- }, point), (0, _utils.getMiddleOfTwoPoints)(a, b));
248
-
249
- onChangeLabelProps(middle);
250
- } else {
251
- var update = (0, _toConsumableArray2["default"])(points);
252
- update.splice(index, 1, _objectSpread({
253
- label: ''
254
- }, point));
255
- onChangeProps(update);
256
- }
257
-
258
- if (_this.input[index]) {
259
- _this.input[index].focus();
260
- }
261
-
262
- return;
263
- }
264
-
265
- if (isToolActive && !closed && index === 0) {
266
- _this.close();
267
-
268
- return;
269
- }
270
-
271
- onClick(point || data);
272
- });
273
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "input", {});
274
- return _this;
275
- }
276
-
277
- (0, _createClass2["default"])(RawBaseComponent, [{
278
- key: "render",
279
- value: function render() {
280
- var _this2 = this;
281
-
282
- var _this$props5 = this.props,
283
- closed = _this$props5.closed,
284
- coordinatesOnHover = _this$props5.coordinatesOnHover,
285
- correctness = _this$props5.correctness,
286
- disabled = _this$props5.disabled,
287
- graphProps = _this$props5.graphProps,
288
- onChangeLabelProps = _this$props5.onChangeLabelProps,
289
- onDragStart = _this$props5.onDragStart,
290
- onDragStop = _this$props5.onDragStop,
291
- points = _this$props5.points,
292
- middle = _this$props5.middle,
293
- labelNode = _this$props5.labelNode,
294
- labelModeEnabled = _this$props5.labelModeEnabled;
295
- var lines = buildLines(points, closed);
296
- var common = {
297
- onDragStart: onDragStart,
298
- onDragStop: onDragStop,
299
- graphProps: graphProps,
300
- disabled: disabled,
301
- correctness: correctness
302
- };
303
- var polygonLabelIndex = points && points.length || 0;
304
- var polygonLabelNode = null;
305
-
306
- if (labelNode && middle && middle.hasOwnProperty('label')) {
307
- polygonLabelNode = /*#__PURE__*/_reactDom["default"].createPortal( /*#__PURE__*/_react["default"].createElement(_markLabel["default"], {
308
- inputRef: function inputRef(r) {
309
- return _this2.input[polygonLabelIndex] = r;
310
- },
311
- disabled: !labelModeEnabled,
312
- mark: middle,
313
- graphProps: graphProps,
314
- onChange: function onChange(label) {
315
- return onChangeLabelProps(_objectSpread(_objectSpread({}, middle), {}, {
316
- label: label
317
- }));
318
- }
319
- }), labelNode);
320
- }
321
-
322
- return /*#__PURE__*/_react["default"].createElement("g", null, closed ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_polygon["default"], (0, _extends2["default"])({
323
- points: points,
324
- onDrag: this.dragPoly.bind(this, points),
325
- closed: closed
326
- }, common, {
327
- onClick: this.clickPoint.bind(this, middle, polygonLabelIndex)
328
- })), polygonLabelNode) : /*#__PURE__*/_react["default"].createElement(_polygon.Polygon, {
329
- points: points,
330
- graphProps: graphProps,
331
- closed: closed
332
- }), (lines || []).map(function (l, index) {
333
- return /*#__PURE__*/_react["default"].createElement(_line["default"], (0, _extends2["default"])({
334
- key: "line-".concat(index),
335
- from: l.from,
336
- to: l.to,
337
- onDrag: _this2.dragLine.bind(_this2, l)
338
- }, common, {
339
- onClick: _this2.clickPoint.bind(_this2, middle, polygonLabelIndex)
340
- }));
341
- }), (points || []).map(function (p, index) {
342
- return [/*#__PURE__*/_react["default"].createElement(_point.BasePoint, (0, _extends2["default"])({
343
- key: "point-".concat(index),
344
- coordinatesOnHover: coordinatesOnHover,
345
- labelNode: labelNode,
346
- x: p.x,
347
- y: p.y,
348
- onDrag: _this2.dragPoint.bind(_this2, index, p)
349
- }, common, {
350
- onClick: _this2.clickPoint.bind(_this2, p, index)
351
- })), labelNode && p.hasOwnProperty('label') ? /*#__PURE__*/_reactDom["default"].createPortal( /*#__PURE__*/_react["default"].createElement(_markLabel["default"], {
352
- inputRef: function inputRef(r) {
353
- return _this2.input[index] = r;
354
- },
355
- disabled: !labelModeEnabled,
356
- mark: p,
357
- graphProps: graphProps,
358
- onChange: function onChange(label) {
359
- return _this2.labelChange(_objectSpread(_objectSpread({}, p), {}, {
360
- label: label
361
- }), index);
362
- }
363
- }), labelNode) : null];
364
- }));
365
- }
366
- }]);
367
- return RawBaseComponent;
368
- }(_react["default"].Component);
369
-
370
- exports.RawBaseComponent = RawBaseComponent;
371
- (0, _defineProperty2["default"])(RawBaseComponent, "propTypes", {
372
- classes: _propTypes["default"].object,
373
- className: _propTypes["default"].string,
374
- disabled: _propTypes["default"].bool,
375
- correctness: _propTypes["default"].string,
376
- points: _propTypes["default"].arrayOf(_plot.types.PointType),
377
- closed: _propTypes["default"].bool,
378
- coordinatesOnHover: _propTypes["default"].bool,
379
- onChange: _propTypes["default"].func.isRequired,
380
- onClosePolygon: _propTypes["default"].func.isRequired,
381
- onDragStart: _propTypes["default"].func,
382
- onDragStop: _propTypes["default"].func,
383
- onClick: _propTypes["default"].func,
384
- graphProps: _plot.types.GraphPropsType.isRequired,
385
- isToolActive: _propTypes["default"].bool,
386
- middle: _propTypes["default"].object,
387
- labelNode: _propTypes["default"].object,
388
- labelModeEnabled: _propTypes["default"].bool,
389
- limitLabeling: _propTypes["default"].bool,
390
- onChangeLabelProps: _propTypes["default"].func,
391
- onChangeProps: _propTypes["default"].func
392
- });
393
- (0, _defineProperty2["default"])(RawBaseComponent, "defaultProps", {
394
- points: []
395
- });
396
- var BaseComponent = (0, _styles.withStyles)(function () {
397
- return {};
398
- })(RawBaseComponent);
399
- exports.BaseComponent = BaseComponent;
400
-
401
- var Component = /*#__PURE__*/function (_React$Component2) {
402
- (0, _inherits2["default"])(Component, _React$Component2);
403
-
404
- var _super2 = _createSuper(Component);
405
-
406
- function Component(props) {
407
- var _this3;
408
-
409
- (0, _classCallCheck2["default"])(this, Component);
410
- _this3 = _super2.call(this, props);
411
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this3), "change", function (points) {
412
- var middle = _this3.props.mark.middle;
413
-
414
- var mark = _objectSpread(_objectSpread({}, _this3.state.mark), {}, {
415
- points: points
416
- });
417
-
418
- if (middle) {
419
- var _getRightestPoints2 = (0, _utils.getRightestPoints)(points),
420
- a = _getRightestPoints2.a,
421
- b = _getRightestPoints2.b;
422
-
423
- mark.middle = _objectSpread(_objectSpread({}, middle), (0, _utils.getMiddleOfTwoPoints)(a, b));
424
- }
425
-
426
- _this3.setState({
427
- mark: mark
428
- });
429
- });
430
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this3), "changeProps", function (points) {
431
- var mark = _objectSpread(_objectSpread({}, _this3.props.mark), {}, {
432
- points: points
433
- });
434
-
435
- _this3.props.onChange(_this3.props.mark, mark);
436
- });
437
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this3), "changeLabelProps", function (point) {
438
- var _this3$props = _this3.props,
439
- mark = _this3$props.mark,
440
- onChange = _this3$props.onChange;
441
-
442
- var middle = _objectSpread(_objectSpread({}, mark.middle), point);
443
-
444
- onChange(mark, _objectSpread(_objectSpread({}, mark), {}, {
445
- middle: middle
446
- }));
447
- });
448
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this3), "closePolygon", function () {
449
- log('[closePolygon] ...');
450
- var _this3$props2 = _this3.props,
451
- onComplete = _this3$props2.onComplete,
452
- mark = _this3$props2.mark;
453
-
454
- var update = _objectSpread(_objectSpread({}, mark), {}, {
455
- closed: true
456
- });
457
-
458
- onComplete(mark, update);
459
- });
460
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this3), "dragStart", function () {
461
- return _this3.setState({
462
- mark: _this3.props.mark
463
- });
464
- });
465
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this3), "dragStop", function () {
466
- var onChange = _this3.props.onChange;
467
-
468
- var m = _objectSpread({}, _this3.state.mark);
469
-
470
- _this3.setState({
471
- mark: undefined
472
- }, function () {
473
- onChange(_this3.props.mark, m);
474
- });
475
- });
476
- _this3.state = {};
477
- return _this3;
478
- }
479
-
480
- (0, _createClass2["default"])(Component, [{
481
- key: "render",
482
- value: function render() {
483
- var _this$props6 = this.props,
484
- coordinatesOnHover = _this$props6.coordinatesOnHover,
485
- mark = _this$props6.mark,
486
- graphProps = _this$props6.graphProps,
487
- onClick = _this$props6.onClick,
488
- isToolActive = _this$props6.isToolActive,
489
- labelNode = _this$props6.labelNode,
490
- labelModeEnabled = _this$props6.labelModeEnabled,
491
- limitLabeling = _this$props6.limitLabeling;
492
- var stateMark = this.state.mark;
493
- return /*#__PURE__*/_react["default"].createElement(BaseComponent, (0, _extends2["default"])({}, stateMark || mark, {
494
- coordinatesOnHover: coordinatesOnHover,
495
- onChange: this.change,
496
- onChangeLabelProps: this.changeLabelProps,
497
- onChangeProps: this.changeProps,
498
- onClosePolygon: this.closePolygon,
499
- onDragStart: this.dragStart,
500
- onDragStop: this.dragStop,
501
- onClick: onClick,
502
- graphProps: graphProps,
503
- isToolActive: isToolActive,
504
- labelNode: labelNode,
505
- labelModeEnabled: labelModeEnabled,
506
- limitLabeling: limitLabeling
507
- }));
508
- }
509
- }]);
510
- return Component;
511
- }(_react["default"].Component);
512
-
513
- exports["default"] = Component;
514
- (0, _defineProperty2["default"])(Component, "propTypes", _objectSpread(_objectSpread({}, _types.ToolPropTypeFields), {}, {
515
- graphProps: _plot.types.GraphPropsType.isRequired
516
- }));
517
- (0, _defineProperty2["default"])(Component, "defaultProps", {});
518
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90b29scy9wb2x5Z29uL2NvbXBvbmVudC5qc3giXSwibmFtZXMiOlsibG9nIiwiYnVpbGRMaW5lcyIsInBvaW50cyIsImNsb3NlZCIsImV4cGFuZGVkIiwicmVkdWNlIiwiYWNjIiwicCIsImluZGV4IiwicHVzaCIsImlzTGFzdCIsImxlbmd0aCIsIm5leHQiLCJhbGwiLCJtYXAiLCJmcm9tIiwidG8iLCJzd2FwIiwiYXJyIiwicmVzdCIsInBhaXJzIiwicHIiLCJlIiwicmVwbGFjZW1lbnQiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsInNwbGljZSIsIlJhd0Jhc2VDb21wb25lbnQiLCJwcm9wcyIsIm9uQ2hhbmdlIiwidXBkYXRlIiwib3ZlcmxhcFBvaW50IiwiZmluZCIsImxhYmVsIiwiZXhpc3RpbmciLCJmb3JFYWNoIiwicG9pbnQiLCJvbkNsb3NlUG9seWdvbiIsIm9uQ2hhbmdlUHJvcHMiLCJ1cGRhdGVkUG9pbnQiLCJkYXRhIiwiZGlzYWJsZWQiLCJvbkNsaWNrIiwiaXNUb29sQWN0aXZlIiwibGFiZWxNb2RlRW5hYmxlZCIsImxpbWl0TGFiZWxpbmciLCJvbkNoYW5nZUxhYmVsUHJvcHMiLCJhIiwiYiIsIm1pZGRsZSIsImlucHV0IiwiZm9jdXMiLCJjbG9zZSIsImNvb3JkaW5hdGVzT25Ib3ZlciIsImNvcnJlY3RuZXNzIiwiZ3JhcGhQcm9wcyIsIm9uRHJhZ1N0YXJ0Iiwib25EcmFnU3RvcCIsImxhYmVsTm9kZSIsImxpbmVzIiwiY29tbW9uIiwicG9seWdvbkxhYmVsSW5kZXgiLCJwb2x5Z29uTGFiZWxOb2RlIiwiaGFzT3duUHJvcGVydHkiLCJSZWFjdERPTSIsImNyZWF0ZVBvcnRhbCIsInIiLCJkcmFnUG9seSIsImJpbmQiLCJjbGlja1BvaW50IiwibCIsImRyYWdMaW5lIiwieCIsInkiLCJkcmFnUG9pbnQiLCJsYWJlbENoYW5nZSIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY2xhc3NlcyIsIlByb3BUeXBlcyIsIm9iamVjdCIsImNsYXNzTmFtZSIsInN0cmluZyIsImJvb2wiLCJhcnJheU9mIiwidHlwZXMiLCJQb2ludFR5cGUiLCJmdW5jIiwiaXNSZXF1aXJlZCIsIkdyYXBoUHJvcHNUeXBlIiwiQmFzZUNvbXBvbmVudCIsIm1hcmsiLCJzdGF0ZSIsInNldFN0YXRlIiwib25Db21wbGV0ZSIsIm0iLCJ1bmRlZmluZWQiLCJzdGF0ZU1hcmsiLCJjaGFuZ2UiLCJjaGFuZ2VMYWJlbFByb3BzIiwiY2hhbmdlUHJvcHMiLCJjbG9zZVBvbHlnb24iLCJkcmFnU3RhcnQiLCJkcmFnU3RvcCIsIlRvb2xQcm9wVHlwZUZpZWxkcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7OztBQUVBLElBQU1BLEdBQUcsR0FBRyx1QkFBTSwwQkFBTixDQUFaOztBQUVPLElBQU1DLFVBQVUsR0FBRyxTQUFiQSxVQUFhLENBQUNDLE1BQUQsRUFBU0MsTUFBVCxFQUFvQjtBQUM1QyxNQUFNQyxRQUFRLEdBQUdGLE1BQU0sQ0FBQ0csTUFBUCxDQUFjLFVBQUNDLEdBQUQsRUFBTUMsQ0FBTixFQUFTQyxLQUFULEVBQW1CO0FBQ2hERixJQUFBQSxHQUFHLENBQUNHLElBQUosaUNBQWNGLENBQWQ7QUFBaUJDLE1BQUFBLEtBQUssRUFBTEE7QUFBakI7QUFFQSxRQUFNRSxNQUFNLEdBQUdGLEtBQUssS0FBS04sTUFBTSxDQUFDUyxNQUFQLEdBQWdCLENBQXpDO0FBQ0EsUUFBTUMsSUFBSSxHQUFHRixNQUFNLEdBQUcsQ0FBSCxHQUFPRixLQUFLLEdBQUcsQ0FBbEM7QUFFQUYsSUFBQUEsR0FBRyxDQUFDRyxJQUFKLGlDQUFjUCxNQUFNLENBQUNVLElBQUQsQ0FBcEI7QUFBNEJKLE1BQUFBLEtBQUssRUFBRUk7QUFBbkM7QUFFQSxX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QURGO0FBa0JEOzs7RUEzRm9DK0Isa0JBQU1DLFM7OztpQ0FBeEJBLFMsK0NBRWQyQix5QjtBQUNIakQsRUFBQUEsVUFBVSxFQUFFOEIsWUFBTUksY0FBTixDQUFxQkQ7O2lDQUhoQlgsUyxrQkFNRyxFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyB3aXRoU3R5bGVzIH0gZnJvbSAnQG1hdGVyaWFsLXVpL2NvcmUvc3R5bGVzJztcbmltcG9ydCB7IFRvb2xQcm9wVHlwZUZpZWxkcyB9IGZyb20gJy4uL3NoYXJlZC90eXBlcyc7XG5pbXBvcnQgeyBCYXNlUG9pbnQgfSBmcm9tICcuLi9zaGFyZWQvcG9pbnQnO1xuaW1wb3J0IGNodW5rIGZyb20gJ2xvZGFzaC9jaHVuayc7XG5pbXBvcnQgaW5pdGlhbCBmcm9tICdsb2Rhc2gvaW5pdGlhbCc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IExpbmUgZnJvbSAnLi9saW5lJztcbmltcG9ydCBEcmFnZ2FibGVQb2x5Z29uLCB7IFBvbHlnb24gfSBmcm9tICcuL3BvbHlnb24nO1xuaW1wb3J0IHsgdHlwZXMgfSBmcm9tICdAcGllLWxpYi9wbG90JztcbmltcG9ydCBpbnZhcmlhbnQgZnJvbSAnaW52YXJpYW50JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IE1hcmtMYWJlbCBmcm9tICcuLi8uLi9tYXJrLWxhYmVsJztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5JztcbmltcG9ydCB7IGdldE1pZGRsZU9mVHdvUG9pbnRzLCBnZXRSaWdodGVzdFBvaW50cywgZXF1YWxQb2ludHMgfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbmNvbnN0IGxvZyA9IGRlYnVnKCdwaWUtbGliOmdyYXBoaW5nOnBvbHlnb24nKTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkTGluZXMgPSAocG9pbnRzLCBjbG9zZWQpID0+IHtcbiAgY29uc3QgZXhwYW5kZWQgPSBwb2ludHMucmVkdWNlKChhY2MsIHAsIGluZGV4KSA9PiB7XG4gICAgYWNjLnB1c2goeyAuLi5wLCBpbmRleCB9KTtcblxuICAgIGNvbnN0IGlzTGFzdCA9IGluZGV4ID09PSBwb2ludHMubGVuZ3RoIC0gMTtcbiAgICBjb25zdCBuZXh0ID0gaXNMYXN0ID8gMCA6IGluZGV4ICsgMTtcblxuICAgIGFjYy5wdXNoKHsgLi4ucG9pbnRzW25leHRdLCBpbmRleDogbmV4dCB9KTtcblxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuICBjb25zdCBhbGwgPSBjaHVuayhleHBhbmRlZCwgMikubWFwKChbZnJvbSwgdG9dKSA9PiB7XG4gICAgcmV0dXJuIHsgZnJvbSwgdG8gfTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNsb3NlZCA/IGFsbCA6IGluaXRpYWwoYWxsKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzd2FwID0gKGFyciwgLi4ucmVzdCkgPT4ge1xuICBjb25zdCBwYWlycyA9IGNodW5rKHJlc3QsIDIpO1xuXG4gIHJldHVybiBwYWlycy5yZWR1Y2UoXG4gICAgKGFjYywgcHIpID0+IHtcbiAgICAgIGlmIChwci5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgbGV0IFtlLCByZXBsYWNlbWVudF0gPSBwcjtcblxuICAgICAgICBpbnZhcmlhbnQoTnVtYmVyLmlzRmluaXRlKGUuaW5kZXgpLCAnSW5kZXggbXVzdCBiZSBkZWZpbmVkJyk7XG5cbiAgICAgICAgY29uc3QgaW5kZXggPSBlLmluZGV4O1xuICAgICAgICAvLyBjb25zdCBpID0gYWNjLmZpbmRJbmRleChwdCA9PiBwdC54ID09PSBlLnggJiYgcHQueSA9PT0gZS55KTtcblxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgIGFjYy5zcGxpY2UoaW5kZXgsIDEsIHJlcGxhY2VtZW50KTtcblxuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cbiAgICB9LFxuICAgIFsuLi5hcnJdLFxuICApO1xufTtcblxuZXhwb3J0IGNsYXNzIFJhd0Jhc2VDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBjb3JyZWN0bmVzczogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBwb2ludHM6IFByb3BUeXBlcy5hcnJheU9mKHR5cGVzLlBvaW50VHlwZSksXG4gICAgY2xvc2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBjb29yZGluYXRlc09uSG92ZXI6IFByb3BUeXBlcy5ib29sLFxuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQ2xvc2VQb2x5Z29uOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uRHJhZ1N0YXJ0OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkRyYWdTdG9wOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBncmFwaFByb3BzOiB0eXBlcy5HcmFwaFByb3BzVHlwZS5pc1JlcXVpcmVkLFxuICAgIGlzVG9vbEFjdGl2ZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgbWlkZGxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGxhYmVsTm9kZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBsYWJlbE1vZGVFbmFibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBsaW1pdExhYmVsaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBvbkNoYW5nZUxhYmVsUHJvcHM6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uQ2hhbmdlUHJvcHM6IFByb3BUeXBlcy5mdW5jLFxuICB9O1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgcG9pbnRzOiBbXSxcbiAgfTtcblxuICBkcmFnUG9pbnQgPSAoaW5kZXgsIGZyb20sIHRvKSA9PiB7XG4gICAgbG9nKCdbZHJhZ1BvaW50XSBmcm9tLCB0bzonLCBmcm9tLCB0byk7XG4gICAgY29uc3QgeyBvbkNoYW5nZSwgcG9pbnRzIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHVwZGF0ZSA9IFsuLi5wb2ludHNdO1xuICAgIGNvbnN0IG92ZXJsYXBQb2ludCA9ICEhKHBvaW50cyB8fCBbXSkuZmluZCgocCkgPT4gZXF1YWxQb2ludHMocCwgdG8pKTtcblxuICAgIGlmIChlcXVhbFBvaW50cyhmcm9tLCB0bykgfHwgb3ZlcmxhcFBvaW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHBvaW50c1tpbmRleF0ubGFiZWwpIHtcbiAgICAgIHRvLmxhYmVsID0gcG9pbnRzW2luZGV4XS5sYWJlbDtcbiAgICB9XG5cbiAgICB1cGRhdGUuc3BsaWNlKGluZGV4LCAxLCB0byk7XG4gICAgb25DaGFuZ2UodXBkYXRlKTtcbiAgfTtcblxuICBkcmFnTGluZSA9IChleGlzdGluZywgbmV4dCkgPT4ge1xuICAgIGxvZygnW2RyYWdMaW5lXTogJywgZXhpc3RpbmcsIG5leHQpO1xuICAgIGNvbnN0IHsgb25DaGFuZ2UgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAoZXhpc3RpbmcuZnJvbS5sYWJlbCkge1xuICAgICAgbmV4dC5mcm9tLmxhYmVsID0gZXhpc3RpbmcuZnJvbS5sYWJlbDtcbiAgICB9XG5cbiAgICBpZiAoZXhpc3RpbmcudG8ubGFiZWwpIHtcbiAgICAgIG5leHQudG8ubGFiZWwgPSBleGlzdGluZy50by5sYWJlbDtcbiAgICB9XG5cbiAgICBjb25zdCBwb2ludHMgPSBzd2FwKHRoaXMucHJvcHMucG9pbnRzLCBleGlzdGluZy5mcm9tLCBuZXh0LmZyb20sIGV4aXN0aW5nLnRvLCBuZXh0LnRvKTtcbiAgICBvbkNoYW5nZShwb2ludHMpO1xuICB9O1xuXG4gIGRyYWdQb2x5ID0gKGV4aXN0aW5nLCBuZXh0KSA9PiB7XG4gICAgbG9nKCdbZHJhZ1BvbHldICcsIGV4aXN0aW5nLCBuZXh0KTtcbiAgICBjb25zdCB7IG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgbmV4dC5mb3JFYWNoKChwb2ludCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChleGlzdGluZ1tpbmRleF0ubGFiZWwpIHtcbiAgICAgICAgbmV4dFtpbmRleF0ubGFiZWwgPSBleGlzdGluZ1tpbmRleF0ubGFiZWw7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBvbkNoYW5nZShuZXh0KTtcbiAgfTtcblxuICBjbG9zZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IHBvaW50cywgb25DbG9zZVBvbHlnb24gfSA9IHRoaXMucHJvcHM7XG4gICAgbG9nKCdbY2xvc2VdIC4uLicpO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPj0gMykge1xuICAgICAgb25DbG9zZVBvbHlnb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nKCdbY2xvc2VdIC0gbm9wZScpO1xuICAgIH1cbiAgfTtcblxuICBsYWJlbENoYW5nZSA9IChwb2ludCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCB7IHBvaW50cywgb25DaGFuZ2VQcm9wcyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB1cGRhdGVkUG9pbnQgPSB7IC4uLnBvaW50IH07XG5cbiAgICBpZiAoIXBvaW50LmxhYmVsIHx8IGlzRW1wdHkocG9pbnQubGFiZWwpKSB7XG4gICAgICBkZWxldGUgdXBkYXRlZFBvaW50LmxhYmVsO1xuICAgIH1cblxuICAgIGNvbnN0IHVwZGF0ZSA9IFsuLi5wb2ludHNdO1xuXG4gICAgdXBkYXRlLnNwbGljZShpbmRleCwgMSwgdXBkYXRlZFBvaW50KTtcbiAgICBvbkNoYW5nZVByb3BzKHVwZGF0ZSk7XG4gIH07XG5cbiAgY2xpY2tQb2ludCA9IChwb2ludCwgaW5kZXgsIGRhdGEpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjbG9zZWQsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIG9uQ2xpY2ssXG4gICAgICBpc1Rvb2xBY3RpdmUsXG4gICAgICBsYWJlbE1vZGVFbmFibGVkLFxuICAgICAgbGltaXRMYWJlbGluZyxcbiAgICAgIG9uQ2hhbmdlUHJvcHMsXG4gICAgICBvbkNoYW5nZUxhYmVsUHJvcHMsXG4gICAgICBwb2ludHMsXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAobGFiZWxNb2RlRW5hYmxlZCkge1xuICAgICAgLy8gbGltaXQgbGFiZWxpbmcgdGhlIHBvaW50cyBvZiB0aGUgcG9seWdvblxuICAgICAgaWYgKGRpc2FibGVkIHx8IGxpbWl0TGFiZWxpbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAocG9pbnRzICYmIGluZGV4ID09PSBwb2ludHMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHsgYSwgYiB9ID0gZ2V0UmlnaHRlc3RQb2ludHMocG9pbnRzKTtcbiAgICAgICAgY29uc3QgbWlkZGxlID0geyBsYWJlbDogJycsIC4uLnBvaW50LCAuLi5nZXRNaWRkbGVPZlR3b1BvaW50cyhhLCBiKSB9O1xuXG4gICAgICAgIG9uQ2hhbmdlTGFiZWxQcm9wcyhtaWRkbGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdXBkYXRlID0gWy4uLnBvaW50c107XG5cbiAgICAgICAgdXBkYXRlLnNwbGljZShpbmRleCwgMSwgeyBsYWJlbDogJycsIC4uLnBvaW50IH0pO1xuICAgICAgICBvbkNoYW5nZVByb3BzKHVwZGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmlucHV0W2luZGV4XSkge1xuICAgICAgICB0aGlzLmlucHV0W2luZGV4XS5mb2N1cygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlzVG9vbEFjdGl2ZSAmJiAhY2xvc2VkICYmIGluZGV4ID09PSAwKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb25DbGljayhwb2ludCB8fCBkYXRhKTtcbiAgfTtcblxuICAvLyBJTVBPUlRBTlQsIGRvIG5vdCByZW1vdmVcbiAgaW5wdXQgPSB7fTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY2xvc2VkLFxuICAgICAgY29vcmRpbmF0ZXNPbkhvdmVyLFxuICAgICAgY29ycmVjdG5lc3MsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGdyYXBoUHJvcHMsXG4gICAgICBvbkNoYW5nZUxhYmVsUHJvcHMsXG4gICAgICBvbkRyYWdTdGFydCxcbiAgICAgIG9uRHJhZ1N0b3AsXG4gICAgICBwb2ludHMsXG4gICAgICBtaWRkbGUsXG4gICAgICBsYWJlbE5vZGUsXG4gICAgICBsYWJlbE1vZGVFbmFibGVkLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGxpbmVzID0gYnVpbGRMaW5lcyhwb2ludHMsIGNsb3NlZCk7XG4gICAgY29uc3QgY29tbW9uID0geyBvbkRyYWdTdGFydCwgb25EcmFnU3RvcCwgZ3JhcGhQcm9wcywgZGlzYWJsZWQsIGNvcnJlY3RuZXNzIH07XG4gICAgY29uc3QgcG9seWdvbkxhYmVsSW5kZXggPSAocG9pbnRzICYmIHBvaW50cy5sZW5ndGgpIHx8IDA7XG4gICAgbGV0IHBvbHlnb25MYWJlbE5vZGUgPSBudWxsO1xuXG4gICAgaWYgKGxhYmVsTm9kZSAmJiBtaWRkbGUgJiYgbWlkZGxlLmhhc093blByb3BlcnR5KCdsYWJlbCcpKSB7XG4gICAgICBwb2x5Z29uTGFiZWxOb2RlID0gUmVhY3RET00uY3JlYXRlUG9ydGFsKFxuICAgICAgICA8TWFya0xhYmVsXG4gICAgICAgICAgaW5wdXRSZWY9eyhyKSA9PiAodGhpcy5pbnB1dFtwb2x5Z29uTGFiZWxJbmRleF0gPSByKX1cbiAgICAgICAgICBkaXNhYmxlZD17IWxhYmVsTW9kZUVuYWJsZWR9XG4gICAgICAgICAgbWFyaz17bWlkZGxlfVxuICAgICAgICAgIGdyYXBoUHJvcHM9e2dyYXBoUHJvcHN9XG4gICAgICAgICAgb25DaGFuZ2U9eyhsYWJlbCkgPT4gb25DaGFuZ2VMYWJlbFByb3BzKHsgLi4ubWlkZGxlLCBsYWJlbCB9KX1cbiAgICAgICAgLz4sXG4gICAgICAgIGxhYmVsTm9kZSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxnPlxuICAgICAgICB7Y2xvc2VkID8gKFxuICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgIDxEcmFnZ2FibGVQb2x5Z29uXG4gICAgICAgICAgICAgIHBvaW50cz17cG9pbnRzfVxuICAgICAgICAgICAgICBvbkRyYWc9e3RoaXMuZHJhZ1BvbHkuYmluZCh0aGlzLCBwb2ludHMpfVxuICAgICAgICAgICAgICBjbG9zZWQ9e2Nsb3NlZH1cbiAgICAgICAgICAgICAgey4uLmNvbW1vbn1cbiAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5jbGlja1BvaW50LmJpbmQodGhpcywgbWlkZGxlLCBwb2x5Z29uTGFiZWxJbmRleCl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAge3BvbHlnb25MYWJlbE5vZGV9XG4gICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8UG9seWdvbiBwb2ludHM9e3BvaW50c30gZ3JhcGhQcm9wcz17Z3JhcGhQcm9wc30gY2xvc2VkPXtjbG9zZWR9IC8+XG4gICAgICAgICl9XG4gICAgICAgIHsobGluZXMgfHwgW10pLm1hcCgobCwgaW5kZXgpID0+IChcbiAgICAgICAgICA8TGluZVxuICAgICAgICAgICAga2V5PXtgbGluZS0ke2luZGV4fWB9XG4gICAgICAgICAgICBmcm9tPXtsLmZyb219XG4gICAgICAgICAgICB0bz17bC50b31cbiAgICAgICAgICAgIG9uRHJhZz17dGhpcy5kcmFnTGluZS5iaW5kKHRoaXMsIGwpfVxuICAgICAgICAgICAgey4uLmNvbW1vbn1cbiAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuY2xpY2tQb2ludC5iaW5kKHRoaXMsIG1pZGRsZSwgcG9seWdvbkxhYmVsSW5kZXgpfVxuICAgICAgICAgIC8+XG4gICAgICAgICkpfVxuXG4gICAgICAgIHsocG9pbnRzIHx8IFtdKS5tYXAoKHAsIGluZGV4KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIDxCYXNlUG9pbnRcbiAgICAgICAgICAgICAga2V5PXtgcG9pbnQtJHtpbmRleH1gfVxuICAgICAgICAgICAgICBjb29yZGluYXRlc09uSG92ZXI9e2Nvb3JkaW5hdGVzT25Ib3Zlcn1cbiAgICAgICAgICAgICAgbGFiZWxOb2RlPXtsYWJlbE5vZGV9XG4gICAgICAgICAgICAgIHg9e3AueH1cbiAgICAgICAgICAgICAgeT17cC55fVxuICAgICAgICAgICAgICBvbkRyYWc9e3RoaXMuZHJhZ1BvaW50LmJpbmQodGhpcywgaW5kZXgsIHApfVxuICAgICAgICAgICAgICB7Li4uY29tbW9ufVxuICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmNsaWNrUG9pbnQuYmluZCh0aGlzLCBwLCBpbmRleCl9XG4gICAgICAgICAgICAvPixcbiAgICAgICAgICAgIGxhYmVsTm9kZSAmJiBwLmhhc093blByb3BlcnR5KCdsYWJlbCcpXG4gICAgICAgICAgICAgID8gUmVhY3RET00uY3JlYXRlUG9ydGFsKFxuICAgICAgICAgICAgICAgICAgPE1hcmtMYWJlbFxuICAgICAgICAgICAgICAgICAgICBpbnB1dFJlZj17KHIpID0+ICh0aGlzLmlucHV0W2luZGV4XSA9IHIpfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWxhYmVsTW9kZUVuYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgIG1hcms9e3B9XG4gICAgICAgICAgICAgICAgICAgIGdyYXBoUHJvcHM9e2dyYXBoUHJvcHN9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsobGFiZWwpID0+IHRoaXMubGFiZWxDaGFuZ2UoeyAuLi5wLCBsYWJlbCB9LCBpbmRleCl9XG4gICAgICAgICAgICAgICAgICAvPixcbiAgICAgICAgICAgICAgICAgIGxhYmVsTm9kZSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBdO1xuICAgICAgICB9KX1cbiAgICAgIDwvZz5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBCYXNlQ29tcG9uZW50ID0gd2l0aFN0eWxlcygoKSA9PiAoe30pKShSYXdCYXNlQ29tcG9uZW50KTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29tcG9uZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICAuLi5Ub29sUHJvcFR5cGVGaWVsZHMsXG4gICAgZ3JhcGhQcm9wczogdHlwZXMuR3JhcGhQcm9wc1R5cGUuaXNSZXF1aXJlZCxcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge307XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHt9O1xuICB9XG5cbiAgY2hhbmdlID0gKHBvaW50cykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG1hcms6IHsgbWlkZGxlIH0sXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgbWFyayA9IHsgLi4udGhpcy5zdGF0ZS5tYXJrLCBwb2ludHMgfTtcblxuICAgIGlmIChtaWRkbGUpIHtcbiAgICAgIGNvbnN0IHsgYSwgYiB9ID0gZ2V0UmlnaHRlc3RQb2ludHMocG9pbnRzKTtcblxuICAgICAgbWFyay5taWRkbGUgPSB7IC4uLm1pZGRsZSwgLi4uZ2V0TWlkZGxlT2ZUd29Qb2ludHMoYSwgYikgfTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKHsgbWFyayB9KTtcbiAgfTtcblxuICBjaGFuZ2VQcm9wcyA9IChwb2ludHMpID0+IHtcbiAgICBjb25zdCBtYXJrID0geyAuLi50aGlzLnByb3BzLm1hcmssIHBvaW50cyB9O1xuXG4gICAgdGhpcy5wcm9wcy5vbkNoYW5nZSh0aGlzLnByb3BzLm1hcmssIG1hcmspO1xuICB9O1xuXG4gIGNoYW5nZUxhYmVsUHJvcHMgPSAocG9pbnQpID0+IHtcbiAgICBjb25zdCB7IG1hcmssIG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG1pZGRsZSA9IHsgLi4ubWFyay5taWRkbGUsIC4uLnBvaW50IH07XG5cbiAgICBvbkNoYW5nZShtYXJrLCB7IC4uLm1hcmssIG1pZGRsZSB9KTtcbiAgfTtcblxuICBjbG9zZVBvbHlnb24gPSAoKSA9PiB7XG4gICAgbG9nKCdbY2xvc2VQb2x5Z29uXSAuLi4nKTtcbiAgICBjb25zdCB7IG9uQ29tcGxldGUsIG1hcmsgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgdXBkYXRlID0geyAuLi5tYXJrLCBjbG9zZWQ6IHRydWUgfTtcblxuICAgIG9uQ29tcGxldGUobWFyaywgdXBkYXRlKTtcbiAgfTtcblxuICBkcmFnU3RhcnQgPSAoKSA9PiB0aGlzLnNldFN0YXRlKHsgbWFyazogdGhpcy5wcm9wcy5tYXJrIH0pO1xuXG4gIGRyYWdTdG9wID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgb25DaGFuZ2UgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgbSA9IHsgLi4udGhpcy5zdGF0ZS5tYXJrIH07XG5cbiAgICB0aGlzLnNldFN0YXRlKHsgbWFyazogdW5kZWZpbmVkIH0sICgpID0+IHtcbiAgICAgIG9uQ2hhbmdlKHRoaXMucHJvcHMubWFyaywgbSk7XG4gICAgfSk7XG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNvb3JkaW5hdGVzT25Ib3ZlcixcbiAgICAgIG1hcmssXG4gICAgICBncmFwaFByb3BzLFxuICAgICAgb25DbGljayxcbiAgICAgIGlzVG9vbEFjdGl2ZSxcbiAgICAgIGxhYmVsTm9kZSxcbiAgICAgIGxhYmVsTW9kZUVuYWJsZWQsXG4gICAgICBsaW1pdExhYmVsaW5nLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgbWFyazogc3RhdGVNYXJrIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxCYXNlQ29tcG9uZW50XG4gICAgICAgIHsuLi4oc3RhdGVNYXJrIHx8IG1hcmspfVxuICAgICAgICBjb29yZGluYXRlc09uSG92ZXI9e2Nvb3JkaW5hdGVzT25Ib3Zlcn1cbiAgICAgICAgb25DaGFuZ2U9e3RoaXMuY2hhbmdlfVxuICAgICAgICBvbkNoYW5nZUxhYmVsUHJvcHM9e3RoaXMuY2hhbmdlTGFiZWxQcm9wc31cbiAgICAgICAgb25DaGFuZ2VQcm9wcz17dGhpcy5jaGFuZ2VQcm9wc31cbiAgICAgICAgb25DbG9zZVBvbHlnb249e3RoaXMuY2xvc2VQb2x5Z29ufVxuICAgICAgICBvbkRyYWdTdGFydD17dGhpcy5kcmFnU3RhcnR9XG4gICAgICAgIG9uRHJhZ1N0b3A9e3RoaXMuZHJhZ1N0b3B9XG4gICAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICAgIGdyYXBoUHJvcHM9e2dyYXBoUHJvcHN9XG4gICAgICAgIGlzVG9vbEFjdGl2ZT17aXNUb29sQWN0aXZlfVxuICAgICAgICBsYWJlbE5vZGU9e2xhYmVsTm9kZX1cbiAgICAgICAgbGFiZWxNb2RlRW5hYmxlZD17bGFiZWxNb2RlRW5hYmxlZH1cbiAgICAgICAgbGltaXRMYWJlbGluZz17bGltaXRMYWJlbGluZ31cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxufVxuIl19