@pie-element/hotspot 9.1.0 → 9.2.0-mui-update.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.md +66 -0
  2. package/configure/CHANGELOG.md +66 -0
  3. package/configure/lib/DeleteWidget.js +31 -44
  4. package/configure/lib/DeleteWidget.js.map +1 -1
  5. package/configure/lib/__tests__/DeleteWidget.test.js +60 -0
  6. package/configure/lib/__tests__/hotspot-container.test.js +377 -0
  7. package/configure/lib/__tests__/hotspot-drawable.test.js +233 -0
  8. package/configure/lib/__tests__/index.test.js +211 -0
  9. package/configure/lib/__tests__/root.test.js +440 -0
  10. package/configure/lib/__tests__/utils.test.js +287 -0
  11. package/configure/lib/button.js +27 -46
  12. package/configure/lib/button.js.map +1 -1
  13. package/configure/lib/buttons/circle.js +21 -28
  14. package/configure/lib/buttons/circle.js.map +1 -1
  15. package/configure/lib/buttons/polygon.js +27 -34
  16. package/configure/lib/buttons/polygon.js.map +1 -1
  17. package/configure/lib/buttons/rectangle.js +27 -34
  18. package/configure/lib/buttons/rectangle.js.map +1 -1
  19. package/configure/lib/defaults.js +3 -4
  20. package/configure/lib/defaults.js.map +1 -1
  21. package/configure/lib/hotspot-circle.js +133 -199
  22. package/configure/lib/hotspot-circle.js.map +1 -1
  23. package/configure/lib/hotspot-container.js +251 -356
  24. package/configure/lib/hotspot-container.js.map +1 -1
  25. package/configure/lib/hotspot-drawable.js +361 -473
  26. package/configure/lib/hotspot-drawable.js.map +1 -1
  27. package/configure/lib/hotspot-palette.js +93 -140
  28. package/configure/lib/hotspot-palette.js.map +1 -1
  29. package/configure/lib/hotspot-polygon.js +213 -318
  30. package/configure/lib/hotspot-polygon.js.map +1 -1
  31. package/configure/lib/hotspot-rectangle.js +129 -193
  32. package/configure/lib/hotspot-rectangle.js.map +1 -1
  33. package/configure/lib/icons.js +1 -1
  34. package/configure/lib/icons.js.map +1 -1
  35. package/configure/lib/image-konva.js +47 -87
  36. package/configure/lib/image-konva.js.map +1 -1
  37. package/configure/lib/index.js +163 -223
  38. package/configure/lib/index.js.map +1 -1
  39. package/configure/lib/root.js +302 -394
  40. package/configure/lib/root.js.map +1 -1
  41. package/configure/lib/shapes/circle.js +70 -102
  42. package/configure/lib/shapes/circle.js.map +1 -1
  43. package/configure/lib/shapes/index.js +5 -13
  44. package/configure/lib/shapes/index.js.map +1 -1
  45. package/configure/lib/shapes/polygon.js +65 -97
  46. package/configure/lib/shapes/polygon.js.map +1 -1
  47. package/configure/lib/shapes/rectagle.js +70 -102
  48. package/configure/lib/shapes/rectagle.js.map +1 -1
  49. package/configure/lib/shapes/utils.js +3 -9
  50. package/configure/lib/shapes/utils.js.map +1 -1
  51. package/configure/lib/upload-control.js +26 -53
  52. package/configure/lib/upload-control.js.map +1 -1
  53. package/configure/lib/utils.js +85 -138
  54. package/configure/lib/utils.js.map +1 -1
  55. package/configure/package.json +11 -10
  56. package/configure/src/__tests__/index.test.js +11 -5
  57. package/configure/src/button.jsx +12 -20
  58. package/configure/src/hotspot-circle.jsx +5 -18
  59. package/configure/src/hotspot-container.jsx +82 -98
  60. package/configure/src/hotspot-drawable.jsx +43 -45
  61. package/configure/src/hotspot-palette.jsx +45 -37
  62. package/configure/src/hotspot-polygon.jsx +4 -20
  63. package/configure/src/hotspot-rectangle.jsx +4 -17
  64. package/configure/src/index.js +12 -2
  65. package/configure/src/root.jsx +85 -79
  66. package/configure/src/upload-control.jsx +6 -16
  67. package/controller/CHANGELOG.md +52 -0
  68. package/controller/lib/__tests__/index.test.js +586 -0
  69. package/controller/lib/__tests__/utils.test.js +8 -0
  70. package/controller/lib/defaults.js +3 -4
  71. package/controller/lib/defaults.js.map +1 -1
  72. package/controller/lib/index.js +152 -206
  73. package/controller/lib/index.js.map +1 -1
  74. package/controller/lib/utils.js +15 -35
  75. package/controller/lib/utils.js.map +1 -1
  76. package/controller/package.json +2 -2
  77. package/docs/demo/pie.manifest.json +11 -0
  78. package/lib/__tests__/container.test.js +221 -0
  79. package/lib/__tests__/index.test.js +113 -0
  80. package/lib/__tests__/polygon.test.js +245 -0
  81. package/lib/__tests__/rectangle.test.js +236 -0
  82. package/lib/__tests__/session-updater.test.js +69 -0
  83. package/lib/hotspot/circle.js +111 -170
  84. package/lib/hotspot/circle.js.map +1 -1
  85. package/lib/hotspot/container.js +175 -261
  86. package/lib/hotspot/container.js.map +1 -1
  87. package/lib/hotspot/icons.js +1 -1
  88. package/lib/hotspot/icons.js.map +1 -1
  89. package/lib/hotspot/image-konva-tooltip.js +66 -113
  90. package/lib/hotspot/image-konva-tooltip.js.map +1 -1
  91. package/lib/hotspot/index.js +136 -199
  92. package/lib/hotspot/index.js.map +1 -1
  93. package/lib/hotspot/polygon.js +151 -215
  94. package/lib/hotspot/polygon.js.map +1 -1
  95. package/lib/hotspot/rectangle.js +130 -186
  96. package/lib/hotspot/rectangle.js.map +1 -1
  97. package/lib/index.js +188 -257
  98. package/lib/index.js.map +1 -1
  99. package/lib/session-updater.js +13 -19
  100. package/lib/session-updater.js.map +1 -1
  101. package/package.json +14 -11
  102. package/src/hotspot/circle.jsx +2 -13
  103. package/src/hotspot/container.jsx +35 -50
  104. package/src/hotspot/index.jsx +16 -28
  105. package/src/hotspot/polygon.jsx +4 -13
  106. package/src/hotspot/rectangle.jsx +4 -13
  107. package/src/index.js +21 -12
  108. package/LICENSE.md +0 -5
  109. package/configure/node_modules/debug/CHANGELOG.md +0 -395
  110. package/configure/node_modules/debug/LICENSE +0 -19
  111. package/configure/node_modules/debug/README.md +0 -437
  112. package/configure/node_modules/debug/node.js +0 -1
  113. package/configure/node_modules/debug/package.json +0 -51
  114. package/configure/node_modules/debug/src/browser.js +0 -180
  115. package/configure/node_modules/debug/src/common.js +0 -249
  116. package/configure/node_modules/debug/src/index.js +0 -12
  117. package/configure/node_modules/debug/src/node.js +0 -177
@@ -1,213 +1,162 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.updateImageDimensions = exports.isPointInsidePolygon = exports.groupShapes = exports.getUpdatedShapes = exports.getUpdatedRectangle = exports.getUpdatedPolygon = exports.getAllShapes = exports.generateValidationMessage = exports.calculate = void 0;
9
-
10
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
-
12
- var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
13
-
14
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
-
16
8
  var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
17
-
18
9
  var _shapes = require("./shapes");
19
-
20
- var _excluded = ["group"];
21
-
22
- 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; }
23
-
24
- 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; }
25
-
26
- var updateImageDimensions = function updateImageDimensions(initialDim, nextDim, keepAspectRatio, resizeType) {
10
+ const updateImageDimensions = (initialDim, nextDim, keepAspectRatio, resizeType) => {
27
11
  // if we want to keep image aspect ratio
28
12
  if (keepAspectRatio) {
29
- var imageAspectRatio = initialDim.width / initialDim.height;
30
-
13
+ const imageAspectRatio = initialDim.width / initialDim.height;
31
14
  if (resizeType === 'height') {
32
15
  // if we want to change image height => we update the width accordingly
33
16
  return {
34
17
  width: nextDim.height * imageAspectRatio,
35
18
  height: nextDim.height
36
19
  };
37
- } // if we want to change image width => we update the height accordingly
38
-
20
+ }
39
21
 
22
+ // if we want to change image width => we update the height accordingly
40
23
  return {
41
24
  width: nextDim.width,
42
25
  height: nextDim.width / imageAspectRatio
43
26
  };
44
- } // if we don't want to keep aspect ratio, we just update both values
45
-
27
+ }
46
28
 
29
+ // if we don't want to keep aspect ratio, we just update both values
47
30
  return {
48
31
  width: nextDim.width,
49
32
  height: nextDim.height
50
33
  };
51
- }; // referenceInitialValue = the initial value of the Stage
34
+ };
35
+
36
+ // referenceInitialValue = the initial value of the Stage
52
37
  // referenceNextValue = the next value of the Stage
53
38
  // currentValue = the value that has to be re-sized influenced by the changes that were made on the Stage
54
-
55
-
56
39
  exports.updateImageDimensions = updateImageDimensions;
57
-
58
- var getDelta = function getDelta(referenceInitialValue, referenceNextValue, currentValue) {
59
- return referenceNextValue / referenceInitialValue * currentValue;
60
- };
61
-
62
- var getUpdatedRectangle = function getUpdatedRectangle(initialDim, nextDim, shape) {
63
- return _objectSpread(_objectSpread({}, shape), {}, {
64
- width: getDelta(initialDim.width, nextDim.width, shape.width),
65
- height: getDelta(initialDim.height, nextDim.height, shape.height),
66
- x: getDelta(initialDim.width, nextDim.width, shape.x),
67
- y: getDelta(initialDim.height, nextDim.height, shape.y)
68
- });
69
- };
70
-
40
+ const getDelta = (referenceInitialValue, referenceNextValue, currentValue) => referenceNextValue / referenceInitialValue * currentValue;
41
+ const getUpdatedRectangle = (initialDim, nextDim, shape) => ({
42
+ ...shape,
43
+ width: getDelta(initialDim.width, nextDim.width, shape.width),
44
+ height: getDelta(initialDim.height, nextDim.height, shape.height),
45
+ x: getDelta(initialDim.width, nextDim.width, shape.x),
46
+ y: getDelta(initialDim.height, nextDim.height, shape.y)
47
+ });
71
48
  exports.getUpdatedRectangle = getUpdatedRectangle;
49
+ const getUpdatedCircles = (initialDim, nextDim, shape) => ({
50
+ ...shape,
51
+ radius: getDelta(initialDim.width, nextDim.width, shape.radius),
52
+ x: getDelta(initialDim.width, nextDim.width, shape.x),
53
+ y: getDelta(initialDim.height, nextDim.height, shape.y)
54
+ });
55
+ const getUpdatedPolygon = (initialDim, nextDim, shape) => ({
56
+ ...shape,
57
+ points: shape.points.map(point => ({
58
+ x: getDelta(initialDim.width, nextDim.width, point.x),
59
+ y: getDelta(initialDim.height, nextDim.height, point.y)
60
+ }))
61
+ });
72
62
 
73
- var getUpdatedCircles = function getUpdatedCircles(initialDim, nextDim, shape) {
74
- return _objectSpread(_objectSpread({}, shape), {}, {
75
- radius: getDelta(initialDim.width, nextDim.width, shape.radius),
76
- x: getDelta(initialDim.width, nextDim.width, shape.x),
77
- y: getDelta(initialDim.height, nextDim.height, shape.y)
78
- });
79
- };
80
-
81
- var getUpdatedPolygon = function getUpdatedPolygon(initialDim, nextDim, shape) {
82
- return _objectSpread(_objectSpread({}, shape), {}, {
83
- points: shape.points.map(function (point) {
84
- return {
85
- x: getDelta(initialDim.width, nextDim.width, point.x),
86
- y: getDelta(initialDim.height, nextDim.height, point.y)
87
- };
88
- })
89
- });
90
- }; // initialDim = the initial dimensions: { width, height } of the Stage
63
+ // initialDim = the initial dimensions: { width, height } of the Stage
91
64
  // nextDim = the next dimensions: { width, height } of the Stage
92
65
  // shapes = array of shapes that have to be re-sized and re-positioned
93
-
94
-
95
66
  exports.getUpdatedPolygon = getUpdatedPolygon;
96
-
97
- var getUpdatedShapes = function getUpdatedShapes(initialDim, nextDim, shapes) {
98
- return shapes.map(function (shape) {
67
+ const getUpdatedShapes = (initialDim, nextDim, shapes) => {
68
+ return shapes.map(shape => {
99
69
  if (shape.group === _shapes.SHAPE_GROUPS.RECTANGLES) {
100
70
  return getUpdatedRectangle(initialDim, nextDim, shape);
101
71
  }
102
-
103
72
  if (shape.group === _shapes.SHAPE_GROUPS.POLYGONS) {
104
73
  return getUpdatedPolygon(initialDim, nextDim, shape);
105
74
  }
106
-
107
75
  if (shape.group === _shapes.SHAPE_GROUPS.CIRCLES) {
108
76
  return getUpdatedCircles(initialDim, nextDim, shape);
109
77
  }
110
78
  });
111
- }; // converts shapes map to shapes array
79
+ };
80
+
81
+ // converts shapes map to shapes array
112
82
  // example:
113
83
  // from: { rectangles: [r1], polygons: [p1, p2]}
114
84
  // to: [{ ...r1, group: 'rectangles' }, { ...p1, group: 'polygons' }, { ...p2, group: 'polygons' }]
115
85
  // if a shape has index defined, keep it, otherwise initialize it
116
86
  // index is used for the UNDO function
117
-
118
-
119
87
  exports.getUpdatedShapes = getUpdatedShapes;
120
-
121
- var getAllShapes = function getAllShapes(shapesMap) {
88
+ const getAllShapes = shapesMap => {
122
89
  shapesMap = shapesMap || {};
123
- var shapesArray = [];
124
- var shapesKeys = Object.keys(shapesMap);
125
- return shapesKeys.length ? shapesKeys.reduce(function (acc, currentShapeKey) {
126
- return acc.concat(shapesMap[currentShapeKey] ? shapesMap[currentShapeKey].map(function (shape, index) {
127
- return _objectSpread(_objectSpread({}, shape), {}, {
128
- group: currentShapeKey,
129
- index: shape.index || acc.length + index
130
- });
131
- }) : []);
132
- }, shapesArray) : shapesArray;
133
- }; // converts shapes array to shapes map
90
+ const shapesArray = [];
91
+ const shapesKeys = Object.keys(shapesMap);
92
+ return shapesKeys.length ? shapesKeys.reduce((acc, currentShapeKey) => acc.concat(shapesMap[currentShapeKey] ? shapesMap[currentShapeKey].map((shape, index) => ({
93
+ ...shape,
94
+ group: currentShapeKey,
95
+ index: shape.index || acc.length + index
96
+ })) : []), shapesArray) : shapesArray;
97
+ };
98
+
99
+ // converts shapes array to shapes map
134
100
  // is the reverse of getAllShapes function
135
101
  // example:
136
102
  // from: [{ ...r1, group: 'rectangles' }, { ...p1, group: 'polygons' }, { ...p2, group: 'polygons' }]
137
103
  // to: { rectangles: [r1], polygons: [p1, p2]}
138
-
139
-
140
104
  exports.getAllShapes = getAllShapes;
141
-
142
- var groupShapes = function groupShapes(shapesArray) {
105
+ const groupShapes = shapesArray => {
143
106
  shapesArray = shapesArray || [];
144
- var shapesMap = {
107
+ const shapesMap = {
145
108
  rectangles: [],
146
109
  polygons: [],
147
110
  circles: []
148
111
  };
149
-
150
112
  if (shapesArray.length) {
151
- return shapesArray.reduce(function (acc, _ref) {
152
- var group = _ref.group,
153
- shapeProps = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
154
- acc[group] = [].concat((0, _toConsumableArray2["default"])(acc[group] || []), [shapeProps]);
113
+ return shapesArray.reduce((acc, {
114
+ group,
115
+ ...shapeProps
116
+ }) => {
117
+ acc[group] = [...(acc[group] || []), shapeProps];
155
118
  return acc;
156
119
  }, shapesMap);
157
120
  }
158
-
159
- return (0, _cloneDeep["default"])(shapesMap);
121
+ return (0, _cloneDeep.default)(shapesMap);
160
122
  };
161
-
162
123
  exports.groupShapes = groupShapes;
163
-
164
- var isPointInsidePolygon = function isPointInsidePolygon(polygon, x, y) {
165
- var inside = false;
166
-
124
+ const isPointInsidePolygon = (polygon, x, y) => {
125
+ let inside = false;
167
126
  if (!polygon || polygon.length <= 0) {
168
127
  return inside;
169
128
  }
170
-
171
- for (var i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {
172
- var xi = polygon[i].x;
173
- var yi = polygon[i].y;
174
- var xj = polygon[j].x;
175
- var yj = polygon[j].y;
176
- var intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;
177
-
129
+ for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {
130
+ const xi = polygon[i].x;
131
+ const yi = polygon[i].y;
132
+ const xj = polygon[j].x;
133
+ const yj = polygon[j].y;
134
+ const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;
178
135
  if (intersect) {
179
136
  inside = !inside;
180
137
  }
181
138
  }
182
-
183
139
  return inside;
184
140
  };
185
-
186
141
  exports.isPointInsidePolygon = isPointInsidePolygon;
187
-
188
- var calculate = function calculate(polygonPoints) {
142
+ const calculate = polygonPoints => {
189
143
  if (!polygonPoints || polygonPoints.length <= 0) {
190
144
  return {
191
145
  x: 0,
192
146
  y: 0
193
147
  };
194
148
  }
195
-
196
- var xPoints = polygonPoints.map(function (point) {
197
- return point.x;
198
- });
199
- var yPoints = polygonPoints.map(function (point) {
200
- return point.y;
201
- });
202
- var minX = Math.min.apply(Math, (0, _toConsumableArray2["default"])(xPoints));
203
- var minY = Math.min.apply(Math, (0, _toConsumableArray2["default"])(yPoints));
204
- var maxX = Math.max.apply(Math, (0, _toConsumableArray2["default"])(xPoints));
205
- var maxY = Math.max.apply(Math, (0, _toConsumableArray2["default"])(yPoints)); // Find a suitable position for the text element within the polygon
206
-
207
- var textX, textY;
208
-
209
- for (var x = minX; x <= maxX - 20; x++) {
210
- for (var y = maxY - 20; y > minY; y--) {
149
+ const xPoints = polygonPoints.map(point => point.x);
150
+ const yPoints = polygonPoints.map(point => point.y);
151
+ const minX = Math.min(...xPoints);
152
+ const minY = Math.min(...yPoints);
153
+ const maxX = Math.max(...xPoints);
154
+ const maxY = Math.max(...yPoints);
155
+
156
+ // Find a suitable position for the text element within the polygon
157
+ let textX, textY;
158
+ for (let x = minX; x <= maxX - 20; x++) {
159
+ for (let y = maxY - 20; y > minY; y--) {
211
160
  // Check if the text element's position (x, y) is within the polygon
212
161
  if (isPointInsidePolygon(polygonPoints, x, y)) {
213
162
  textX = x - 10;
@@ -216,24 +165,22 @@ var calculate = function calculate(polygonPoints) {
216
165
  }
217
166
  }
218
167
  }
219
-
220
168
  return {
221
169
  x: textX,
222
170
  y: textY
223
171
  };
224
172
  };
225
-
226
173
  exports.calculate = calculate;
227
-
228
- var generateValidationMessage = function generateValidationMessage(config) {
229
- var minShapes = config.minShapes,
230
- maxShapes = config.maxShapes,
231
- maxSelections = config.maxSelections;
232
- var shapesMessage = "\nThere should be at least ".concat(minShapes, " ") + (maxShapes ? "and at most ".concat(maxShapes, " ") : '') + 'shapes defined.';
233
- var selectionsMessage = '\nThere should be at least 1 ' + (maxSelections ? "and at most ".concat(maxSelections, " ") : '') + 'shape' + (maxSelections ? 's' : '') + ' selected.';
234
- var message = 'Validation requirements:' + shapesMessage + selectionsMessage;
174
+ const generateValidationMessage = config => {
175
+ const {
176
+ minShapes,
177
+ maxShapes,
178
+ maxSelections
179
+ } = config;
180
+ const shapesMessage = `\nThere should be at least ${minShapes} ` + (maxShapes ? `and at most ${maxShapes} ` : '') + 'shapes defined.';
181
+ const selectionsMessage = '\nThere should be at least 1 ' + (maxSelections ? `and at most ${maxSelections} ` : '') + 'shape' + (maxSelections ? 's' : '') + ' selected.';
182
+ const message = 'Validation requirements:' + shapesMessage + selectionsMessage;
235
183
  return message;
236
184
  };
237
-
238
185
  exports.generateValidationMessage = generateValidationMessage;
239
- //# sourceMappingURL=utils.js.map
186
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2xvbmVEZWVwIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfc2hhcGVzIiwidXBkYXRlSW1hZ2VEaW1lbnNpb25zIiwiaW5pdGlhbERpbSIsIm5leHREaW0iLCJrZWVwQXNwZWN0UmF0aW8iLCJyZXNpemVUeXBlIiwiaW1hZ2VBc3BlY3RSYXRpbyIsIndpZHRoIiwiaGVpZ2h0IiwiZXhwb3J0cyIsImdldERlbHRhIiwicmVmZXJlbmNlSW5pdGlhbFZhbHVlIiwicmVmZXJlbmNlTmV4dFZhbHVlIiwiY3VycmVudFZhbHVlIiwiZ2V0VXBkYXRlZFJlY3RhbmdsZSIsInNoYXBlIiwieCIsInkiLCJnZXRVcGRhdGVkQ2lyY2xlcyIsInJhZGl1cyIsImdldFVwZGF0ZWRQb2x5Z29uIiwicG9pbnRzIiwibWFwIiwicG9pbnQiLCJnZXRVcGRhdGVkU2hhcGVzIiwic2hhcGVzIiwiZ3JvdXAiLCJTSEFQRV9HUk9VUFMiLCJSRUNUQU5HTEVTIiwiUE9MWUdPTlMiLCJDSVJDTEVTIiwiZ2V0QWxsU2hhcGVzIiwic2hhcGVzTWFwIiwic2hhcGVzQXJyYXkiLCJzaGFwZXNLZXlzIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsInJlZHVjZSIsImFjYyIsImN1cnJlbnRTaGFwZUtleSIsImNvbmNhdCIsImluZGV4IiwiZ3JvdXBTaGFwZXMiLCJyZWN0YW5nbGVzIiwicG9seWdvbnMiLCJjaXJjbGVzIiwic2hhcGVQcm9wcyIsImNsb25lRGVlcCIsImlzUG9pbnRJbnNpZGVQb2x5Z29uIiwicG9seWdvbiIsImluc2lkZSIsImkiLCJqIiwieGkiLCJ5aSIsInhqIiwieWoiLCJpbnRlcnNlY3QiLCJjYWxjdWxhdGUiLCJwb2x5Z29uUG9pbnRzIiwieFBvaW50cyIsInlQb2ludHMiLCJtaW5YIiwiTWF0aCIsIm1pbiIsIm1pblkiLCJtYXhYIiwibWF4IiwibWF4WSIsInRleHRYIiwidGV4dFkiLCJnZW5lcmF0ZVZhbGlkYXRpb25NZXNzYWdlIiwiY29uZmlnIiwibWluU2hhcGVzIiwibWF4U2hhcGVzIiwibWF4U2VsZWN0aW9ucyIsInNoYXBlc01lc3NhZ2UiLCJzZWxlY3Rpb25zTWVzc2FnZSIsIm1lc3NhZ2UiXSwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2gvY2xvbmVEZWVwJztcbmltcG9ydCB7IFNIQVBFX0dST1VQUyB9IGZyb20gJy4vc2hhcGVzJztcblxuY29uc3QgdXBkYXRlSW1hZ2VEaW1lbnNpb25zID0gKGluaXRpYWxEaW0sIG5leHREaW0sIGtlZXBBc3BlY3RSYXRpbywgcmVzaXplVHlwZSkgPT4ge1xuICAvLyBpZiB3ZSB3YW50IHRvIGtlZXAgaW1hZ2UgYXNwZWN0IHJhdGlvXG4gIGlmIChrZWVwQXNwZWN0UmF0aW8pIHtcbiAgICBjb25zdCBpbWFnZUFzcGVjdFJhdGlvID0gaW5pdGlhbERpbS53aWR0aCAvIGluaXRpYWxEaW0uaGVpZ2h0O1xuXG4gICAgaWYgKHJlc2l6ZVR5cGUgPT09ICdoZWlnaHQnKSB7XG4gICAgICAvLyBpZiB3ZSB3YW50IHRvIGNoYW5nZSBpbWFnZSBoZWlnaHQgPT4gd2UgdXBkYXRlIHRoZSB3aWR0aCBhY2NvcmRpbmdseVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IG5leHREaW0uaGVpZ2h0ICogaW1hZ2VBc3BlY3RSYXRpbyxcbiAgICAgICAgaGVpZ2h0OiBuZXh0RGltLmhlaWdodCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gaWYgd2Ugd2FudCB0byBjaGFuZ2UgaW1hZ2Ugd2lkdGggPT4gd2UgdXBkYXRlIHRoZSBoZWlnaHQgYWNjb3JkaW5nbHlcbiAgICByZXR1cm4ge1xuICAgICAgd2lkdGg6IG5leHREaW0ud2lkdGgsXG4gICAgICBoZWlnaHQ6IG5leHREaW0ud2lkdGggLyBpbWFnZUFzcGVjdFJhdGlvLFxuICAgIH07XG4gIH1cblxuICAvLyBpZiB3ZSBkb24ndCB3YW50IHRvIGtlZXAgYXNwZWN0IHJhdGlvLCB3ZSBqdXN0IHVwZGF0ZSBib3RoIHZhbHVlc1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiBuZXh0RGltLndpZHRoLFxuICAgIGhlaWdodDogbmV4dERpbS5oZWlnaHQsXG4gIH07XG59O1xuXG4vLyByZWZlcmVuY2VJbml0aWFsVmFsdWUgPSB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgU3RhZ2Vcbi8vIHJlZmVyZW5jZU5leHRWYWx1ZSA9IHRoZSBuZXh0IHZhbHVlIG9mIHRoZSBTdGFnZVxuLy8gY3VycmVudFZhbHVlID0gdGhlIHZhbHVlIHRoYXQgaGFzIHRvIGJlIHJlLXNpemVkIGluZmx1ZW5jZWQgYnkgdGhlIGNoYW5nZXMgdGhhdCB3ZXJlIG1hZGUgb24gdGhlIFN0YWdlXG5jb25zdCBnZXREZWx0YSA9IChyZWZlcmVuY2VJbml0aWFsVmFsdWUsIHJlZmVyZW5jZU5leHRWYWx1ZSwgY3VycmVudFZhbHVlKSA9PlxuICAocmVmZXJlbmNlTmV4dFZhbHVlIC8gcmVmZXJlbmNlSW5pdGlhbFZhbHVlKSAqIGN1cnJlbnRWYWx1ZTtcblxuY29uc3QgZ2V0VXBkYXRlZFJlY3RhbmdsZSA9IChpbml0aWFsRGltLCBuZXh0RGltLCBzaGFwZSkgPT4gKHtcbiAgLi4uc2hhcGUsXG4gIHdpZHRoOiBnZXREZWx0YShpbml0aWFsRGltLndpZHRoLCBuZXh0RGltLndpZHRoLCBzaGFwZS53aWR0aCksXG4gIGhlaWdodDogZ2V0RGVsdGEoaW5pdGlhbERpbS5oZWlnaHQsIG5leHREaW0uaGVpZ2h0LCBzaGFwZS5oZWlnaHQpLFxuICB4OiBnZXREZWx0YShpbml0aWFsRGltLndpZHRoLCBuZXh0RGltLndpZHRoLCBzaGFwZS54KSxcbiAgeTogZ2V0RGVsdGEoaW5pdGlhbERpbS5oZWlnaHQsIG5leHREaW0uaGVpZ2h0LCBzaGFwZS55KSxcbn0pO1xuXG5jb25zdCBnZXRVcGRhdGVkQ2lyY2xlcyA9IChpbml0aWFsRGltLCBuZXh0RGltLCBzaGFwZSkgPT4gKHtcbiAgLi4uc2hhcGUsXG4gIHJhZGl1czogZ2V0RGVsdGEoaW5pdGlhbERpbS53aWR0aCwgbmV4dERpbS53aWR0aCwgc2hhcGUucmFkaXVzKSxcbiAgeDogZ2V0RGVsdGEoaW5pdGlhbERpbS53aWR0aCwgbmV4dERpbS53aWR0aCwgc2hhcGUueCksXG4gIHk6IGdldERlbHRhKGluaXRpYWxEaW0uaGVpZ2h0LCBuZXh0RGltLmhlaWdodCwgc2hhcGUueSksXG59KTtcblxuY29uc3QgZ2V0VXBkYXRlZFBvbHlnb24gPSAoaW5pdGlhbERpbSwgbmV4dERpbSwgc2hhcGUpID0+ICh7XG4gIC4uLnNoYXBlLFxuICBwb2ludHM6IHNoYXBlLnBvaW50cy5tYXAoKHBvaW50KSA9PiAoe1xuICAgIHg6IGdldERlbHRhKGluaXRpYWxEaW0ud2lkdGgsIG5leHREaW0ud2lkdGgsIHBvaW50LngpLFxuICAgIHk6IGdldERlbHRhKGluaXRpYWxEaW0uaGVpZ2h0LCBuZXh0RGltLmhlaWdodCwgcG9pbnQueSksXG4gIH0pKSxcbn0pO1xuXG4vLyBpbml0aWFsRGltID0gdGhlIGluaXRpYWwgZGltZW5zaW9uczogeyB3aWR0aCwgaGVpZ2h0IH0gb2YgdGhlIFN0YWdlXG4vLyBuZXh0RGltID0gdGhlIG5leHQgZGltZW5zaW9uczogeyB3aWR0aCwgaGVpZ2h0IH0gb2YgdGhlIFN0YWdlXG4vLyBzaGFwZXMgPSBhcnJheSBvZiBzaGFwZXMgdGhhdCBoYXZlIHRvIGJlIHJlLXNpemVkIGFuZCByZS1wb3NpdGlvbmVkXG5jb25zdCBnZXRVcGRhdGVkU2hhcGVzID0gKGluaXRpYWxEaW0sIG5leHREaW0sIHNoYXBlcykgPT4ge1xuICByZXR1cm4gc2hhcGVzLm1hcCgoc2hhcGUpID0+IHtcbiAgICBpZiAoc2hhcGUuZ3JvdXAgPT09IFNIQVBFX0dST1VQUy5SRUNUQU5HTEVTKSB7XG4gICAgICByZXR1cm4gZ2V0VXBkYXRlZFJlY3RhbmdsZShpbml0aWFsRGltLCBuZXh0RGltLCBzaGFwZSk7XG4gICAgfVxuXG4gICAgaWYgKHNoYXBlLmdyb3VwID09PSBTSEFQRV9HUk9VUFMuUE9MWUdPTlMpIHtcbiAgICAgIHJldHVybiBnZXRVcGRhdGVkUG9seWdvbihpbml0aWFsRGltLCBuZXh0RGltLCBzaGFwZSk7XG4gICAgfVxuXG4gICAgaWYgKHNoYXBlLmdyb3VwID09PSBTSEFQRV9HUk9VUFMuQ0lSQ0xFUykge1xuICAgICAgcmV0dXJuIGdldFVwZGF0ZWRDaXJjbGVzKGluaXRpYWxEaW0sIG5leHREaW0sIHNoYXBlKTtcbiAgICB9XG4gIH0pO1xufTtcblxuLy8gY29udmVydHMgc2hhcGVzIG1hcCB0byBzaGFwZXMgYXJyYXlcbi8vIGV4YW1wbGU6XG4vLyBmcm9tOiB7IHJlY3RhbmdsZXM6IFtyMV0sIHBvbHlnb25zOiBbcDEsIHAyXX1cbi8vIHRvOiBbeyAuLi5yMSwgZ3JvdXA6ICdyZWN0YW5nbGVzJyB9LCB7IC4uLnAxLCBncm91cDogJ3BvbHlnb25zJyB9LCB7IC4uLnAyLCBncm91cDogJ3BvbHlnb25zJyB9XVxuLy8gaWYgYSBzaGFwZSBoYXMgaW5kZXggZGVmaW5lZCwga2VlcCBpdCwgb3RoZXJ3aXNlIGluaXRpYWxpemUgaXRcbi8vIGluZGV4IGlzIHVzZWQgZm9yIHRoZSBVTkRPIGZ1bmN0aW9uXG5jb25zdCBnZXRBbGxTaGFwZXMgPSAoc2hhcGVzTWFwKSA9PiB7XG4gIHNoYXBlc01hcCA9IHNoYXBlc01hcCB8fCB7fTtcbiAgY29uc3Qgc2hhcGVzQXJyYXkgPSBbXTtcbiAgY29uc3Qgc2hhcGVzS2V5cyA9IE9iamVjdC5rZXlzKHNoYXBlc01hcCk7XG5cbiAgcmV0dXJuIHNoYXBlc0tleXMubGVuZ3RoXG4gICAgPyBzaGFwZXNLZXlzLnJlZHVjZShcbiAgICAgICAgKGFjYywgY3VycmVudFNoYXBlS2V5KSA9PlxuICAgICAgICAgIGFjYy5jb25jYXQoXG4gICAgICAgICAgICBzaGFwZXNNYXBbY3VycmVudFNoYXBlS2V5XVxuICAgICAgICAgICAgICA/IHNoYXBlc01hcFtjdXJyZW50U2hhcGVLZXldLm1hcCgoc2hhcGUsIGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgLi4uc2hhcGUsXG4gICAgICAgICAgICAgICAgICBncm91cDogY3VycmVudFNoYXBlS2V5LFxuICAgICAgICAgICAgICAgICAgaW5kZXg6IHNoYXBlLmluZGV4IHx8IGFjYy5sZW5ndGggKyBpbmRleCxcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgICApLFxuICAgICAgICBzaGFwZXNBcnJheSxcbiAgICAgIClcbiAgICA6IHNoYXBlc0FycmF5O1xufTtcblxuLy8gY29udmVydHMgc2hhcGVzIGFycmF5IHRvIHNoYXBlcyBtYXBcbi8vIGlzIHRoZSByZXZlcnNlIG9mIGdldEFsbFNoYXBlcyBmdW5jdGlvblxuLy8gZXhhbXBsZTpcbi8vIGZyb206IFt7IC4uLnIxLCBncm91cDogJ3JlY3RhbmdsZXMnIH0sIHsgLi4ucDEsIGdyb3VwOiAncG9seWdvbnMnIH0sIHsgLi4ucDIsIGdyb3VwOiAncG9seWdvbnMnIH1dXG4vLyB0bzogeyByZWN0YW5nbGVzOiBbcjFdLCBwb2x5Z29uczogW3AxLCBwMl19XG5jb25zdCBncm91cFNoYXBlcyA9IChzaGFwZXNBcnJheSkgPT4ge1xuICBzaGFwZXNBcnJheSA9IHNoYXBlc0FycmF5IHx8IFtdO1xuICBjb25zdCBzaGFwZXNNYXAgPSB7XG4gICAgcmVjdGFuZ2xlczogW10sXG4gICAgcG9seWdvbnM6IFtdLFxuICAgIGNpcmNsZXM6IFtdLFxuICB9O1xuXG4gIGlmIChzaGFwZXNBcnJheS5sZW5ndGgpIHtcbiAgICByZXR1cm4gc2hhcGVzQXJyYXkucmVkdWNlKChhY2MsIHsgZ3JvdXAsIC4uLnNoYXBlUHJvcHMgfSkgPT4ge1xuICAgICAgYWNjW2dyb3VwXSA9IFsuLi4oYWNjW2dyb3VwXSB8fCBbXSksIHNoYXBlUHJvcHNdO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBzaGFwZXNNYXApO1xuICB9XG5cbiAgcmV0dXJuIGNsb25lRGVlcChzaGFwZXNNYXApO1xufTtcblxuY29uc3QgaXNQb2ludEluc2lkZVBvbHlnb24gPSAocG9seWdvbiwgeCwgeSkgPT4ge1xuICBsZXQgaW5zaWRlID0gZmFsc2U7XG5cbiAgaWYgKCFwb2x5Z29uIHx8IHBvbHlnb24ubGVuZ3RoIDw9IDApIHtcbiAgICByZXR1cm4gaW5zaWRlO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDAsIGogPSBwb2x5Z29uLmxlbmd0aCAtIDE7IGkgPCBwb2x5Z29uLmxlbmd0aDsgaiA9IGkrKykge1xuICAgIGNvbnN0IHhpID0gcG9seWdvbltpXS54O1xuICAgIGNvbnN0IHlpID0gcG9seWdvbltpXS55O1xuICAgIGNvbnN0IHhqID0gcG9seWdvbltqXS54O1xuICAgIGNvbnN0IHlqID0gcG9seWdvbltqXS55O1xuXG4gICAgY29uc3QgaW50ZXJzZWN0ID0geWkgPiB5ICE9PSB5aiA+IHkgJiYgeCA8ICgoeGogLSB4aSkgKiAoeSAtIHlpKSkgLyAoeWogLSB5aSkgKyB4aTtcblxuICAgIGlmIChpbnRlcnNlY3QpIHtcbiAgICAgIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGluc2lkZTtcbn07XG5cbmNvbnN0IGNhbGN1bGF0ZSA9IChwb2x5Z29uUG9pbnRzKSA9PiB7XG4gIGlmICghcG9seWdvblBvaW50cyB8fCBwb2x5Z29uUG9pbnRzLmxlbmd0aCA8PSAwKSB7XG4gICAgcmV0dXJuIHsgeDogMCwgeTogMCB9O1xuICB9XG5cbiAgY29uc3QgeFBvaW50cyA9IHBvbHlnb25Qb2ludHMubWFwKChwb2ludCkgPT4gcG9pbnQueCk7XG4gIGNvbnN0IHlQb2ludHMgPSBwb2x5Z29uUG9pbnRzLm1hcCgocG9pbnQpID0+IHBvaW50LnkpO1xuICBjb25zdCBtaW5YID0gTWF0aC5taW4oLi4ueFBvaW50cyk7XG4gIGNvbnN0IG1pblkgPSBNYXRoLm1pbiguLi55UG9pbnRzKTtcbiAgY29uc3QgbWF4WCA9IE1hdGgubWF4KC4uLnhQb2ludHMpO1xuICBjb25zdCBtYXhZID0gTWF0aC5tYXgoLi4ueVBvaW50cyk7XG5cbiAgLy8gRmluZCBhIHN1aXRhYmxlIHBvc2l0aW9uIGZvciB0aGUgdGV4dCBlbGVtZW50IHdpdGhpbiB0aGUgcG9seWdvblxuICBsZXQgdGV4dFgsIHRleHRZO1xuXG4gIGZvciAobGV0IHggPSBtaW5YOyB4IDw9IG1heFggLSAyMDsgeCsrKSB7XG4gICAgZm9yIChsZXQgeSA9IG1heFkgLSAyMDsgeSA+IG1pblk7IHktLSkge1xuICAgICAgLy8gQ2hlY2sgaWYgdGhlIHRleHQgZWxlbWVudCdzIHBvc2l0aW9uICh4LCB5KSBpcyB3aXRoaW4gdGhlIHBvbHlnb25cbiAgICAgIGlmIChpc1BvaW50SW5zaWRlUG9seWdvbihwb2x5Z29uUG9pbnRzLCB4LCB5KSkge1xuICAgICAgICB0ZXh0WCA9IHggLSAxMDtcbiAgICAgICAgdGV4dFkgPSB5O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4geyB4OiB0ZXh0WCwgeTogdGV4dFkgfTtcbn07XG5cbmNvbnN0IGdlbmVyYXRlVmFsaWRhdGlvbk1lc3NhZ2UgPSAoY29uZmlnKSA9PiB7XG4gIGNvbnN0IHsgbWluU2hhcGVzLCBtYXhTaGFwZXMsIG1heFNlbGVjdGlvbnMgfSA9IGNvbmZpZztcblxuICBjb25zdCBzaGFwZXNNZXNzYWdlID1cbiAgICBgXFxuVGhlcmUgc2hvdWxkIGJlIGF0IGxlYXN0ICR7bWluU2hhcGVzfSBgICsgKG1heFNoYXBlcyA/IGBhbmQgYXQgbW9zdCAke21heFNoYXBlc30gYCA6ICcnKSArICdzaGFwZXMgZGVmaW5lZC4nO1xuXG4gIGNvbnN0IHNlbGVjdGlvbnNNZXNzYWdlID1cbiAgICAnXFxuVGhlcmUgc2hvdWxkIGJlIGF0IGxlYXN0IDEgJyArXG4gICAgKG1heFNlbGVjdGlvbnMgPyBgYW5kIGF0IG1vc3QgJHttYXhTZWxlY3Rpb25zfSBgIDogJycpICtcbiAgICAnc2hhcGUnICtcbiAgICAobWF4U2VsZWN0aW9ucyA/ICdzJyA6ICcnKSArXG4gICAgJyBzZWxlY3RlZC4nO1xuXG4gIGNvbnN0IG1lc3NhZ2UgPSAnVmFsaWRhdGlvbiByZXF1aXJlbWVudHM6JyArIHNoYXBlc01lc3NhZ2UgKyBzZWxlY3Rpb25zTWVzc2FnZTtcblxuICByZXR1cm4gbWVzc2FnZTtcbn07XG5cbmV4cG9ydCB7XG4gIGNhbGN1bGF0ZSxcbiAgaXNQb2ludEluc2lkZVBvbHlnb24sXG4gIHVwZGF0ZUltYWdlRGltZW5zaW9ucyxcbiAgZ2VuZXJhdGVWYWxpZGF0aW9uTWVzc2FnZSxcbiAgZ2V0VXBkYXRlZFNoYXBlcyxcbiAgZ2V0QWxsU2hhcGVzLFxuICBncm91cFNoYXBlcyxcbiAgZ2V0VXBkYXRlZFJlY3RhbmdsZSxcbiAgZ2V0VXBkYXRlZFBvbHlnb24sXG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsSUFBQUEsVUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBRUEsTUFBTUUscUJBQXFCLEdBQUdBLENBQUNDLFVBQVUsRUFBRUMsT0FBTyxFQUFFQyxlQUFlLEVBQUVDLFVBQVUsS0FBSztFQUNsRjtFQUNBLElBQUlELGVBQWUsRUFBRTtJQUNuQixNQUFNRSxnQkFBZ0IsR0FBR0osVUFBVSxDQUFDSyxLQUFLLEdBQUdMLFVBQVUsQ0FBQ00sTUFBTTtJQUU3RCxJQUFJSCxVQUFVLEtBQUssUUFBUSxFQUFFO01BQzNCO01BQ0EsT0FBTztRQUNMRSxLQUFLLEVBQUVKLE9BQU8sQ0FBQ0ssTUFBTSxHQUFHRixnQkFBZ0I7UUFDeENFLE1BQU0sRUFBRUwsT0FBTyxDQUFDSztNQUNsQixDQUFDO0lBQ0g7O0lBRUE7SUFDQSxPQUFPO01BQ0xELEtBQUssRUFBRUosT0FBTyxDQUFDSSxLQUFLO01BQ3BCQyxNQUFNLEVBQUVMLE9BQU8sQ0FBQ0ksS0FBSyxHQUFHRDtJQUMxQixDQUFDO0VBQ0g7O0VBRUE7RUFDQSxPQUFPO0lBQ0xDLEtBQUssRUFBRUosT0FBTyxDQUFDSSxLQUFLO0lBQ3BCQyxNQUFNLEVBQUVMLE9BQU8s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
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils.js"],"names":["updateImageDimensions","initialDim","nextDim","keepAspectRatio","resizeType","imageAspectRatio","width","height","getDelta","referenceInitialValue","referenceNextValue","currentValue","getUpdatedRectangle","shape","x","y","getUpdatedCircles","radius","getUpdatedPolygon","points","map","point","getUpdatedShapes","shapes","group","SHAPE_GROUPS","RECTANGLES","POLYGONS","CIRCLES","getAllShapes","shapesMap","shapesArray","shapesKeys","Object","keys","length","reduce","acc","currentShapeKey","concat","index","groupShapes","rectangles","polygons","circles","shapeProps","isPointInsidePolygon","polygon","inside","i","j","xi","yi","xj","yj","intersect","calculate","polygonPoints","xPoints","yPoints","minX","Math","min","minY","maxX","max","maxY","textX","textY","generateValidationMessage","config","minShapes","maxShapes","maxSelections","shapesMessage","selectionsMessage","message"],"mappings":"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","sourcesContent":["import cloneDeep from 'lodash/cloneDeep';\nimport { SHAPE_GROUPS } from './shapes';\n\nconst updateImageDimensions = (initialDim, nextDim, keepAspectRatio, resizeType) => {\n // if we want to keep image aspect ratio\n if (keepAspectRatio) {\n const imageAspectRatio = initialDim.width / initialDim.height;\n\n if (resizeType === 'height') {\n // if we want to change image height => we update the width accordingly\n return {\n width: nextDim.height * imageAspectRatio,\n height: nextDim.height,\n };\n }\n\n // if we want to change image width => we update the height accordingly\n return {\n width: nextDim.width,\n height: nextDim.width / imageAspectRatio,\n };\n }\n\n // if we don't want to keep aspect ratio, we just update both values\n return {\n width: nextDim.width,\n height: nextDim.height,\n };\n};\n\n// referenceInitialValue = the initial value of the Stage\n// referenceNextValue = the next value of the Stage\n// currentValue = the value that has to be re-sized influenced by the changes that were made on the Stage\nconst getDelta = (referenceInitialValue, referenceNextValue, currentValue) =>\n (referenceNextValue / referenceInitialValue) * currentValue;\n\nconst getUpdatedRectangle = (initialDim, nextDim, shape) => ({\n ...shape,\n width: getDelta(initialDim.width, nextDim.width, shape.width),\n height: getDelta(initialDim.height, nextDim.height, shape.height),\n x: getDelta(initialDim.width, nextDim.width, shape.x),\n y: getDelta(initialDim.height, nextDim.height, shape.y),\n});\n\nconst getUpdatedCircles = (initialDim, nextDim, shape) => ({\n ...shape,\n radius: getDelta(initialDim.width, nextDim.width, shape.radius),\n x: getDelta(initialDim.width, nextDim.width, shape.x),\n y: getDelta(initialDim.height, nextDim.height, shape.y),\n});\n\nconst getUpdatedPolygon = (initialDim, nextDim, shape) => ({\n ...shape,\n points: shape.points.map((point) => ({\n x: getDelta(initialDim.width, nextDim.width, point.x),\n y: getDelta(initialDim.height, nextDim.height, point.y),\n })),\n});\n\n// initialDim = the initial dimensions: { width, height } of the Stage\n// nextDim = the next dimensions: { width, height } of the Stage\n// shapes = array of shapes that have to be re-sized and re-positioned\nconst getUpdatedShapes = (initialDim, nextDim, shapes) => {\n return shapes.map((shape) => {\n if (shape.group === SHAPE_GROUPS.RECTANGLES) {\n return getUpdatedRectangle(initialDim, nextDim, shape);\n }\n\n if (shape.group === SHAPE_GROUPS.POLYGONS) {\n return getUpdatedPolygon(initialDim, nextDim, shape);\n }\n\n if (shape.group === SHAPE_GROUPS.CIRCLES) {\n return getUpdatedCircles(initialDim, nextDim, shape);\n }\n });\n};\n\n// converts shapes map to shapes array\n// example:\n// from: { rectangles: [r1], polygons: [p1, p2]}\n// to: [{ ...r1, group: 'rectangles' }, { ...p1, group: 'polygons' }, { ...p2, group: 'polygons' }]\n// if a shape has index defined, keep it, otherwise initialize it\n// index is used for the UNDO function\nconst getAllShapes = (shapesMap) => {\n shapesMap = shapesMap || {};\n const shapesArray = [];\n const shapesKeys = Object.keys(shapesMap);\n\n return shapesKeys.length\n ? shapesKeys.reduce(\n (acc, currentShapeKey) =>\n acc.concat(\n shapesMap[currentShapeKey]\n ? shapesMap[currentShapeKey].map((shape, index) => ({\n ...shape,\n group: currentShapeKey,\n index: shape.index || acc.length + index,\n }))\n : [],\n ),\n shapesArray,\n )\n : shapesArray;\n};\n\n// converts shapes array to shapes map\n// is the reverse of getAllShapes function\n// example:\n// from: [{ ...r1, group: 'rectangles' }, { ...p1, group: 'polygons' }, { ...p2, group: 'polygons' }]\n// to: { rectangles: [r1], polygons: [p1, p2]}\nconst groupShapes = (shapesArray) => {\n shapesArray = shapesArray || [];\n const shapesMap = {\n rectangles: [],\n polygons: [],\n circles: [],\n };\n\n if (shapesArray.length) {\n return shapesArray.reduce((acc, { group, ...shapeProps }) => {\n acc[group] = [...(acc[group] || []), shapeProps];\n return acc;\n }, shapesMap);\n }\n\n return cloneDeep(shapesMap);\n};\n\nconst isPointInsidePolygon = (polygon, x, y) => {\n let inside = false;\n\n if (!polygon || polygon.length <= 0) {\n return inside;\n }\n\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const xi = polygon[i].x;\n const yi = polygon[i].y;\n const xj = polygon[j].x;\n const yj = polygon[j].y;\n\n const intersect = yi > y !== yj > y && x < ((xj - xi) * (y - yi)) / (yj - yi) + xi;\n\n if (intersect) {\n inside = !inside;\n }\n }\n\n return inside;\n};\n\nconst calculate = (polygonPoints) => {\n if (!polygonPoints || polygonPoints.length <= 0) {\n return { x: 0, y: 0 };\n }\n\n const xPoints = polygonPoints.map((point) => point.x);\n const yPoints = polygonPoints.map((point) => point.y);\n const minX = Math.min(...xPoints);\n const minY = Math.min(...yPoints);\n const maxX = Math.max(...xPoints);\n const maxY = Math.max(...yPoints);\n\n // Find a suitable position for the text element within the polygon\n let textX, textY;\n\n for (let x = minX; x <= maxX - 20; x++) {\n for (let y = maxY - 20; y > minY; y--) {\n // Check if the text element's position (x, y) is within the polygon\n if (isPointInsidePolygon(polygonPoints, x, y)) {\n textX = x - 10;\n textY = y;\n break;\n }\n }\n }\n\n return { x: textX, y: textY };\n};\n\nconst generateValidationMessage = (config) => {\n const { minShapes, maxShapes, maxSelections } = config;\n\n const shapesMessage =\n `\\nThere should be at least ${minShapes} ` + (maxShapes ? `and at most ${maxShapes} ` : '') + 'shapes defined.';\n\n const selectionsMessage =\n '\\nThere should be at least 1 ' +\n (maxSelections ? `and at most ${maxSelections} ` : '') +\n 'shape' +\n (maxSelections ? 's' : '') +\n ' selected.';\n\n const message = 'Validation requirements:' + shapesMessage + selectionsMessage;\n\n return message;\n};\n\nexport {\n calculate,\n isPointInsidePolygon,\n updateImageDimensions,\n generateValidationMessage,\n getUpdatedShapes,\n getAllShapes,\n groupShapes,\n getUpdatedRectangle,\n getUpdatedPolygon,\n};\n"],"file":"utils.js"}
1
+ {"version":3,"file":"utils.js","names":["_cloneDeep","_interopRequireDefault","require","_shapes","updateImageDimensions","initialDim","nextDim","keepAspectRatio","resizeType","imageAspectRatio","width","height","exports","getDelta","referenceInitialValue","referenceNextValue","currentValue","getUpdatedRectangle","shape","x","y","getUpdatedCircles","radius","getUpdatedPolygon","points","map","point","getUpdatedShapes","shapes","group","SHAPE_GROUPS","RECTANGLES","POLYGONS","CIRCLES","getAllShapes","shapesMap","shapesArray","shapesKeys","Object","keys","length","reduce","acc","currentShapeKey","concat","index","groupShapes","rectangles","polygons","circles","shapeProps","cloneDeep","isPointInsidePolygon","polygon","inside","i","j","xi","yi","xj","yj","intersect","calculate","polygonPoints","xPoints","yPoints","minX","Math","min","minY","maxX","max","maxY","textX","textY","generateValidationMessage","config","minShapes","maxShapes","maxSelections","shapesMessage","selectionsMessage","message"],"sources":["../src/utils.js"],"sourcesContent":["import cloneDeep from 'lodash/cloneDeep';\nimport { SHAPE_GROUPS } from './shapes';\n\nconst updateImageDimensions = (initialDim, nextDim, keepAspectRatio, resizeType) => {\n // if we want to keep image aspect ratio\n if (keepAspectRatio) {\n const imageAspectRatio = initialDim.width / initialDim.height;\n\n if (resizeType === 'height') {\n // if we want to change image height => we update the width accordingly\n return {\n width: nextDim.height * imageAspectRatio,\n height: nextDim.height,\n };\n }\n\n // if we want to change image width => we update the height accordingly\n return {\n width: nextDim.width,\n height: nextDim.width / imageAspectRatio,\n };\n }\n\n // if we don't want to keep aspect ratio, we just update both values\n return {\n width: nextDim.width,\n height: nextDim.height,\n };\n};\n\n// referenceInitialValue = the initial value of the Stage\n// referenceNextValue = the next value of the Stage\n// currentValue = the value that has to be re-sized influenced by the changes that were made on the Stage\nconst getDelta = (referenceInitialValue, referenceNextValue, currentValue) =>\n (referenceNextValue / referenceInitialValue) * currentValue;\n\nconst getUpdatedRectangle = (initialDim, nextDim, shape) => ({\n ...shape,\n width: getDelta(initialDim.width, nextDim.width, shape.width),\n height: getDelta(initialDim.height, nextDim.height, shape.height),\n x: getDelta(initialDim.width, nextDim.width, shape.x),\n y: getDelta(initialDim.height, nextDim.height, shape.y),\n});\n\nconst getUpdatedCircles = (initialDim, nextDim, shape) => ({\n ...shape,\n radius: getDelta(initialDim.width, nextDim.width, shape.radius),\n x: getDelta(initialDim.width, nextDim.width, shape.x),\n y: getDelta(initialDim.height, nextDim.height, shape.y),\n});\n\nconst getUpdatedPolygon = (initialDim, nextDim, shape) => ({\n ...shape,\n points: shape.points.map((point) => ({\n x: getDelta(initialDim.width, nextDim.width, point.x),\n y: getDelta(initialDim.height, nextDim.height, point.y),\n })),\n});\n\n// initialDim = the initial dimensions: { width, height } of the Stage\n// nextDim = the next dimensions: { width, height } of the Stage\n// shapes = array of shapes that have to be re-sized and re-positioned\nconst getUpdatedShapes = (initialDim, nextDim, shapes) => {\n return shapes.map((shape) => {\n if (shape.group === SHAPE_GROUPS.RECTANGLES) {\n return getUpdatedRectangle(initialDim, nextDim, shape);\n }\n\n if (shape.group === SHAPE_GROUPS.POLYGONS) {\n return getUpdatedPolygon(initialDim, nextDim, shape);\n }\n\n if (shape.group === SHAPE_GROUPS.CIRCLES) {\n return getUpdatedCircles(initialDim, nextDim, shape);\n }\n });\n};\n\n// converts shapes map to shapes array\n// example:\n// from: { rectangles: [r1], polygons: [p1, p2]}\n// to: [{ ...r1, group: 'rectangles' }, { ...p1, group: 'polygons' }, { ...p2, group: 'polygons' }]\n// if a shape has index defined, keep it, otherwise initialize it\n// index is used for the UNDO function\nconst getAllShapes = (shapesMap) => {\n shapesMap = shapesMap || {};\n const shapesArray = [];\n const shapesKeys = Object.keys(shapesMap);\n\n return shapesKeys.length\n ? shapesKeys.reduce(\n (acc, currentShapeKey) =>\n acc.concat(\n shapesMap[currentShapeKey]\n ? shapesMap[currentShapeKey].map((shape, index) => ({\n ...shape,\n group: currentShapeKey,\n index: shape.index || acc.length + index,\n }))\n : [],\n ),\n shapesArray,\n )\n : shapesArray;\n};\n\n// converts shapes array to shapes map\n// is the reverse of getAllShapes function\n// example:\n// from: [{ ...r1, group: 'rectangles' }, { ...p1, group: 'polygons' }, { ...p2, group: 'polygons' }]\n// to: { rectangles: [r1], polygons: [p1, p2]}\nconst groupShapes = (shapesArray) => {\n shapesArray = shapesArray || [];\n const shapesMap = {\n rectangles: [],\n polygons: [],\n circles: [],\n };\n\n if (shapesArray.length) {\n return shapesArray.reduce((acc, { group, ...shapeProps }) => {\n acc[group] = [...(acc[group] || []), shapeProps];\n return acc;\n }, shapesMap);\n }\n\n return cloneDeep(shapesMap);\n};\n\nconst isPointInsidePolygon = (polygon, x, y) => {\n let inside = false;\n\n if (!polygon || polygon.length <= 0) {\n return inside;\n }\n\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const xi = polygon[i].x;\n const yi = polygon[i].y;\n const xj = polygon[j].x;\n const yj = polygon[j].y;\n\n const intersect = yi > y !== yj > y && x < ((xj - xi) * (y - yi)) / (yj - yi) + xi;\n\n if (intersect) {\n inside = !inside;\n }\n }\n\n return inside;\n};\n\nconst calculate = (polygonPoints) => {\n if (!polygonPoints || polygonPoints.length <= 0) {\n return { x: 0, y: 0 };\n }\n\n const xPoints = polygonPoints.map((point) => point.x);\n const yPoints = polygonPoints.map((point) => point.y);\n const minX = Math.min(...xPoints);\n const minY = Math.min(...yPoints);\n const maxX = Math.max(...xPoints);\n const maxY = Math.max(...yPoints);\n\n // Find a suitable position for the text element within the polygon\n let textX, textY;\n\n for (let x = minX; x <= maxX - 20; x++) {\n for (let y = maxY - 20; y > minY; y--) {\n // Check if the text element's position (x, y) is within the polygon\n if (isPointInsidePolygon(polygonPoints, x, y)) {\n textX = x - 10;\n textY = y;\n break;\n }\n }\n }\n\n return { x: textX, y: textY };\n};\n\nconst generateValidationMessage = (config) => {\n const { minShapes, maxShapes, maxSelections } = config;\n\n const shapesMessage =\n `\\nThere should be at least ${minShapes} ` + (maxShapes ? `and at most ${maxShapes} ` : '') + 'shapes defined.';\n\n const selectionsMessage =\n '\\nThere should be at least 1 ' +\n (maxSelections ? `and at most ${maxSelections} ` : '') +\n 'shape' +\n (maxSelections ? 's' : '') +\n ' selected.';\n\n const message = 'Validation requirements:' + shapesMessage + selectionsMessage;\n\n return message;\n};\n\nexport {\n calculate,\n isPointInsidePolygon,\n updateImageDimensions,\n generateValidationMessage,\n getUpdatedShapes,\n getAllShapes,\n groupShapes,\n getUpdatedRectangle,\n getUpdatedPolygon,\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,25 +1,26 @@
1
1
  {
2
2
  "name": "@pie-element/hotspot-configure",
3
3
  "private": true,
4
- "version": "8.1.0",
4
+ "version": "8.2.0",
5
5
  "description": "",
6
6
  "main": "lib/index.js",
7
7
  "module": "src/index.js",
8
8
  "author": "",
9
9
  "dependencies": {
10
- "@material-ui/core": "^3.9.2",
11
- "@material-ui/icons": "^3.0.2",
10
+ "@emotion/react": "^11.14.0",
11
+ "@emotion/style": "^0.8.0",
12
+ "@mui/icons-material": "^7.3.4",
13
+ "@mui/material": "^7.3.4",
12
14
  "@pie-framework/pie-configure-events": "^1.3.0",
13
- "@pie-lib/config-ui": "^11.25.0",
14
- "@pie-lib/editable-html": "^11.17.0",
15
- "classnames": "^2.2.6",
15
+ "@pie-lib/config-ui": "11.41.0-mui-update.0",
16
+ "@pie-lib/editable-html": "11.33.0-mui-update.0",
16
17
  "debug": "^3.1.0",
17
- "konva": "^3.2.4",
18
18
  "lodash": "^4.17.15",
19
19
  "prop-types": "^15.7.2",
20
- "react": "^16.8.6",
21
- "react-dom": "^16.8.6",
22
- "react-konva": "^16.9.0-0"
20
+ "react": "18.2.0",
21
+ "react-dom": "18.2.0",
22
+ "react-konva": "18.1.0",
23
+ "konva": "8.3.0"
23
24
  },
24
25
  "license": "ISC"
25
26
  }
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import ReactDOM from 'react-dom';
2
+ import { createRoot } from 'react-dom/client';
3
3
 
4
4
  jest.mock('@pie-lib/config-ui', () => ({
5
5
  choiceUtils: {
@@ -12,8 +12,13 @@ jest.mock('@pie-lib/config-ui', () => ({
12
12
  },
13
13
  }));
14
14
 
15
- jest.mock('react-dom', () => ({
16
- render: jest.fn(),
15
+ const mockRender = jest.fn();
16
+ const mockUnmount = jest.fn();
17
+ jest.mock('react-dom/client', () => ({
18
+ createRoot: jest.fn(() => ({
19
+ render: mockRender,
20
+ unmount: mockUnmount,
21
+ })),
17
22
  }));
18
23
 
19
24
  const model = () => ({
@@ -61,8 +66,9 @@ describe('index', () => {
61
66
  });
62
67
 
63
68
  describe('set model', () => {
64
- it('calls ReactDOM.render', () => {
65
- expect(ReactDOM.render).toHaveBeenCalled();
69
+ it('calls createRoot and render', () => {
70
+ expect(createRoot).toHaveBeenCalled();
71
+ expect(mockRender).toHaveBeenCalled();
66
72
  });
67
73
  });
68
74
 
@@ -1,24 +1,24 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
- import { withStyles } from '@material-ui/core/styles';
4
- import classNames from 'classnames';
5
- import Button from '@material-ui/core/Button';
3
+ import { styled } from '@mui/material/styles';
4
+ import Button from '@mui/material/Button';
6
5
 
7
- const RawButton = ({ classes, className, label, onClick, disabled }) => (
8
- <Button
6
+ const StyledButton = styled(Button)(({ theme }) => ({
7
+ marginLeft: theme.spacing(1),
8
+ }));
9
+
10
+ const RawButton = ({ className, label, onClick, disabled }) => (
11
+ <StyledButton
9
12
  onClick={onClick}
10
13
  disabled={disabled}
11
- className={classNames(classes.addButton, className)}
14
+ className={className}
12
15
  size="small"
13
- variant="contained"
14
- color="default"
15
- >
16
+ variant="contained">
16
17
  {label}
17
- </Button>
18
+ </StyledButton>
18
19
  );
19
20
 
20
21
  RawButton.propTypes = {
21
- classes: PropTypes.object.isRequired,
22
22
  className: PropTypes.string,
23
23
  disabled: PropTypes.bool,
24
24
  label: PropTypes.string,
@@ -32,12 +32,4 @@ RawButton.defaultProps = {
32
32
  onClick: () => {},
33
33
  };
34
34
 
35
- const styles = (theme) => ({
36
- addButton: {
37
- marginLeft: theme.spacing.unit,
38
- },
39
- });
40
-
41
- const ButtonStyled = withStyles(styles)(RawButton);
42
-
43
- export default ButtonStyled;
35
+ export default RawButton;
@@ -1,7 +1,6 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
- import { Circle, Group, Rect, Transformer } from 'react-konva';
4
- import { withStyles } from '@material-ui/core/styles';
3
+ import { Circle, Group, Transformer } from 'react-konva';
5
4
  import DeleteWidget from './DeleteWidget';
6
5
 
7
6
  class CircleComponent extends React.Component {
@@ -77,7 +76,6 @@ class CircleComponent extends React.Component {
77
76
 
78
77
  render() {
79
78
  const {
80
- classes,
81
79
  correct,
82
80
  radius,
83
81
  hotspotColor,
@@ -95,9 +93,8 @@ class CircleComponent extends React.Component {
95
93
  const validRadius = isNaN(radius) || radius <= 0 ? 5 : radius;
96
94
 
97
95
  return (
98
- <Group classes={classes.group} onMouseLeave={this.handleMouseLeave} onMouseEnter={this.handleMouseEnter}>
96
+ <Group onMouseLeave={this.handleMouseLeave} onMouseEnter={this.handleMouseEnter} padding={12}>
99
97
  <Circle
100
- classes={classes.base}
101
98
  ref={this.shapeRef}
102
99
  radius={validRadius}
103
100
  fill={correct && selectedHotspotColor ? selectedHotspotColor : hotspotColor}
@@ -112,6 +109,8 @@ class CircleComponent extends React.Component {
112
109
  onTransformEnd={this.onResizeEnd}
113
110
  x={x}
114
111
  y={y}
112
+ opacity={0.5}
113
+ cursor="pointer"
115
114
  />
116
115
 
117
116
  {!isDragging && hovered && (
@@ -158,19 +157,7 @@ class CircleComponent extends React.Component {
158
157
  }
159
158
  }
160
159
 
161
- const styles = () => ({
162
- base: {
163
- cursor: 'pointer',
164
- opacity: 0.5,
165
- },
166
-
167
- group: {
168
- padding: '12px',
169
- },
170
- });
171
-
172
160
  CircleComponent.propTypes = {
173
- classes: PropTypes.object.isRequired,
174
161
  correct: PropTypes.bool,
175
162
  isDrawing: PropTypes.bool.isRequired,
176
163
  id: PropTypes.string.isRequired,
@@ -191,4 +178,4 @@ CircleComponent.defaultProps = {
191
178
  correct: false,
192
179
  };
193
180
 
194
- export default withStyles(styles)(CircleComponent);
181
+ export default CircleComponent;