@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,97 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
6
-
7
- var _enzyme = require("enzyme");
8
-
9
- var _react = _interopRequireDefault(require("react"));
10
-
11
- var _utils = require("../../../__tests__/utils");
12
-
13
- var _component = _interopRequireDefault(require("../component"));
14
-
15
- 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; }
16
-
17
- 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; }
18
-
19
- describe('Component', function () {
20
- var w;
21
- var onChange = jest.fn();
22
-
23
- var wrapper = function wrapper(extras, opts) {
24
- var defaults = {
25
- classes: {},
26
- className: 'className',
27
- onChange: onChange,
28
- graphProps: (0, _utils.graphProps)()
29
- };
30
-
31
- var props = _objectSpread(_objectSpread({}, defaults), extras);
32
-
33
- return (0, _enzyme.shallow)( /*#__PURE__*/_react["default"].createElement(_component["default"], props), opts);
34
- };
35
-
36
- describe('snapshot', function () {
37
- it('renders', function () {
38
- w = wrapper();
39
- expect(w).toMatchSnapshot();
40
- });
41
- });
42
- describe('logic', function () {
43
- describe('move', function () {
44
- it('calls onChange', function () {
45
- var w = wrapper({
46
- mark: _objectSpread({}, (0, _utils.xy)(0, 0))
47
- });
48
- w.instance().move({
49
- x: 1,
50
- y: 1
51
- });
52
- expect(w.state('mark')).toMatchObject(_objectSpread({}, (0, _utils.xy)(1, 1)));
53
- });
54
- });
55
- describe('labelChange', function () {
56
- it('callsOnChange with label removed', function () {
57
- var mark = {
58
- label: 'foo'
59
- };
60
- var update = {};
61
- var w = wrapper({
62
- mark: mark
63
- });
64
- w.instance().labelChange(undefined);
65
- expect(onChange).toHaveBeenCalledWith(mark, update);
66
- });
67
- });
68
- describe('clickPoint', function () {
69
- var mark;
70
- var w;
71
- beforeEach(function () {
72
- mark = {
73
- label: 'foo'
74
- };
75
- w = wrapper({
76
- mark: mark,
77
- labelModeEnabled: true
78
- }, {
79
- disableLifecycleMethods: true
80
- });
81
- w.instance().input = {
82
- focus: jest.fn()
83
- };
84
- w.instance().clickPoint();
85
- });
86
- it('calls onChange if labelModeEnabeld', function () {
87
- expect(onChange).toHaveBeenCalledWith(mark, _objectSpread({
88
- label: ''
89
- }, mark));
90
- });
91
- it('calls input.focus', function () {
92
- expect(w.instance().input.focus).toHaveBeenCalled();
93
- });
94
- });
95
- });
96
- });
97
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90b29scy9wb2ludC9fX3Rlc3RzX18vY29tcG9uZW50LnRlc3QuanN4Il0sIm5hbWVzIjpbImRlc2NyaWJlIiwidyIsIm9uQ2hhbmdlIiwiamVzdCIsImZuIiwid3JhcHBlciIsImV4dHJhcyIsIm9wdHMiLCJkZWZhdWx0cyIsImNsYXNzZXMiLCJjbGFzc05hbWUiLCJncmFwaFByb3BzIiwicHJvcHMiLCJpdCIsImV4cGVjdCIsInRvTWF0Y2hTbmFwc2hvdCIsIm1hcmsiLCJpbnN0YW5jZSIsIm1vdmUiLCJ4IiwieSIsInN0YXRlIiwidG9NYXRjaE9iamVjdCIsImxhYmVsIiwidXBkYXRlIiwibGFiZWxDaGFuZ2UiLCJ1bmRlZmluZWQiLCJ0b0hhdmVCZWVuQ2FsbGVkV2l0aCIsImJlZm9yZUVhY2giLCJsYWJlbE1vZGVFbmFibGVkIiwiZGlzYWJsZUxpZmVjeWNsZU1ldGhvZHMiLCJpbnB1dCIsImZvY3VzIiwiY2xpY2tQb2ludCIsInRvSGF2ZUJlZW5DYWxsZWQiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUVBOzs7Ozs7QUFFQUEsUUFBUSxDQUFDLFdBQUQsRUFBYyxZQUFNO0FBQzFCLE1BQUlDLENBQUo7QUFDQSxNQUFJQyxRQUFRLEdBQUdDLElBQUksQ0FBQ0MsRUFBTCxFQUFmOztBQUNBLE1BQU1DLE9BQU8sR0FBRyxTQUFWQSxPQUFVLENBQUNDLE1BQUQsRUFBU0MsSUFBVCxFQUFrQjtBQUNoQyxRQUFNQyxRQUFRLEdBQUc7QUFDZkMsTUFBQUEsT0FBTyxFQUFFLEVBRE07QUFFZkMsTUFBQUEsU0FBUyxFQUFFLFdBRkk7QUFHZlIsTUFBQUEsUUFBUSxFQUFSQSxRQUhlO0FBSWZTLE1BQUFBLFVBQVUsRUFBRTtBQUpHLEtBQWpCOztBQU1BLFFBQU1DLEtBQUssbUNBQVFKLFFBQVIsR0FBcUJGLE1BQXJCLENBQVg7O0FBQ0EsV0FBTyxtQ0FBUSxnQ0FBQyxxQkFBRCxFQUFlTSxLQUFmLENBQVIs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QUFGO0FBR0QsS0FqQk8sQ0FBUjtBQWtCRCxHQXJDTyxDQUFSO0FBc0NELENBM0RPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzaGFsbG93IH0gZnJvbSAnZW56eW1lJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBncmFwaFByb3BzLCB4eSB9IGZyb20gJy4uLy4uLy4uL19fdGVzdHNfXy91dGlscyc7XG5cbmltcG9ydCBDb21wb25lbnQgZnJvbSAnLi4vY29tcG9uZW50JztcblxuZGVzY3JpYmUoJ0NvbXBvbmVudCcsICgpID0+IHtcbiAgbGV0IHc7XG4gIGxldCBvbkNoYW5nZSA9IGplc3QuZm4oKTtcbiAgY29uc3Qgd3JhcHBlciA9IChleHRyYXMsIG9wdHMpID0+IHtcbiAgICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICAgIGNsYXNzZXM6IHt9LFxuICAgICAgY2xhc3NOYW1lOiAnY2xhc3NOYW1lJyxcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgZ3JhcGhQcm9wczogZ3JhcGhQcm9wcygpLFxuICAgIH07XG4gICAgY29uc3QgcHJvcHMgPSB7IC4uLmRlZmF1bHRzLCAuLi5leHRyYXMgfTtcbiAgICByZXR1cm4gc2hhbGxvdyg8Q29tcG9uZW50IHsuLi5wcm9wc30gLz4sIG9wdHMpO1xuICB9O1xuXG4gIGRlc2NyaWJlKCdzbmFwc2hvdCcsICgpID0+IHtcbiAgICBpdCgncmVuZGVycycsICgpID0+IHtcbiAgICAgIHcgPSB3cmFwcGVyKCk7XG4gICAgICBleHBlY3QodykudG9NYXRjaFNuYXBzaG90KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdsb2dpYycsICgpID0+IHtcbiAgICBkZXNjcmliZSgnbW92ZScsICgpID0+IHtcbiAgICAgIGl0KCdjYWxscyBvbkNoYW5nZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgdyA9IHdyYXBwZXIoeyBtYXJrOiB7IC4uLnh5KDAsIDApIH0gfSk7XG4gICAgICAgIHcuaW5zdGFuY2UoKS5tb3ZlKHsgeDogMSwgeTogMSB9KTtcbiAgICAgICAgZXhwZWN0KHcuc3RhdGUoJ21hcmsnKSkudG9NYXRjaE9iamVjdCh7IC4uLnh5KDEsIDEpIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbGFiZWxDaGFuZ2UnLCAoKSA9PiB7XG4gICAgICBpdCgnY2FsbHNPbkNoYW5nZSB3aXRoIGxhYmVsIHJlbW92ZWQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1hcmsgPSB7IGxhYmVsOiAnZm9vJyB9O1xuICAgICAgICBjb25zdCB1cGRhdGUgPSB7fTtcbiAgICAgICAgY29uc3QgdyA9IHdyYXBwZXIoeyBtYXJrIH0pO1xuICAgICAgICB3Lmluc3RhbmNlKCkubGFiZWxDaGFuZ2UodW5kZWZpbmVkKTtcbiAgICAgICAgZXhwZWN0KG9uQ2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChtYXJrLCB1cGRhdGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY2xpY2tQb2ludCcsICgpID0+IHtcbiAgICAgIGxldCBtYXJrO1xuICAgICAgbGV0IHc7XG4gICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgbWFyayA9IHsgbGFiZWw6ICdmb28nIH07XG4gICAgICAgIHcgPSB3cmFwcGVyKHsgbWFyaywgbGFiZWxNb2RlRW5hYmxlZDogdHJ1ZSB9LCB7IGRpc2FibGVMaWZlY3ljbGVNZXRob2RzOiB0cnVlIH0pO1xuICAgICAgICB3Lmluc3RhbmNlKCkuaW5wdXQgPSB7XG4gICAgICAgICAgZm9jdXM6IGplc3QuZm4oKSxcbiAgICAgICAgfTtcbiAgICAgICAgdy5pbnN0YW5jZSgpLmNsaWNrUG9pbnQoKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ2NhbGxzIG9uQ2hhbmdlIGlmIGxhYmVsTW9kZUVuYWJlbGQnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChvbkNoYW5nZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgobWFyaywgeyBsYWJlbDogJycsIC4uLm1hcmsgfSk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdjYWxscyBpbnB1dC5mb2N1cycsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KHcuaW5zdGFuY2UoKS5pbnB1dC5mb2N1cykudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -1,186 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports["default"] = exports.Point = 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 _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
25
-
26
- var _react = _interopRequireDefault(require("react"));
27
-
28
- var _point = require("../shared/point");
29
-
30
- var _types = require("../shared/types");
31
-
32
- var _plot = require("@pie-lib/plot");
33
-
34
- var _reactDom = _interopRequireDefault(require("react-dom"));
35
-
36
- var _markLabel = _interopRequireDefault(require("../../mark-label"));
37
-
38
- var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
39
-
40
- var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
41
-
42
- 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; }
43
-
44
- 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; }
45
-
46
- 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); }; }
47
-
48
- 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; } }
49
-
50
- var Point = /*#__PURE__*/function (_React$Component) {
51
- (0, _inherits2["default"])(Point, _React$Component);
52
-
53
- var _super = _createSuper(Point);
54
-
55
- function Point(props) {
56
- var _this;
57
-
58
- (0, _classCallCheck2["default"])(this, Point);
59
- _this = _super.call(this, props);
60
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "move", function (p) {
61
- var mark = _objectSpread(_objectSpread({}, _this.state.mark), p);
62
-
63
- _this.setState({
64
- mark: mark
65
- });
66
- });
67
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "startDrag", function () {
68
- var update = _objectSpread({}, _this.props.mark);
69
-
70
- if (update.label === '') {
71
- delete update.label;
72
- }
73
-
74
- _this.setState({
75
- mark: update
76
- });
77
- });
78
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "stopDrag", function () {
79
- var onChange = _this.props.onChange;
80
-
81
- var mark = _objectSpread({}, _this.state.mark);
82
-
83
- _this.setState({
84
- mark: undefined
85
- }, function () {
86
- if (!(0, _isEqual["default"])(_this.props.mark, mark)) {
87
- onChange(_this.props.mark, mark);
88
- }
89
- });
90
- });
91
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "labelChange", function (label) {
92
- var onChange = _this.props.onChange;
93
-
94
- var update = _objectSpread(_objectSpread({}, _this.props.mark), {}, {
95
- label: label
96
- });
97
-
98
- if (!label || (0, _isEmpty["default"])(label)) {
99
- delete update.label;
100
- }
101
-
102
- _this.setState({
103
- mark: update
104
- }, function () {
105
- onChange(_this.props.mark, update);
106
- });
107
- });
108
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "clickPoint", function () {
109
- var _this$props = _this.props,
110
- labelModeEnabled = _this$props.labelModeEnabled,
111
- onChange = _this$props.onChange,
112
- onClick = _this$props.onClick,
113
- mark = _this$props.mark;
114
-
115
- if (!labelModeEnabled) {
116
- onClick(mark);
117
- return;
118
- }
119
-
120
- if (mark.disabled) {
121
- return;
122
- }
123
-
124
- onChange(mark, _objectSpread({
125
- label: ''
126
- }, mark));
127
-
128
- if (_this.input) {
129
- _this.input.focus();
130
- }
131
- });
132
- _this.state = {};
133
- return _this;
134
- }
135
-
136
- (0, _createClass2["default"])(Point, [{
137
- key: "render",
138
- value: function render() {
139
- var _this2 = this;
140
-
141
- var _this$props2 = this.props,
142
- coordinatesOnHover = _this$props2.coordinatesOnHover,
143
- graphProps = _this$props2.graphProps,
144
- labelNode = _this$props2.labelNode,
145
- labelModeEnabled = _this$props2.labelModeEnabled;
146
- var mark = this.state.mark ? this.state.mark : this.props.mark;
147
- return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_point.BasePoint, (0, _extends2["default"])({}, mark, {
148
- coordinatesOnHover: coordinatesOnHover,
149
- graphProps: graphProps,
150
- labelNode: labelNode,
151
- onDrag: this.move,
152
- onDragStart: this.startDrag,
153
- onDragStop: this.stopDrag,
154
- onClick: this.clickPoint,
155
- onTouchStart: function onTouchStart(e) {
156
- e.stopPropagation();
157
-
158
- _this2.clickPoint();
159
- },
160
- onTouchEnd: function onTouchEnd(e) {
161
- e.stopPropagation();
162
-
163
- _this2.clickPoint();
164
- }
165
- })), labelNode && mark.hasOwnProperty('label') && /*#__PURE__*/_reactDom["default"].createPortal( /*#__PURE__*/_react["default"].createElement(_markLabel["default"], {
166
- inputRef: function inputRef(r) {
167
- return _this2.input = r;
168
- },
169
- disabled: !labelModeEnabled,
170
- mark: mark,
171
- graphProps: graphProps,
172
- onChange: this.labelChange
173
- }), labelNode));
174
- }
175
- }]);
176
- return Point;
177
- }(_react["default"].Component);
178
-
179
- exports.Point = Point;
180
- (0, _defineProperty2["default"])(Point, "propTypes", _objectSpread({
181
- graphProps: _plot.types.GraphPropsType.isRequired
182
- }, _types.ToolPropTypeFields));
183
- (0, _defineProperty2["default"])(Point, "defaultProps", {});
184
- var _default = Point;
185
- exports["default"] = _default;
186
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90b29scy9wb2ludC9jb21wb25lbnQuanN4Il0sIm5hbWVzIjpbIlBvaW50IiwicHJvcHMiLCJwIiwibWFyayIsInN0YXRlIiwic2V0U3RhdGUiLCJ1cGRhdGUiLCJsYWJlbCIsIm9uQ2hhbmdlIiwidW5kZWZpbmVkIiwibGFiZWxNb2RlRW5hYmxlZCIsIm9uQ2xpY2siLCJkaXNhYmxlZCIsImlucHV0IiwiZm9jdXMiLCJjb29yZGluYXRlc09uSG92ZXIiLCJncmFwaFByb3BzIiwibGFiZWxOb2RlIiwibW92ZSIsInN0YXJ0RHJhZyIsInN0b3BEcmFnIiwiY2xpY2tQb2ludCIsImUiLCJzdG9wUHJvcGFnYXRpb24iLCJoYXNPd25Qcm9wZXJ0eSIsIlJlYWN0RE9NIiwiY3JlYXRlUG9ydGFsIiwiciIsImxhYmVsQ2hhbmdlIiwiUmVhY3QiLCJDb21wb25lbnQiLCJ0eXBlcyIsIkdyYXBoUHJvcHNUeXBlIiwiaXNSZXF1aXJlZCIsIlRvb2xQcm9wVHlwZUZpZWxkcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7Ozs7O0lBRWFBLEs7Ozs7O0FBUVgsaUJBQVlDLEtBQVosRUFBbUI7QUFBQTs7QUFBQTtBQUNqQiw4QkFBTUEsS0FBTjtBQURpQiw2RkFLWixVQUFDQyxDQUFELEVBQU87QUFDWixVQUFNQyxJQUFJLG1DQUFRLE1BQUtDLEtBQUwsQ0FBV0QsSUFBbkIsR0FBNEJELENBQTVCLENBQVY7O0FBQ0EsWUFBS0csUUFBTCxDQUFjO0FBQUVGLFFBQUFBLElBQUksRUFBSkE7QUFBRixPQUFkO0FBQ0QsS0FSa0I7QUFBQSxrR0FVUCxZQUFNO0FBQ2hCLFVBQU1HLE1BQU0scUJBQVEsTUFBS0wsS0FBTCxDQUFXRSxJQUFuQixDQUFaOztBQUVBLFVBQUlHLE1BQU0sQ0FBQ0MsS0FBUCxLQUFpQixFQUFyQixFQUF5QjtBQUN2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QVBuQjtBQVFFLFFBQUEsT0FBTyxFQUFFLEtBQUtDLFVBUmhCO0FBU0UsUUFBQSxZQUFZLEVBQUUsc0JBQUNDLENBQUQsRUFBTztBQUNuQkEsVUFBQUEsQ0FBQyxDQUFDQyxlQUFGOztBQUNBLFVBQUEsTUFBSSxDQUFDRixVQUFMO0FBQ0QsU0FaSDtBQWFFLFFBQUEsVUFBVSxFQUFFLG9CQUFDQyxDQUFELEVBQU87QUFDakJBLFVBQUFBLENBQUMsQ0FBQ0MsZUFBRjs7QUFDQSxVQUFBLE1BQUksQ0FBQ0YsVUFBTDtBQUNEO0FBaEJILFNBREYsRUFtQkdKLFNBQVMsSUFDUmQsSUFBSSxDQUFDcUIsY0FBTCxDQUFvQixPQUFwQixDQURELGlCQUVDQyxxQkFBU0MsWUFBVCxlQUNFLGdDQUFDLHFCQUFEO0FBQ0UsUUFBQSxRQUFRLEVBQUUsa0JBQUNDLENBQUQ7QUFBQSxpQkFBUSxNQUFJLENBQUNkLEtBQUwsR0FBYWMsQ0FBckI7QUFBQSxTQURaO0FBRUUsUUFBQSxRQUFRLEVBQUUsQ0FBQ2pCLGdCQUZiO0FBR0UsUUFBQSxJQUFJLEVBQUVQLElBSFI7QUFJRSxRQUFBLFVBQVUsRUFBRWEsVUFKZDtBQUtFLFFBQUEsUUFBUSxFQUFFLEtBQUtZO0FBTGpCLFFBREYsRUFRRVgsU0FSRixDQXJCSixDQURGO0FBa0NEOzs7RUEzR3dCWSxrQkFBTUMsUzs7O2lDQUFwQjlCLEs7QUFFVGdCLEVBQUFBLFVBQVUsRUFBRWUsWUFBTUMsY0FBTixDQUFxQkM7R0FDOUJDLHlCO2lDQUhNbEMsSyxrQkFNVyxFO2VBd0dUQSxLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEJhc2VQb2ludCB9IGZyb20gJy4uL3NoYXJlZC9wb2ludCc7XG5pbXBvcnQgeyBUb29sUHJvcFR5cGVGaWVsZHMgfSBmcm9tICcuLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IHsgdHlwZXMgfSBmcm9tICdAcGllLWxpYi9wbG90JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IE1hcmtMYWJlbCBmcm9tICcuLi8uLi9tYXJrLWxhYmVsJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5JztcblxuZXhwb3J0IGNsYXNzIFBvaW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBncmFwaFByb3BzOiB0eXBlcy5HcmFwaFByb3BzVHlwZS5pc1JlcXVpcmVkLFxuICAgIC4uLlRvb2xQcm9wVHlwZUZpZWxkcyxcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge307XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHt9O1xuICB9XG5cbiAgbW92ZSA9IChwKSA9PiB7XG4gICAgY29uc3QgbWFyayA9IHsgLi4udGhpcy5zdGF0ZS5tYXJrLCAuLi5wIH07XG4gICAgdGhpcy5zZXRTdGF0ZSh7IG1hcmsgfSk7XG4gIH07XG5cbiAgc3RhcnREcmFnID0gKCkgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZSA9IHsgLi4udGhpcy5wcm9wcy5tYXJrIH07XG5cbiAgICBpZiAodXBkYXRlLmxhYmVsID09PSAnJykge1xuICAgICAgZGVsZXRlIHVwZGF0ZS5sYWJlbDtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZSh7IG1hcms6IHVwZGF0ZSB9KTtcbiAgfTtcblxuICBzdG9wRHJhZyA9ICgpID0+IHtcbiAgICBjb25zdCB7IG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG1hcmsgPSB7IC4uLnRoaXMuc3RhdGUubWFyayB9O1xuICAgIHRoaXMuc2V0U3RhdGUoeyBtYXJrOiB1bmRlZmluZWQgfSwgKCkgPT4ge1xuICAgICAgaWYgKCFpc0VxdWFsKHRoaXMucHJvcHMubWFyaywgbWFyaykpIHtcbiAgICAgICAgb25DaGFuZ2UodGhpcy5wcm9wcy5tYXJrLCBtYXJrKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBsYWJlbENoYW5nZSA9IChsYWJlbCkgPT4ge1xuICAgIGNvbnN0IHsgb25DaGFuZ2UgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgdXBkYXRlID0geyAuLi50aGlzLnByb3BzLm1hcmssIGxhYmVsIH07XG5cbiAgICBpZiAoIWxhYmVsIHx8IGlzRW1wdHkobGFiZWwpKSB7XG4gICAgICBkZWxldGUgdXBkYXRlLmxhYmVsO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U3RhdGUoeyBtYXJrOiB1cGRhdGUgfSwgKCkgPT4ge1xuICAgICAgb25DaGFuZ2UodGhpcy5wcm9wcy5tYXJrLCB1cGRhdGUpO1xuICAgIH0pO1xuICB9O1xuXG4gIGNsaWNrUG9pbnQgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBsYWJlbE1vZGVFbmFibGVkLCBvbkNoYW5nZSwgb25DbGljaywgbWFyayB9ID0gdGhpcy5wcm9wcztcblxuICAgIGlmICghbGFiZWxNb2RlRW5hYmxlZCkge1xuICAgICAgb25DbGljayhtYXJrKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobWFyay5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG9uQ2hhbmdlKG1hcmssIHsgbGFiZWw6ICcnLCAuLi5tYXJrIH0pO1xuXG4gICAgaWYgKHRoaXMuaW5wdXQpIHtcbiAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICB9XG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgY29vcmRpbmF0ZXNPbkhvdmVyLCBncmFwaFByb3BzLCBsYWJlbE5vZGUsIGxhYmVsTW9kZUVuYWJsZWQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgbWFyayA9IHRoaXMuc3RhdGUubWFyayA/IHRoaXMuc3RhdGUubWFyayA6IHRoaXMucHJvcHMubWFyaztcblxuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIDxCYXNlUG9pbnRcbiAgICAgICAgICB7Li4ubWFya31cbiAgICAgICAgICBjb29yZGluYXRlc09uSG92ZXI9e2Nvb3JkaW5hdGVzT25Ib3Zlcn1cbiAgICAgICAgICBncmFwaFByb3BzPXtncmFwaFByb3BzfVxuICAgICAgICAgIGxhYmVsTm9kZT17bGFiZWxOb2RlfVxuICAgICAgICAgIG9uRHJhZz17dGhpcy5tb3ZlfVxuICAgICAgICAgIG9uRHJhZ1N0YXJ0PXt0aGlzLnN0YXJ0RHJhZ31cbiAgICAgICAgICBvbkRyYWdTdG9wPXt0aGlzLnN0b3BEcmFnfVxuICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuY2xpY2tQb2ludH1cbiAgICAgICAgICBvblRvdWNoU3RhcnQ9eyhlKSA9PiB7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5jbGlja1BvaW50KCk7XG4gICAgICAgICAgfX1cbiAgICAgICAgICBvblRvdWNoRW5kPXsoZSkgPT4ge1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMuY2xpY2tQb2ludCgpO1xuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICAgIHtsYWJlbE5vZGUgJiZcbiAgICAgICAgICBtYXJrLmhhc093blByb3BlcnR5KCdsYWJlbCcpICYmXG4gICAgICAgICAgUmVhY3RET00uY3JlYXRlUG9ydGFsKFxuICAgICAgICAgICAgPE1hcmtMYWJlbFxuICAgICAgICAgICAgICBpbnB1dFJlZj17KHIpID0+ICh0aGlzLmlucHV0ID0gcil9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXshbGFiZWxNb2RlRW5hYmxlZH1cbiAgICAgICAgICAgICAgbWFyaz17bWFya31cbiAgICAgICAgICAgICAgZ3JhcGhQcm9wcz17Z3JhcGhQcm9wc31cbiAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMubGFiZWxDaGFuZ2V9XG4gICAgICAgICAgICAvPixcbiAgICAgICAgICAgIGxhYmVsTm9kZSxcbiAgICAgICAgICApfVxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBvaW50O1xuIl19
@@ -1,32 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.tool = void 0;
9
-
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
-
12
- var _component = _interopRequireDefault(require("./component"));
13
-
14
- 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; }
15
-
16
- 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; }
17
-
18
- var tool = function tool() {
19
- return {
20
- label: 'Point',
21
- type: 'point',
22
- Component: _component["default"],
23
- addPoint: function addPoint(point) {
24
- return _objectSpread({
25
- type: 'point'
26
- }, point);
27
- }
28
- };
29
- };
30
-
31
- exports.tool = tool;
32
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90b29scy9wb2ludC9pbmRleC5qcyJdLCJuYW1lcyI6WyJ0b29sIiwibGFiZWwiLCJ0eXBlIiwiQ29tcG9uZW50IiwiUG9pbnQiLCJhZGRQb2ludCIsInBvaW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOzs7Ozs7QUFFTyxJQUFNQSxJQUFJLEdBQUcsU0FBUEEsSUFBTztBQUFBLFNBQU87QUFDekJDLElBQUFBLEtBQUssRUFBRSxPQURrQjtBQUV6QkMsSUFBQUEsSUFBSSxFQUFFLE9BRm1CO0FBR3pCQyxJQUFBQSxTQUFTLEVBQUVDLHFCQUhjO0FBSXpCQyxJQUFBQSxRQUFRLEVBQUUsa0JBQUNDLEtBQUQ7QUFBQTtBQUNSSixRQUFBQSxJQUFJLEVBQUU7QUFERSxTQUVMSSxLQUZLO0FBQUE7QUFKZSxHQUFQO0FBQUEsQ0FBYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQb2ludCBmcm9tICcuL2NvbXBvbmVudCc7XG5cbmV4cG9ydCBjb25zdCB0b29sID0gKCkgPT4gKHtcbiAgbGFiZWw6ICdQb2ludCcsXG4gIHR5cGU6ICdwb2ludCcsXG4gIENvbXBvbmVudDogUG9pbnQsXG4gIGFkZFBvaW50OiAocG9pbnQpID0+ICh7XG4gICAgdHlwZTogJ3BvaW50JyxcbiAgICAuLi5wb2ludCxcbiAgfSksXG59KTtcbiJdfQ==
@@ -1,255 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
6
-
7
- var _enzyme = require("enzyme");
8
-
9
- var _react = _interopRequireDefault(require("react"));
10
-
11
- var _utils = require("../../../__tests__/utils");
12
-
13
- var _component = require("../component");
14
-
15
- 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; }
16
-
17
- 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; }
18
-
19
- var xyLabel = function xyLabel(x, y, index, label) {
20
- return _objectSpread(_objectSpread({}, (0, _utils.xy)(x, y, index)), {}, {
21
- label: label
22
- });
23
- };
24
-
25
- describe('buildLines', function () {
26
- var defaultPoints = [(0, _utils.xy)(0, 0), (0, _utils.xy)(1, 1), (0, _utils.xy)(1, 0)];
27
-
28
- var assertBuildLines = function assertBuildLines(points, closed, expected) {
29
- it("builds points and lines for ".concat(points, " = ").concat(expected), function () {
30
- var result = (0, _component.buildLines)(points);
31
- expect(result).toMatchObject([{
32
- from: (0, _utils.xy)(0, 0, 0),
33
- to: (0, _utils.xy)(1, 1, 1)
34
- }, {
35
- from: (0, _utils.xy)(1, 1, 1),
36
- to: (0, _utils.xy)(1, 0, 2)
37
- }]);
38
- });
39
- };
40
-
41
- assertBuildLines(defaultPoints, true, []);
42
- });
43
- describe('swap', function () {
44
- it('swaps pairs', function () {
45
- var result = (0, _component.swap)([(0, _utils.xy)(0, 0, 0), (0, _utils.xy)(1, 1, 1), (0, _utils.xy)(2, 2, 2)], (0, _utils.xy)(0, 0, 0), (0, _utils.xy)(3, 3, 0));
46
- expect(result).toEqual([(0, _utils.xy)(3, 3, 0), (0, _utils.xy)(1, 1, 1), (0, _utils.xy)(2, 2, 2)]);
47
- });
48
- });
49
- describe('RawBaseComponent', function () {
50
- var w;
51
- var onChange = jest.fn();
52
- var onChangeProps = jest.fn();
53
-
54
- var wrapper = function wrapper(extras) {
55
- var defaults = {
56
- classes: {},
57
- className: 'className',
58
- onChange: onChange,
59
- onChangeProps: onChangeProps,
60
- onClosePolygon: jest.fn(),
61
- graphProps: (0, _utils.graphProps)(),
62
- points: []
63
- };
64
-
65
- var props = _objectSpread(_objectSpread({}, defaults), extras);
66
-
67
- return (0, _enzyme.shallow)( /*#__PURE__*/_react["default"].createElement(_component.RawBaseComponent, props));
68
- }; // used to test items that have labels attached to points
69
-
70
-
71
- var labelNode = document.createElement('foreignObject');
72
- var points = [xyLabel(0, 0, 0, 'A'), xyLabel(2, 2, 1, 'B'), xyLabel(0, 2, 2, 'C')];
73
-
74
- var wrapperWithLabels = function wrapperWithLabels(extras) {
75
- return wrapper(_objectSpread({
76
- labelNode: labelNode,
77
- points: points
78
- }, extras));
79
- };
80
-
81
- describe('snapshot', function () {
82
- it('renders', function () {
83
- w = wrapper();
84
- expect(w).toMatchSnapshot();
85
- });
86
- it('renders with labels', function () {
87
- w = wrapperWithLabels();
88
- expect(w).toMatchSnapshot();
89
- });
90
- });
91
- describe('logic', function () {
92
- describe('dragPoint', function () {
93
- it('calls onChange', function () {
94
- onChange = jest.fn();
95
- w = wrapper({
96
- points: [(0, _utils.xy)(1, 1)],
97
- onChange: onChange
98
- });
99
- w.instance().dragPoint(0, (0, _utils.xy)(1, 1), (0, _utils.xy)(2, 2));
100
- expect(onChange).toHaveBeenCalledWith([(0, _utils.xy)(2, 2)]);
101
- });
102
- it('calls onChange keeping label property from point', function () {
103
- onChange = jest.fn();
104
- w = wrapperWithLabels(onChange);
105
- w.instance().dragPoint(0, (0, _utils.xy)(0, 0), (0, _utils.xy)(0, 1));
106
- expect(onChange).toHaveBeenCalledWith([{
107
- x: 0,
108
- y: 1,
109
- label: 'A'
110
- }, points[1], points[2]]);
111
- });
112
- });
113
- describe('dragLine', function () {
114
- it('calls onChange', function () {
115
- w = wrapper({
116
- points: [(0, _utils.xy)(1, 1, 0), (0, _utils.xy)(2, 2, 1)],
117
- onChange: onChange
118
- });
119
- w.instance().dragLine({
120
- from: (0, _utils.xy)(1, 1, 0),
121
- to: (0, _utils.xy)(2, 2, 1)
122
- }, {
123
- from: (0, _utils.xy)(2, 2, 0),
124
- to: (0, _utils.xy)(4, 4, 1)
125
- });
126
- expect(onChange).toHaveBeenCalledWith([(0, _utils.xy)(2, 2, 0), (0, _utils.xy)(4, 4, 1)]);
127
- });
128
- it('calls onChange keeping label property from both points', function () {
129
- onChange = jest.fn();
130
- w = wrapperWithLabels(onChange);
131
- w.instance().dragLine({
132
- from: points[0],
133
- to: points[1]
134
- }, {
135
- from: (0, _utils.xy)(0, 1, 0),
136
- to: (0, _utils.xy)(2, 3, 1)
137
- });
138
- expect(onChange).toHaveBeenCalledWith([xyLabel(0, 1, 0, 'A'), xyLabel(2, 3, 1, 'B'), points[2]]);
139
- });
140
- });
141
- describe('dragPoly', function () {
142
- it('calls onChange', function () {
143
- w = wrapper({
144
- onChange: onChange
145
- });
146
- var existing = [(0, _utils.xy)(1, 1)];
147
- var next = [(0, _utils.xy)(2, 2)];
148
- w.instance().dragPoly(existing, next);
149
- expect(onChange).toHaveBeenCalledWith([(0, _utils.xy)(2, 2)]);
150
- });
151
- it('calls onChange keeping label property from all points', function () {
152
- onChange = jest.fn();
153
- w = wrapperWithLabels(onChange);
154
- w.instance().dragPoly(points, [(0, _utils.xy)(0, 1, 0), (0, _utils.xy)(2, 3, 1), (0, _utils.xy)(0, 3, 2)]);
155
- expect(onChange).toHaveBeenCalledWith([xyLabel(0, 1, 0, 'A'), xyLabel(2, 3, 1, 'B'), xyLabel(0, 3, 2, 'C')]);
156
- });
157
- });
158
- describe('labelChange', function () {
159
- it('updates "label" property for point', function () {
160
- w = wrapperWithLabels();
161
- w.instance().labelChange(_objectSpread(_objectSpread({}, points[0]), {}, {
162
- label: 'Label A'
163
- }), 0);
164
- expect(onChangeProps).toBeCalledWith([_objectSpread(_objectSpread({}, points[0]), {}, {
165
- label: 'Label A'
166
- }), points[1], points[2]]);
167
- w.instance().labelChange(_objectSpread(_objectSpread({}, points[1]), {}, {
168
- label: 'Label B'
169
- }), 1);
170
- expect(onChangeProps).toBeCalledWith([points[0], _objectSpread(_objectSpread({}, points[1]), {}, {
171
- label: 'Label B'
172
- }), points[2]]);
173
- });
174
- it('removes "label" property if the field is empty', function () {
175
- w = wrapperWithLabels();
176
- w.instance().labelChange(_objectSpread(_objectSpread({}, points[0]), {}, {
177
- label: ''
178
- }), 0);
179
- expect(onChangeProps).toBeCalledWith([(0, _utils.xy)(0, 0, 0), points[1], points[2]]);
180
- w.instance().labelChange(_objectSpread(_objectSpread({}, points[1]), {}, {
181
- label: ''
182
- }), 1);
183
- expect(onChangeProps).toBeCalledWith([points[0], (0, _utils.xy)(2, 2, 1), points[2]]);
184
- });
185
- });
186
- });
187
- describe('close', function () {
188
- it('calls onClosePolygon', function () {
189
- var onClosePolygon = jest.fn();
190
- w = wrapper({
191
- onClosePolygon: onClosePolygon,
192
- points: [(0, _utils.xy)(1, 1), (0, _utils.xy)(2, 2), (0, _utils.xy)(3, 3)]
193
- });
194
- w.instance().close();
195
- expect(onClosePolygon).toHaveBeenCalled();
196
- });
197
- });
198
- describe('clickPoint', function () {
199
- var onClick = jest.fn();
200
- var onClosePolygon = jest.fn();
201
- beforeEach(function () {
202
- onClosePolygon.mockClear();
203
- onClick.mockClear();
204
- });
205
-
206
- var assertCallback = function assertCallback(isToolActive, closed, index, mock) {
207
- it('calls onClosePolygon', function () {
208
- var w = wrapper({
209
- points: [(0, _utils.xy)(1, 1), (0, _utils.xy)(2, 2), (0, _utils.xy)(3, 3)],
210
- onClosePolygon: onClosePolygon,
211
- onClick: onClick,
212
- isToolActive: isToolActive,
213
- closed: closed
214
- });
215
- w.instance().clickPoint((0, _utils.xy)(1, 1, 0), index, {});
216
- expect(mock).toHaveBeenCalled();
217
- });
218
- };
219
-
220
- assertCallback(true, false, 0, onClosePolygon);
221
- assertCallback(true, false, 1, onClick);
222
- assertCallback(false, false, 0, onClick);
223
- assertCallback(true, true, 0, onClick);
224
- it('adds "label" property to a point', function () {
225
- var onChangeProps = jest.fn();
226
- var w = wrapperWithLabels({
227
- labelModeEnabled: true,
228
- onChangeProps: onChangeProps,
229
- points: [(0, _utils.xy)(0, 0, 0), (0, _utils.xy)(2, 2, 1), (0, _utils.xy)(0, 2, 2)]
230
- });
231
- w.instance().clickPoint((0, _utils.xy)(0, 0, 0), 0, {});
232
- expect(onChangeProps).toHaveBeenCalledWith([xyLabel(0, 0, 0, ''), (0, _utils.xy)(2, 2, 1), (0, _utils.xy)(0, 2, 2)]);
233
- });
234
- it('adds "label" property to a point when limit labeling', function () {
235
- var onChangeProps = jest.fn();
236
- var w = wrapperWithLabels({
237
- labelModeEnabled: true,
238
- onChangeProps: onChangeProps,
239
- limitLabeling: true
240
- });
241
- w.instance().clickPoint((0, _utils.xy)(0, 0, 0), 0, {});
242
- expect(onChangeProps).toHaveBeenCalledTimes(0);
243
- });
244
- it('if point already has label, keeps that value', function () {
245
- var onChangeProps = jest.fn();
246
- var w = wrapperWithLabels({
247
- labelModeEnabled: true,
248
- onChangeProps: onChangeProps
249
- });
250
- w.instance().clickPoint(points[0], 0, {});
251
- expect(onChangeProps).toHaveBeenCalledWith(points);
252
- });
253
- });
254
- });
255
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90b29scy9wb2x5Z29uL19fdGVzdHNfXy9jb21wb25lbnQudGVzdC5qc3giXSwibmFtZXMiOlsieHlMYWJlbCIsIngiLCJ5IiwiaW5kZXgiLCJsYWJlbCIsImRlc2NyaWJlIiwiZGVmYXVsdFBvaW50cyIsImFzc2VydEJ1aWxkTGluZXMiLCJwb2ludHMiLCJjbG9zZWQiLCJleHBlY3RlZCIsIml0IiwicmVzdWx0IiwiZXhwZWN0IiwidG9NYXRjaE9iamVjdCIsImZyb20iLCJ0byIsInRvRXF1YWwiLCJ3Iiwib25DaGFuZ2UiLCJqZXN0IiwiZm4iLCJvbkNoYW5nZVByb3BzIiwid3JhcHBlciIsImV4dHJhcyIsImRlZmF1bHRzIiwiY2xhc3NlcyIsImNsYXNzTmFtZSIsIm9uQ2xvc2VQb2x5Z29uIiwiZ3JhcGhQcm9wcyIsInByb3BzIiwibGFiZWxOb2RlIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwid3JhcHBlcldpdGhMYWJlbHMiLCJ0b01hdGNoU25hcHNob3QiLCJpbnN0YW5jZSIsImRyYWdQb2ludCIsInRvSGF2ZUJlZW5DYWxsZWRXaXRoIiwiZHJhZ0xpbmUiLCJleGlzdGluZyIsIm5leHQiLCJkcmFnUG9seSIsImxhYmVsQ2hhbmdlIiwidG9CZUNhbGxlZFdpdGgiLCJjbG9zZSIsInRvSGF2ZUJlZW5DYWxsZWQiLCJvbkNsaWNrIiwiYmVmb3JlRWFjaCIsIm1vY2tDbGVhciIsImFzc2VydENhbGxiYWNrIiwiaXNUb29sQWN0aXZlIiwibW9jayIsImNsaWNrUG9pbnQiLCJsYWJlbE1vZGVFbmFibGVkIiwibGltaXRMYWJlbGluZyIsInRvSGF2ZUJlZW5DYWxsZWRUaW1lcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBRUE7Ozs7OztBQUVBLElBQU1BLE9BQU8sR0FBRyxTQUFWQSxPQUFVLENBQUNDLENBQUQsRUFBSUMsQ0FBSixFQUFPQyxLQUFQLEVBQWNDLEtBQWQ7QUFBQSx5Q0FDWCxl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Q0FBc0JrQyxxQkFBdEIsQ0FBNEMsQ0FBNUM7QUFDRCxLQVZDLENBQUY7QUFZQTdDLElBQUFBLEVBQUUsQ0FBQyw4Q0FBRCxFQUFpRCxZQUFNO0FBQ3ZELFVBQU1XLGFBQWEsR0FBR0YsSUFBSSxDQUFDQyxFQUFMLEVBQXRCO0FBQ0EsVUFBTUgsQ0FBQyxHQUFHZ0IsaUJBQWlCLENBQUM7QUFBRW9CLFFBQUFBLGdCQUFnQixFQUFFLElBQXBCO0FBQTBCaEMsUUFBQUEsYUFBYSxFQUFiQTtBQUExQixPQUFELENBQTNCO0FBRUFKLE1BQUFBLENBQUMsQ0FBQ2tCLFFBQUYsR0FBYWlCLFVBQWIsQ0FBd0I3QyxNQUFNLENBQUMsQ0FBRCxDQUE5QixFQUFtQyxDQUFuQyxFQUFzQyxFQUF0QztBQUNBSyxNQUFBQSxNQUFNLENBQUNTLGFBQUQsQ0FBTixDQUFzQmdCLG9CQUF0QixDQUEyQzlCLE1BQTNDO0FBQ0QsS0FOQyxDQUFGO0FBT0QsR0EzRE8sQ0FBUjtBQTRERCxDQS9MTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2hhbGxvdyB9IGZyb20gJ2VuenltZSc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZ3JhcGhQcm9wcywgeHkgfSBmcm9tICcuLi8uLi8uLi9fX3Rlc3RzX18vdXRpbHMnO1xuXG5pbXBvcnQgeyBSYXdCYXNlQ29tcG9uZW50LCBidWlsZExpbmVzLCBzd2FwIH0gZnJvbSAnLi4vY29tcG9uZW50JztcblxuY29uc3QgeHlMYWJlbCA9ICh4LCB5LCBpbmRleCwgbGFiZWwpID0+ICh7XG4gIC4uLnh5KHgsIHksIGluZGV4KSxcbiAgbGFiZWwsXG59KTtcblxuZGVzY3JpYmUoJ2J1aWxkTGluZXMnLCAoKSA9PiB7XG4gIGNvbnN0IGRlZmF1bHRQb2ludHMgPSBbeHkoMCwgMCksIHh5KDEsIDEpLCB4eSgxLCAwKV07XG5cbiAgY29uc3QgYXNzZXJ0QnVpbGRMaW5lcyA9IChwb2ludHMsIGNsb3NlZCwgZXhwZWN0ZWQpID0+IHtcbiAgICBpdChgYnVpbGRzIHBvaW50cyBhbmQgbGluZXMgZm9yICR7cG9pbnRzfSA9ICR7ZXhwZWN0ZWR9YCwgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYnVpbGRMaW5lcyhwb2ludHMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9NYXRjaE9iamVjdChbXG4gICAgICAgIHsgZnJvbTogeHkoMCwgMCwgMCksIHRvOiB4eSgxLCAxLCAxKSB9LFxuICAgICAgICB7IGZyb206IHh5KDEsIDEsIDEpLCB0bzogeHkoMSwgMCwgMikgfSxcbiAgICAgIF0pO1xuICAgIH0pO1xuICB9O1xuXG4gIGFzc2VydEJ1aWxkTGluZXMoZGVmYXVsdFBvaW50cywgdHJ1ZSwgW10pO1xufSk7XG5cbmRlc2NyaWJlKCdzd2FwJywgKCkgPT4ge1xuICBpdCgnc3dhcHMgcGFpcnMnLCAoKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gc3dhcChbeHkoMCwgMCwgMCksIHh5KDEsIDEsIDEpLCB4eSgyLCAyLCAyKV0sIHh5KDAsIDAsIDApLCB4eSgzLCAzLCAwKSk7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbeHkoMywgMywgMCksIHh5KDEsIDEsIDEpLCB4eSgyLCAyLCAyKV0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnUmF3QmFzZUNvbXBvbmVudCcsICgpID0+IHtcbiAgbGV0IHc7XG4gIGxldCBvbkNoYW5nZSA9IGplc3QuZm4oKTtcbiAgbGV0IG9uQ2hhbmdlUHJvcHMgPSBqZXN0LmZuKCk7XG4gIGNvbnN0IHdyYXBwZXIgPSAoZXh0cmFzKSA9PiB7XG4gICAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgICBjbGFzc2VzOiB7fSxcbiAgICAgIGNsYXNzTmFtZTogJ2NsYXNzTmFtZScsXG4gICAgICBvbkNoYW5nZSxcbiAgICAgIG9uQ2hhbmdlUHJvcHMsXG4gICAgICBvbkNsb3NlUG9seWdvbjogamVzdC5mbigpLFxuICAgICAgZ3JhcGhQcm9wczogZ3JhcGhQcm9wcygpLFxuICAgICAgcG9pbnRzOiBbXSxcbiAgICB9O1xuICAgIGNvbnN0IHByb3BzID0geyAuLi5kZWZhdWx0cywgLi4uZXh0cmFzIH07XG5cbiAgICByZXR1cm4gc2hhbGxvdyg8UmF3QmFzZUNvbXBvbmVudCB7Li4ucHJvcHN9IC8+KTtcbiAgfTtcblxuICAvLyB1c2VkIHRvIHRlc3QgaXRlbXMgdGhhdCBoYXZlIGxhYmVscyBhdHRhY2hlZCB0byBwb2ludHNcbiAgY29uc3QgbGFiZWxOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9yZWlnbk9iamVjdCcpO1xuICBjb25zdCBwb2ludHMgPSBbeHlMYWJlbCgwLCAwLCAwLCAnQScpLCB4eUxhYmVsKDIsIDIsIDEsICdCJyksIHh5TGFiZWwoMCwgMiwgMiwgJ0MnKV07XG4gIGNvbnN0IHdyYXBwZXJXaXRoTGFiZWxzID0gKGV4dHJhcykgPT5cbiAgICB3cmFwcGVyKHtcbiAgICAgIGxhYmVsTm9kZTogbGFiZWxOb2RlLFxuICAgICAgcG9pbnRzOiBwb2ludHMsXG4gICAgICAuLi5leHRyYXMsXG4gICAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NuYXBzaG90JywgKCkgPT4ge1xuICAgIGl0KCdyZW5kZXJzJywgKCkgPT4ge1xuICAgICAgdyA9IHdyYXBwZXIoKTtcbiAgICAgIGV4cGVjdCh3KS50b01hdGNoU25hcHNob3QoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHdpdGggbGFiZWxzJywgKCkgPT4ge1xuICAgICAgdyA9IHdyYXBwZXJXaXRoTGFiZWxzKCk7XG4gICAgICBleHBlY3QodykudG9NYXRjaFNuYXBzaG90KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdsb2dpYycsICgpID0+IHtcbiAgICBkZXNjcmliZSgnZHJhZ1BvaW50JywgKCkgPT4ge1xuICAgICAgaXQoJ2NhbGxzIG9uQ2hhbmdlJywgKCkgPT4ge1xuICAgICAgICBvbkNoYW5nZSA9IGplc3QuZm4oKTtcbiAgICAgICAgdyA9IHdyYXBwZXIoeyBwb2ludHM6IFt4eSgxLCAxKV0sIG9uQ2hhbmdlIH0pO1xuICAgICAgICB3Lmluc3RhbmNlKCkuZHJhZ1BvaW50KDAsIHh5KDEsIDEpLCB4eSgyLCAyKSk7XG4gICAgICAgIGV4cGVjdChvbkNoYW5nZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoW3h5KDIsIDIpXSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2NhbGxzIG9uQ2hhbmdlIGtlZXBpbmcgbGFiZWwgcHJvcGVydHkgZnJvbSBwb2ludCcsICgpID0+IHtcbiAgICAgICAgb25DaGFuZ2UgPSBqZXN0LmZuKCk7XG4gICAgICAgIHcgPSB3cmFwcGVyV2l0aExhYmVscyhvbkNoYW5nZSk7XG5cbiAgICAgICAgdy5pbnN0YW5jZSgpLmRyYWdQb2ludCgwLCB4eSgwLCAwKSwgeHkoMCwgMSkpO1xuICAgICAgICBleHBlY3Qob25DaGFuZ2UpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFt7IHg6IDAsIHk6IDEsIGxhYmVsOiAnQScgfSwgcG9pbnRzWzFdLCBwb2ludHNbMl1dKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2RyYWdMaW5lJywgKCkgPT4ge1xuICAgICAgaXQoJ2NhbGxzIG9uQ2hhbmdlJywgKCkgPT4ge1xuICAgICAgICB3ID0gd3JhcHBlcih7IHBvaW50czogW3h5KDEsIDEsIDApLCB4eSgyLCAyLCAxKV0sIG9uQ2hhbmdlIH0pO1xuICAgICAgICB3Lmluc3RhbmNlKCkuZHJhZ0xpbmUoeyBmcm9tOiB4eSgxLCAxLCAwKSwgdG86IHh5KDIsIDIsIDEpIH0sIHsgZnJvbTogeHkoMiwgMiwgMCksIHRvOiB4eSg0LCA0LCAxKSB9KTtcbiAgICAgICAgZXhwZWN0KG9uQ2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChbeHkoMiwgMiwgMCksIHh5KDQsIDQsIDEpXSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2NhbGxzIG9uQ2hhbmdlIGtlZXBpbmcgbGFiZWwgcHJvcGVydHkgZnJvbSBib3RoIHBvaW50cycsICgpID0+IHtcbiAgICAgICAgb25DaGFuZ2UgPSBqZXN0LmZuKCk7XG4gICAgICAgIHcgPSB3cmFwcGVyV2l0aExhYmVscyhvbkNoYW5nZSk7XG5cbiAgICAgICAgdy5pbnN0YW5jZSgpLmRyYWdMaW5lKFxuICAgICAgICAgIHsgZnJvbTogcG9pbnRzWzBdLCB0bzogcG9pbnRzWzFdIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnJvbTogeHkoMCwgMSwgMCksXG4gICAgICAgICAgICB0bzogeHkoMiwgMywgMSksXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgICAgZXhwZWN0KG9uQ2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChbeHlMYWJlbCgwLCAxLCAwLCAnQScpLCB4eUxhYmVsKDIsIDMsIDEsICdCJyksIHBvaW50c1syXV0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZHJhZ1BvbHknLCAoKSA9PiB7XG4gICAgICBpdCgnY2FsbHMgb25DaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgIHcgPSB3cmFwcGVyKHsgb25DaGFuZ2UgfSk7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nID0gW3h5KDEsIDEpXTtcbiAgICAgICAgY29uc3QgbmV4dCA9IFt4eSgyLCAyKV07XG4gICAgICAgIHcuaW5zdGFuY2UoKS5kcmFnUG9seShleGlzdGluZywgbmV4dCk7XG4gICAgICAgIGV4cGVjdChvbkNoYW5nZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoW3h5KDIsIDIpXSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2NhbGxzIG9uQ2hhbmdlIGtlZXBpbmcgbGFiZWwgcHJvcGVydHkgZnJvbSBhbGwgcG9pbnRzJywgKCkgPT4ge1xuICAgICAgICBvbkNoYW5nZSA9IGplc3QuZm4oKTtcbiAgICAgICAgdyA9IHdyYXBwZXJXaXRoTGFiZWxzKG9uQ2hhbmdlKTtcblxuICAgICAgICB3Lmluc3RhbmNlKCkuZHJhZ1BvbHkocG9pbnRzLCBbeHkoMCwgMSwgMCksIHh5KDIsIDMsIDEpLCB4eSgwLCAzLCAyKV0pO1xuICAgICAgICBleHBlY3Qob25DaGFuZ2UpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFt4eUxhYmVsKDAsIDEsIDAsICdBJyksIHh5TGFiZWwoMiwgMywgMSwgJ0InKSwgeHlMYWJlbCgwLCAzLCAyLCAnQycpXSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdsYWJlbENoYW5nZScsICgpID0+IHtcbiAgICAgIGl0KCd1cGRhdGVzIFwibGFiZWxcIiBwcm9wZXJ0eSBmb3IgcG9pbnQnLCAoKSA9PiB7XG4gICAgICAgIHcgPSB3cmFwcGVyV2l0aExhYmVscygpO1xuXG4gICAgICAgIHcuaW5zdGFuY2UoKS5sYWJlbENoYW5nZSh7IC4uLnBvaW50c1swXSwgbGFiZWw6ICdMYWJlbCBBJyB9LCAwKTtcbiAgICAgICAgZXhwZWN0KG9uQ2hhbmdlUHJvcHMpLnRvQmVDYWxsZWRXaXRoKFt7IC4uLnBvaW50c1swXSwgbGFiZWw6ICdMYWJlbCBBJyB9LCBwb2ludHNbMV0sIHBvaW50c1syXV0pO1xuXG4gICAgICAgIHcuaW5zdGFuY2UoKS5sYWJlbENoYW5nZSh7IC4uLnBvaW50c1sxXSwgbGFiZWw6ICdMYWJlbCBCJyB9LCAxKTtcbiAgICAgICAgZXhwZWN0KG9uQ2hhbmdlUHJvcHMpLnRvQmVDYWxsZWRXaXRoKFtwb2ludHNbMF0sIHsgLi4ucG9pbnRzWzFdLCBsYWJlbDogJ0xhYmVsIEInIH0sIHBvaW50c1syXV0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdyZW1vdmVzIFwibGFiZWxcIiBwcm9wZXJ0eSBpZiB0aGUgZmllbGQgaXMgZW1wdHknLCAoKSA9PiB7XG4gICAgICAgIHcgPSB3cmFwcGVyV2l0aExhYmVscygpO1xuXG4gICAgICAgIHcuaW5zdGFuY2UoKS5sYWJlbENoYW5nZSh7IC4uLnBvaW50c1swXSwgbGFiZWw6ICcnIH0sIDApO1xuICAgICAgICBleHBlY3Qob25DaGFuZ2VQcm9wcykudG9CZUNhbGxlZFdpdGgoW3h5KDAsIDAsIDApLCBwb2ludHNbMV0sIHBvaW50c1syXV0pO1xuXG4gICAgICAgIHcuaW5zdGFuY2UoKS5sYWJlbENoYW5nZSh7IC4uLnBvaW50c1sxXSwgbGFiZWw6ICcnIH0sIDEpO1xuICAgICAgICBleHBlY3Qob25DaGFuZ2VQcm9wcykudG9CZUNhbGxlZFdpdGgoW3BvaW50c1swXSwgeHkoMiwgMiwgMSksIHBvaW50c1syXV0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjbG9zZScsICgpID0+IHtcbiAgICBpdCgnY2FsbHMgb25DbG9zZVBvbHlnb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCBvbkNsb3NlUG9seWdvbiA9IGplc3QuZm4oKTtcbiAgICAgIHcgPSB3cmFwcGVyKHsgb25DbG9zZVBvbHlnb24sIHBvaW50czogW3h5KDEsIDEpLCB4eSgyLCAyKSwgeHkoMywgMyldIH0pO1xuICAgICAgdy5pbnN0YW5jZSgpLmNsb3NlKCk7XG4gICAgICBleHBlY3Qob25DbG9zZVBvbHlnb24pLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2NsaWNrUG9pbnQnLCAoKSA9PiB7XG4gICAgbGV0IG9uQ2xpY2sgPSBqZXN0LmZuKCk7XG4gICAgbGV0IG9uQ2xvc2VQb2x5Z29uID0gamVzdC5mbigpO1xuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgb25DbG9zZVBvbHlnb24ubW9ja0NsZWFyKCk7XG4gICAgICBvbkNsaWNrLm1vY2tDbGVhcigpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgYXNzZXJ0Q2FsbGJhY2sgPSAoaXNUb29sQWN0aXZlLCBjbG9zZWQsIGluZGV4LCBtb2NrKSA9PiB7XG4gICAgICBpdCgnY2FsbHMgb25DbG9zZVBvbHlnb24nLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHcgPSB3cmFwcGVyKHtcbiAgICAgICAgICBwb2ludHM6IFt4eSgxLCAxKSwgeHkoMiwgMiksIHh5KDMsIDMpXSxcbiAgICAgICAgICBvbkNsb3NlUG9seWdvbixcbiAgICAgICAgICBvbkNsaWNrLFxuICAgICAgICAgIGlzVG9vbEFjdGl2ZSxcbiAgICAgICAgICBjbG9zZWQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHcuaW5zdGFuY2UoKS5jbGlja1BvaW50KHh5KDEsIDEsIDApLCBpbmRleCwge30pO1xuICAgICAgICBleHBlY3QobW9jaykudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzc2VydENhbGxiYWNrKHRydWUsIGZhbHNlLCAwLCBvbkNsb3NlUG9seWdvbik7XG4gICAgYXNzZXJ0Q2FsbGJhY2sodHJ1ZSwgZmFsc2UsIDEsIG9uQ2xpY2spO1xuICAgIGFzc2VydENhbGxiYWNrKGZhbHNlLCBmYWxzZSwgMCwgb25DbGljayk7XG4gICAgYXNzZXJ0Q2FsbGJhY2sodHJ1ZSwgdHJ1ZSwgMCwgb25DbGljayk7XG5cbiAgICBpdCgnYWRkcyBcImxhYmVsXCIgcHJvcGVydHkgdG8gYSBwb2ludCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG9uQ2hhbmdlUHJvcHMgPSBqZXN0LmZuKCk7XG4gICAgICBjb25zdCB3ID0gd3JhcHBlcldpdGhMYWJlbHMoe1xuICAgICAgICBsYWJlbE1vZGVFbmFibGVkOiB0cnVlLFxuICAgICAgICBvbkNoYW5nZVByb3BzLFxuICAgICAgICBwb2ludHM6IFt4eSgwLCAwLCAwKSwgeHkoMiwgMiwgMSksIHh5KDAsIDIsIDIpXSxcbiAgICAgIH0pO1xuXG4gICAgICB3Lmluc3RhbmNlKCkuY2xpY2tQb2ludCh4eSgwLCAwLCAwKSwgMCwge30pO1xuICAgICAgZXhwZWN0KG9uQ2hhbmdlUHJvcHMpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFt4eUxhYmVsKDAsIDAsIDAsICcnKSwgeHkoMiwgMiwgMSksIHh5KDAsIDIsIDIpXSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYWRkcyBcImxhYmVsXCIgcHJvcGVydHkgdG8gYSBwb2ludCB3aGVuIGxpbWl0IGxhYmVsaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb25DaGFuZ2VQcm9wcyA9IGplc3QuZm4oKTtcbiAgICAgIGNvbnN0IHcgPSB3cmFwcGVyV2l0aExhYmVscyh7XG4gICAgICAgIGxhYmVsTW9kZUVuYWJsZWQ6IHRydWUsXG4gICAgICAgIG9uQ2hhbmdlUHJvcHMsXG4gICAgICAgIGxpbWl0TGFiZWxpbmc6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgdy5pbnN0YW5jZSgpLmNsaWNrUG9pbnQoeHkoMCwgMCwgMCksIDAsIHt9KTtcbiAgICAgIGV4cGVjdChvbkNoYW5nZVByb3BzKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnaWYgcG9pbnQgYWxyZWFkeSBoYXMgbGFiZWwsIGtlZXBzIHRoYXQgdmFsdWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvbkNoYW5nZVByb3BzID0gamVzdC5mbigpO1xuICAgICAgY29uc3QgdyA9IHdyYXBwZXJXaXRoTGFiZWxzKHsgbGFiZWxNb2RlRW5hYmxlZDogdHJ1ZSwgb25DaGFuZ2VQcm9wcyB9KTtcblxuICAgICAgdy5pbnN0YW5jZSgpLmNsaWNrUG9pbnQocG9pbnRzWzBdLCAwLCB7fSk7XG4gICAgICBleHBlY3Qob25DaGFuZ2VQcm9wcykudG9IYXZlQmVlbkNhbGxlZFdpdGgocG9pbnRzKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==