@pie-lib/graphing-solution-set 2.20.0 → 2.22.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 (85) hide show
  1. package/CHANGELOG.md +6 -10
  2. package/lib/axis/arrow.js +115 -0
  3. package/lib/axis/arrow.js.map +1 -0
  4. package/lib/axis/axes.js +415 -0
  5. package/lib/axis/axes.js.map +1 -0
  6. package/lib/axis/index.js +26 -0
  7. package/lib/axis/index.js.map +1 -0
  8. package/lib/bg.js +139 -0
  9. package/lib/bg.js.map +1 -0
  10. package/lib/container/actions.js +24 -0
  11. package/lib/container/actions.js.map +1 -0
  12. package/lib/container/index.js +166 -0
  13. package/lib/container/index.js.map +1 -0
  14. package/lib/container/marks.js +27 -0
  15. package/lib/container/marks.js.map +1 -0
  16. package/lib/container/middleware.js +25 -0
  17. package/lib/container/middleware.js.map +1 -0
  18. package/lib/container/reducer.js +25 -0
  19. package/lib/container/reducer.js.map +1 -0
  20. package/lib/coordinates-label.js +109 -0
  21. package/lib/coordinates-label.js.map +1 -0
  22. package/lib/graph-with-controls.js +372 -0
  23. package/lib/graph-with-controls.js.map +1 -0
  24. package/lib/graph.js +419 -0
  25. package/lib/graph.js.map +1 -0
  26. package/lib/grid-setup.js +462 -0
  27. package/lib/grid-setup.js.map +1 -0
  28. package/lib/grid.js +176 -0
  29. package/lib/grid.js.map +1 -0
  30. package/lib/index.js +51 -0
  31. package/lib/index.js.map +1 -0
  32. package/lib/labels.js +299 -0
  33. package/lib/labels.js.map +1 -0
  34. package/lib/mark-label.js +208 -0
  35. package/lib/mark-label.js.map +1 -0
  36. package/lib/toggle-bar.js +336 -0
  37. package/lib/toggle-bar.js.map +1 -0
  38. package/lib/tool-menu.js +325 -0
  39. package/lib/tool-menu.js.map +1 -0
  40. package/lib/tools/index.js +29 -0
  41. package/lib/tools/index.js.map +1 -0
  42. package/lib/tools/line/component.js +106 -0
  43. package/lib/tools/line/component.js.map +1 -0
  44. package/lib/tools/line/index.js +16 -0
  45. package/lib/tools/line/index.js.map +1 -0
  46. package/lib/tools/polygon/component.js +457 -0
  47. package/lib/tools/polygon/component.js.map +1 -0
  48. package/lib/tools/polygon/index.js +106 -0
  49. package/lib/tools/polygon/index.js.map +1 -0
  50. package/lib/tools/polygon/line.js +151 -0
  51. package/lib/tools/polygon/line.js.map +1 -0
  52. package/lib/tools/polygon/polygon.js +171 -0
  53. package/lib/tools/polygon/polygon.js.map +1 -0
  54. package/lib/tools/shared/arrow-head.js +75 -0
  55. package/lib/tools/shared/arrow-head.js.map +1 -0
  56. package/lib/tools/shared/line/index.js +637 -0
  57. package/lib/tools/shared/line/index.js.map +1 -0
  58. package/lib/tools/shared/line/line-path.js +145 -0
  59. package/lib/tools/shared/line/line-path.js.map +1 -0
  60. package/lib/tools/shared/line/with-root-edge.js +155 -0
  61. package/lib/tools/shared/line/with-root-edge.js.map +1 -0
  62. package/lib/tools/shared/point/arrow-point.js +113 -0
  63. package/lib/tools/shared/point/arrow-point.js.map +1 -0
  64. package/lib/tools/shared/point/arrow.js +96 -0
  65. package/lib/tools/shared/point/arrow.js.map +1 -0
  66. package/lib/tools/shared/point/base-point.js +151 -0
  67. package/lib/tools/shared/point/base-point.js.map +1 -0
  68. package/lib/tools/shared/point/index.js +94 -0
  69. package/lib/tools/shared/point/index.js.map +1 -0
  70. package/lib/tools/shared/styles.js +49 -0
  71. package/lib/tools/shared/styles.js.map +1 -0
  72. package/lib/tools/shared/types.js +19 -0
  73. package/lib/tools/shared/types.js.map +1 -0
  74. package/lib/undo-redo.js +107 -0
  75. package/lib/undo-redo.js.map +1 -0
  76. package/lib/use-debounce.js +32 -0
  77. package/lib/use-debounce.js.map +1 -0
  78. package/lib/utils.js +314 -0
  79. package/lib/utils.js.map +1 -0
  80. package/package.json +9 -9
  81. package/src/__tests__/graph-with-controls.test.jsx +1 -1
  82. package/src/__tests__/graph.test.jsx +1 -1
  83. package/src/tools/line/__tests__/component.test.jsx +2 -2
  84. package/src/tools/shared/point/__tests__/arrow-point.test.jsx +2 -2
  85. package/src/tools/shared/point/__tests__/base-point.test.jsx +2 -2
@@ -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=component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/tools/polygon/component.jsx"],"names":["log","buildLines","points","closed","expanded","reduce","acc","p","index","push","isLast","length","next","all","map","from","to","swap","arr","rest","pairs","pr","e","replacement","Number","isFinite","splice","RawBaseComponent","props","onChange","update","overlapPoint","find","label","existing","forEach","point","onClosePolygon","onChangeProps","updatedPoint","data","disabled","onClick","isToolActive","labelModeEnabled","onChangeLabelProps","a","b","middle","input","focus","close","graphProps","labelNode","isSolution","polygonLabelIndex","hasOwnProperty","ReactDOM","createPortal","r","clickPoint","bind","React","Component","classes","PropTypes","object","className","string","bool","correctness","arrayOf","types","PointType","coordinatesOnHover","func","isRequired","onDragStart","onDragStop","GraphPropsType","BaseComponent","mark","state","setState","onComplete","m","undefined","stateMark","change","changeLabelProps","changeProps","closePolygon","dragStart","dragStop","ToolPropTypeFields"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport { ToolPropTypeFields } from '../shared/types';\nimport chunk from 'lodash/chunk';\nimport initial from 'lodash/initial';\nimport debug from 'debug';\nimport DraggablePolygon from './polygon';\nimport { types } from '@pie-lib/plot';\nimport invariant from 'invariant';\nimport ReactDOM from 'react-dom';\nimport MarkLabel from '../../mark-label';\nimport isEmpty from 'lodash/isEmpty';\nimport { getMiddleOfTwoPoints, getRightestPoints, equalPoints } from '../../utils';\n\nconst log = debug('pie-lib:graphing-solution-set:polygon');\n\nexport const buildLines = (points, closed) => {\n const expanded = points.reduce((acc, p, index) => {\n acc.push({ ...p, index });\n\n const isLast = index === points.length - 1;\n const next = isLast ? 0 : index + 1;\n\n acc.push({ ...points[next], index: next });\n\n return acc;\n }, []);\n\n const all = chunk(expanded, 2).map(([from, to]) => {\n return { from, to };\n });\n\n return closed ? all : initial(all);\n};\n\nexport const swap = (arr, ...rest) => {\n const pairs = chunk(rest, 2);\n\n return pairs.reduce(\n (acc, pr) => {\n if (pr.length === 2) {\n let [e, replacement] = pr;\n\n invariant(Number.isFinite(e.index), 'Index must be defined');\n\n const index = e.index;\n // const i = acc.findIndex(pt => pt.x === e.x && pt.y === e.y);\n\n if (index >= 0) {\n acc.splice(index, 1, replacement);\n\n return acc;\n } else {\n return acc;\n }\n } else {\n return acc;\n }\n },\n [...arr],\n );\n};\n\nexport class RawBaseComponent extends React.Component {\n static propTypes = {\n classes: PropTypes.object,\n className: PropTypes.string,\n disabled: PropTypes.bool,\n correctness: PropTypes.string,\n points: PropTypes.arrayOf(types.PointType),\n closed: PropTypes.bool,\n isSolution: PropTypes.bool,\n coordinatesOnHover: PropTypes.bool,\n onChange: PropTypes.func.isRequired,\n onClosePolygon: PropTypes.func.isRequired,\n onDragStart: PropTypes.func,\n onDragStop: PropTypes.func,\n onClick: PropTypes.func,\n graphProps: types.GraphPropsType.isRequired,\n isToolActive: PropTypes.bool,\n middle: PropTypes.object,\n labelNode: PropTypes.object,\n labelModeEnabled: PropTypes.bool,\n onChangeLabelProps: PropTypes.func,\n onChangeProps: PropTypes.func,\n };\n\n static defaultProps = {\n points: [],\n };\n\n dragPoint = (index, from, to) => {\n log('[dragPoint] from, to:', from, to);\n const { onChange, points } = this.props;\n const update = [...points];\n const overlapPoint = !!(points || []).find((p) => equalPoints(p, to));\n\n if (equalPoints(from, to) || overlapPoint) {\n return;\n }\n\n if (points[index].label) {\n to.label = points[index].label;\n }\n\n update.splice(index, 1, to);\n onChange(update);\n };\n\n dragLine = (existing, next) => {\n log('[dragLine]: ', existing, next);\n const { onChange } = this.props;\n\n if (existing.from.label) {\n next.from.label = existing.from.label;\n }\n\n if (existing.to.label) {\n next.to.label = existing.to.label;\n }\n\n const points = swap(this.props.points, existing.from, next.from, existing.to, next.to);\n onChange(points);\n };\n\n dragPoly = (existing, next) => {\n log('[dragPoly] ', existing, next);\n const { onChange } = this.props;\n\n next.forEach((point, index) => {\n if (existing[index].label) {\n next[index].label = existing[index].label;\n }\n });\n\n onChange(next);\n };\n\n close = () => {\n const { points, onClosePolygon } = this.props;\n log('[close] ...');\n\n if (points.length >= 3) {\n onClosePolygon();\n } else {\n log('[close] - nope');\n }\n };\n\n labelChange = (point, index) => {\n const { points, onChangeProps } = this.props;\n const updatedPoint = { ...point };\n\n if (!point.label || isEmpty(point.label)) {\n delete updatedPoint.label;\n }\n\n const update = [...points];\n\n update.splice(index, 1, updatedPoint);\n onChangeProps(update);\n };\n\n clickPoint = (point, index, data) => {\n const {\n closed,\n disabled,\n onClick,\n isToolActive,\n labelModeEnabled,\n onChangeProps,\n onChangeLabelProps,\n points,\n } = this.props;\n\n if (labelModeEnabled) {\n if (disabled) {\n return;\n }\n\n if (points && index === points.length) {\n const { a, b } = getRightestPoints(points);\n const middle = { label: '', ...point, ...getMiddleOfTwoPoints(a, b) };\n\n onChangeLabelProps(middle);\n } else {\n const update = [...points];\n\n update.splice(index, 1, { label: '', ...point });\n onChangeProps(update);\n }\n\n if (this.input[index]) {\n this.input[index].focus();\n }\n\n return;\n }\n\n if (isToolActive && !closed && index === 0) {\n this.close();\n return;\n }\n\n onClick(point || data);\n };\n\n // IMPORTANT, do not remove\n input = {};\n\n render() {\n const {\n closed,\n graphProps,\n onChangeLabelProps,\n points,\n middle,\n labelNode,\n labelModeEnabled,\n isSolution = false,\n } = this.props;\n const polygonLabelIndex = (points && points.length) || 0;\n if (labelNode && middle && middle.hasOwnProperty('label')) {\n ReactDOM.createPortal(\n <MarkLabel\n inputRef={(r) => (this.input[polygonLabelIndex] = r)}\n disabled={!labelModeEnabled}\n mark={middle}\n graphProps={graphProps}\n onChange={(label) => onChangeLabelProps({ ...middle, label })}\n />,\n labelNode,\n );\n }\n return (\n <g>\n <React.Fragment>\n <DraggablePolygon\n points={points}\n closed={closed}\n isSolution={isSolution}\n graphProps={graphProps}\n onClick={this.clickPoint.bind(this, middle, polygonLabelIndex)}\n />\n </React.Fragment>\n </g>\n );\n }\n}\n\nexport const BaseComponent = withStyles(() => ({}))(RawBaseComponent);\n\nexport default class Component extends React.Component {\n static propTypes = {\n ...ToolPropTypeFields,\n graphProps: types.GraphPropsType.isRequired,\n };\n\n static defaultProps = {};\n\n constructor(props) {\n super(props);\n this.state = {};\n }\n\n change = (points) => {\n const {\n mark: { middle },\n } = this.props;\n const mark = { ...this.state.mark, points };\n\n if (middle) {\n const { a, b } = getRightestPoints(points);\n\n mark.middle = { ...middle, ...getMiddleOfTwoPoints(a, b) };\n }\n\n this.setState({ mark });\n };\n\n changeProps = (points) => {\n const mark = { ...this.props.mark, points };\n\n this.props.onChange(this.props.mark, mark);\n };\n\n changeLabelProps = (point) => {\n const { mark, onChange } = this.props;\n const middle = { ...mark.middle, ...point };\n\n onChange(mark, { ...mark, middle });\n };\n\n closePolygon = () => {\n log('[closePolygon] ...');\n const { onComplete, mark } = this.props;\n const update = { ...mark, closed: true };\n\n onComplete(mark, update);\n };\n\n dragStart = () => this.setState({ mark: this.props.mark });\n\n dragStop = () => {\n const { onChange } = this.props;\n const m = { ...this.state.mark };\n\n this.setState({ mark: undefined }, () => {\n onChange(this.props.mark, m);\n });\n };\n\n render() {\n const { coordinatesOnHover, mark, graphProps, onClick, isToolActive, labelNode, labelModeEnabled } = this.props;\n const { mark: stateMark } = this.state;\n\n return (\n <BaseComponent\n {...(stateMark || mark)}\n coordinatesOnHover={coordinatesOnHover}\n onChange={this.change}\n onChangeLabelProps={this.changeLabelProps}\n onChangeProps={this.changeProps}\n onClosePolygon={this.closePolygon}\n onDragStart={this.dragStart}\n onDragStop={this.dragStop}\n onClick={onClick}\n graphProps={graphProps}\n isToolActive={isToolActive}\n labelNode={labelNode}\n labelModeEnabled={labelModeEnabled}\n />\n );\n }\n}\n"],"file":"component.js"}
@@ -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=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/tools/polygon/index.js"],"names":["addPointToArray","point","arr","length","points","closed","hasPoint","find","p","tool","type","Component","Polygon","complete","data","mark","building","addPoint"],"mappings":";;;;;;;;;;;;;AAAA;;AACA;;;;;;AAEO,IAAMA,eAAe,GAAG,SAAlBA,eAAkB,CAACC,KAAD,EAAQC,GAAR,EAAgB;AAC7CA,EAAAA,GAAG,GAAGA,GAAG,IAAI,EAAb;;AAEA,MAAIA,GAAG,CAACC,MAAJ,KAAe,CAAnB,EAAsB;AACpB,WAAO;AAAEC,MAAAA,MAAM,EAAE,CAACH,KAAD,CAAV;AAAmBI,MAAAA,MAAM,EAAE;AAA3B,KAAP;AACD,GAFD,MAEO,IAAIH,GAAG,CAACC,MAAJ,KAAe,CAAnB,EAAsB;AAC3B,QAAI,wBAAYF,KAAZ,EAAmBC,GAAG,CAAC,CAAD,CAAtB,CAAJ,EAAgC;AAC9B,aAAO;AAAEE,QAAAA,MAAM,EAAEF,GAAV;AAAeG,QAAAA,MAAM,EAAE;AAAvB,OAAP;AACD,KAFD,MAEO;AACL,aAAO;AAAED,QAAAA,MAAM,gDAAMF,GAAN,IAAWD,KAAX,EAAR;AAA2BI,QAAAA,MAAM,EAAE;AAAnC,OAAP;AACD;AACF,GANM,MAMA,IAAIH,GAAG,CAACC,MAAJ,IAAc,CAAlB,EAAqB;AAC1B,QAAME,MAAM,GAAG,wBAAYJ,KAAZ,EAAmBC,GAAG,CAAC,CAAD,CAAtB,CAAf;;AAEA,QAAIG,MAAJ,EAAY;AACV,aAAO;AAAED,QAAAA,MAAM,EAAEF,GAAV;AAAeG,QAAAA,MAAM,EAANA;AAAf,OAAP;AACD,KAFD,MAEO;AACL,UAAMC,QAAQ,GAAG,CAAC,CAACJ,GAAG,CAACK,IAAJ,CAAS,UAACC,CAAD;AAAA,eAAO,wBAAYA,CAAZ,EAAeP,KAAf,CAAP;AAAA,OAAT,CAAnB;;AAEA,UAAIK,QAAJ,EAAc;AACZ,eAAO;AAAEF,UAAAA,MAAM,EAAEF,GAAV;AAAeG,UAAAA,MAAM,EAAE;AAAvB,SAAP;AACD,OAFD,MAEO;AACL,eAAO;AAAED,UAAAA,MAAM,gDAAMF,GAAN,IAAWD,KAAX,EAAR;AAA2BI,UAAAA,MAAM,EAAE;AAAnC,SAAP;AACD;AACF;AACF;AACF,CA1BM;;;;AA4BA,IAAMI,IAAI,GAAG,SAAPA,IAAO;AAAA,SAAO;AACzBC,IAAAA,IAAI,EAAE,SADmB;AAEzBC,IAAAA,SAAS,EAAEC,qBAFc;AAGzBC,IAAAA,QAAQ,EAAE,kBAACC,IAAD,EAAOC,IAAP,EAAgB;AACxB,6CAAYA,IAAZ;AAAkBC,QAAAA,QAAQ,EAAE,KAA5B;AAAmCX,QAAAA,MAAM,EAAE;AAA3C;AACD,KALwB;AAMzBY,IAAAA,QAAQ,EAAE,kBAAChB,KAAD,EAAQc,IAAR,EAAiB;AACzB,UAAI,CAACA,IAAL,EAAW;AACT,eAAO;AACLL,UAAAA,IAAI,EAAE,SADD;AAELN,UAAAA,MAAM,EAAE,CAACH,KAAD,CAFH;AAGLI,UAAAA,MAAM,EAAE,KAHH;AAILW,UAAAA,QAAQ,EAAE;AAJL,SAAP;AAMD,OAPD,MAOO;AACL,+BAA2BhB,eAAe,CAACC,KAAD,EAAQc,IAAI,CAACX,MAAb,CAA1C;AAAA,YAAQC,MAAR,oBAAQA,MAAR;AAAA,YAAgBD,MAAhB,oBAAgBA,MAAhB;;AAEA,+CAAYW,IAAZ;AAAkBV,UAAAA,MAAM,EAANA,MAAlB;AAA0BD,UAAAA,MAAM,EAANA,MAA1B;AAAkCY,UAAAA,QAAQ,EAAE,CAACX;AAA7C;AACD;AACF;AAnBwB,GAAP;AAAA,CAAb","sourcesContent":["import Polygon from './component';\nimport { equalPoints } from '../../utils';\n\nexport const addPointToArray = (point, arr) => {\n arr = arr || [];\n\n if (arr.length === 0) {\n return { points: [point], closed: false };\n } else if (arr.length === 1) {\n if (equalPoints(point, arr[0])) {\n return { points: arr, closed: false };\n } else {\n return { points: [...arr, point], closed: false };\n }\n } else if (arr.length >= 2) {\n const closed = equalPoints(point, arr[0]);\n\n if (closed) {\n return { points: arr, closed };\n } else {\n const hasPoint = !!arr.find((p) => equalPoints(p, point));\n\n if (hasPoint) {\n return { points: arr, closed: false };\n } else {\n return { points: [...arr, point], closed: false };\n }\n }\n }\n};\n\nexport const tool = () => ({\n type: 'polygon',\n Component: Polygon,\n complete: (data, mark) => {\n return { ...mark, building: false, closed: true };\n },\n addPoint: (point, mark) => {\n if (!mark) {\n return {\n type: 'polygon',\n points: [point],\n closed: false,\n building: true,\n };\n } else {\n const { closed, points } = addPointToArray(point, mark.points);\n\n return { ...mark, closed, points, building: !closed };\n }\n },\n});\n"],"file":"index.js"}