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