@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.
- package/CHANGELOG.md +66 -0
- package/configure/CHANGELOG.md +66 -0
- package/configure/lib/DeleteWidget.js +31 -44
- package/configure/lib/DeleteWidget.js.map +1 -1
- package/configure/lib/__tests__/DeleteWidget.test.js +60 -0
- package/configure/lib/__tests__/hotspot-container.test.js +377 -0
- package/configure/lib/__tests__/hotspot-drawable.test.js +233 -0
- package/configure/lib/__tests__/index.test.js +211 -0
- package/configure/lib/__tests__/root.test.js +440 -0
- package/configure/lib/__tests__/utils.test.js +287 -0
- package/configure/lib/button.js +27 -46
- package/configure/lib/button.js.map +1 -1
- package/configure/lib/buttons/circle.js +21 -28
- package/configure/lib/buttons/circle.js.map +1 -1
- package/configure/lib/buttons/polygon.js +27 -34
- package/configure/lib/buttons/polygon.js.map +1 -1
- package/configure/lib/buttons/rectangle.js +27 -34
- package/configure/lib/buttons/rectangle.js.map +1 -1
- package/configure/lib/defaults.js +3 -4
- package/configure/lib/defaults.js.map +1 -1
- package/configure/lib/hotspot-circle.js +133 -199
- package/configure/lib/hotspot-circle.js.map +1 -1
- package/configure/lib/hotspot-container.js +251 -356
- package/configure/lib/hotspot-container.js.map +1 -1
- package/configure/lib/hotspot-drawable.js +361 -473
- package/configure/lib/hotspot-drawable.js.map +1 -1
- package/configure/lib/hotspot-palette.js +93 -140
- package/configure/lib/hotspot-palette.js.map +1 -1
- package/configure/lib/hotspot-polygon.js +213 -318
- package/configure/lib/hotspot-polygon.js.map +1 -1
- package/configure/lib/hotspot-rectangle.js +129 -193
- package/configure/lib/hotspot-rectangle.js.map +1 -1
- package/configure/lib/icons.js +1 -1
- package/configure/lib/icons.js.map +1 -1
- package/configure/lib/image-konva.js +47 -87
- package/configure/lib/image-konva.js.map +1 -1
- package/configure/lib/index.js +163 -223
- package/configure/lib/index.js.map +1 -1
- package/configure/lib/root.js +302 -394
- package/configure/lib/root.js.map +1 -1
- package/configure/lib/shapes/circle.js +70 -102
- package/configure/lib/shapes/circle.js.map +1 -1
- package/configure/lib/shapes/index.js +5 -13
- package/configure/lib/shapes/index.js.map +1 -1
- package/configure/lib/shapes/polygon.js +65 -97
- package/configure/lib/shapes/polygon.js.map +1 -1
- package/configure/lib/shapes/rectagle.js +70 -102
- package/configure/lib/shapes/rectagle.js.map +1 -1
- package/configure/lib/shapes/utils.js +3 -9
- package/configure/lib/shapes/utils.js.map +1 -1
- package/configure/lib/upload-control.js +26 -53
- package/configure/lib/upload-control.js.map +1 -1
- package/configure/lib/utils.js +85 -138
- package/configure/lib/utils.js.map +1 -1
- package/configure/package.json +11 -10
- package/configure/src/__tests__/index.test.js +11 -5
- package/configure/src/button.jsx +12 -20
- package/configure/src/hotspot-circle.jsx +5 -18
- package/configure/src/hotspot-container.jsx +82 -98
- package/configure/src/hotspot-drawable.jsx +43 -45
- package/configure/src/hotspot-palette.jsx +45 -37
- package/configure/src/hotspot-polygon.jsx +4 -20
- package/configure/src/hotspot-rectangle.jsx +4 -17
- package/configure/src/index.js +12 -2
- package/configure/src/root.jsx +85 -79
- package/configure/src/upload-control.jsx +6 -16
- package/controller/CHANGELOG.md +52 -0
- package/controller/lib/__tests__/index.test.js +586 -0
- package/controller/lib/__tests__/utils.test.js +8 -0
- package/controller/lib/defaults.js +3 -4
- package/controller/lib/defaults.js.map +1 -1
- package/controller/lib/index.js +152 -206
- package/controller/lib/index.js.map +1 -1
- package/controller/lib/utils.js +15 -35
- package/controller/lib/utils.js.map +1 -1
- package/controller/package.json +2 -2
- package/docs/demo/pie.manifest.json +11 -0
- package/lib/__tests__/container.test.js +221 -0
- package/lib/__tests__/index.test.js +113 -0
- package/lib/__tests__/polygon.test.js +245 -0
- package/lib/__tests__/rectangle.test.js +236 -0
- package/lib/__tests__/session-updater.test.js +69 -0
- package/lib/hotspot/circle.js +111 -170
- package/lib/hotspot/circle.js.map +1 -1
- package/lib/hotspot/container.js +175 -261
- package/lib/hotspot/container.js.map +1 -1
- package/lib/hotspot/icons.js +1 -1
- package/lib/hotspot/icons.js.map +1 -1
- package/lib/hotspot/image-konva-tooltip.js +66 -113
- package/lib/hotspot/image-konva-tooltip.js.map +1 -1
- package/lib/hotspot/index.js +136 -199
- package/lib/hotspot/index.js.map +1 -1
- package/lib/hotspot/polygon.js +151 -215
- package/lib/hotspot/polygon.js.map +1 -1
- package/lib/hotspot/rectangle.js +130 -186
- package/lib/hotspot/rectangle.js.map +1 -1
- package/lib/index.js +188 -257
- package/lib/index.js.map +1 -1
- package/lib/session-updater.js +13 -19
- package/lib/session-updater.js.map +1 -1
- package/package.json +14 -11
- package/src/hotspot/circle.jsx +2 -13
- package/src/hotspot/container.jsx +35 -50
- package/src/hotspot/index.jsx +16 -28
- package/src/hotspot/polygon.jsx +4 -13
- package/src/hotspot/rectangle.jsx +4 -13
- package/src/index.js +21 -12
- package/LICENSE.md +0 -5
- package/configure/node_modules/debug/CHANGELOG.md +0 -395
- package/configure/node_modules/debug/LICENSE +0 -19
- package/configure/node_modules/debug/README.md +0 -437
- package/configure/node_modules/debug/node.js +0 -1
- package/configure/node_modules/debug/package.json +0 -51
- package/configure/node_modules/debug/src/browser.js +0 -180
- package/configure/node_modules/debug/src/common.js +0 -249
- package/configure/node_modules/debug/src/index.js +0 -12
- package/configure/node_modules/debug/src/node.js +0 -177
package/configure/lib/utils.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
}
|
|
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
|
-
}
|
|
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
|
-
};
|
|
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
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
};
|
|
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
|
-
|
|
124
|
-
|
|
125
|
-
return shapesKeys.length ? shapesKeys.reduce(
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
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
|
-
|
|
107
|
+
const shapesMap = {
|
|
145
108
|
rectangles: [],
|
|
146
109
|
polygons: [],
|
|
147
110
|
circles: []
|
|
148
111
|
};
|
|
149
|
-
|
|
150
112
|
if (shapesArray.length) {
|
|
151
|
-
return shapesArray.reduce(
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
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
|
-
|
|
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
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
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
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
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
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
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":[]}
|
package/configure/package.json
CHANGED
|
@@ -1,25 +1,26 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-element/hotspot-configure",
|
|
3
3
|
"private": true,
|
|
4
|
-
"version": "8.
|
|
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
|
-
"@
|
|
11
|
-
"@
|
|
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": "
|
|
14
|
-
"@pie-lib/editable-html": "
|
|
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": "
|
|
21
|
-
"react-dom": "
|
|
22
|
-
"react-konva": "
|
|
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
|
|
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.
|
|
16
|
-
|
|
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
|
|
65
|
-
expect(
|
|
69
|
+
it('calls createRoot and render', () => {
|
|
70
|
+
expect(createRoot).toHaveBeenCalled();
|
|
71
|
+
expect(mockRender).toHaveBeenCalled();
|
|
66
72
|
});
|
|
67
73
|
});
|
|
68
74
|
|
package/configure/src/button.jsx
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
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
|
|
8
|
-
|
|
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={
|
|
14
|
+
className={className}
|
|
12
15
|
size="small"
|
|
13
|
-
variant="contained"
|
|
14
|
-
color="default"
|
|
15
|
-
>
|
|
16
|
+
variant="contained">
|
|
16
17
|
{label}
|
|
17
|
-
</
|
|
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
|
-
|
|
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,
|
|
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
|
|
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
|
|
181
|
+
export default CircleComponent;
|