@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,245 @@
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('if point already has label, keeps that value', function () {
235
+ var onChangeProps = jest.fn();
236
+ var w = wrapperWithLabels({
237
+ labelModeEnabled: true,
238
+ onChangeProps: onChangeProps
239
+ });
240
+ w.instance().clickPoint(points[0], 0, {});
241
+ expect(onChangeProps).toHaveBeenCalledWith(points);
242
+ });
243
+ });
244
+ });
245
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90b29scy9wb2x5Z29uL19fdGVzdHNfXy9jb21wb25lbnQudGVzdC5qc3giXSwibmFtZXMiOlsieHlMYWJlbCIsIngiLCJ5IiwiaW5kZXgiLCJsYWJlbCIsImRlc2NyaWJlIiwiZGVmYXVsdFBvaW50cyIsImFzc2VydEJ1aWxkTGluZXMiLCJwb2ludHMiLCJjbG9zZWQiLCJleHBlY3RlZCIsIml0IiwicmVzdWx0IiwiZXhwZWN0IiwidG9NYXRjaE9iamVjdCIsImZyb20iLCJ0byIsInRvRXF1YWwiLCJ3Iiwib25DaGFuZ2UiLCJqZXN0IiwiZm4iLCJvbkNoYW5nZVByb3BzIiwid3JhcHBlciIsImV4dHJhcyIsImRlZmF1bHRzIiwiY2xhc3NlcyIsImNsYXNzTmFtZSIsIm9uQ2xvc2VQb2x5Z29uIiwiZ3JhcGhQcm9wcyIsInByb3BzIiwibGFiZWxOb2RlIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwid3JhcHBlcldpdGhMYWJlbHMiLCJ0b01hdGNoU25hcHNob3QiLCJpbnN0YW5jZSIsImRyYWdQb2ludCIsInRvSGF2ZUJlZW5DYWxsZWRXaXRoIiwiZHJhZ0xpbmUiLCJleGlzdGluZyIsIm5leHQiLCJkcmFnUG9seSIsImxhYmVsQ2hhbmdlIiwidG9CZUNhbGxlZFdpdGgiLCJjbG9zZSIsInRvSGF2ZUJlZW5DYWxsZWQiLCJvbkNsaWNrIiwiYmVmb3JlRWFjaCIsIm1vY2tDbGVhciIsImFzc2VydENhbGxiYWNrIiwiaXNUb29sQWN0aXZlIiwibW9jayIsImNsaWNrUG9pbnQiLCJsYWJlbE1vZGVFbmFibGVkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFFQTs7Ozs7O0FBRUEsSUFBTUEsT0FBTyxHQUFHLFNBQVZBLE9BQVUsQ0FBQ0MsQ0FBRCxFQUFJQyxDQUFKLEVBQU9DLEtBQVAsRUFBY0MsS0FBZDtBQUFBLHlDQUNYLGVBQUdILENBQUgsRUFBTUMsQ0FBTixFQUFTQyxLQUFULENBRFc7QUFF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ZXNDb250ZW50IjpbImltcG9ydCB7IHNoYWxsb3cgfSBmcm9tICdlbnp5bWUnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGdyYXBoUHJvcHMsIHh5IH0gZnJvbSAnLi4vLi4vLi4vX190ZXN0c19fL3V0aWxzJztcblxuaW1wb3J0IHsgUmF3QmFzZUNvbXBvbmVudCwgYnVpbGRMaW5lcywgc3dhcCB9IGZyb20gJy4uL2NvbXBvbmVudCc7XG5cbmNvbnN0IHh5TGFiZWwgPSAoeCwgeSwgaW5kZXgsIGxhYmVsKSA9PiAoe1xuICAuLi54eSh4LCB5LCBpbmRleCksXG4gIGxhYmVsLFxufSk7XG5cbmRlc2NyaWJlKCdidWlsZExpbmVzJywgKCkgPT4ge1xuICBjb25zdCBkZWZhdWx0UG9pbnRzID0gW3h5KDAsIDApLCB4eSgxLCAxKSwgeHkoMSwgMCldO1xuXG4gIGNvbnN0IGFzc2VydEJ1aWxkTGluZXMgPSAocG9pbnRzLCBjbG9zZWQsIGV4cGVjdGVkKSA9PiB7XG4gICAgaXQoYGJ1aWxkcyBwb2ludHMgYW5kIGxpbmVzIGZvciAke3BvaW50c30gPSAke2V4cGVjdGVkfWAsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkTGluZXMocG9pbnRzKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvTWF0Y2hPYmplY3QoW1xuICAgICAgICB7IGZyb206IHh5KDAsIDAsIDApLCB0bzogeHkoMSwgMSwgMSkgfSxcbiAgICAgICAgeyBmcm9tOiB4eSgxLCAxLCAxKSwgdG86IHh5KDEsIDAsIDIpIH0sXG4gICAgICBdKTtcbiAgICB9KTtcbiAgfTtcblxuICBhc3NlcnRCdWlsZExpbmVzKGRlZmF1bHRQb2ludHMsIHRydWUsIFtdKTtcbn0pO1xuXG5kZXNjcmliZSgnc3dhcCcsICgpID0+IHtcbiAgaXQoJ3N3YXBzIHBhaXJzJywgKCkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IHN3YXAoW3h5KDAsIDAsIDApLCB4eSgxLCAxLCAxKSwgeHkoMiwgMiwgMildLCB4eSgwLCAwLCAwKSwgeHkoMywgMywgMCkpO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW3h5KDMsIDMsIDApLCB4eSgxLCAxLCAxKSwgeHkoMiwgMiwgMildKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ1Jhd0Jhc2VDb21wb25lbnQnLCAoKSA9PiB7XG4gIGxldCB3O1xuICBsZXQgb25DaGFuZ2UgPSBqZXN0LmZuKCk7XG4gIGxldCBvbkNoYW5nZVByb3BzID0gamVzdC5mbigpO1xuICBjb25zdCB3cmFwcGVyID0gKGV4dHJhcykgPT4ge1xuICAgIGNvbnN0IGRlZmF1bHRzID0ge1xuICAgICAgY2xhc3Nlczoge30sXG4gICAgICBjbGFzc05hbWU6ICdjbGFzc05hbWUnLFxuICAgICAgb25DaGFuZ2UsXG4gICAgICBvbkNoYW5nZVByb3BzLFxuICAgICAgb25DbG9zZVBvbHlnb246IGplc3QuZm4oKSxcbiAgICAgIGdyYXBoUHJvcHM6IGdyYXBoUHJvcHMoKSxcbiAgICAgIHBvaW50czogW10sXG4gICAgfTtcbiAgICBjb25zdCBwcm9wcyA9IHsgLi4uZGVmYXVsdHMsIC4uLmV4dHJhcyB9O1xuXG4gICAgcmV0dXJuIHNoYWxsb3coPFJhd0Jhc2VDb21wb25lbnQgey4uLnByb3BzfSAvPik7XG4gIH07XG5cbiAgLy8gdXNlZCB0byB0ZXN0IGl0ZW1zIHRoYXQgaGF2ZSBsYWJlbHMgYXR0YWNoZWQgdG8gcG9pbnRzXG4gIGNvbnN0IGxhYmVsTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ZvcmVpZ25PYmplY3QnKTtcbiAgY29uc3QgcG9pbnRzID0gW3h5TGFiZWwoMCwgMCwgMCwgJ0EnKSwgeHlMYWJlbCgyLCAyLCAxLCAnQicpLCB4eUxhYmVsKDAsIDIsIDIsICdDJyldO1xuICBjb25zdCB3cmFwcGVyV2l0aExhYmVscyA9IChleHRyYXMpID0+XG4gICAgd3JhcHBlcih7XG4gICAgICBsYWJlbE5vZGU6IGxhYmVsTm9kZSxcbiAgICAgIHBvaW50czogcG9pbnRzLFxuICAgICAgLi4uZXh0cmFzLFxuICAgIH0pO1xuXG4gIGRlc2NyaWJlKCdzbmFwc2hvdCcsICgpID0+IHtcbiAgICBpdCgncmVuZGVycycsICgpID0+IHtcbiAgICAgIHcgPSB3cmFwcGVyKCk7XG4gICAgICBleHBlY3QodykudG9NYXRjaFNuYXBzaG90KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aXRoIGxhYmVscycsICgpID0+IHtcbiAgICAgIHcgPSB3cmFwcGVyV2l0aExhYmVscygpO1xuICAgICAgZXhwZWN0KHcpLnRvTWF0Y2hTbmFwc2hvdCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnbG9naWMnLCAoKSA9PiB7XG4gICAgZGVzY3JpYmUoJ2RyYWdQb2ludCcsICgpID0+IHtcbiAgICAgIGl0KCdjYWxscyBvbkNoYW5nZScsICgpID0+IHtcbiAgICAgICAgb25DaGFuZ2UgPSBqZXN0LmZuKCk7XG4gICAgICAgIHcgPSB3cmFwcGVyKHsgcG9pbnRzOiBbeHkoMSwgMSldLCBvbkNoYW5nZSB9KTtcbiAgICAgICAgdy5pbnN0YW5jZSgpLmRyYWdQb2ludCgwLCB4eSgxLCAxKSwgeHkoMiwgMikpO1xuICAgICAgICBleHBlY3Qob25DaGFuZ2UpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFt4eSgyLCAyKV0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdjYWxscyBvbkNoYW5nZSBrZWVwaW5nIGxhYmVsIHByb3BlcnR5IGZyb20gcG9pbnQnLCAoKSA9PiB7XG4gICAgICAgIG9uQ2hhbmdlID0gamVzdC5mbigpO1xuICAgICAgICB3ID0gd3JhcHBlcldpdGhMYWJlbHMob25DaGFuZ2UpO1xuXG4gICAgICAgIHcuaW5zdGFuY2UoKS5kcmFnUG9pbnQoMCwgeHkoMCwgMCksIHh5KDAsIDEpKTtcbiAgICAgICAgZXhwZWN0KG9uQ2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChbeyB4OiAwLCB5OiAxLCBsYWJlbDogJ0EnIH0sIHBvaW50c1sxXSwgcG9pbnRzWzJdXSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdkcmFnTGluZScsICgpID0+IHtcbiAgICAgIGl0KCdjYWxscyBvbkNoYW5nZScsICgpID0+IHtcbiAgICAgICAgdyA9IHdyYXBwZXIoeyBwb2ludHM6IFt4eSgxLCAxLCAwKSwgeHkoMiwgMiwgMSldLCBvbkNoYW5nZSB9KTtcbiAgICAgICAgdy5pbnN0YW5jZSgpLmRyYWdMaW5lKHsgZnJvbTogeHkoMSwgMSwgMCksIHRvOiB4eSgyLCAyLCAxKSB9LCB7IGZyb206IHh5KDIsIDIsIDApLCB0bzogeHkoNCwgNCwgMSkgfSk7XG4gICAgICAgIGV4cGVjdChvbkNoYW5nZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoW3h5KDIsIDIsIDApLCB4eSg0LCA0LCAxKV0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdjYWxscyBvbkNoYW5nZSBrZWVwaW5nIGxhYmVsIHByb3BlcnR5IGZyb20gYm90aCBwb2ludHMnLCAoKSA9PiB7XG4gICAgICAgIG9uQ2hhbmdlID0gamVzdC5mbigpO1xuICAgICAgICB3ID0gd3JhcHBlcldpdGhMYWJlbHMob25DaGFuZ2UpO1xuXG4gICAgICAgIHcuaW5zdGFuY2UoKS5kcmFnTGluZShcbiAgICAgICAgICB7IGZyb206IHBvaW50c1swXSwgdG86IHBvaW50c1sxXSB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZyb206IHh5KDAsIDEsIDApLFxuICAgICAgICAgICAgdG86IHh5KDIsIDMsIDEpLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICAgIGV4cGVjdChvbkNoYW5nZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoW3h5TGFiZWwoMCwgMSwgMCwgJ0EnKSwgeHlMYWJlbCgyLCAzLCAxLCAnQicpLCBwb2ludHNbMl1dKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2RyYWdQb2x5JywgKCkgPT4ge1xuICAgICAgaXQoJ2NhbGxzIG9uQ2hhbmdlJywgKCkgPT4ge1xuICAgICAgICB3ID0gd3JhcHBlcih7IG9uQ2hhbmdlIH0pO1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IFt4eSgxLCAxKV07XG4gICAgICAgIGNvbnN0IG5leHQgPSBbeHkoMiwgMildO1xuICAgICAgICB3Lmluc3RhbmNlKCkuZHJhZ1BvbHkoZXhpc3RpbmcsIG5leHQpO1xuICAgICAgICBleHBlY3Qob25DaGFuZ2UpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFt4eSgyLCAyKV0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdjYWxscyBvbkNoYW5nZSBrZWVwaW5nIGxhYmVsIHByb3BlcnR5IGZyb20gYWxsIHBvaW50cycsICgpID0+IHtcbiAgICAgICAgb25DaGFuZ2UgPSBqZXN0LmZuKCk7XG4gICAgICAgIHcgPSB3cmFwcGVyV2l0aExhYmVscyhvbkNoYW5nZSk7XG5cbiAgICAgICAgdy5pbnN0YW5jZSgpLmRyYWdQb2x5KHBvaW50cywgW3h5KDAsIDEsIDApLCB4eSgyLCAzLCAxKSwgeHkoMCwgMywgMildKTtcbiAgICAgICAgZXhwZWN0KG9uQ2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChbeHlMYWJlbCgwLCAxLCAwLCAnQScpLCB4eUxhYmVsKDIsIDMsIDEsICdCJyksIHh5TGFiZWwoMCwgMywgMiwgJ0MnKV0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbGFiZWxDaGFuZ2UnLCAoKSA9PiB7XG4gICAgICBpdCgndXBkYXRlcyBcImxhYmVsXCIgcHJvcGVydHkgZm9yIHBvaW50JywgKCkgPT4ge1xuICAgICAgICB3ID0gd3JhcHBlcldpdGhMYWJlbHMoKTtcblxuICAgICAgICB3Lmluc3RhbmNlKCkubGFiZWxDaGFuZ2UoeyAuLi5wb2ludHNbMF0sIGxhYmVsOiAnTGFiZWwgQScgfSwgMCk7XG4gICAgICAgIGV4cGVjdChvbkNoYW5nZVByb3BzKS50b0JlQ2FsbGVkV2l0aChbeyAuLi5wb2ludHNbMF0sIGxhYmVsOiAnTGFiZWwgQScgfSwgcG9pbnRzWzFdLCBwb2ludHNbMl1dKTtcblxuICAgICAgICB3Lmluc3RhbmNlKCkubGFiZWxDaGFuZ2UoeyAuLi5wb2ludHNbMV0sIGxhYmVsOiAnTGFiZWwgQicgfSwgMSk7XG4gICAgICAgIGV4cGVjdChvbkNoYW5nZVByb3BzKS50b0JlQ2FsbGVkV2l0aChbcG9pbnRzWzBdLCB7IC4uLnBvaW50c1sxXSwgbGFiZWw6ICdMYWJlbCBCJyB9LCBwb2ludHNbMl1dKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmVtb3ZlcyBcImxhYmVsXCIgcHJvcGVydHkgaWYgdGhlIGZpZWxkIGlzIGVtcHR5JywgKCkgPT4ge1xuICAgICAgICB3ID0gd3JhcHBlcldpdGhMYWJlbHMoKTtcblxuICAgICAgICB3Lmluc3RhbmNlKCkubGFiZWxDaGFuZ2UoeyAuLi5wb2ludHNbMF0sIGxhYmVsOiAnJyB9LCAwKTtcbiAgICAgICAgZXhwZWN0KG9uQ2hhbmdlUHJvcHMpLnRvQmVDYWxsZWRXaXRoKFt4eSgwLCAwLCAwKSwgcG9pbnRzWzFdLCBwb2ludHNbMl1dKTtcblxuICAgICAgICB3Lmluc3RhbmNlKCkubGFiZWxDaGFuZ2UoeyAuLi5wb2ludHNbMV0sIGxhYmVsOiAnJyB9LCAxKTtcbiAgICAgICAgZXhwZWN0KG9uQ2hhbmdlUHJvcHMpLnRvQmVDYWxsZWRXaXRoKFtwb2ludHNbMF0sIHh5KDIsIDIsIDEpLCBwb2ludHNbMl1dKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY2xvc2UnLCAoKSA9PiB7XG4gICAgaXQoJ2NhbGxzIG9uQ2xvc2VQb2x5Z29uJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb25DbG9zZVBvbHlnb24gPSBqZXN0LmZuKCk7XG4gICAgICB3ID0gd3JhcHBlcih7IG9uQ2xvc2VQb2x5Z29uLCBwb2ludHM6IFt4eSgxLCAxKSwgeHkoMiwgMiksIHh5KDMsIDMpXSB9KTtcbiAgICAgIHcuaW5zdGFuY2UoKS5jbG9zZSgpO1xuICAgICAgZXhwZWN0KG9uQ2xvc2VQb2x5Z29uKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjbGlja1BvaW50JywgKCkgPT4ge1xuICAgIGxldCBvbkNsaWNrID0gamVzdC5mbigpO1xuICAgIGxldCBvbkNsb3NlUG9seWdvbiA9IGplc3QuZm4oKTtcbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgIG9uQ2xvc2VQb2x5Z29uLm1vY2tDbGVhcigpO1xuICAgICAgb25DbGljay5tb2NrQ2xlYXIoKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGFzc2VydENhbGxiYWNrID0gKGlzVG9vbEFjdGl2ZSwgY2xvc2VkLCBpbmRleCwgbW9jaykgPT4ge1xuICAgICAgaXQoJ2NhbGxzIG9uQ2xvc2VQb2x5Z29uJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB3ID0gd3JhcHBlcih7XG4gICAgICAgICAgcG9pbnRzOiBbeHkoMSwgMSksIHh5KDIsIDIpLCB4eSgzLCAzKV0sXG4gICAgICAgICAgb25DbG9zZVBvbHlnb24sXG4gICAgICAgICAgb25DbGljayxcbiAgICAgICAgICBpc1Rvb2xBY3RpdmUsXG4gICAgICAgICAgY2xvc2VkLFxuICAgICAgICB9KTtcblxuICAgICAgICB3Lmluc3RhbmNlKCkuY2xpY2tQb2ludCh4eSgxLCAxLCAwKSwgaW5kZXgsIHt9KTtcbiAgICAgICAgZXhwZWN0KG1vY2spLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3NlcnRDYWxsYmFjayh0cnVlLCBmYWxzZSwgMCwgb25DbG9zZVBvbHlnb24pO1xuICAgIGFzc2VydENhbGxiYWNrKHRydWUsIGZhbHNlLCAxLCBvbkNsaWNrKTtcbiAgICBhc3NlcnRDYWxsYmFjayhmYWxzZSwgZmFsc2UsIDAsIG9uQ2xpY2spO1xuICAgIGFzc2VydENhbGxiYWNrKHRydWUsIHRydWUsIDAsIG9uQ2xpY2spO1xuXG4gICAgaXQoJ2FkZHMgXCJsYWJlbFwiIHByb3BlcnR5IHRvIGEgcG9pbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvbkNoYW5nZVByb3BzID0gamVzdC5mbigpO1xuICAgICAgY29uc3QgdyA9IHdyYXBwZXJXaXRoTGFiZWxzKHtcbiAgICAgICAgbGFiZWxNb2RlRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgb25DaGFuZ2VQcm9wcyxcbiAgICAgICAgcG9pbnRzOiBbeHkoMCwgMCwgMCksIHh5KDIsIDIsIDEpLCB4eSgwLCAyLCAyKV0sXG4gICAgICB9KTtcblxuICAgICAgdy5pbnN0YW5jZSgpLmNsaWNrUG9pbnQoeHkoMCwgMCwgMCksIDAsIHt9KTtcbiAgICAgIGV4cGVjdChvbkNoYW5nZVByb3BzKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChbeHlMYWJlbCgwLCAwLCAwLCAnJyksIHh5KDIsIDIsIDEpLCB4eSgwLCAyLCAyKV0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2lmIHBvaW50IGFscmVhZHkgaGFzIGxhYmVsLCBrZWVwcyB0aGF0IHZhbHVlJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb25DaGFuZ2VQcm9wcyA9IGplc3QuZm4oKTtcbiAgICAgIGNvbnN0IHcgPSB3cmFwcGVyV2l0aExhYmVscyh7IGxhYmVsTW9kZUVuYWJsZWQ6IHRydWUsIG9uQ2hhbmdlUHJvcHMgfSk7XG5cbiAgICAgIHcuaW5zdGFuY2UoKS5jbGlja1BvaW50KHBvaW50c1swXSwgMCwge30pO1xuICAgICAgZXhwZWN0KG9uQ2hhbmdlUHJvcHMpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHBvaW50cyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+
3
+ var _index = require("../index");
4
+
5
+ var xy = function xy(x, y) {
6
+ return {
7
+ x: x,
8
+ y: y
9
+ };
10
+ };
11
+
12
+ describe('polygon', function () {
13
+ describe('addPointToArray', function () {
14
+ var assertAddPoint = function assertAddPoint(point, arr, expected) {
15
+ it("returns ".concat(expected, " when adding ").concat(point, " to ").concat(arr), function () {
16
+ var result = (0, _index.addPointToArray)(point, arr);
17
+ expect(result).toEqual(expected);
18
+ });
19
+ };
20
+
21
+ assertAddPoint(xy(0, 0), [], {
22
+ closed: false,
23
+ points: [xy(0, 0)]
24
+ });
25
+ assertAddPoint(xy(0, 0), [xy(0, 0)], {
26
+ closed: false,
27
+ points: [xy(0, 0)]
28
+ });
29
+ assertAddPoint(xy(1, 1), [xy(0, 0)], {
30
+ closed: false,
31
+ points: [xy(0, 0), xy(1, 1)]
32
+ });
33
+ assertAddPoint(xy(1, 1), [xy(0, 0)], {
34
+ closed: false,
35
+ points: [xy(0, 0), xy(1, 1)]
36
+ });
37
+ });
38
+ });
39
+ describe('tool', function () {
40
+ var t;
41
+ beforeEach(function () {
42
+ t = (0, _index.tool)();
43
+ });
44
+ it('creates polygon type', function () {
45
+ expect(t.type).toEqual('polygon');
46
+ });
47
+ describe('complete', function () {
48
+ it('closes polygon', function () {
49
+ expect(t.complete()).toEqual({
50
+ building: false,
51
+ closed: true
52
+ });
53
+ });
54
+ });
55
+ describe('addPoint', function () {
56
+ it('creates new point', function () {
57
+ var mark = t.addPoint({
58
+ x: 0,
59
+ y: 0
60
+ });
61
+ expect(mark).toEqual({
62
+ type: 'polygon',
63
+ points: [{
64
+ x: 0,
65
+ y: 0
66
+ }],
67
+ closed: false,
68
+ building: true
69
+ });
70
+ });
71
+ it('adds the point', function () {
72
+ var mark = t.addPoint({
73
+ x: 0,
74
+ y: 0
75
+ }, {
76
+ points: [{
77
+ x: 1,
78
+ y: 1
79
+ }]
80
+ });
81
+ expect(mark).toEqual({
82
+ building: true,
83
+ closed: false,
84
+ points: [{
85
+ x: 1,
86
+ y: 1
87
+ }, {
88
+ x: 0,
89
+ y: 0
90
+ }]
91
+ });
92
+ });
93
+ });
94
+ });
95
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90b29scy9wb2x5Z29uL19fdGVzdHNfXy9pbmRleC50ZXN0LmpzIl0sIm5hbWVzIjpbInh5IiwieCIsInkiLCJkZXNjcmliZSIsImFzc2VydEFkZFBvaW50IiwicG9pbnQiLCJhcnIiLCJleHBlY3RlZCIsIml0IiwicmVzdWx0IiwiZXhwZWN0IiwidG9FcXVhbCIsImNsb3NlZCIsInBvaW50cyIsInQiLCJiZWZvcmVFYWNoIiwidHlwZSIsImNvbXBsZXRlIiwiYnVpbGRpbmciLCJtYXJrIiwiYWRkUG9pbnQiXSwibWFwcGluZ3MiOiI7O0FBQUE7O0FBRUEsSUFBTUEsRUFBRSxHQUFHLFNBQUxBLEVBQUssQ0FBQ0MsQ0FBRCxFQUFJQyxDQUFKO0FBQUEsU0FBVztBQUFFRCxJQUFBQSxDQUFDLEVBQURBLENBQUY7QUFBS0MsSUFBQUEsQ0FBQyxFQUFEQTtBQUFMLEdBQVg7QUFBQSxDQUFYOztBQUVBQyxRQUFRLENBQUMsU0FBRCxFQUFZLFlBQU07QUFDeEJBLEVBQUFBLFFBQVEsQ0FBQyxpQkFBRCxFQUFvQixZQUFNO0FBQ2hDLFFBQU1DLGNBQWMsR0FBRyxTQUFqQkEsY0FBaUIsQ0FBQ0MsS0FBRCxFQUFRQyxHQUFSLEVBQWFDLFFBQWIsRUFBMEI7QUFDL0NDLE1BQUFBLEVBQUUsbUJBQVlELFFBQVosMEJBQW9DRixLQUFwQyxpQkFBZ0RDLEdBQWhELEdBQXVELFlBQU07QUFDN0QsWUFBTUcsTUFBTSxHQUFHLDRCQUFnQkosS0FBaEIsRUFBdUJDLEdBQXZCLENBQWY7QUFDQUksUUFBQUEsTUFBTSxDQUFDRCxNQUFELENBQU4sQ0FBZUUsT0FBZixDQUF1QkosUUFBdkI7QUFDRCxPQUhDLENBQUY7QUFJRCxLQUxEOztBQU1BSCxJQUFBQSxjQUFjLENBQUNKLEVBQUUsQ0FBQyxDQUFELEVBQUksQ0FBSixDQUFILEVBQVcsRUFBWCxFQUFlO0FBQUVZLE1BQUFBLE1BQU0sRUFBRSxLQUFWO0FBQWlCQyxNQUFBQSxNQUFNLEVBQUUsQ0FB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Q0FBTDtBQUFRQyxRQUFBQSxDQUFDLEVBQUU7QUFBWCxPQUFYLEVBQTJCO0FBQUVXLFFBQUFBLE1BQU0sRUFBRSxDQUFDO0FBQUVaLFVBQUFBLENBQUMsRUFBRSxDQUFMO0FBQVFDLFVBQUFBLENBQUMsRUFBRTtBQUFYLFNBQUQ7QUFBVixPQUEzQixDQUFiO0FBQ0FRLE1BQUFBLE1BQU0sQ0FBQ1MsSUFBRCxDQUFOLENBQWFSLE9BQWIsQ0FBcUI7QUFDbkJPLFFBQUFBLFFBQVEsRUFBRSxJQURTO0FBRW5CTixRQUFBQSxNQUFNLEVBQUUsS0FGVztBQUduQkMsUUFBQUEsTUFBTSxFQUFFLENBQ047QUFBRVosVUFBQUEsQ0FBQyxFQUFFLENBQUw7QUFBUUMsVUFBQUEsQ0FBQyxFQUFFO0FBQVgsU0FETSxFQUVOO0FBQUVELFVBQUFBLENBQUMsRUFBRSxDQUFMO0FBQVFDLFVBQUFBLENBQUMsRUFBRTtBQUFYLFNBRk07QUFIVyxPQUFyQjtBQVFELEtBVkMsQ0FBRjtBQVdELEdBdEJPLENBQVI7QUF1QkQsQ0F2Q08sQ0FBUiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFkZFBvaW50VG9BcnJheSwgdG9vbCB9IGZyb20gJy4uL2luZGV4JztcblxuY29uc3QgeHkgPSAoeCwgeSkgPT4gKHsgeCwgeSB9KTtcblxuZGVzY3JpYmUoJ3BvbHlnb24nLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdhZGRQb2ludFRvQXJyYXknLCAoKSA9PiB7XG4gICAgY29uc3QgYXNzZXJ0QWRkUG9pbnQgPSAocG9pbnQsIGFyciwgZXhwZWN0ZWQpID0+IHtcbiAgICAgIGl0KGByZXR1cm5zICR7ZXhwZWN0ZWR9IHdoZW4gYWRkaW5nICR7cG9pbnR9IHRvICR7YXJyfWAsICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYWRkUG9pbnRUb0FycmF5KHBvaW50LCBhcnIpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgYXNzZXJ0QWRkUG9pbnQoeHkoMCwgMCksIFtdLCB7IGNsb3NlZDogZmFsc2UsIHBvaW50czogW3h5KDAsIDApXSB9KTtcbiAgICBhc3NlcnRBZGRQb2ludCh4eSgwLCAwKSwgW3h5KDAsIDApXSwgeyBjbG9zZWQ6IGZhbHNlLCBwb2ludHM6IFt4eSgwLCAwKV0gfSk7XG4gICAgYXNzZXJ0QWRkUG9pbnQoeHkoMSwgMSksIFt4eSgwLCAwKV0sIHtcbiAgICAgIGNsb3NlZDogZmFsc2UsXG4gICAgICBwb2ludHM6IFt4eSgwLCAwKSwgeHkoMSwgMSldLFxuICAgIH0pO1xuICAgIGFzc2VydEFkZFBvaW50KHh5KDEsIDEpLCBbeHkoMCwgMCldLCB7XG4gICAgICBjbG9zZWQ6IGZhbHNlLFxuICAgICAgcG9pbnRzOiBbeHkoMCwgMCksIHh5KDEsIDEpXSxcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ3Rvb2wnLCAoKSA9PiB7XG4gIGxldCB0O1xuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICB0ID0gdG9vbCgpO1xuICB9KTtcblxuICBpdCgnY3JlYXRlcyBwb2x5Z29uIHR5cGUnLCAoKSA9PiB7XG4gICAgZXhwZWN0KHQudHlwZSkudG9FcXVhbCgncG9seWdvbicpO1xuICB9KTtcblxuICBkZXNjcmliZSgnY29tcGxldGUnLCAoKSA9PiB7XG4gICAgaXQoJ2Nsb3NlcyBwb2x5Z29uJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHQuY29tcGxldGUoKSkudG9FcXVhbCh7IGJ1aWxkaW5nOiBmYWxzZSwgY2xvc2VkOiB0cnVlIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYWRkUG9pbnQnLCAoKSA9PiB7XG4gICAgaXQoJ2NyZWF0ZXMgbmV3IHBvaW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgbWFyayA9IHQuYWRkUG9pbnQoeyB4OiAwLCB5OiAwIH0pO1xuICAgICAgZXhwZWN0KG1hcmspLnRvRXF1YWwoe1xuICAgICAgICB0eXBlOiAncG9seWdvbicsXG4gICAgICAgIHBvaW50czogW3sgeDogMCwgeTogMCB9XSxcbiAgICAgICAgY2xvc2VkOiBmYWxzZSxcbiAgICAgICAgYnVpbGRpbmc6IHRydWUsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdhZGRzIHRoZSBwb2ludCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG1hcmsgPSB0LmFkZFBvaW50KHsgeDogMCwgeTogMCB9LCB7IHBvaW50czogW3sgeDogMSwgeTogMSB9XSB9KTtcbiAgICAgIGV4cGVjdChtYXJrKS50b0VxdWFsKHtcbiAgICAgICAgYnVpbGRpbmc6IHRydWUsXG4gICAgICAgIGNsb3NlZDogZmFsc2UsXG4gICAgICAgIHBvaW50czogW1xuICAgICAgICAgIHsgeDogMSwgeTogMSB9LFxuICAgICAgICAgIHsgeDogMCwgeTogMCB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,43 @@
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 _line = require("../line");
12
+
13
+ var _utils = require("../../../__tests__/utils");
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('Line', function () {
20
+ var w;
21
+ var onChange = jest.fn();
22
+
23
+ var wrapper = function wrapper(extras) {
24
+ var defaults = {
25
+ classes: {},
26
+ className: 'className',
27
+ graphProps: (0, _utils.graphProps)()
28
+ };
29
+
30
+ var props = _objectSpread(_objectSpread({}, defaults), extras);
31
+
32
+ return (0, _enzyme.shallow)( /*#__PURE__*/_react["default"].createElement(_line.Line, props));
33
+ };
34
+
35
+ describe('snapshot', function () {
36
+ it('renders', function () {
37
+ w = wrapper();
38
+ expect(w).toMatchSnapshot();
39
+ });
40
+ });
41
+ describe('logic', function () {});
42
+ });
43
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90b29scy9wb2x5Z29uL19fdGVzdHNfXy9saW5lLnRlc3QuanN4Il0sIm5hbWVzIjpbImRlc2NyaWJlIiwidyIsIm9uQ2hhbmdlIiwiamVzdCIsImZuIiwid3JhcHBlciIsImV4dHJhcyIsImRlZmF1bHRzIiwiY2xhc3NlcyIsImNsYXNzTmFtZSIsImdyYXBoUHJvcHMiLCJwcm9wcyIsIml0IiwiZXhwZWN0IiwidG9NYXRjaFNuYXBzaG90Il0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7O0FBRUFBLFFBQVEsQ0FBQyxNQUFELEVBQVMsWUFBTTtBQUNyQixNQUFJQyxDQUFKO0FBQ0EsTUFBSUMsUUFBUSxHQUFHQyxJQUFJLENBQUNDLEVBQUwsRUFBZjs7QUFDQSxNQUFNQyxPQUFPLEdBQUcsU0FBVkEsT0FBVSxDQUFDQyxNQUFELEVBQVk7QUFDMUIsUUFBTUMsUUFBUSxHQUFHO0FBQ2ZDLE1BQUFBLE9BQU8sRUFBRSxFQURNO0FBRWZDLE1BQUFBLFNBQVMsRUFBRSxXQUZJO0FBR2ZDLE1BQUFBLFVBQVUsRUFBRTtBQUhHLEtBQWpCOztBQUtBLFFBQU1DLEtBQUssbUNBQVFKLFFBQVIsR0FBcUJELE1BQXJCLENBQVg7O0FBQ0EsV0FBTyxtQ0FBUSxnQ0FBQyxVQUFELEVBQVVLLEtBQVYsQ0FBUixDQUFQO0FBQ0QsR0FSRDs7QUFTQVgsRUFBQUEsUUFBUSxDQUFDLFVBQUQsRUFBYSxZQUFNO0FBQ3pCWSxJQUFBQSxFQUFFLENBQUMsU0FBRCxFQUFZLFlBQU07QUFDbEJYLE1BQUFBLENBQUMsR0FBR0ksT0FBTyxFQUFYO0FBQ0FRLE1BQUFBLE1BQU0sQ0FBQ1osQ0FBRCxDQUFOLENBQVVhLGVBQVY7QUFDRCxLQUhDLENBQUY7QUFJRCxHQUxPLENBQVI7QUFNQWQsRUFBQUEsUUFBUSxDQUFDLE9BQUQsRUFBVSxZQUFNLENBQUUsQ0FBbEIsQ0FBUjtBQUNELENBbkJPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzaGFsbG93IH0gZnJvbSAnZW56eW1lJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBMaW5lIH0gZnJvbSAnLi4vbGluZSc7XG5pbXBvcnQgeyBncmFwaFByb3BzIH0gZnJvbSAnLi4vLi4vLi4vX190ZXN0c19fL3V0aWxzJztcblxuZGVzY3JpYmUoJ0xpbmUnLCAoKSA9PiB7XG4gIGxldCB3O1xuICBsZXQgb25DaGFuZ2UgPSBqZXN0LmZuKCk7XG4gIGNvbnN0IHdyYXBwZXIgPSAoZXh0cmFzKSA9PiB7XG4gICAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgICBjbGFzc2VzOiB7fSxcbiAgICAgIGNsYXNzTmFtZTogJ2NsYXNzTmFtZScsXG4gICAgICBncmFwaFByb3BzOiBncmFwaFByb3BzKCksXG4gICAgfTtcbiAgICBjb25zdCBwcm9wcyA9IHsgLi4uZGVmYXVsdHMsIC4uLmV4dHJhcyB9O1xuICAgIHJldHVybiBzaGFsbG93KDxMaW5lIHsuLi5wcm9wc30gLz4pO1xuICB9O1xuICBkZXNjcmliZSgnc25hcHNob3QnLCAoKSA9PiB7XG4gICAgaXQoJ3JlbmRlcnMnLCAoKSA9PiB7XG4gICAgICB3ID0gd3JhcHBlcigpO1xuICAgICAgZXhwZWN0KHcpLnRvTWF0Y2hTbmFwc2hvdCgpO1xuICAgIH0pO1xuICB9KTtcbiAgZGVzY3JpYmUoJ2xvZ2ljJywgKCkgPT4ge30pO1xufSk7XG4iXX0=
@@ -0,0 +1,73 @@
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 _polygon = require("../polygon");
12
+
13
+ var _utils = require("../../../__tests__/utils");
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 xy = function xy(x, y) {
20
+ return {
21
+ x: x,
22
+ y: y
23
+ };
24
+ };
25
+
26
+ describe('Polygon', function () {
27
+ var w;
28
+
29
+ var wrapper = function wrapper(extras) {
30
+ var defaults = {
31
+ classes: {},
32
+ className: 'className',
33
+ graphProps: (0, _utils.graphProps)(),
34
+ closed: false
35
+ };
36
+
37
+ var props = _objectSpread(_objectSpread({}, defaults), extras);
38
+
39
+ return (0, _enzyme.shallow)( /*#__PURE__*/_react["default"].createElement(_polygon.Polygon, props));
40
+ };
41
+
42
+ describe('snapshot', function () {
43
+ it('renders', function () {
44
+ w = wrapper({
45
+ points: [{
46
+ x: 1,
47
+ y: 1
48
+ }]
49
+ });
50
+ expect(w).toMatchSnapshot();
51
+ });
52
+ });
53
+ });
54
+ describe('getPointString', function () {
55
+ var assertString = function assertString(arr, expected) {
56
+ it('creates: ', function () {
57
+ var result = (0, _polygon.getPointString)(arr, {
58
+ x: jest.fn(function (n) {
59
+ return n;
60
+ }),
61
+ y: jest.fn(function (n) {
62
+ return n;
63
+ })
64
+ });
65
+ expect(result).toEqual(expected);
66
+ });
67
+ };
68
+
69
+ assertString([xy(1, 1)], '1,1');
70
+ assertString([xy(1, 1), xy(2, 1)], '1,1 2,1');
71
+ assertString([xy(1, 1), xy(2, 1), xy(4, 4)], '1,1 2,1 4,4');
72
+ });
73
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90b29scy9wb2x5Z29uL19fdGVzdHNfXy9wb2x5Z29uLnRlc3QuanN4Il0sIm5hbWVzIjpbInh5IiwieCIsInkiLCJkZXNjcmliZSIsInciLCJ3cmFwcGVyIiwiZXh0cmFzIiwiZGVmYXVsdHMiLCJjbGFzc2VzIiwiY2xhc3NOYW1lIiwiZ3JhcGhQcm9wcyIsImNsb3NlZCIsInByb3BzIiwiaXQiLCJwb2ludHMiLCJleHBlY3QiLCJ0b01hdGNoU25hcHNob3QiLCJhc3NlcnRTdHJpbmciLCJhcnIiLCJleHBlY3RlZCIsInJlc3VsdCIsImplc3QiLCJmbiIsIm4iLCJ0b0VxdWFsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7O0FBRUEsSUFBTUEsRUFBRSxHQUFHLFNBQUxBLEVBQUssQ0FBQ0MsQ0FBRCxFQUFJQyxDQUFKO0FBQUEsU0FBVztBQUFFRCxJQUFBQSxDQUFDLEVBQURBLENBQUY7QUFBS0MsSUFBQUEsQ0FBQyxFQUFEQTtBQUFMLEdBQVg7QUFBQSxDQUFYOztBQUVBQyxRQUFRLENBQUMsU0FBRCxFQUFZLFlBQU07QUFDeEIsTUFBSUMsQ0FBSjs7QUFDQSxNQUFNQyxPQUFPLEdBQUcsU0FBVkEsT0FBVSxDQUFDQyxNQUFELEVBQVk7QUFDMUIsUUFBTUMsUUFBUSxHQUFHO0FBQ2ZDLE1BQUFBLE9BQU8sRUFBRSxFQURNO0FBRWZDLE1BQUFBLFNBQVMsRUFBRSxXQUZJO0FBR2ZDLE1BQUFBLFVBQVUsRUFBRSx3QkFIRztBQUlmQyxNQUFBQSxNQUFNLEVBQUU7QUFKTyxLQUFqQjs7QUFNQSxRQUFNQyxLQUFLLG1DQUFRTCxRQUFSLEdBQXFCRCxNQUFyQixDQUFYOztBQUNBLFdBQU8sbUNBQVEsZ0NBQUMsZ0JBQUQsRUFBYU0sS0FBYixDQUFSLENBQVA7QUFDRCxHQVREOztBQVdBVCxFQUFBQSxRQUFRLENBQUMsVUFBRCxFQUFhLFlBQU07QUFDekJVLElBQUFBLEVBQUUsQ0FBQyxTQUFELEVBQVksWUFBTTtBQUNsQlQsTUFBQUEsQ0FBQyxHQUFHQyxPQUFPLENBQUM7QUFBRVMsUUFBQUEsTUFBTSxFQUFFLENBQUM7QUFBRWIsVUFBQUEsQ0FBQyxFQUFFLENBQUw7QUFBUUMsVUFBQUEsQ0FBQyxFQUFFO0FBQVgsU0FBRDtBQUFWLE9BQUQsQ0FBWDtBQUNBYSxNQUFBQSxNQUFNLENBQUNYLENBQUQsQ0FBTixDQUFVWSxlQUFWO0FBQ0QsS0FIQyxDQUFGO0FBSUQsR0FMTyxDQUFSO0FBTUQsQ0FuQk8sQ0FBUjtBQXFCQWIsUUFBUSxDQUFDLGdCQUFELEVBQW1CLFlBQU07QUFDL0IsTUFBTWMsWUFBWSxHQUFHLFNBQWZBLFlBQWUsQ0FBQ0MsR0FBRCxFQUFNQyxRQUFOLEVBQW1CO0FBQ3RDTixJQUFBQSxFQUFFLENBQUMsV0FBRCxFQUFjLFlBQU07QUFDcEIsVUFBTU8sTUFBTSxHQUFHLDZCQUFlRixHQUFmLEVBQW9CO0FBQ2pDakIsUUFBQUEsQ0FBQyxFQUFFb0IsSUFBSSxDQUFDQyxFQUFMLENBQVEsVUFBQ0MsQ0FBRDtBQUFBLGlCQUFPQSxDQUFQO0FBQUEsU0FBUixDQUQ4QjtBQUVqQ3JCLFFBQUFBLENBQUMsRUFBRW1CLElBQUksQ0FBQ0MsRUFBTCxDQUFRLFVBQUNDLENBQUQ7QUFBQSxpQkFBT0EsQ0FBUDtBQUFBLFNBQVI7QUFGOEIsT0FBcEIsQ0FBZjtBQUtBUixNQUFBQSxNQUFNLENBQUNLLE1BQUQsQ0FBTixDQUFlSSxPQUFmLENBQXVCTCxRQUF2QjtBQUNELEtBUEMsQ0FBRjtBQVFELEdBVEQ7O0FBV0FGLEVBQUFBLFlBQVksQ0FBQyxDQUFDakIsRUFBRSxDQUFDLENBQUQsRUFBSSxDQUFKLENBQUgsQ0FBRCxFQUFhLEtBQWIsQ0FBWjtBQUNBaUIsRUFBQUEsWUFBWSxDQUFDLENBQUNqQixFQUFFLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FBSCxFQUFXQSxFQUFFLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FBYixDQUFELEVBQXVCLFNBQXZCLENBQVo7QUFDQWlCLEVBQUFBLFlBQVksQ0FBQyxDQUFDakIsRUFBRSxDQUFDLENBQUQsRUFBSSxDQUFKLENBQUgsRUFBV0EsRUFBRSxDQUFDLENBQUQsRUFBSSxDQUFKLENBQWIsRUFBcUJBLEVBQUUsQ0FBQyxDQUFELEVBQUksQ0FBSixDQUF2QixDQUFELEVBQWlDLGFBQWpDLENBQVo7QUFDRCxDQWZPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzaGFsbG93IH0gZnJvbSAnZW56eW1lJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBQb2x5Z29uLCBnZXRQb2ludFN0cmluZyB9IGZyb20gJy4uL3BvbHlnb24nO1xuaW1wb3J0IHsgZ3JhcGhQcm9wcyB9IGZyb20gJy4uLy4uLy4uL19fdGVzdHNfXy91dGlscyc7XG5cbmNvbnN0IHh5ID0gKHgsIHkpID0+ICh7IHgsIHkgfSk7XG5cbmRlc2NyaWJlKCdQb2x5Z29uJywgKCkgPT4ge1xuICBsZXQgdztcbiAgY29uc3Qgd3JhcHBlciA9IChleHRyYXMpID0+IHtcbiAgICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICAgIGNsYXNzZXM6IHt9LFxuICAgICAgY2xhc3NOYW1lOiAnY2xhc3NOYW1lJyxcbiAgICAgIGdyYXBoUHJvcHM6IGdyYXBoUHJvcHMoKSxcbiAgICAgIGNsb3NlZDogZmFsc2UsXG4gICAgfTtcbiAgICBjb25zdCBwcm9wcyA9IHsgLi4uZGVmYXVsdHMsIC4uLmV4dHJhcyB9O1xuICAgIHJldHVybiBzaGFsbG93KDxQb2x5Z29uIHsuLi5wcm9wc30gLz4pO1xuICB9O1xuXG4gIGRlc2NyaWJlKCdzbmFwc2hvdCcsICgpID0+IHtcbiAgICBpdCgncmVuZGVycycsICgpID0+IHtcbiAgICAgIHcgPSB3cmFwcGVyKHsgcG9pbnRzOiBbeyB4OiAxLCB5OiAxIH1dIH0pO1xuICAgICAgZXhwZWN0KHcpLnRvTWF0Y2hTbmFwc2hvdCgpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnZ2V0UG9pbnRTdHJpbmcnLCAoKSA9PiB7XG4gIGNvbnN0IGFzc2VydFN0cmluZyA9IChhcnIsIGV4cGVjdGVkKSA9PiB7XG4gICAgaXQoJ2NyZWF0ZXM6ICcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFBvaW50U3RyaW5nKGFyciwge1xuICAgICAgICB4OiBqZXN0LmZuKChuKSA9PiBuKSxcbiAgICAgICAgeTogamVzdC5mbigobikgPT4gbiksXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG4gIH07XG5cbiAgYXNzZXJ0U3RyaW5nKFt4eSgxLCAxKV0sICcxLDEnKTtcbiAgYXNzZXJ0U3RyaW5nKFt4eSgxLCAxKSwgeHkoMiwgMSldLCAnMSwxIDIsMScpO1xuICBhc3NlcnRTdHJpbmcoW3h5KDEsIDEpLCB4eSgyLCAxKSwgeHkoNCwgNCldLCAnMSwxIDIsMSA0LDQnKTtcbn0pO1xuIl19