@pie-element/hotspot 6.15.1 → 6.15.2-next.1

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 (65) hide show
  1. package/configure/package.json +1 -1
  2. package/controller/package.json +1 -1
  3. package/package.json +3 -3
  4. package/configure/lib/DeleteWidget.js +0 -79
  5. package/configure/lib/DeleteWidget.js.map +0 -1
  6. package/configure/lib/button.js +0 -61
  7. package/configure/lib/button.js.map +0 -1
  8. package/configure/lib/buttons/circle.js +0 -40
  9. package/configure/lib/buttons/circle.js.map +0 -1
  10. package/configure/lib/buttons/polygon.js +0 -46
  11. package/configure/lib/buttons/polygon.js.map +0 -1
  12. package/configure/lib/buttons/rectangle.js +0 -46
  13. package/configure/lib/buttons/rectangle.js.map +0 -1
  14. package/configure/lib/defaults.js +0 -143
  15. package/configure/lib/defaults.js.map +0 -1
  16. package/configure/lib/hotspot-circle.js +0 -246
  17. package/configure/lib/hotspot-circle.js.map +0 -1
  18. package/configure/lib/hotspot-container.js +0 -417
  19. package/configure/lib/hotspot-container.js.map +0 -1
  20. package/configure/lib/hotspot-drawable.js +0 -548
  21. package/configure/lib/hotspot-drawable.js.map +0 -1
  22. package/configure/lib/hotspot-palette.js +0 -154
  23. package/configure/lib/hotspot-palette.js.map +0 -1
  24. package/configure/lib/hotspot-polygon.js +0 -364
  25. package/configure/lib/hotspot-polygon.js.map +0 -1
  26. package/configure/lib/hotspot-rectangle.js +0 -240
  27. package/configure/lib/hotspot-rectangle.js.map +0 -1
  28. package/configure/lib/icons.js +0 -7
  29. package/configure/lib/icons.js.map +0 -1
  30. package/configure/lib/index.js +0 -254
  31. package/configure/lib/index.js.map +0 -1
  32. package/configure/lib/root.js +0 -418
  33. package/configure/lib/root.js.map +0 -1
  34. package/configure/lib/shapes/circle.js +0 -115
  35. package/configure/lib/shapes/circle.js.map +0 -1
  36. package/configure/lib/shapes/polygon.js +0 -111
  37. package/configure/lib/shapes/polygon.js.map +0 -1
  38. package/configure/lib/shapes/rectagle.js +0 -115
  39. package/configure/lib/shapes/rectagle.js.map +0 -1
  40. package/configure/lib/upload-control.js +0 -68
  41. package/configure/lib/upload-control.js.map +0 -1
  42. package/configure/lib/utils.js +0 -237
  43. package/configure/lib/utils.js.map +0 -1
  44. package/controller/lib/defaults.js +0 -33
  45. package/controller/lib/defaults.js.map +0 -1
  46. package/controller/lib/index.js +0 -289
  47. package/controller/lib/index.js.map +0 -1
  48. package/controller/lib/utils.js +0 -54
  49. package/controller/lib/utils.js.map +0 -1
  50. package/lib/hotspot/circle.js +0 -191
  51. package/lib/hotspot/circle.js.map +0 -1
  52. package/lib/hotspot/container.js +0 -282
  53. package/lib/hotspot/container.js.map +0 -1
  54. package/lib/hotspot/icons.js +0 -8
  55. package/lib/hotspot/icons.js.map +0 -1
  56. package/lib/hotspot/index.js +0 -209
  57. package/lib/hotspot/index.js.map +0 -1
  58. package/lib/hotspot/polygon.js +0 -225
  59. package/lib/hotspot/polygon.js.map +0 -1
  60. package/lib/hotspot/rectangle.js +0 -207
  61. package/lib/hotspot/rectangle.js.map +0 -1
  62. package/lib/index.js +0 -114
  63. package/lib/index.js.map +0 -1
  64. package/lib/session-updater.js +0 -30
  65. package/lib/session-updater.js.map +0 -1
@@ -1,111 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports["default"] = void 0;
9
-
10
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
-
12
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
-
14
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
-
16
- var PolygonShape = /*#__PURE__*/function () {
17
- function PolygonShape() {
18
- (0, _classCallCheck2["default"])(this, PolygonShape);
19
- }
20
-
21
- (0, _createClass2["default"])(PolygonShape, null, [{
22
- key: "create",
23
- value: function create(shapes, e) {
24
- var newShapes = (0, _toConsumableArray2["default"])(shapes);
25
- var newPolygon = {
26
- id: 'newPolygon',
27
- points: [{
28
- x: e.evt.layerX,
29
- y: e.evt.layerY
30
- }],
31
- group: 'polygons',
32
- index: newShapes.length
33
- };
34
- newShapes.push(newPolygon);
35
- return {
36
- shapes: newShapes,
37
- isDrawing: true,
38
- isDrawingShapeId: newPolygon.id
39
- };
40
- }
41
- }, {
42
- key: "addPoint",
43
- value: function addPoint(state, e, onPolygonComplete) {
44
- // Number of pixels allowed to determine if the first point was clicked
45
- var clickDelta = 5;
46
- var shapesCopy = JSON.parse(JSON.stringify(state.shapes));
47
- var currentShapeIndex = shapesCopy.findIndex(function (shape) {
48
- return shape.id === state.isDrawingShapeId;
49
- });
50
-
51
- if (currentShapeIndex !== -1) {
52
- var currentShape = shapesCopy[currentShapeIndex];
53
-
54
- if (currentShape.points && Array.isArray(currentShape.points)) {
55
- var firstPoint = currentShape.points[0]; // If click is close enough to the first point (within clickDelta pixels), close the polygon
56
-
57
- if (Math.abs(firstPoint.x - e.evt.layerX) <= clickDelta && Math.abs(firstPoint.y - e.evt.layerY) <= clickDelta) {
58
- return PolygonShape.finalizeCreation(state, onPolygonComplete);
59
- }
60
-
61
- currentShape.points.push({
62
- x: e.evt.layerX,
63
- y: e.evt.layerY
64
- });
65
- shapesCopy[currentShapeIndex] = currentShape;
66
- return {
67
- shapes: shapesCopy
68
- };
69
- }
70
- }
71
-
72
- return state;
73
- }
74
- }, {
75
- key: "finalizeCreation",
76
- value: function finalizeCreation(state, onPolygonComplete) {
77
- var shapes = state.shapes;
78
- var tempShapes = (0, _toConsumableArray2["default"])(shapes);
79
- var highestId = Math.max.apply(Math, (0, _toConsumableArray2["default"])(state.shapes.map(function (shape) {
80
- return parseInt(shape.id) || 0;
81
- })).concat([0]));
82
- var polygonIndex = tempShapes.findIndex(function (shape) {
83
- return shape.id === state.isDrawingShapeId;
84
- });
85
-
86
- if (polygonIndex !== -1 && tempShapes[polygonIndex].points.length > 2) {
87
- var completedPolygon = tempShapes[polygonIndex];
88
- completedPolygon.id = "".concat(highestId + 1);
89
- onPolygonComplete(tempShapes);
90
- return {
91
- isDrawing: false,
92
- shapes: tempShapes,
93
- isDrawingShapeId: undefined
94
- };
95
- }
96
-
97
- return state;
98
- } // No need to update anything on mouse move,
99
- // but it's here if we need to add any logic later.
100
-
101
- }, {
102
- key: "handleMouseMove",
103
- value: function handleMouseMove(state, e) {
104
- return state;
105
- }
106
- }]);
107
- return PolygonShape;
108
- }();
109
-
110
- exports["default"] = PolygonShape;
111
- //# sourceMappingURL=polygon.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/shapes/polygon.js"],"names":["PolygonShape","shapes","e","newShapes","newPolygon","id","points","x","evt","layerX","y","layerY","group","index","length","push","isDrawing","isDrawingShapeId","state","onPolygonComplete","clickDelta","shapesCopy","JSON","parse","stringify","currentShapeIndex","findIndex","shape","currentShape","Array","isArray","firstPoint","Math","abs","finalizeCreation","tempShapes","highestId","max","map","parseInt","polygonIndex","completedPolygon","undefined"],"mappings":"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","sourcesContent":["export default class PolygonShape {\n static create(shapes, e) {\n const newShapes = [...shapes];\n const newPolygon = {\n id: 'newPolygon',\n points: [{ x: e.evt.layerX, y: e.evt.layerY }],\n group: 'polygons',\n index: newShapes.length,\n };\n\n newShapes.push(newPolygon);\n\n return {\n shapes: newShapes,\n isDrawing: true,\n isDrawingShapeId: newPolygon.id,\n };\n }\n\n static addPoint(state, e, onPolygonComplete) {\n // Number of pixels allowed to determine if the first point was clicked\n const clickDelta = 5;\n\n const shapesCopy = JSON.parse(JSON.stringify(state.shapes));\n const currentShapeIndex = shapesCopy.findIndex((shape) => shape.id === state.isDrawingShapeId);\n\n if (currentShapeIndex !== -1) {\n const currentShape = shapesCopy[currentShapeIndex];\n if (currentShape.points && Array.isArray(currentShape.points)) {\n const firstPoint = currentShape.points[0];\n\n // If click is close enough to the first point (within clickDelta pixels), close the polygon\n if (\n Math.abs(firstPoint.x - e.evt.layerX) <= clickDelta &&\n Math.abs(firstPoint.y - e.evt.layerY) <= clickDelta\n ) {\n return PolygonShape.finalizeCreation(state, onPolygonComplete);\n }\n\n currentShape.points.push({ x: e.evt.layerX, y: e.evt.layerY });\n shapesCopy[currentShapeIndex] = currentShape;\n\n return {\n shapes: shapesCopy,\n };\n }\n }\n return state;\n }\n\n static finalizeCreation(state, onPolygonComplete) {\n const { shapes } = state;\n const tempShapes = [...shapes];\n const highestId = Math.max(...state.shapes.map((shape) => parseInt(shape.id) || 0), 0);\n\n const polygonIndex = tempShapes.findIndex((shape) => shape.id === state.isDrawingShapeId);\n\n if (polygonIndex !== -1 && tempShapes[polygonIndex].points.length > 2) {\n const completedPolygon = tempShapes[polygonIndex];\n\n completedPolygon.id = `${highestId + 1}`;\n onPolygonComplete(tempShapes);\n\n return {\n isDrawing: false,\n shapes: tempShapes,\n isDrawingShapeId: undefined,\n };\n }\n\n return state;\n }\n\n // No need to update anything on mouse move,\n // but it's here if we need to add any logic later.\n static handleMouseMove(state, e) {\n return state;\n }\n}\n"],"file":"polygon.js"}
@@ -1,115 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports["default"] = void 0;
9
-
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
-
12
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
13
-
14
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
15
-
16
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
17
-
18
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
19
-
20
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
21
-
22
- var RectangleShape = /*#__PURE__*/function () {
23
- function RectangleShape() {
24
- (0, _classCallCheck2["default"])(this, RectangleShape);
25
- }
26
-
27
- (0, _createClass2["default"])(RectangleShape, null, [{
28
- key: "create",
29
- value: function create(shapes, e) {
30
- var newShapes = (0, _toConsumableArray2["default"])(shapes);
31
- var highestId = Math.max.apply(Math, (0, _toConsumableArray2["default"])(newShapes.map(function (shape) {
32
- return parseInt(shape.id);
33
- })).concat([0])) || 0;
34
- var newRectangle = {
35
- id: "".concat(highestId + 1),
36
- height: 0,
37
- width: 0,
38
- x: e.evt.layerX,
39
- y: e.evt.layerY,
40
- group: 'rectangles',
41
- index: newShapes.length
42
- };
43
- newShapes.push(newRectangle);
44
- return {
45
- shapes: newShapes,
46
- isDrawing: true,
47
- isDrawingShapeId: newRectangle.id
48
- };
49
- }
50
- }, {
51
- key: "finalizeCreation",
52
- value: function finalizeCreation(state, props) {
53
- var currentShapeIndex = state.shapes.findIndex(function (shape) {
54
- return shape.id === state.isDrawingShapeId;
55
- });
56
-
57
- if (currentShapeIndex !== -1) {
58
- var currentShape = state.shapes[currentShapeIndex]; // Check if the shape is a valid rectangle (has more than 0 width and height) before finalizing
59
-
60
- if (currentShape.width > 0 && currentShape.height > 0) {
61
- return _objectSpread(_objectSpread({}, state), {}, {
62
- isDrawing: false,
63
- stateShapes: false,
64
- isDrawingShapeId: undefined
65
- });
66
- } else {
67
- return _objectSpread(_objectSpread({}, state), {}, {
68
- isDrawing: false,
69
- stateShapes: false,
70
- isDrawingShapeId: undefined,
71
- shapes: state.shapes.filter(function (shape) {
72
- return shape.id !== state.isDrawingShapeId;
73
- })
74
- });
75
- }
76
- } // Return current state if not drawing a rectangle
77
-
78
-
79
- return _objectSpread(_objectSpread({}, state), {}, {
80
- isDrawing: false,
81
- stateShapes: false,
82
- isDrawingShapeId: undefined
83
- });
84
- }
85
- }, {
86
- key: "handleMouseMove",
87
- value: function handleMouseMove(state, e) {
88
- var isDrawing = state.isDrawing,
89
- isDrawingShapeId = state.isDrawingShapeId,
90
- shapes = state.shapes;
91
-
92
- if (isDrawing) {
93
- var tempShapes = (0, _toConsumableArray2["default"])(shapes);
94
- var resizingShapeIndex = tempShapes.findIndex(function (shape) {
95
- return shape.id === isDrawingShapeId;
96
- });
97
-
98
- if (resizingShapeIndex !== -1) {
99
- var resizingShape = tempShapes[resizingShapeIndex];
100
- resizingShape.width = e.evt.layerX - resizingShape.x;
101
- resizingShape.height = e.evt.layerY - resizingShape.y;
102
- return {
103
- shapes: tempShapes
104
- };
105
- }
106
- }
107
-
108
- return state;
109
- }
110
- }]);
111
- return RectangleShape;
112
- }();
113
-
114
- exports["default"] = RectangleShape;
115
- //# sourceMappingURL=rectagle.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/shapes/rectagle.js"],"names":["RectangleShape","shapes","e","newShapes","highestId","Math","max","map","shape","parseInt","id","newRectangle","height","width","x","evt","layerX","y","layerY","group","index","length","push","isDrawing","isDrawingShapeId","state","props","currentShapeIndex","findIndex","currentShape","stateShapes","undefined","filter","tempShapes","resizingShapeIndex","resizingShape"],"mappings":";;;;;;;;;;;;;;;;;;;;;IAAqBA,c;;;;;;;WACnB,gBAAcC,MAAd,EAAsBC,CAAtB,EAAyB;AACvB,UAAMC,SAAS,uCAAOF,MAAP,CAAf;AACA,UAAMG,SAAS,GAAGC,IAAI,CAACC,GAAL,OAAAD,IAAI,sCAAQF,SAAS,CAACI,GAAV,CAAc,UAACC,KAAD;AAAA,eAAWC,QAAQ,CAACD,KAAK,CAACE,EAAP,CAAnB;AAAA,OAAd,CAAR,UAAsD,CAAtD,GAAJ,IAAgE,CAAlF;AAEA,UAAMC,YAAY,GAAG;AACnBD,QAAAA,EAAE,YAAKN,SAAS,GAAG,CAAjB,CADiB;AAEnBQ,QAAAA,MAAM,EAAE,CAFW;AAGnBC,QAAAA,KAAK,EAAE,CAHY;AAInBC,QAAAA,CAAC,EAAEZ,CAAC,CAACa,GAAF,CAAMC,MAJU;AAKnBC,QAAAA,CAAC,EAAEf,CAAC,CAACa,GAAF,CAAMG,MALU;AAMnBC,QAAAA,KAAK,EAAE,YANY;AAOnBC,QAAAA,KAAK,EAAEjB,SAAS,CAACkB;AAPE,OAArB;AAUAlB,MAAAA,SAAS,CAACmB,IAAV,CAAeX,YAAf;AAEA,aAAO;AACLV,QAAAA,MAAM,EAAEE,SADH;AAELoB,QAAAA,SAAS,EAAE,IAFN;AAGLC,QAAAA,gBAAgB,EAAEb,YAAY,CAACD;AAH1B,OAAP;AAKD;;;WAED,0BAAwBe,KAAxB,EAA+BC,KAA/B,EAAsC;AACpC,UAAMC,iBAAiB,GAAGF,KAAK,CAACxB,MAAN,CAAa2B,SAAb,CAAuB,UAACpB,KAAD;AAAA,eAAWA,KAAK,CAACE,EAAN,KAAae,KAAK,CAACD,gBAA9B;AAAA,OAAvB,CAA1B;;AAEA,UAAIG,iBAAiB,KAAK,CAAC,CAA3B,EAA8B;AAC5B,YAAME,YAAY,GAAGJ,KAAK,CAACxB,MAAN,CAAa0B,iBAAb,CAArB,CAD4B,CAG5B;;AACA,YAAIE,YAAY,CAAChB,KAAb,GAAqB,CAArB,IAA0BgB,YAAY,CAACjB,MAAb,GAAsB,CAApD,EAAuD;AACrD,iDACKa,KADL;AAEEF,YAAAA,SAAS,EAAE,KAFb;AAGEO,YAAAA,WAAW,EAAE,KAHf;AAIEN,YAAAA,gBAAgB,EAAEO;AAJpB;AAMD,SAPD,MAOO;AACL,iDACKN,KADL;AAEEF,YAAAA,SAAS,EAAE,KAFb;AAGEO,YAAAA,WAAW,EAAE,KAHf;AAIEN,YAAAA,gBAAgB,EAAEO,SAJpB;AAKE9B,YAAAA,MAAM,EAAEwB,KAAK,CAACxB,MAAN,CAAa+B,MAAb,CAAoB,UAACxB,KAAD;AAAA,qBAAWA,KAAK,CAACE,EAAN,KAAae,KAAK,CAACD,gBAA9B;AAAA,aAApB;AALV;AAOD;AACF,OAvBmC,CAyBpC;;;AACA,6CACKC,KADL;AAEEF,QAAAA,SAAS,EAAE,KAFb;AAGEO,QAAAA,WAAW,EAAE,KAHf;AAIEN,QAAAA,gBAAgB,EAAEO;AAJpB;AAMD;;;WAED,yBAAuBN,KAAvB,EAA8BvB,CAA9B,EAAiC;AAC/B,UAAQqB,SAAR,GAAgDE,KAAhD,CAAQF,SAAR;AAAA,UAAmBC,gBAAnB,GAAgDC,KAAhD,CAAmBD,gBAAnB;AAAA,UAAqCvB,MAArC,GAAgDwB,KAAhD,CAAqCxB,MAArC;;AAEA,UAAIsB,SAAJ,EAAe;AACb,YAAMU,UAAU,uCAAOhC,MAAP,CAAhB;AACA,YAAMiC,kBAAkB,GAAGD,UAAU,CAACL,SAAX,CAAqB,UAACpB,KAAD;AAAA,iBAAWA,KAAK,CAACE,EAAN,KAAac,gBAAxB;AAAA,SAArB,CAA3B;;AAEA,YAAIU,kBAAkB,KAAK,CAAC,CAA5B,EAA+B;AAC7B,cAAMC,aAAa,GAAGF,UAAU,CAACC,kBAAD,CAAhC;AAEAC,UAAAA,aAAa,CAACtB,KAAd,GAAsBX,CAAC,CAACa,GAAF,CAAMC,MAAN,GAAemB,aAAa,CAACrB,CAAnD;AACAqB,UAAAA,aAAa,CAACvB,MAAd,GAAuBV,CAAC,CAACa,GAAF,CAAMG,MAAN,GAAeiB,aAAa,CAAClB,CAApD;AAEA,iBAAO;AACLhB,YAAAA,MAAM,EAAEgC;AADH,WAAP;AAGD;AACF;;AAED,aAAOR,KAAP;AACD","sourcesContent":["export default class RectangleShape {\n static create(shapes, e) {\n const newShapes = [...shapes];\n const highestId = Math.max(...newShapes.map((shape) => parseInt(shape.id)), 0) || 0;\n\n const newRectangle = {\n id: `${highestId + 1}`,\n height: 0,\n width: 0,\n x: e.evt.layerX,\n y: e.evt.layerY,\n group: 'rectangles',\n index: newShapes.length,\n };\n\n newShapes.push(newRectangle);\n\n return {\n shapes: newShapes,\n isDrawing: true,\n isDrawingShapeId: newRectangle.id,\n };\n }\n\n static finalizeCreation(state, props) {\n const currentShapeIndex = state.shapes.findIndex((shape) => shape.id === state.isDrawingShapeId);\n\n if (currentShapeIndex !== -1) {\n const currentShape = state.shapes[currentShapeIndex];\n\n // Check if the shape is a valid rectangle (has more than 0 width and height) before finalizing\n if (currentShape.width > 0 && currentShape.height > 0) {\n return {\n ...state,\n isDrawing: false,\n stateShapes: false,\n isDrawingShapeId: undefined,\n };\n } else {\n return {\n ...state,\n isDrawing: false,\n stateShapes: false,\n isDrawingShapeId: undefined,\n shapes: state.shapes.filter((shape) => shape.id !== state.isDrawingShapeId),\n };\n }\n }\n\n // Return current state if not drawing a rectangle\n return {\n ...state,\n isDrawing: false,\n stateShapes: false,\n isDrawingShapeId: undefined,\n };\n }\n\n static handleMouseMove(state, e) {\n const { isDrawing, isDrawingShapeId, shapes } = state;\n\n if (isDrawing) {\n const tempShapes = [...shapes];\n const resizingShapeIndex = tempShapes.findIndex((shape) => shape.id === isDrawingShapeId);\n\n if (resizingShapeIndex !== -1) {\n const resizingShape = tempShapes[resizingShapeIndex];\n\n resizingShape.width = e.evt.layerX - resizingShape.x;\n resizingShape.height = e.evt.layerY - resizingShape.y;\n\n return {\n shapes: tempShapes,\n };\n }\n }\n\n return state;\n }\n}\n"],"file":"rectagle.js"}
@@ -1,68 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports["default"] = void 0;
9
-
10
- var _react = _interopRequireDefault(require("react"));
11
-
12
- var _propTypes = _interopRequireDefault(require("prop-types"));
13
-
14
- var _index = require("@material-ui/core/styles/index");
15
-
16
- var _button = _interopRequireDefault(require("./button"));
17
-
18
- var UploadControl = function UploadControl(_ref) {
19
- var classNameButton = _ref.classNameButton,
20
- classNameSection = _ref.classNameSection,
21
- classes = _ref.classes,
22
- label = _ref.label,
23
- onInputClick = _ref.onInputClick,
24
- onUploadImage = _ref.onUploadImage,
25
- setRef = _ref.setRef;
26
- return /*#__PURE__*/_react["default"].createElement("div", {
27
- className: classNameSection
28
- }, /*#__PURE__*/_react["default"].createElement(_button["default"], {
29
- className: classNameButton,
30
- label: label,
31
- onClick: onInputClick
32
- }), /*#__PURE__*/_react["default"].createElement("input", {
33
- accept: "image/*",
34
- className: classes.input,
35
- onChange: onUploadImage,
36
- ref: function ref(_ref2) {
37
- setRef(_ref2);
38
- },
39
- type: "file"
40
- }));
41
- };
42
-
43
- var styles = function styles() {
44
- return {
45
- input: {
46
- display: 'none'
47
- }
48
- };
49
- };
50
-
51
- UploadControl.propTypes = {
52
- classes: _propTypes["default"].object.isRequired,
53
- classNameButton: _propTypes["default"].string,
54
- classNameSection: _propTypes["default"].string,
55
- label: _propTypes["default"].string.isRequired,
56
- onInputClick: _propTypes["default"].func.isRequired,
57
- onUploadImage: _propTypes["default"].func.isRequired,
58
- setRef: _propTypes["default"].func.isRequired
59
- };
60
- UploadControl.defaultProps = {
61
- classNameButton: '',
62
- classNameSection: ''
63
- };
64
-
65
- var _default = (0, _index.withStyles)(styles)(UploadControl);
66
-
67
- exports["default"] = _default;
68
- //# sourceMappingURL=upload-control.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/upload-control.jsx"],"names":["UploadControl","classNameButton","classNameSection","classes","label","onInputClick","onUploadImage","setRef","input","ref","styles","display","propTypes","PropTypes","object","isRequired","string","func","defaultProps"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AAEA;;AAEA,IAAMA,aAAa,GAAG,SAAhBA,aAAgB;AAAA,MAAGC,eAAH,QAAGA,eAAH;AAAA,MAAoBC,gBAApB,QAAoBA,gBAApB;AAAA,MAAsCC,OAAtC,QAAsCA,OAAtC;AAAA,MAA+CC,KAA/C,QAA+CA,KAA/C;AAAA,MAAsDC,YAAtD,QAAsDA,YAAtD;AAAA,MAAoEC,aAApE,QAAoEA,aAApE;AAAA,MAAmFC,MAAnF,QAAmFA,MAAnF;AAAA,sBACpB;AAAK,IAAA,SAAS,EAAEL;AAAhB,kBACE,gCAAC,kBAAD;AAAQ,IAAA,SAAS,EAAED,eAAnB;AAAoC,IAAA,KAAK,EAAEG,KAA3C;AAAkD,IAAA,OAAO,EAAEC;AAA3D,IADF,eAEE;AACE,IAAA,MAAM,EAAC,SADT;AAEE,IAAA,SAAS,EAAEF,OAAO,CAACK,KAFrB;AAGE,IAAA,QAAQ,EAAEF,aAHZ;AAIE,IAAA,GAAG,EAAE,aAACG,KAAD,EAAS;AACZF,MAAAA,MAAM,CAACE,KAAD,CAAN;AACD,KANH;AAOE,IAAA,IAAI,EAAC;AAPP,IAFF,CADoB;AAAA,CAAtB;;AAeA,IAAMC,MAAM,GAAG,SAATA,MAAS;AAAA,SAAO;AACpBF,IAAAA,KAAK,EAAE;AACLG,MAAAA,OAAO,EAAE;AADJ;AADa,GAAP;AAAA,CAAf;;AAMAX,aAAa,CAACY,SAAd,GAA0B;AACxBT,EAAAA,OAAO,EAAEU,sBAAUC,MAAV,CAAiBC,UADF;AAExBd,EAAAA,eAAe,EAAEY,sBAAUG,MAFH;AAGxBd,EAAAA,gBAAgB,EAAEW,sBAAUG,MAHJ;AAIxBZ,EAAAA,KAAK,EAAES,sBAAUG,MAAV,CAAiBD,UAJA;AAKxBV,EAAAA,YAAY,EAAEQ,sBAAUI,IAAV,CAAeF,UALL;AAMxBT,EAAAA,aAAa,EAAEO,sBAAUI,IAAV,CAAeF,UANN;AAOxBR,EAAAA,MAAM,EAAEM,sBAAUI,IAAV,CAAeF;AAPC,CAA1B;AAUAf,aAAa,CAACkB,YAAd,GAA6B;AAC3BjB,EAAAA,eAAe,EAAE,EADU;AAE3BC,EAAAA,gBAAgB,EAAE;AAFS,CAA7B;;eAKe,uBAAWQ,MAAX,EAAmBV,aAAnB,C","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles/index';\n\nimport Button from './button';\n\nconst UploadControl = ({ classNameButton, classNameSection, classes, label, onInputClick, onUploadImage, setRef }) => (\n <div className={classNameSection}>\n <Button className={classNameButton} label={label} onClick={onInputClick} />\n <input\n accept=\"image/*\"\n className={classes.input}\n onChange={onUploadImage}\n ref={(ref) => {\n setRef(ref);\n }}\n type=\"file\"\n />\n </div>\n);\n\nconst styles = () => ({\n input: {\n display: 'none',\n },\n});\n\nUploadControl.propTypes = {\n classes: PropTypes.object.isRequired,\n classNameButton: PropTypes.string,\n classNameSection: PropTypes.string,\n label: PropTypes.string.isRequired,\n onInputClick: PropTypes.func.isRequired,\n onUploadImage: PropTypes.func.isRequired,\n setRef: PropTypes.func.isRequired,\n};\n\nUploadControl.defaultProps = {\n classNameButton: '',\n classNameSection: '',\n};\n\nexport default withStyles(styles)(UploadControl);\n"],"file":"upload-control.js"}
@@ -1,237 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.updateImageDimensions = exports.isPointInsidePolygon = exports.groupShapes = exports.getUpdatedShapes = exports.getUpdatedRectangle = exports.getUpdatedPlygon = 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
- var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
17
-
18
- var _excluded = ["group"];
19
-
20
- 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; }
21
-
22
- 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; }
23
-
24
- var updateImageDimensions = function updateImageDimensions(initialDim, nextDim, keepAspectRatio, resizeType) {
25
- // if we want to keep image aspect ratio
26
- if (keepAspectRatio) {
27
- var imageAspectRatio = initialDim.width / initialDim.height;
28
-
29
- if (resizeType === 'height') {
30
- // if we want to change image height => we update the width accordingly
31
- return {
32
- width: nextDim.height * imageAspectRatio,
33
- height: nextDim.height
34
- };
35
- } // if we want to change image width => we update the height accordingly
36
-
37
-
38
- return {
39
- width: nextDim.width,
40
- height: nextDim.width / imageAspectRatio
41
- };
42
- } // if we don't want to keep aspect ratio, we just update both values
43
-
44
-
45
- return {
46
- width: nextDim.width,
47
- height: nextDim.height
48
- };
49
- }; // referenceInitialValue = the initial value of the Stage
50
- // referenceNextValue = the next value of the Stage
51
- // currentValue = the value that has to be re-sized influenced by the changes that were made on the Stage
52
-
53
-
54
- exports.updateImageDimensions = updateImageDimensions;
55
-
56
- var getDelta = function getDelta(referenceInitialValue, referenceNextValue, currentValue) {
57
- return referenceNextValue / referenceInitialValue * currentValue;
58
- };
59
-
60
- var getUpdatedRectangle = function getUpdatedRectangle(initialDim, nextDim, shape) {
61
- return _objectSpread(_objectSpread({}, shape), {}, {
62
- width: getDelta(initialDim.width, nextDim.width, shape.width),
63
- height: getDelta(initialDim.height, nextDim.height, shape.height),
64
- x: getDelta(initialDim.width, nextDim.width, shape.x),
65
- y: getDelta(initialDim.height, nextDim.height, shape.y)
66
- });
67
- };
68
-
69
- exports.getUpdatedRectangle = getUpdatedRectangle;
70
-
71
- var getUpdatedCircles = function getUpdatedCircles(initialDim, nextDim, shape) {
72
- return _objectSpread(_objectSpread({}, shape), {}, {
73
- radius: getDelta(initialDim.radius, nextDim.radius, shape.radius),
74
- x: getDelta(initialDim.width, nextDim.width, shape.x),
75
- y: getDelta(initialDim.height, nextDim.height, shape.y)
76
- });
77
- };
78
-
79
- var getUpdatedPlygon = function getUpdatedPlygon(initialDim, nextDim, shape) {
80
- return _objectSpread(_objectSpread({}, shape), {}, {
81
- points: shape.points.map(function (point) {
82
- return {
83
- x: getDelta(initialDim.width, nextDim.width, point.x),
84
- y: getDelta(initialDim.height, nextDim.height, point.y)
85
- };
86
- })
87
- });
88
- }; // initialDim = the initial dimensions: { width, height } of the Stage
89
- // nextDim = the next dimensions: { width, height } of the Stage
90
- // shapes = array of shapes that have to be re-sized and re-positioned
91
-
92
-
93
- exports.getUpdatedPlygon = getUpdatedPlygon;
94
-
95
- var getUpdatedShapes = function getUpdatedShapes(initialDim, nextDim, shapes) {
96
- return shapes.map(function (shape) {
97
- if (shape.group === 'rectangles') {
98
- return getUpdatedRectangle(initialDim, nextDim, shape);
99
- }
100
-
101
- if (shape.group === 'polygons') {
102
- return getUpdatedPlygon(initialDim, nextDim, shape);
103
- }
104
-
105
- if (shape.group === 'circles') {
106
- return getUpdatedCircles(initialDim, nextDim, shape);
107
- }
108
- });
109
- }; // converts shapes map to shapes array
110
- // example:
111
- // from: { rectangles: [r1], polygons: [p1, p2]}
112
- // to: [{ ...r1, group: 'rectangles' }, { ...p1, group: 'polygons' }, { ...p2, group: 'polygons' }]
113
- // if a shape has index defined, keep it, otherwise initialize it
114
- // index is used for the UNDO function
115
-
116
-
117
- exports.getUpdatedShapes = getUpdatedShapes;
118
-
119
- var getAllShapes = function getAllShapes(shapesMap) {
120
- shapesMap = shapesMap || {};
121
- var shapesArray = [];
122
- var shapesKeys = Object.keys(shapesMap);
123
- return shapesKeys.length ? shapesKeys.reduce(function (acc, currentShapeKey) {
124
- return acc.concat(shapesMap[currentShapeKey] ? shapesMap[currentShapeKey].map(function (shape, index) {
125
- return _objectSpread(_objectSpread({}, shape), {}, {
126
- group: currentShapeKey,
127
- index: shape.index || acc.length + index
128
- });
129
- }) : []);
130
- }, shapesArray) : shapesArray;
131
- }; // converts shapes array to shapes map
132
- // is the reverse of getAllShapes function
133
- // example:
134
- // from: [{ ...r1, group: 'rectangles' }, { ...p1, group: 'polygons' }, { ...p2, group: 'polygons' }]
135
- // to: { rectangles: [r1], polygons: [p1, p2]}
136
-
137
-
138
- exports.getAllShapes = getAllShapes;
139
-
140
- var groupShapes = function groupShapes(shapesArray) {
141
- shapesArray = shapesArray || [];
142
- var shapesMap = {
143
- rectangles: [],
144
- polygons: [],
145
- circles: []
146
- };
147
-
148
- if (shapesArray.length) {
149
- return shapesArray.reduce(function (acc, _ref) {
150
- var group = _ref.group,
151
- shapeProps = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
152
- acc[group] = [].concat((0, _toConsumableArray2["default"])(acc[group] || []), [shapeProps]);
153
- return acc;
154
- }, shapesMap);
155
- }
156
-
157
- return (0, _cloneDeep["default"])(shapesMap);
158
- };
159
-
160
- exports.groupShapes = groupShapes;
161
-
162
- var isPointInsidePolygon = function isPointInsidePolygon(polygon, x, y) {
163
- var inside = false;
164
-
165
- if (!polygon || polygon.length <= 0) {
166
- return inside;
167
- }
168
-
169
- for (var i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {
170
- var xi = polygon[i].x;
171
- var yi = polygon[i].y;
172
- var xj = polygon[j].x;
173
- var yj = polygon[j].y;
174
- var intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;
175
-
176
- if (intersect) {
177
- inside = !inside;
178
- }
179
- }
180
-
181
- return inside;
182
- };
183
-
184
- exports.isPointInsidePolygon = isPointInsidePolygon;
185
-
186
- var calculate = function calculate(polygonPoints) {
187
- if (!polygonPoints || polygonPoints.length <= 0) {
188
- return {
189
- x: 0,
190
- y: 0
191
- };
192
- }
193
-
194
- var xPoints = polygonPoints.map(function (point) {
195
- return point.x;
196
- });
197
- var yPoints = polygonPoints.map(function (point) {
198
- return point.y;
199
- });
200
- var minX = Math.min.apply(Math, (0, _toConsumableArray2["default"])(xPoints));
201
- var minY = Math.min.apply(Math, (0, _toConsumableArray2["default"])(yPoints));
202
- var maxX = Math.max.apply(Math, (0, _toConsumableArray2["default"])(xPoints));
203
- var maxY = Math.max.apply(Math, (0, _toConsumableArray2["default"])(yPoints)); // Find a suitable position for the text element within the polygon
204
-
205
- var textX, textY;
206
-
207
- for (var x = minX; x <= maxX - 20; x++) {
208
- for (var y = maxY - 20; y > minY; y--) {
209
- // Check if the text element's position (x, y) is within the polygon
210
- if (isPointInsidePolygon(polygonPoints, x, y)) {
211
- textX = x - 10;
212
- textY = y;
213
- break;
214
- }
215
- }
216
- }
217
-
218
- return {
219
- x: textX,
220
- y: textY
221
- };
222
- };
223
-
224
- exports.calculate = calculate;
225
-
226
- var generateValidationMessage = function generateValidationMessage(config) {
227
- var minShapes = config.minShapes,
228
- maxShapes = config.maxShapes,
229
- maxSelections = config.maxSelections;
230
- var shapesMessage = "\nThere should be at least ".concat(minShapes, " ") + (maxShapes ? "and at most ".concat(maxShapes, " ") : '') + 'shapes defined.';
231
- var selectionsMessage = '\nThere should be at least 1 ' + (maxSelections ? "and at most ".concat(maxSelections, " ") : '') + 'shape' + (maxSelections ? 's' : '') + ' selected.';
232
- var message = 'Validation requirements:' + shapesMessage + selectionsMessage;
233
- return message;
234
- };
235
-
236
- exports.generateValidationMessage = generateValidationMessage;
237
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
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","getUpdatedPlygon","points","map","point","getUpdatedShapes","shapes","group","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';\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.radius, nextDim.radius, shape.radius),\n x: getDelta(initialDim.width, nextDim.width, shape.x),\n y: getDelta(initialDim.height, nextDim.height, shape.y),\n});\n\nconst getUpdatedPlygon = (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 === 'rectangles') {\n return getUpdatedRectangle(initialDim, nextDim, shape);\n }\n\n if (shape.group === 'polygons') {\n return getUpdatedPlygon(initialDim, nextDim, shape);\n }\n\n if (shape.group === '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 getUpdatedPlygon,\n};\n"],"file":"utils.js"}
@@ -1,33 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports["default"] = void 0;
7
- var _default = {
8
- prompt: '',
9
- toolbarEditorPosition: 'bottom',
10
- imageUrl: '',
11
- shapes: {
12
- rectangles: [],
13
- polygons: [],
14
- circles: []
15
- },
16
- multipleCorrect: true,
17
- partialScoring: false,
18
- dimensions: {
19
- height: 0,
20
- width: 0
21
- },
22
- hotspotColor: 'rgba(137, 183, 244, 0.25)',
23
- hotspotList: ['rgba(137, 183, 244, 0.25)'],
24
- outlineColor: 'blue',
25
- outlineList: ['blue'],
26
- promptEnabled: true,
27
- rationaleEnabled: true,
28
- teacherInstructionsEnabled: true,
29
- studentInstructionsEnabled: true,
30
- strokeWidth: 5
31
- };
32
- exports["default"] = _default;
33
- //# sourceMappingURL=defaults.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/defaults.js"],"names":["prompt","toolbarEditorPosition","imageUrl","shapes","rectangles","polygons","circles","multipleCorrect","partialScoring","dimensions","height","width","hotspotColor","hotspotList","outlineColor","outlineList","promptEnabled","rationaleEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","strokeWidth"],"mappings":";;;;;;eAAe;AACbA,EAAAA,MAAM,EAAE,EADK;AAEbC,EAAAA,qBAAqB,EAAE,QAFV;AAGbC,EAAAA,QAAQ,EAAE,EAHG;AAIbC,EAAAA,MAAM,EAAE;AACNC,IAAAA,UAAU,EAAE,EADN;AAENC,IAAAA,QAAQ,EAAE,EAFJ;AAGNC,IAAAA,OAAO,EAAE;AAHH,GAJK;AASbC,EAAAA,eAAe,EAAE,IATJ;AAUbC,EAAAA,cAAc,EAAE,KAVH;AAWbC,EAAAA,UAAU,EAAE;AACVC,IAAAA,MAAM,EAAE,CADE;AAEVC,IAAAA,KAAK,EAAE;AAFG,GAXC;AAebC,EAAAA,YAAY,EAAE,2BAfD;AAgBbC,EAAAA,WAAW,EAAE,CAAC,2BAAD,CAhBA;AAiBbC,EAAAA,YAAY,EAAE,MAjBD;AAkBbC,EAAAA,WAAW,EAAE,CAAC,MAAD,CAlBA;AAmBbC,EAAAA,aAAa,EAAE,IAnBF;AAoBbC,EAAAA,gBAAgB,EAAE,IApBL;AAqBbC,EAAAA,0BAA0B,EAAE,IArBf;AAsBbC,EAAAA,0BAA0B,EAAE,IAtBf;AAuBbC,EAAAA,WAAW,EAAE;AAvBA,C","sourcesContent":["export default {\n prompt: '',\n toolbarEditorPosition: 'bottom',\n imageUrl: '',\n shapes: {\n rectangles: [],\n polygons: [],\n circles: [],\n },\n multipleCorrect: true,\n partialScoring: false,\n dimensions: {\n height: 0,\n width: 0,\n },\n hotspotColor: 'rgba(137, 183, 244, 0.25)',\n hotspotList: ['rgba(137, 183, 244, 0.25)'],\n outlineColor: 'blue',\n outlineList: ['blue'],\n promptEnabled: true,\n rationaleEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n strokeWidth: 5,\n};\n"],"file":"defaults.js"}