@pie-element/hotspot 7.9.10-next.8 → 7.10.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 CHANGED
@@ -3,6 +3,24 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [7.10.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/hotspot@7.9.9...@pie-element/hotspot@7.10.0) (2025-06-27)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * test - update ImageComponent import path in DeleteWidget test ([8fc4dfd](https://github.com/pie-framework/pie-elements/commit/8fc4dfd6e275a258a995150430a91887e2fe588c))
12
+ * tests. Update ImageComponent imports in DeleteWidget, Polygon, and Rectangle tests ([55080fc](https://github.com/pie-framework/pie-elements/commit/55080fc37644785a15710edf856a4a9611a7b888))
13
+ * update pie-lib/pie-toolbox PD-5064 ([f61face](https://github.com/pie-framework/pie-elements/commit/f61face71312f0a4e46a16a646aa616b9d4ed8eb))
14
+
15
+
16
+ ### Features
17
+
18
+ * **hotspot:** update ImageComponent imports and create new image-konva component PD-5064 ([2d25656](https://github.com/pie-framework/pie-elements/commit/2d25656ad3d543b2748587f8652f4062d3fdc050))
19
+
20
+
21
+
22
+
23
+
6
24
  ## [7.9.9](https://github.com/pie-framework/pie-elements/compare/@pie-element/hotspot@7.9.8...@pie-element/hotspot@7.9.9) (2025-06-25)
7
25
 
8
26
 
@@ -3,6 +3,24 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [7.5.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/hotspot-configure@7.4.9...@pie-element/hotspot-configure@7.5.0) (2025-06-27)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * test - update ImageComponent import path in DeleteWidget test ([8fc4dfd](https://github.com/pie-framework/pie-elements/commit/8fc4dfd6e275a258a995150430a91887e2fe588c))
12
+ * tests. Update ImageComponent imports in DeleteWidget, Polygon, and Rectangle tests ([55080fc](https://github.com/pie-framework/pie-elements/commit/55080fc37644785a15710edf856a4a9611a7b888))
13
+ * update pie-lib/pie-toolbox PD-5064 ([f61face](https://github.com/pie-framework/pie-elements/commit/f61face71312f0a4e46a16a646aa616b9d4ed8eb))
14
+
15
+
16
+ ### Features
17
+
18
+ * **hotspot:** update ImageComponent imports and create new image-konva component PD-5064 ([2d25656](https://github.com/pie-framework/pie-elements/commit/2d25656ad3d543b2748587f8652f4062d3fdc050))
19
+
20
+
21
+
22
+
23
+
6
24
  ## [7.4.9](https://github.com/pie-framework/pie-elements/compare/@pie-element/hotspot-configure@7.4.8...@pie-element/hotspot-configure@7.4.9) (2025-06-25)
7
25
 
8
26
 
@@ -15,7 +15,7 @@ var _reactKonva = require("react-konva");
15
15
 
16
16
  var _icons = require("./icons");
17
17
 
18
- var _icons2 = require("@pie-lib/pie-toolbox/icons");
18
+ var _imageKonva = _interopRequireDefault(require("./image-konva"));
19
19
 
20
20
  var _utils = require("./utils");
21
21
 
@@ -51,9 +51,7 @@ var DeleteWidget = function DeleteWidget(_ref) {
51
51
  onClick: function onClick() {
52
52
  return handleWidgetClick(id);
53
53
  }
54
- }, /*#__PURE__*/_react["default"].createElement(_icons2.ImageComponent, {
55
- width: 20,
56
- height: 20,
54
+ }, /*#__PURE__*/_react["default"].createElement(_imageKonva["default"], {
57
55
  x: positionX,
58
56
  y: positionY,
59
57
  src: _icons.faDelete
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/DeleteWidget.jsx"],"names":["DeleteWidget","height","id","width","x","y","points","isCircle","radius","handleWidgetClick","positionX","positionY","offset","calculated","faDelete","propTypes","PropTypes","string","isRequired","number","func","bool","arrayOf","shape"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA,IAAMA,YAAY,GAAG,SAAfA,YAAe,OAA8E;AAAA,MAA3EC,MAA2E,QAA3EA,MAA2E;AAAA,MAAnEC,EAAmE,QAAnEA,EAAmE;AAAA,MAA/DC,KAA+D,QAA/DA,KAA+D;AAAA,MAAxDC,CAAwD,QAAxDA,CAAwD;AAAA,MAArDC,CAAqD,QAArDA,CAAqD;AAAA,MAAlDC,MAAkD,QAAlDA,MAAkD;AAAA,MAA1CC,QAA0C,QAA1CA,QAA0C;AAAA,MAAhCC,MAAgC,QAAhCA,MAAgC;AAAA,MAAxBC,iBAAwB,QAAxBA,iBAAwB;AACjG,MAAIC,SAAJ,EAAeC,SAAf;AACA,MAAMC,MAAM,GAAG,EAAf;;AAEA,MAAIL,QAAJ,EAAc;AACZ;AACAG,IAAAA,SAAS,GAAGN,CAAC,GAAGI,MAAJ,GAAaI,MAAzB;AACAD,IAAAA,SAAS,GAAGN,CAAZ;AACD,GAJD,MAIO,IAAIC,MAAJ,EAAY;AACjB;AACA,QAAMO,UAAU,GAAG,sBAAUP,MAAV,CAAnB;AACAI,IAAAA,SAAS,GAAGG,UAAU,CAACT,CAAvB;AACAO,IAAAA,SAAS,GAAGE,UAAU,CAACR,CAAvB;AACD,GALM,MAKA;AACL;AACAK,IAAAA,SAAS,GAAGN,CAAC,GAAGD,KAAJ,GAAYS,MAAxB;AACAD,IAAAA,SAAS,GAAGN,CAAC,GAAGJ,MAAJ,GAAaW,MAAzB;AACD;;AAED,sBACE,gCAAC,iBAAD;AAAO,IAAA,OAAO,EAAE;AAAA,aAAMH,iBAAiB,CAACP,EAAD,CAAvB;AAAA;AAAhB,kBACE,gCAAC,sBAAD;AAAgB,IAAA,KAAK,EAAE,EAAvB;AAA2B,IAAA,MAAM,EAAE,EAAnC;AAAuC,IAAA,CAAC,EAAEQ,SAA1C;AAAqD,IAAA,CAAC,EAAEC,SAAxD;AAAmE,IAAA,GAAG,EAAEG;AAAxE,IADF,CADF;AAKD,CAxBD;;AA0BAd,YAAY,CAACe,SAAb,GAAyB;AACvBb,EAAAA,EAAE,EAAEc,sBAAUC,MAAV,CAAiBC,UADE;AAEvBjB,EAAAA,MAAM,EAAEe,sBAAUG,MAFK;AAGvBhB,EAAAA,KAAK,EAAEa,sBAAUG,MAHM;AAIvBf,EAAAA,CAAC,EAAEY,sBAAUG,MAAV,CAAiBD,UAJG;AAKvBb,EAAAA,CAAC,EAAEW,sBAAUG,MAAV,CAAiBD,UALG;AAMvBT,EAAAA,iBAAiB,EAAEO,sBAAUI,IAAV,CAAeF,UANX;AAOvBV,EAAAA,MAAM,EAAEQ,sBAAUG,MAPK;AAQvBZ,EAAAA,QAAQ,EAAES,sBAAUK,IARG;AASvBf,EAAAA,MAAM,EAAEU,sBAAUM,OAAV,CACNN,sBAAUO,KAAV,CAAgB;AACdnB,IAAAA,CAAC,EAAEY,sBAAUG,MADC;AAEdd,IAAAA,CAAC,EAAEW,sBAAUG;AAFC,GAAhB,CADM;AATe,CAAzB;eAiBenB,Y","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Group } from 'react-konva';\nimport { faDelete } from './icons';\nimport { ImageComponent } from '@pie-lib/pie-toolbox/icons';\nimport { calculate } from './utils';\n\nconst DeleteWidget = ({ height, id, width, x, y, points, isCircle, radius, handleWidgetClick }) => {\n let positionX, positionY;\n const offset = 20;\n\n if (isCircle) {\n // For circles, position the delete icon above the circle\n positionX = x + radius - offset;\n positionY = y;\n } else if (points) {\n // For polygons, compute position based on points\n const calculated = calculate(points);\n positionX = calculated.x;\n positionY = calculated.y;\n } else {\n // For rectangles\n positionX = x + width - offset;\n positionY = y + height - offset;\n }\n\n return (\n <Group onClick={() => handleWidgetClick(id)}>\n <ImageComponent width={20} height={20} x={positionX} y={positionY} src={faDelete} />\n </Group>\n );\n};\n\nDeleteWidget.propTypes = {\n id: PropTypes.string.isRequired,\n height: PropTypes.number,\n width: PropTypes.number,\n x: PropTypes.number.isRequired,\n y: PropTypes.number.isRequired,\n handleWidgetClick: PropTypes.func.isRequired,\n radius: PropTypes.number,\n isCircle: PropTypes.bool,\n points: PropTypes.arrayOf(\n PropTypes.shape({\n x: PropTypes.number,\n y: PropTypes.number,\n }),\n ),\n};\n\nexport default DeleteWidget;\n"],"file":"DeleteWidget.js"}
1
+ {"version":3,"sources":["../src/DeleteWidget.jsx"],"names":["DeleteWidget","height","id","width","x","y","points","isCircle","radius","handleWidgetClick","positionX","positionY","offset","calculated","faDelete","propTypes","PropTypes","string","isRequired","number","func","bool","arrayOf","shape"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA,IAAMA,YAAY,GAAG,SAAfA,YAAe,OAA8E;AAAA,MAA3EC,MAA2E,QAA3EA,MAA2E;AAAA,MAAnEC,EAAmE,QAAnEA,EAAmE;AAAA,MAA/DC,KAA+D,QAA/DA,KAA+D;AAAA,MAAxDC,CAAwD,QAAxDA,CAAwD;AAAA,MAArDC,CAAqD,QAArDA,CAAqD;AAAA,MAAlDC,MAAkD,QAAlDA,MAAkD;AAAA,MAA1CC,QAA0C,QAA1CA,QAA0C;AAAA,MAAhCC,MAAgC,QAAhCA,MAAgC;AAAA,MAAxBC,iBAAwB,QAAxBA,iBAAwB;AACjG,MAAIC,SAAJ,EAAeC,SAAf;AACA,MAAMC,MAAM,GAAG,EAAf;;AAEA,MAAIL,QAAJ,EAAc;AACZ;AACAG,IAAAA,SAAS,GAAGN,CAAC,GAAGI,MAAJ,GAAaI,MAAzB;AACAD,IAAAA,SAAS,GAAGN,CAAZ;AACD,GAJD,MAIO,IAAIC,MAAJ,EAAY;AACjB;AACA,QAAMO,UAAU,GAAG,sBAAUP,MAAV,CAAnB;AACAI,IAAAA,SAAS,GAAGG,UAAU,CAACT,CAAvB;AACAO,IAAAA,SAAS,GAAGE,UAAU,CAACR,CAAvB;AACD,GALM,MAKA;AACL;AACAK,IAAAA,SAAS,GAAGN,CAAC,GAAGD,KAAJ,GAAYS,MAAxB;AACAD,IAAAA,SAAS,GAAGN,CAAC,GAAGJ,MAAJ,GAAaW,MAAzB;AACD;;AAED,sBACE,gCAAC,iBAAD;AAAO,IAAA,OAAO,EAAE;AAAA,aAAMH,iBAAiB,CAACP,EAAD,CAAvB;AAAA;AAAhB,kBACE,gCAAC,sBAAD;AAAgB,IAAA,CAAC,EAAEQ,SAAnB;AAA8B,IAAA,CAAC,EAAEC,SAAjC;AAA4C,IAAA,GAAG,EAAEG;AAAjD,IADF,CADF;AAKD,CAxBD;;AA0BAd,YAAY,CAACe,SAAb,GAAyB;AACvBb,EAAAA,EAAE,EAAEc,sBAAUC,MAAV,CAAiBC,UADE;AAEvBjB,EAAAA,MAAM,EAAEe,sBAAUG,MAFK;AAGvBhB,EAAAA,KAAK,EAAEa,sBAAUG,MAHM;AAIvBf,EAAAA,CAAC,EAAEY,sBAAUG,MAAV,CAAiBD,UAJG;AAKvBb,EAAAA,CAAC,EAAEW,sBAAUG,MAAV,CAAiBD,UALG;AAMvBT,EAAAA,iBAAiB,EAAEO,sBAAUI,IAAV,CAAeF,UANX;AAOvBV,EAAAA,MAAM,EAAEQ,sBAAUG,MAPK;AAQvBZ,EAAAA,QAAQ,EAAES,sBAAUK,IARG;AASvBf,EAAAA,MAAM,EAAEU,sBAAUM,OAAV,CACNN,sBAAUO,KAAV,CAAgB;AACdnB,IAAAA,CAAC,EAAEY,sBAAUG,MADC;AAEdd,IAAAA,CAAC,EAAEW,sBAAUG;AAFC,GAAhB,CADM;AATe,CAAzB;eAiBenB,Y","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Group } from 'react-konva';\nimport { faDelete } from './icons';\nimport ImageComponent from './image-konva';\nimport { calculate } from './utils';\n\nconst DeleteWidget = ({ height, id, width, x, y, points, isCircle, radius, handleWidgetClick }) => {\n let positionX, positionY;\n const offset = 20;\n\n if (isCircle) {\n // For circles, position the delete icon above the circle\n positionX = x + radius - offset;\n positionY = y;\n } else if (points) {\n // For polygons, compute position based on points\n const calculated = calculate(points);\n positionX = calculated.x;\n positionY = calculated.y;\n } else {\n // For rectangles\n positionX = x + width - offset;\n positionY = y + height - offset;\n }\n\n return (\n <Group onClick={() => handleWidgetClick(id)}>\n <ImageComponent x={positionX} y={positionY} src={faDelete} />\n </Group>\n );\n};\n\nDeleteWidget.propTypes = {\n id: PropTypes.string.isRequired,\n height: PropTypes.number,\n width: PropTypes.number,\n x: PropTypes.number.isRequired,\n y: PropTypes.number.isRequired,\n handleWidgetClick: PropTypes.func.isRequired,\n radius: PropTypes.number,\n isCircle: PropTypes.bool,\n points: PropTypes.arrayOf(\n PropTypes.shape({\n x: PropTypes.number,\n y: PropTypes.number,\n }),\n ),\n};\n\nexport default DeleteWidget;\n"],"file":"DeleteWidget.js"}
@@ -0,0 +1,106 @@
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 _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
+
12
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
+
14
+ var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
15
+
16
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
17
+
18
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
19
+
20
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
21
+
22
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
23
+
24
+ var _react = _interopRequireDefault(require("react"));
25
+
26
+ var _propTypes = _interopRequireDefault(require("prop-types"));
27
+
28
+ var _reactKonva = require("react-konva");
29
+
30
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
31
+
32
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
33
+
34
+ var ImageComponent = /*#__PURE__*/function (_React$Component) {
35
+ (0, _inherits2["default"])(ImageComponent, _React$Component);
36
+
37
+ var _super = _createSuper(ImageComponent);
38
+
39
+ function ImageComponent(props) {
40
+ var _this;
41
+
42
+ (0, _classCallCheck2["default"])(this, ImageComponent);
43
+ _this = _super.call(this, props);
44
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleLoad", function () {
45
+ _this.setState({
46
+ image: _this.image
47
+ });
48
+ });
49
+ _this.state = {
50
+ image: null
51
+ };
52
+ return _this;
53
+ }
54
+
55
+ (0, _createClass2["default"])(ImageComponent, [{
56
+ key: "componentDidMount",
57
+ value: function componentDidMount() {
58
+ this.loadImage();
59
+ }
60
+ }, {
61
+ key: "componentDidUpdate",
62
+ value: function componentDidUpdate(oldProps) {
63
+ if (oldProps.src !== this.props.src) {
64
+ this.loadImage();
65
+ }
66
+ }
67
+ }, {
68
+ key: "componentWillUnmount",
69
+ value: function componentWillUnmount() {
70
+ this.image.removeEventListener('load', this.handleLoad);
71
+ }
72
+ }, {
73
+ key: "loadImage",
74
+ value: function loadImage() {
75
+ var src = this.props.src;
76
+ this.image = new window.Image();
77
+ this.image.src = src;
78
+ this.image.addEventListener('load', this.handleLoad);
79
+ }
80
+ }, {
81
+ key: "render",
82
+ value: function render() {
83
+ var _this$props = this.props,
84
+ x = _this$props.x,
85
+ y = _this$props.y;
86
+ var image = this.state.image;
87
+ return /*#__PURE__*/_react["default"].createElement(_reactKonva.Image, {
88
+ width: 20,
89
+ height: 20,
90
+ x: x,
91
+ y: y,
92
+ image: image
93
+ });
94
+ }
95
+ }]);
96
+ return ImageComponent;
97
+ }(_react["default"].Component);
98
+
99
+ ImageComponent.propTypes = {
100
+ src: _propTypes["default"].string.isRequired,
101
+ x: _propTypes["default"].number.isRequired,
102
+ y: _propTypes["default"].number.isRequired
103
+ };
104
+ var _default = ImageComponent;
105
+ exports["default"] = _default;
106
+ //# sourceMappingURL=image-konva.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/image-konva.jsx"],"names":["ImageComponent","props","setState","image","state","loadImage","oldProps","src","removeEventListener","handleLoad","window","Image","addEventListener","x","y","React","Component","propTypes","PropTypes","string","isRequired","number"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;;;;;IAEMA,c;;;;;AACJ,0BAAYC,KAAZ,EAAmB;AAAA;;AAAA;AACjB,8BAAMA,KAAN;AADiB,mGA6BN,YAAM;AACjB,YAAKC,QAAL,CAAc;AACZC,QAAAA,KAAK,EAAE,MAAKA;AADA,OAAd;AAGD,KAjCkB;AAEjB,UAAKC,KAAL,GAAa;AACXD,MAAAA,KAAK,EAAE;AADI,KAAb;AAFiB;AAKlB;;;;WAED,6BAAoB;AAClB,WAAKE,SAAL;AACD;;;WAED,4BAAmBC,QAAnB,EAA6B;AAC3B,UAAIA,QAAQ,CAACC,GAAT,KAAiB,KAAKN,KAAL,CAAWM,GAAhC,EAAqC;AACnC,aAAKF,SAAL;AACD;AACF;;;WAED,gCAAuB;AACrB,WAAKF,KAAL,CAAWK,mBAAX,CAA+B,MAA/B,EAAuC,KAAKC,UAA5C;AACD;;;WAED,qBAAY;AACV,UAAQF,GAAR,GAAgB,KAAKN,KAArB,CAAQM,GAAR;AAEA,WAAKJ,KAAL,GAAa,IAAIO,MAAM,CAACC,KAAX,EAAb;AACA,WAAKR,KAAL,CAAWI,GAAX,GAAiBA,GAAjB;AACA,WAAKJ,KAAL,CAAWS,gBAAX,CAA4B,MAA5B,EAAoC,KAAKH,UAAzC;AACD;;;WAQD,kBAAS;AACP,wBAAiB,KAAKR,KAAtB;AAAA,UAAQY,CAAR,eAAQA,CAAR;AAAA,UAAWC,CAAX,eAAWA,CAAX;AACA,UAAQX,KAAR,GAAkB,KAAKC,KAAvB,CAAQD,KAAR;AAEA,0BACE,gCAAC,iBAAD;AACE,QAAA,KAAK,EAAE,EADT;AAEE,QAAA,MAAM,EAAE,EAFV;AAGE,QAAA,CAAC,EAAEU,CAHL;AAIE,QAAA,CAAC,EAAEC,CAJL;AAKE,QAAA,KAAK,EAAEX;AALT,QADF;AASD;;;EAjD0BY,kBAAMC,S;;AAoDnChB,cAAc,CAACiB,SAAf,GAA2B;AACzBV,EAAAA,GAAG,EAAEW,sBAAUC,MAAV,CAAiBC,UADG;AAEzBP,EAAAA,CAAC,EAAEK,sBAAUG,MAAV,CAAiBD,UAFK;AAGzBN,EAAAA,CAAC,EAAEI,sBAAUG,MAAV,CAAiBD;AAHK,CAA3B;eAMepB,c","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Image } from 'react-konva';\n\nclass ImageComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n image: null,\n };\n }\n\n componentDidMount() {\n this.loadImage();\n }\n\n componentDidUpdate(oldProps) {\n if (oldProps.src !== this.props.src) {\n this.loadImage();\n }\n }\n\n componentWillUnmount() {\n this.image.removeEventListener('load', this.handleLoad);\n }\n\n loadImage() {\n const { src } = this.props;\n\n this.image = new window.Image();\n this.image.src = src;\n this.image.addEventListener('load', this.handleLoad);\n }\n\n handleLoad = () => {\n this.setState({\n image: this.image,\n });\n };\n\n render() {\n const { x, y } = this.props;\n const { image } = this.state;\n\n return (\n <Image\n width={20}\n height={20}\n x={x}\n y={y}\n image={image}\n />\n );\n }\n}\n\nImageComponent.propTypes = {\n src: PropTypes.string.isRequired,\n x: PropTypes.number.isRequired,\n y: PropTypes.number.isRequired,\n};\n\nexport default ImageComponent;\n"],"file":"image-konva.js"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pie-element/hotspot-configure",
3
3
  "private": true,
4
- "version": "7.4.9",
4
+ "version": "7.5.0",
5
5
  "description": "",
6
6
  "main": "lib/index.js",
7
7
  "module": "src/index.js",
@@ -10,7 +10,7 @@
10
10
  "@material-ui/core": "^3.9.2",
11
11
  "@material-ui/icons": "^3.0.2",
12
12
  "@pie-framework/pie-configure-events": "^1.3.0",
13
- "@pie-lib/pie-toolbox": "2.18.1",
13
+ "@pie-lib/pie-toolbox": "2.19.0",
14
14
  "classnames": "^2.2.6",
15
15
  "debug": "^3.1.0",
16
16
  "konva": "^3.2.4",
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import { Group } from 'react-konva';
4
4
  import { faDelete } from './icons';
5
- import { ImageComponent } from '@pie-lib/pie-toolbox/icons';
5
+ import ImageComponent from './image-konva';
6
6
  import { calculate } from './utils';
7
7
 
8
8
  const DeleteWidget = ({ height, id, width, x, y, points, isCircle, radius, handleWidgetClick }) => {
@@ -26,7 +26,7 @@ const DeleteWidget = ({ height, id, width, x, y, points, isCircle, radius, handl
26
26
 
27
27
  return (
28
28
  <Group onClick={() => handleWidgetClick(id)}>
29
- <ImageComponent width={20} height={20} x={positionX} y={positionY} src={faDelete} />
29
+ <ImageComponent x={positionX} y={positionY} src={faDelete} />
30
30
  </Group>
31
31
  );
32
32
  };
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { shallow } from 'enzyme';
3
3
  import DeleteWidget from '../DeleteWidget'; // Adjust the import path as needed
4
- import { ImageComponent } from '@pie-lib/pie-toolbox/icons';
4
+ import ImageComponent from '../image-konva';
5
5
 
6
6
  describe('DeleteWidget', () => {
7
7
  it('computes positionX and positionY correctly without points', () => {
@@ -0,0 +1,63 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { Image } from 'react-konva';
4
+
5
+ class ImageComponent extends React.Component {
6
+ constructor(props) {
7
+ super(props);
8
+ this.state = {
9
+ image: null,
10
+ };
11
+ }
12
+
13
+ componentDidMount() {
14
+ this.loadImage();
15
+ }
16
+
17
+ componentDidUpdate(oldProps) {
18
+ if (oldProps.src !== this.props.src) {
19
+ this.loadImage();
20
+ }
21
+ }
22
+
23
+ componentWillUnmount() {
24
+ this.image.removeEventListener('load', this.handleLoad);
25
+ }
26
+
27
+ loadImage() {
28
+ const { src } = this.props;
29
+
30
+ this.image = new window.Image();
31
+ this.image.src = src;
32
+ this.image.addEventListener('load', this.handleLoad);
33
+ }
34
+
35
+ handleLoad = () => {
36
+ this.setState({
37
+ image: this.image,
38
+ });
39
+ };
40
+
41
+ render() {
42
+ const { x, y } = this.props;
43
+ const { image } = this.state;
44
+
45
+ return (
46
+ <Image
47
+ width={20}
48
+ height={20}
49
+ x={x}
50
+ y={y}
51
+ image={image}
52
+ />
53
+ );
54
+ }
55
+ }
56
+
57
+ ImageComponent.propTypes = {
58
+ src: PropTypes.string.isRequired,
59
+ x: PropTypes.number.isRequired,
60
+ y: PropTypes.number.isRequired,
61
+ };
62
+
63
+ export default ImageComponent;
@@ -3,6 +3,17 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [5.5.10](https://github.com/pie-framework/pie-elements/compare/@pie-element/hotspot-controller@5.5.9...@pie-element/hotspot-controller@5.5.10) (2025-06-27)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * update pie-lib/pie-toolbox PD-5064 ([f61face](https://github.com/pie-framework/pie-elements/commit/f61face71312f0a4e46a16a646aa616b9d4ed8eb))
12
+
13
+
14
+
15
+
16
+
6
17
  ## [5.5.9](https://github.com/pie-framework/pie-elements/compare/@pie-element/hotspot-controller@5.5.8...@pie-element/hotspot-controller@5.5.9) (2025-06-25)
7
18
 
8
19
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pie-element/hotspot-controller",
3
3
  "private": true,
4
- "version": "5.5.9",
4
+ "version": "5.5.10",
5
5
  "description": "",
6
6
  "scripts": {
7
7
  "test": "echo \"Error: no test specified\" && exit 1"
@@ -11,7 +11,7 @@
11
11
  "main": "lib/index.js",
12
12
  "module": "src/index.js",
13
13
  "dependencies": {
14
- "@pie-lib/pie-toolbox": "2.18.1",
14
+ "@pie-lib/pie-toolbox": "2.19.0",
15
15
  "debug": "^4.1.1",
16
16
  "lodash": "^4.17.15"
17
17
  }
@@ -29,9 +29,9 @@ var _reactKonva = require("react-konva");
29
29
 
30
30
  var _styles = require("@material-ui/core/styles");
31
31
 
32
- var _icons = require("@pie-lib/pie-toolbox/icons");
32
+ var _imageKonvaTooltip = _interopRequireDefault(require("./image-konva-tooltip"));
33
33
 
34
- var _icons2 = require("./icons");
34
+ var _icons = require("./icons");
35
35
 
36
36
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
37
37
 
@@ -123,17 +123,17 @@ var CircleComponent = /*#__PURE__*/function (_React$Component) {
123
123
 
124
124
  if (showCorrectEnabled) {
125
125
  if (selected && isCorrect || !selected && !isCorrect) {
126
- iconSrc = _icons2.faCorrect;
126
+ iconSrc = _icons.faCorrect;
127
127
  }
128
128
  } else {
129
129
  if (selected) {
130
130
  if (isCorrect) {
131
- iconSrc = _icons2.faCorrect;
131
+ iconSrc = _icons.faCorrect;
132
132
  } else {
133
- iconSrc = _icons2.faWrong;
133
+ iconSrc = _icons.faWrong;
134
134
  }
135
135
  } else if (!isCorrect) {
136
- iconSrc = _icons2.faWrong;
136
+ iconSrc = _icons.faWrong;
137
137
  }
138
138
  }
139
139
 
@@ -161,7 +161,7 @@ var CircleComponent = /*#__PURE__*/function (_React$Component) {
161
161
  onMouseEnter: this.handleMouseEnter,
162
162
  x: x,
163
163
  y: y
164
- }), isEvaluateMode && iconSrc ? /*#__PURE__*/_react["default"].createElement(_icons.ImageComponent, {
164
+ }), isEvaluateMode && iconSrc ? /*#__PURE__*/_react["default"].createElement(_imageKonvaTooltip["default"], {
165
165
  src: iconSrc,
166
166
  x: iconX,
167
167
  y: iconY,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hotspot/circle.jsx"],"names":["CircleComponent","props","e","onClick","id","selected","disabled","cancelBubble","selector","document","body","style","cursor","setState","hovered","isCorrect","markAsCorrect","outlineColor","showCorrectEnabled","strokeWidth","state","classes","radius","hotspotColor","isEvaluateMode","hoverOutlineColor","x","y","evaluateText","scale","selectedHotspotColor","outlineColorParsed","getEvaluateOutlineColor","outlineWidth","getOutlineWidth","iconX","iconY","iconSrc","faCorrect","faWrong","useHoveredStyle","base","handleClick","handleMouseLeave","handleMouseEnter","React","Component","styles","opacity","position","propTypes","PropTypes","object","isRequired","number","string","oneOfType","bool","func","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Circle, Group, Rect } from 'react-konva';\nimport { withStyles } from '@material-ui/core/styles';\nimport { ImageComponent } from '@pie-lib/pie-toolbox/icons';\nimport { faCorrect, faWrong } from './icons';\n\nclass CircleComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n hovered: false,\n };\n }\n\n handleClick = (e) => {\n const { onClick, id, selected, disabled } = this.props;\n\n if (!disabled) {\n e.cancelBubble = true;\n onClick({ id, selected: !selected, selector: 'Mouse' });\n }\n };\n\n handleMouseEnter = () => {\n const { disabled } = this.props;\n\n if (!disabled) {\n document.body.style.cursor = 'pointer';\n }\n this.setState({ hovered: true });\n };\n\n handleMouseLeave = () => {\n document.body.style.cursor = 'default';\n this.setState({ hovered: false });\n };\n\n getEvaluateOutlineColor = (isCorrect, markAsCorrect, outlineColor) =>\n markAsCorrect ? 'green' : isCorrect ? outlineColor : 'red';\n\n getOutlineWidth = (showCorrectEnabled, selected, markAsCorrect, strokeWidth) =>\n markAsCorrect || (!markAsCorrect && !showCorrectEnabled && selected) ? strokeWidth : 0;\n\n render() {\n const {\n classes,\n radius,\n hotspotColor,\n isCorrect,\n isEvaluateMode,\n hoverOutlineColor,\n outlineColor,\n selected,\n x,\n y,\n evaluateText,\n strokeWidth,\n scale,\n markAsCorrect,\n selectedHotspotColor,\n showCorrectEnabled,\n } = this.props;\n\n const { hovered } = this.state;\n\n const outlineColorParsed = isEvaluateMode\n ? this.getEvaluateOutlineColor(isCorrect, markAsCorrect, outlineColor)\n : outlineColor;\n\n const outlineWidth = this.getOutlineWidth(showCorrectEnabled, selected, markAsCorrect, strokeWidth);\n\n const iconX = x - 10;\n const iconY = y - 10; // Adjust position for the icon\n\n let iconSrc;\n if (showCorrectEnabled) {\n if ((selected && isCorrect) || (!selected && !isCorrect)) {\n iconSrc = faCorrect;\n }\n } else {\n if (selected) {\n if (isCorrect) {\n iconSrc = faCorrect;\n } else {\n iconSrc = faWrong;\n }\n } else if (!isCorrect) {\n iconSrc = faWrong;\n }\n }\n\n const useHoveredStyle = hovered && hoverOutlineColor;\n\n return (\n <Group scaleX={scale} scaleY={scale}>\n {useHoveredStyle && (\n <Rect\n x={x - radius}\n y={y - radius}\n width={radius * 2}\n height={radius * 2}\n stroke={selected ? 'transparent' : hoverOutlineColor}\n strokeWidth={strokeWidth}\n />\n )}\n <Circle\n classes={classes.base}\n radius={radius}\n fill={selected && selectedHotspotColor ? selectedHotspotColor : hotspotColor}\n onClick={this.handleClick}\n onTap={this.handleClick}\n draggable={false}\n stroke={useHoveredStyle && !selected ? 'transparent' : outlineColorParsed}\n strokeWidth={useHoveredStyle && !selected ? 0 : outlineWidth}\n onMouseLeave={this.handleMouseLeave}\n onMouseEnter={this.handleMouseEnter}\n x={x}\n y={y}\n />\n {isEvaluateMode && iconSrc ? <ImageComponent src={iconSrc} x={iconX} y={iconY} tooltip={evaluateText} /> : null}\n </Group>\n );\n }\n}\n\nconst styles = () => ({\n base: {\n cursor: 'pointer',\n opacity: 0.5,\n position: 'relative',\n },\n});\n\nCircleComponent.propTypes = {\n classes: PropTypes.object.isRequired,\n radius: PropTypes.number.isRequired,\n hotspotColor: PropTypes.string.isRequired,\n id: PropTypes.string.isRequired,\n isCorrect: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n isEvaluateMode: PropTypes.bool.isRequired,\n disabled: PropTypes.bool.isRequired,\n hoverOutlineColor: PropTypes.string,\n onClick: PropTypes.func.isRequired,\n outlineColor: PropTypes.string.isRequired,\n selected: PropTypes.bool.isRequired,\n x: PropTypes.number.isRequired,\n y: PropTypes.number.isRequired,\n evaluateText: PropTypes.string,\n strokeWidth: PropTypes.number,\n scale: PropTypes.number,\n selectedHotspotColor: PropTypes.string,\n markAsCorrect: PropTypes.bool.isRequired,\n showCorrectEnabled: PropTypes.bool.isRequired,\n};\n\nCircleComponent.defaultProps = {\n isCorrect: false,\n evaluateText: null,\n strokeWidth: 5,\n scale: 1,\n};\n\nexport default withStyles(styles)(CircleComponent);\n"],"file":"circle.js"}
1
+ {"version":3,"sources":["../../src/hotspot/circle.jsx"],"names":["CircleComponent","props","e","onClick","id","selected","disabled","cancelBubble","selector","document","body","style","cursor","setState","hovered","isCorrect","markAsCorrect","outlineColor","showCorrectEnabled","strokeWidth","state","classes","radius","hotspotColor","isEvaluateMode","hoverOutlineColor","x","y","evaluateText","scale","selectedHotspotColor","outlineColorParsed","getEvaluateOutlineColor","outlineWidth","getOutlineWidth","iconX","iconY","iconSrc","faCorrect","faWrong","useHoveredStyle","base","handleClick","handleMouseLeave","handleMouseEnter","React","Component","styles","opacity","position","propTypes","PropTypes","object","isRequired","number","string","oneOfType","bool","func","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Circle, Group, Rect } from 'react-konva';\nimport { withStyles } from '@material-ui/core/styles';\nimport ImageComponent from './image-konva-tooltip';\nimport { faCorrect, faWrong } from './icons';\n\nclass CircleComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n hovered: false,\n };\n }\n\n handleClick = (e) => {\n const { onClick, id, selected, disabled } = this.props;\n\n if (!disabled) {\n e.cancelBubble = true;\n onClick({ id, selected: !selected, selector: 'Mouse' });\n }\n };\n\n handleMouseEnter = () => {\n const { disabled } = this.props;\n\n if (!disabled) {\n document.body.style.cursor = 'pointer';\n }\n this.setState({ hovered: true });\n };\n\n handleMouseLeave = () => {\n document.body.style.cursor = 'default';\n this.setState({ hovered: false });\n };\n\n getEvaluateOutlineColor = (isCorrect, markAsCorrect, outlineColor) =>\n markAsCorrect ? 'green' : isCorrect ? outlineColor : 'red';\n\n getOutlineWidth = (showCorrectEnabled, selected, markAsCorrect, strokeWidth) =>\n markAsCorrect || (!markAsCorrect && !showCorrectEnabled && selected) ? strokeWidth : 0;\n\n render() {\n const {\n classes,\n radius,\n hotspotColor,\n isCorrect,\n isEvaluateMode,\n hoverOutlineColor,\n outlineColor,\n selected,\n x,\n y,\n evaluateText,\n strokeWidth,\n scale,\n markAsCorrect,\n selectedHotspotColor,\n showCorrectEnabled,\n } = this.props;\n\n const { hovered } = this.state;\n\n const outlineColorParsed = isEvaluateMode\n ? this.getEvaluateOutlineColor(isCorrect, markAsCorrect, outlineColor)\n : outlineColor;\n\n const outlineWidth = this.getOutlineWidth(showCorrectEnabled, selected, markAsCorrect, strokeWidth);\n\n const iconX = x - 10;\n const iconY = y - 10; // Adjust position for the icon\n\n let iconSrc;\n if (showCorrectEnabled) {\n if ((selected && isCorrect) || (!selected && !isCorrect)) {\n iconSrc = faCorrect;\n }\n } else {\n if (selected) {\n if (isCorrect) {\n iconSrc = faCorrect;\n } else {\n iconSrc = faWrong;\n }\n } else if (!isCorrect) {\n iconSrc = faWrong;\n }\n }\n\n const useHoveredStyle = hovered && hoverOutlineColor;\n\n return (\n <Group scaleX={scale} scaleY={scale}>\n {useHoveredStyle && (\n <Rect\n x={x - radius}\n y={y - radius}\n width={radius * 2}\n height={radius * 2}\n stroke={selected ? 'transparent' : hoverOutlineColor}\n strokeWidth={strokeWidth}\n />\n )}\n <Circle\n classes={classes.base}\n radius={radius}\n fill={selected && selectedHotspotColor ? selectedHotspotColor : hotspotColor}\n onClick={this.handleClick}\n onTap={this.handleClick}\n draggable={false}\n stroke={useHoveredStyle && !selected ? 'transparent' : outlineColorParsed}\n strokeWidth={useHoveredStyle && !selected ? 0 : outlineWidth}\n onMouseLeave={this.handleMouseLeave}\n onMouseEnter={this.handleMouseEnter}\n x={x}\n y={y}\n />\n {isEvaluateMode && iconSrc ? <ImageComponent src={iconSrc} x={iconX} y={iconY} tooltip={evaluateText} /> : null}\n </Group>\n );\n }\n}\n\nconst styles = () => ({\n base: {\n cursor: 'pointer',\n opacity: 0.5,\n position: 'relative',\n },\n});\n\nCircleComponent.propTypes = {\n classes: PropTypes.object.isRequired,\n radius: PropTypes.number.isRequired,\n hotspotColor: PropTypes.string.isRequired,\n id: PropTypes.string.isRequired,\n isCorrect: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n isEvaluateMode: PropTypes.bool.isRequired,\n disabled: PropTypes.bool.isRequired,\n hoverOutlineColor: PropTypes.string,\n onClick: PropTypes.func.isRequired,\n outlineColor: PropTypes.string.isRequired,\n selected: PropTypes.bool.isRequired,\n x: PropTypes.number.isRequired,\n y: PropTypes.number.isRequired,\n evaluateText: PropTypes.string,\n strokeWidth: PropTypes.number,\n scale: PropTypes.number,\n selectedHotspotColor: PropTypes.string,\n markAsCorrect: PropTypes.bool.isRequired,\n showCorrectEnabled: PropTypes.bool.isRequired,\n};\n\nCircleComponent.defaultProps = {\n isCorrect: false,\n evaluateText: null,\n strokeWidth: 5,\n scale: 1,\n};\n\nexport default withStyles(styles)(CircleComponent);\n"],"file":"circle.js"}
@@ -0,0 +1,133 @@
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 _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
+
12
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
+
14
+ var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
15
+
16
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
17
+
18
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
19
+
20
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
21
+
22
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
23
+
24
+ var _react = _interopRequireDefault(require("react"));
25
+
26
+ var _propTypes = _interopRequireDefault(require("prop-types"));
27
+
28
+ var _reactKonva = require("react-konva");
29
+
30
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
31
+
32
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
33
+
34
+ var ImageComponent = /*#__PURE__*/function (_React$Component) {
35
+ (0, _inherits2["default"])(ImageComponent, _React$Component);
36
+
37
+ var _super = _createSuper(ImageComponent);
38
+
39
+ function ImageComponent(props) {
40
+ var _this;
41
+
42
+ (0, _classCallCheck2["default"])(this, ImageComponent);
43
+ _this = _super.call(this, props);
44
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleLoad", function () {
45
+ _this.setState({
46
+ image: _this.image
47
+ });
48
+ });
49
+ _this.state = {
50
+ image: null,
51
+ showTooltip: false
52
+ };
53
+ return _this;
54
+ }
55
+
56
+ (0, _createClass2["default"])(ImageComponent, [{
57
+ key: "componentDidMount",
58
+ value: function componentDidMount() {
59
+ this.loadImage();
60
+ }
61
+ }, {
62
+ key: "componentDidUpdate",
63
+ value: function componentDidUpdate(oldProps) {
64
+ if (oldProps.src !== this.props.src) {
65
+ this.loadImage();
66
+ }
67
+ }
68
+ }, {
69
+ key: "componentWillUnmount",
70
+ value: function componentWillUnmount() {
71
+ this.image.removeEventListener('load', this.handleLoad);
72
+ }
73
+ }, {
74
+ key: "loadImage",
75
+ value: function loadImage() {
76
+ var src = this.props.src;
77
+ this.image = new window.Image();
78
+ this.image.src = src;
79
+ this.image.addEventListener('load', this.handleLoad);
80
+ }
81
+ }, {
82
+ key: "render",
83
+ value: function render() {
84
+ var _this2 = this;
85
+
86
+ var _this$props = this.props,
87
+ x = _this$props.x,
88
+ y = _this$props.y,
89
+ tooltip = _this$props.tooltip;
90
+ var _this$state = this.state,
91
+ image = _this$state.image,
92
+ showTooltip = _this$state.showTooltip;
93
+ return /*#__PURE__*/_react["default"].createElement(_reactKonva.Group, null, /*#__PURE__*/_react["default"].createElement(_reactKonva.Image, {
94
+ width: 20,
95
+ height: 20,
96
+ x: x,
97
+ y: y,
98
+ image: image,
99
+ onMouseEnter: function onMouseEnter() {
100
+ return _this2.setState({
101
+ showTooltip: true
102
+ });
103
+ },
104
+ onMouseLeave: function onMouseLeave() {
105
+ return _this2.setState({
106
+ showTooltip: false
107
+ });
108
+ }
109
+ }), showTooltip && tooltip && /*#__PURE__*/_react["default"].createElement(_reactKonva.Label, {
110
+ x: x - 30,
111
+ y: y + 25
112
+ }, /*#__PURE__*/_react["default"].createElement(_reactKonva.Tag, {
113
+ fill: "white",
114
+ cornerRadius: 5,
115
+ opacity: 0.9
116
+ }), /*#__PURE__*/_react["default"].createElement(_reactKonva.Text, {
117
+ text: tooltip,
118
+ padding: 5
119
+ })));
120
+ }
121
+ }]);
122
+ return ImageComponent;
123
+ }(_react["default"].Component);
124
+
125
+ ImageComponent.propTypes = {
126
+ src: _propTypes["default"].string.isRequired,
127
+ x: _propTypes["default"].number.isRequired,
128
+ y: _propTypes["default"].number.isRequired,
129
+ tooltip: _propTypes["default"].string.isRequired
130
+ };
131
+ var _default = ImageComponent;
132
+ exports["default"] = _default;
133
+ //# sourceMappingURL=image-konva-tooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/hotspot/image-konva-tooltip.jsx"],"names":["ImageComponent","props","setState","image","state","showTooltip","loadImage","oldProps","src","removeEventListener","handleLoad","window","Image","addEventListener","x","y","tooltip","React","Component","propTypes","PropTypes","string","isRequired","number"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;;;;;IAEMA,c;;;;;AACJ,0BAAYC,KAAZ,EAAmB;AAAA;;AAAA;AACjB,8BAAMA,KAAN;AADiB,mGA8BN,YAAM;AACjB,YAAKC,QAAL,CAAc;AACZC,QAAAA,KAAK,EAAE,MAAKA;AADA,OAAd;AAGD,KAlCkB;AAEjB,UAAKC,KAAL,GAAa;AACXD,MAAAA,KAAK,EAAE,IADI;AAEXE,MAAAA,WAAW,EAAE;AAFF,KAAb;AAFiB;AAMlB;;;;WAED,6BAAoB;AAClB,WAAKC,SAAL;AACD;;;WAED,4BAAmBC,QAAnB,EAA6B;AAC3B,UAAIA,QAAQ,CAACC,GAAT,KAAiB,KAAKP,KAAL,CAAWO,GAAhC,EAAqC;AACnC,aAAKF,SAAL;AACD;AACF;;;WAED,gCAAuB;AACrB,WAAKH,KAAL,CAAWM,mBAAX,CAA+B,MAA/B,EAAuC,KAAKC,UAA5C;AACD;;;WAED,qBAAY;AACV,UAAQF,GAAR,GAAgB,KAAKP,KAArB,CAAQO,GAAR;AAEA,WAAKL,KAAL,GAAa,IAAIQ,MAAM,CAACC,KAAX,EAAb;AACA,WAAKT,KAAL,CAAWK,GAAX,GAAiBA,GAAjB;AACA,WAAKL,KAAL,CAAWU,gBAAX,CAA4B,MAA5B,EAAoC,KAAKH,UAAzC;AACD;;;WAQD,kBAAS;AAAA;;AACP,wBAA0B,KAAKT,KAA/B;AAAA,UAAQa,CAAR,eAAQA,CAAR;AAAA,UAAWC,CAAX,eAAWA,CAAX;AAAA,UAAcC,OAAd,eAAcA,OAAd;AACA,wBAA+B,KAAKZ,KAApC;AAAA,UAAQD,KAAR,eAAQA,KAAR;AAAA,UAAeE,WAAf,eAAeA,WAAf;AAEA,0BACE,gCAAC,iBAAD,qBACE,gCAAC,iBAAD;AACE,QAAA,KAAK,EAAE,EADT;AAEE,QAAA,MAAM,EAAE,EAFV;AAGE,QAAA,CAAC,EAAES,CAHL;AAIE,QAAA,CAAC,EAAEC,CAJL;AAKE,QAAA,KAAK,EAAEZ,KALT;AAME,QAAA,YAAY,EAAE;AAAA,iBAAM,MAAI,CAACD,QAAL,CAAc;AAAEG,YAAAA,WAAW,EAAE;AAAf,WAAd,CAAN;AAAA,SANhB;AAOE,QAAA,YAAY,EAAE;AAAA,iBAAM,MAAI,CAACH,QAAL,CAAc;AAAEG,YAAAA,WAAW,EAAE;AAAf,WAAd,CAAN;AAAA;AAPhB,QADF,EAWGA,WAAW,IAAIW,OAAf,iBACC,gCAAC,iBAAD;AAAO,QAAA,CAAC,EAAEF,CAAC,GAAG,EAAd;AAAkB,QAAA,CAAC,EAAEC,CAAC,GAAG;AAAzB,sBACE,gCAAC,eAAD;AAAK,QAAA,IAAI,EAAC,OAAV;AAAkB,QAAA,YAAY,EAAE,CAAhC;AAAmC,QAAA,OAAO,EAAE;AAA5C,QADF,eAEE,gCAAC,gBAAD;AAAM,QAAA,IAAI,EAAEC,OAAZ;AAAqB,QAAA,OAAO,EAAE;AAA9B,QAFF,CAZJ,CADF;AAoBD;;;EA7D0BC,kBAAMC,S;;AAgEnClB,cAAc,CAACmB,SAAf,GAA2B;AACzBX,EAAAA,GAAG,EAAEY,sBAAUC,MAAV,CAAiBC,UADG;AAEzBR,EAAAA,CAAC,EAAEM,sBAAUG,MAAV,CAAiBD,UAFK;AAGzBP,EAAAA,CAAC,EAAEK,sBAAUG,MAAV,CAAiBD,UAHK;AAIzBN,EAAAA,OAAO,EAAEI,sBAAUC,MAAV,CAAiBC;AAJD,CAA3B;eAOetB,c","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Group, Image, Text, Tag, Label } from 'react-konva';\n\nclass ImageComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n image: null,\n showTooltip: false,\n };\n }\n\n componentDidMount() {\n this.loadImage();\n }\n\n componentDidUpdate(oldProps) {\n if (oldProps.src !== this.props.src) {\n this.loadImage();\n }\n }\n\n componentWillUnmount() {\n this.image.removeEventListener('load', this.handleLoad);\n }\n\n loadImage() {\n const { src } = this.props;\n\n this.image = new window.Image();\n this.image.src = src;\n this.image.addEventListener('load', this.handleLoad);\n }\n\n handleLoad = () => {\n this.setState({\n image: this.image,\n });\n };\n\n render() {\n const { x, y, tooltip } = this.props;\n const { image, showTooltip } = this.state;\n\n return (\n <Group>\n <Image\n width={20}\n height={20}\n x={x}\n y={y}\n image={image}\n onMouseEnter={() => this.setState({ showTooltip: true })}\n onMouseLeave={() => this.setState({ showTooltip: false })}\n />\n\n {showTooltip && tooltip && (\n <Label x={x - 30} y={y + 25}>\n <Tag fill=\"white\" cornerRadius={5} opacity={0.9} />\n <Text text={tooltip} padding={5} />\n </Label>\n )}\n </Group>\n );\n }\n}\n\nImageComponent.propTypes = {\n src: PropTypes.string.isRequired,\n x: PropTypes.number.isRequired,\n y: PropTypes.number.isRequired,\n tooltip: PropTypes.string.isRequired,\n};\n\nexport default ImageComponent;\n"],"file":"image-konva-tooltip.js"}
@@ -31,9 +31,9 @@ var _reactKonva = require("react-konva");
31
31
 
32
32
  var _styles = require("@material-ui/core/styles");
33
33
 
34
- var _icons = require("@pie-lib/pie-toolbox/icons");
34
+ var _imageKonvaTooltip = _interopRequireDefault(require("./image-konva-tooltip"));
35
35
 
36
- var _icons2 = require("./icons");
36
+ var _icons = require("./icons");
37
37
 
38
38
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
39
39
 
@@ -163,17 +163,17 @@ var PolygonComponent = /*#__PURE__*/function (_React$Component) {
163
163
 
164
164
  if (showCorrectEnabled) {
165
165
  if (selected && isCorrect || !selected && !isCorrect) {
166
- iconSrc = _icons2.faCorrect;
166
+ iconSrc = _icons.faCorrect;
167
167
  }
168
168
  } else {
169
169
  if (selected) {
170
170
  if (isCorrect) {
171
- iconSrc = _icons2.faCorrect;
171
+ iconSrc = _icons.faCorrect;
172
172
  } else {
173
- iconSrc = _icons2.faWrong;
173
+ iconSrc = _icons.faWrong;
174
174
  }
175
175
  } else if (!isCorrect) {
176
- iconSrc = _icons2.faWrong;
176
+ iconSrc = _icons.faWrong;
177
177
  }
178
178
  }
179
179
 
@@ -216,7 +216,7 @@ var PolygonComponent = /*#__PURE__*/function (_React$Component) {
216
216
  strokeWidth: useHoveredStyle && !selected ? 0 : outlineWidth,
217
217
  onMouseLeave: this.handleMouseLeave,
218
218
  onMouseEnter: this.handleMouseEnter
219
- }), isEvaluateMode && iconSrc ? /*#__PURE__*/_react["default"].createElement(_icons.ImageComponent, {
219
+ }), isEvaluateMode && iconSrc ? /*#__PURE__*/_react["default"].createElement(_imageKonvaTooltip["default"], {
220
220
  src: iconSrc,
221
221
  x: iconX,
222
222
  y: iconY,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hotspot/polygon.jsx"],"names":["PolygonComponent","props","points","x","map","y","minX","Math","min","apply","maxX","max","minY","maxY","parsedPoints","forEach","push","e","onClick","id","selected","disabled","cancelBubble","selector","document","body","style","cursor","setState","hovered","isCorrect","markAsCorrect","outlineColor","showCorrectEnabled","strokeWidth","state","classes","hotspotColor","isEvaluateMode","hoverOutlineColor","evaluateText","scale","selectedHotspotColor","outlineColorParsed","getEvaluateOutlineColor","outlineWidth","getOutlineWidth","pointsParsed","parsePointsForKonva","center","getPolygonCenter","iconX","iconY","iconSrc","faCorrect","faWrong","useHoveredStyle","xValues","filter","_","index","yValues","rectX","rectY","rectWidth","rectHeight","base","handleClick","handleMouseLeave","handleMouseEnter","React","Component","styles","opacity","position","propTypes","PropTypes","object","isRequired","string","bool","func","array","number","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Line, Group, Rect } from 'react-konva';\nimport { withStyles } from '@material-ui/core/styles';\nimport { ImageComponent } from '@pie-lib/pie-toolbox/icons';\nimport { faCorrect, faWrong } from './icons';\n\nclass PolygonComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n hovered: false,\n };\n }\n\n getPolygonCenter = (points) => {\n const x = points.map(({ x }) => x);\n const y = points.map(({ y }) => y);\n const minX = Math.min.apply(null, x);\n const maxX = Math.max.apply(null, x);\n const minY = Math.min.apply(null, y);\n const maxY = Math.max.apply(null, y);\n return [(minX + maxX) / 2, (minY + maxY) / 2];\n };\n\n parsePointsForKonva = (points) => {\n const parsedPoints = [];\n points.forEach(({ x, y }) => {\n parsedPoints.push(x);\n parsedPoints.push(y);\n });\n return parsedPoints;\n };\n\n handleClick = (e) => {\n const { onClick, id, selected, disabled } = this.props;\n\n if (!disabled) {\n e.cancelBubble = true;\n onClick({ id, selected: !selected, selector: 'Mouse' });\n }\n };\n\n handleMouseEnter = () => {\n const { disabled } = this.props;\n\n if (!disabled) {\n document.body.style.cursor = 'pointer';\n }\n this.setState({ hovered: true });\n };\n\n handleMouseLeave = () => {\n document.body.style.cursor = 'default';\n this.setState({ hovered: false });\n };\n\n getEvaluateOutlineColor = (isCorrect, markAsCorrect, outlineColor) =>\n markAsCorrect ? 'green' : isCorrect ? outlineColor : 'red';\n\n getOutlineWidth = (showCorrectEnabled, selected, markAsCorrect, strokeWidth) =>\n markAsCorrect || (!markAsCorrect && !showCorrectEnabled && selected) ? strokeWidth : 0;\n\n render() {\n const {\n classes,\n hotspotColor,\n isCorrect,\n isEvaluateMode,\n hoverOutlineColor,\n outlineColor,\n selected,\n points,\n evaluateText,\n strokeWidth,\n scale,\n markAsCorrect,\n selectedHotspotColor,\n showCorrectEnabled,\n } = this.props;\n\n const { hovered } = this.state;\n\n const outlineColorParsed = isEvaluateMode\n ? this.getEvaluateOutlineColor(isCorrect, markAsCorrect, outlineColor)\n : outlineColor;\n const outlineWidth = this.getOutlineWidth(showCorrectEnabled, selected, markAsCorrect, strokeWidth);\n\n const pointsParsed = this.parsePointsForKonva(points);\n const center = this.getPolygonCenter(points);\n const iconX = center[0];\n const iconY = center[1];\n\n // \"Show Correct Answer\" Enabled:\n // - Correctly Selected: white checkmark in green circle\n // - Correctly Not Selected: none\n // - Incorrectly Selected: none\n // - Incorrectly Not Selected: white checkmark in green circle\n // \"Show Correct Answer\" Disabled:\n // - Correctly Selected:\n // - white checkmark in green circle\n // - heavy outline, as on “Gather”\n // - Correctly Not Selected: none\n // - Incorrectly Selected:\n // - white \"X\" in red circle\n // - heavy outline around the selection should appear in red\n // - Incorrectly Not Selected: white \"X\" in red circle\n let iconSrc;\n\n if (showCorrectEnabled) {\n if ((selected && isCorrect) || (!selected && !isCorrect)) {\n iconSrc = faCorrect;\n }\n } else {\n if (selected) {\n if (isCorrect) {\n iconSrc = faCorrect;\n } else {\n iconSrc = faWrong;\n }\n } else if (!isCorrect) {\n iconSrc = faWrong;\n }\n }\n const useHoveredStyle = hovered && hoverOutlineColor;\n\n const xValues = pointsParsed.filter((_, index) => index % 2 === 0); // Even indices are x-coordinates\n const yValues = pointsParsed.filter((_, index) => index % 2 !== 0); // Odd indices are y-coordinates\n\n const minX = Math.min(...xValues);\n const maxX = Math.max(...xValues);\n const minY = Math.min(...yValues);\n const maxY = Math.max(...yValues);\n\n const rectX = minX;\n const rectY = minY;\n const rectWidth = maxX - minX;\n const rectHeight = maxY - minY;\n\n return (\n <Group scaleX={scale} scaleY={scale}>\n {useHoveredStyle && (\n <Rect\n x={rectX}\n y={rectY}\n width={rectWidth}\n height={rectHeight}\n stroke={selected ? 'transparent' : hoverOutlineColor}\n strokeWidth={strokeWidth}\n />\n )}\n <Line\n points={pointsParsed}\n closed={true}\n classes={classes.base}\n fill={selected && selectedHotspotColor? selectedHotspotColor : hotspotColor}\n onClick={this.handleClick}\n onTap={this.handleClick}\n draggable={false}\n stroke={useHoveredStyle && !selected ? 'transparent' : outlineColorParsed}\n strokeWidth={useHoveredStyle && !selected ? 0 : outlineWidth}\n onMouseLeave={this.handleMouseLeave}\n onMouseEnter={this.handleMouseEnter}\n />\n {isEvaluateMode && iconSrc ? <ImageComponent src={iconSrc} x={iconX} y={iconY} tooltip={evaluateText} /> : null}\n </Group>\n );\n }\n}\n\nconst styles = () => ({\n base: {\n cursor: 'pointer',\n opacity: 0.5,\n position: 'relative',\n },\n});\n\nPolygonComponent.propTypes = {\n classes: PropTypes.object.isRequired,\n hotspotColor: PropTypes.string.isRequired,\n id: PropTypes.string.isRequired,\n isCorrect: PropTypes.bool.isRequired,\n isEvaluateMode: PropTypes.bool.isRequired,\n hoverOutlineColor: PropTypes.string,\n disabled: PropTypes.bool.isRequired,\n onClick: PropTypes.func.isRequired,\n outlineColor: PropTypes.string.isRequired,\n points: PropTypes.array.isRequired,\n selected: PropTypes.bool.isRequired,\n evaluateText: PropTypes.string,\n selectedHotspotColor: PropTypes.string,\n strokeWidth: PropTypes.number,\n scale: PropTypes.number,\n markAsCorrect: PropTypes.bool.isRequired,\n showCorrectEnabled: PropTypes.bool.isRequired,\n};\n\nPolygonComponent.defaultProps = {\n evaluateText: null,\n strokeWidth: 5,\n scale: 1,\n};\n\nexport default withStyles(styles)(PolygonComponent);\n"],"file":"polygon.js"}
1
+ {"version":3,"sources":["../../src/hotspot/polygon.jsx"],"names":["PolygonComponent","props","points","x","map","y","minX","Math","min","apply","maxX","max","minY","maxY","parsedPoints","forEach","push","e","onClick","id","selected","disabled","cancelBubble","selector","document","body","style","cursor","setState","hovered","isCorrect","markAsCorrect","outlineColor","showCorrectEnabled","strokeWidth","state","classes","hotspotColor","isEvaluateMode","hoverOutlineColor","evaluateText","scale","selectedHotspotColor","outlineColorParsed","getEvaluateOutlineColor","outlineWidth","getOutlineWidth","pointsParsed","parsePointsForKonva","center","getPolygonCenter","iconX","iconY","iconSrc","faCorrect","faWrong","useHoveredStyle","xValues","filter","_","index","yValues","rectX","rectY","rectWidth","rectHeight","base","handleClick","handleMouseLeave","handleMouseEnter","React","Component","styles","opacity","position","propTypes","PropTypes","object","isRequired","string","bool","func","array","number","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Line, Group, Rect } from 'react-konva';\nimport { withStyles } from '@material-ui/core/styles';\nimport ImageComponent from './image-konva-tooltip';\nimport { faCorrect, faWrong } from './icons';\n\nclass PolygonComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n hovered: false,\n };\n }\n\n getPolygonCenter = (points) => {\n const x = points.map(({ x }) => x);\n const y = points.map(({ y }) => y);\n const minX = Math.min.apply(null, x);\n const maxX = Math.max.apply(null, x);\n const minY = Math.min.apply(null, y);\n const maxY = Math.max.apply(null, y);\n return [(minX + maxX) / 2, (minY + maxY) / 2];\n };\n\n parsePointsForKonva = (points) => {\n const parsedPoints = [];\n points.forEach(({ x, y }) => {\n parsedPoints.push(x);\n parsedPoints.push(y);\n });\n return parsedPoints;\n };\n\n handleClick = (e) => {\n const { onClick, id, selected, disabled } = this.props;\n\n if (!disabled) {\n e.cancelBubble = true;\n onClick({ id, selected: !selected, selector: 'Mouse' });\n }\n };\n\n handleMouseEnter = () => {\n const { disabled } = this.props;\n\n if (!disabled) {\n document.body.style.cursor = 'pointer';\n }\n this.setState({ hovered: true });\n };\n\n handleMouseLeave = () => {\n document.body.style.cursor = 'default';\n this.setState({ hovered: false });\n };\n\n getEvaluateOutlineColor = (isCorrect, markAsCorrect, outlineColor) =>\n markAsCorrect ? 'green' : isCorrect ? outlineColor : 'red';\n\n getOutlineWidth = (showCorrectEnabled, selected, markAsCorrect, strokeWidth) =>\n markAsCorrect || (!markAsCorrect && !showCorrectEnabled && selected) ? strokeWidth : 0;\n\n render() {\n const {\n classes,\n hotspotColor,\n isCorrect,\n isEvaluateMode,\n hoverOutlineColor,\n outlineColor,\n selected,\n points,\n evaluateText,\n strokeWidth,\n scale,\n markAsCorrect,\n selectedHotspotColor,\n showCorrectEnabled,\n } = this.props;\n\n const { hovered } = this.state;\n\n const outlineColorParsed = isEvaluateMode\n ? this.getEvaluateOutlineColor(isCorrect, markAsCorrect, outlineColor)\n : outlineColor;\n const outlineWidth = this.getOutlineWidth(showCorrectEnabled, selected, markAsCorrect, strokeWidth);\n\n const pointsParsed = this.parsePointsForKonva(points);\n const center = this.getPolygonCenter(points);\n const iconX = center[0];\n const iconY = center[1];\n\n // \"Show Correct Answer\" Enabled:\n // - Correctly Selected: white checkmark in green circle\n // - Correctly Not Selected: none\n // - Incorrectly Selected: none\n // - Incorrectly Not Selected: white checkmark in green circle\n // \"Show Correct Answer\" Disabled:\n // - Correctly Selected:\n // - white checkmark in green circle\n // - heavy outline, as on “Gather”\n // - Correctly Not Selected: none\n // - Incorrectly Selected:\n // - white \"X\" in red circle\n // - heavy outline around the selection should appear in red\n // - Incorrectly Not Selected: white \"X\" in red circle\n let iconSrc;\n\n if (showCorrectEnabled) {\n if ((selected && isCorrect) || (!selected && !isCorrect)) {\n iconSrc = faCorrect;\n }\n } else {\n if (selected) {\n if (isCorrect) {\n iconSrc = faCorrect;\n } else {\n iconSrc = faWrong;\n }\n } else if (!isCorrect) {\n iconSrc = faWrong;\n }\n }\n const useHoveredStyle = hovered && hoverOutlineColor;\n\n const xValues = pointsParsed.filter((_, index) => index % 2 === 0); // Even indices are x-coordinates\n const yValues = pointsParsed.filter((_, index) => index % 2 !== 0); // Odd indices are y-coordinates\n\n const minX = Math.min(...xValues);\n const maxX = Math.max(...xValues);\n const minY = Math.min(...yValues);\n const maxY = Math.max(...yValues);\n\n const rectX = minX;\n const rectY = minY;\n const rectWidth = maxX - minX;\n const rectHeight = maxY - minY;\n\n return (\n <Group scaleX={scale} scaleY={scale}>\n {useHoveredStyle && (\n <Rect\n x={rectX}\n y={rectY}\n width={rectWidth}\n height={rectHeight}\n stroke={selected ? 'transparent' : hoverOutlineColor}\n strokeWidth={strokeWidth}\n />\n )}\n <Line\n points={pointsParsed}\n closed={true}\n classes={classes.base}\n fill={selected && selectedHotspotColor? selectedHotspotColor : hotspotColor}\n onClick={this.handleClick}\n onTap={this.handleClick}\n draggable={false}\n stroke={useHoveredStyle && !selected ? 'transparent' : outlineColorParsed}\n strokeWidth={useHoveredStyle && !selected ? 0 : outlineWidth}\n onMouseLeave={this.handleMouseLeave}\n onMouseEnter={this.handleMouseEnter}\n />\n {isEvaluateMode && iconSrc ? <ImageComponent src={iconSrc} x={iconX} y={iconY} tooltip={evaluateText} /> : null}\n </Group>\n );\n }\n}\n\nconst styles = () => ({\n base: {\n cursor: 'pointer',\n opacity: 0.5,\n position: 'relative',\n },\n});\n\nPolygonComponent.propTypes = {\n classes: PropTypes.object.isRequired,\n hotspotColor: PropTypes.string.isRequired,\n id: PropTypes.string.isRequired,\n isCorrect: PropTypes.bool.isRequired,\n isEvaluateMode: PropTypes.bool.isRequired,\n hoverOutlineColor: PropTypes.string,\n disabled: PropTypes.bool.isRequired,\n onClick: PropTypes.func.isRequired,\n outlineColor: PropTypes.string.isRequired,\n points: PropTypes.array.isRequired,\n selected: PropTypes.bool.isRequired,\n evaluateText: PropTypes.string,\n selectedHotspotColor: PropTypes.string,\n strokeWidth: PropTypes.number,\n scale: PropTypes.number,\n markAsCorrect: PropTypes.bool.isRequired,\n showCorrectEnabled: PropTypes.bool.isRequired,\n};\n\nPolygonComponent.defaultProps = {\n evaluateText: null,\n strokeWidth: 5,\n scale: 1,\n};\n\nexport default withStyles(styles)(PolygonComponent);\n"],"file":"polygon.js"}
@@ -29,9 +29,9 @@ var _reactKonva = require("react-konva");
29
29
 
30
30
  var _styles = require("@material-ui/core/styles");
31
31
 
32
- var _icons = require("@pie-lib/pie-toolbox/icons");
32
+ var _imageKonvaTooltip = _interopRequireDefault(require("./image-konva-tooltip"));
33
33
 
34
- var _icons2 = require("./icons");
34
+ var _icons = require("./icons");
35
35
 
36
36
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
37
37
 
@@ -136,17 +136,17 @@ var RectComponent = /*#__PURE__*/function (_React$Component) {
136
136
 
137
137
  if (showCorrectEnabled) {
138
138
  if (selected && isCorrect || !selected && !isCorrect) {
139
- iconSrc = _icons2.faCorrect;
139
+ iconSrc = _icons.faCorrect;
140
140
  }
141
141
  } else {
142
142
  if (selected) {
143
143
  if (isCorrect) {
144
- iconSrc = _icons2.faCorrect;
144
+ iconSrc = _icons.faCorrect;
145
145
  } else {
146
- iconSrc = _icons2.faWrong;
146
+ iconSrc = _icons.faWrong;
147
147
  }
148
148
  } else if (!isCorrect) {
149
- iconSrc = _icons2.faWrong;
149
+ iconSrc = _icons.faWrong;
150
150
  }
151
151
  }
152
152
 
@@ -177,7 +177,7 @@ var RectComponent = /*#__PURE__*/function (_React$Component) {
177
177
  onMouseEnter: this.handleMouseEnter,
178
178
  x: x,
179
179
  y: y
180
- }), isEvaluateMode && iconSrc ? /*#__PURE__*/_react["default"].createElement(_icons.ImageComponent, {
180
+ }), isEvaluateMode && iconSrc ? /*#__PURE__*/_react["default"].createElement(_imageKonvaTooltip["default"], {
181
181
  src: iconSrc,
182
182
  x: iconX,
183
183
  y: iconY,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hotspot/rectangle.jsx"],"names":["RectComponent","props","e","onClick","id","selected","disabled","cancelBubble","selector","document","body","style","cursor","setState","hovered","isCorrect","markAsCorrect","outlineColor","showCorrectEnabled","strokeWidth","state","classes","height","hotspotColor","hoverOutlineColor","selectedHotspotColor","isEvaluateMode","width","x","y","evaluateText","scale","outlineColorParsed","getEvaluateOutlineColor","outlineWidth","getOutlineWidth","iconX","iconY","iconSrc","faCorrect","faWrong","useHoveredStyle","base","handleClick","handleMouseLeave","handleMouseEnter","React","Component","styles","opacity","position","propTypes","PropTypes","object","isRequired","number","string","oneOfType","bool","func","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Rect, Group } from 'react-konva';\nimport { withStyles } from '@material-ui/core/styles';\nimport { ImageComponent } from '@pie-lib/pie-toolbox/icons';\nimport { faCorrect, faWrong } from './icons';\n\nclass RectComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n hovered: false,\n };\n }\n\n handleClick = (e) => {\n const { onClick, id, selected, disabled } = this.props;\n\n if (!disabled) {\n e.cancelBubble = true;\n onClick({ id, selected: !selected, selector: 'Mouse' });\n }\n };\n\n handleMouseEnter = () => {\n const { disabled } = this.props;\n\n if (!disabled) {\n document.body.style.cursor = 'pointer';\n }\n this.setState({ hovered: true });\n };\n\n handleMouseLeave = () => {\n document.body.style.cursor = 'default';\n this.setState({ hovered: false });\n };\n\n getEvaluateOutlineColor = (isCorrect, markAsCorrect, outlineColor) =>\n markAsCorrect ? 'green' : isCorrect ? outlineColor : 'red';\n\n getOutlineWidth = (showCorrectEnabled, selected, markAsCorrect, strokeWidth) =>\n markAsCorrect || (!markAsCorrect && !showCorrectEnabled && selected) ? strokeWidth : 0;\n\n render() {\n const {\n classes,\n height,\n hotspotColor,\n hoverOutlineColor,\n selectedHotspotColor,\n isCorrect,\n isEvaluateMode,\n outlineColor,\n selected,\n width,\n x,\n y,\n evaluateText,\n strokeWidth,\n scale,\n markAsCorrect,\n showCorrectEnabled,\n } = this.props;\n\n const outlineColorParsed = isEvaluateMode\n ? this.getEvaluateOutlineColor(isCorrect, markAsCorrect, outlineColor)\n : outlineColor;\n\n const outlineWidth = this.getOutlineWidth(showCorrectEnabled, selected, markAsCorrect, strokeWidth);\n\n const iconX = x + width / 2 - 10;\n const iconY = y + height / 2 - 10;\n\n // \"Show Correct Answer\" Enabled:\n // - Correctly Selected: white checkmark in green circle\n // - Correctly Not Selected: none\n // - Incorrectly Selected: none\n // - Incorrectly Not Selected: white checkmark in green circle\n // \"Show Correct Answer\" Disabled:\n // - Correctly Selected:\n // - white checkmark in green circle\n // - heavy outline, as on “Gather”\n // - Correctly Not Selected: none\n // - Incorrectly Selected:\n // - white \"X\" in red circle\n // - heavy outline around the selection should appear in red\n // - Incorrectly Not Selected: white \"X\" in red circle\n let iconSrc;\n\n if (showCorrectEnabled) {\n if ((selected && isCorrect) || (!selected && !isCorrect)) {\n iconSrc = faCorrect;\n }\n } else {\n if (selected) {\n if (isCorrect) {\n iconSrc = faCorrect;\n } else {\n iconSrc = faWrong;\n }\n } else if (!isCorrect) {\n iconSrc = faWrong;\n }\n }\n\n const { hovered } = this.state;\n const useHoveredStyle = hovered && hoverOutlineColor;\n\n return (\n <Group scaleX={scale} scaleY={scale}>\n {useHoveredStyle && (\n <Rect\n x={x}\n y={y}\n width={width}\n height={height}\n stroke={selected ? 'transparent' : hoverOutlineColor}\n strokeWidth={strokeWidth}\n listening={false}\n />\n )}\n <Rect\n classes={classes.base}\n width={width}\n height={height}\n fill={selected && selectedHotspotColor ? selectedHotspotColor : hotspotColor}\n onClick={this.handleClick}\n onTap={this.handleClick}\n draggable={false}\n stroke={useHoveredStyle && !selected ? 'transparent' : outlineColorParsed}\n strokeWidth={useHoveredStyle && !selected ? 0 : outlineWidth}\n onMouseLeave={this.handleMouseLeave}\n onMouseEnter={this.handleMouseEnter}\n x={x}\n y={y}\n />\n {isEvaluateMode && iconSrc ? <ImageComponent src={iconSrc} x={iconX} y={iconY} tooltip={evaluateText} /> : null}\n </Group>\n );\n }\n}\n\nconst styles = () => ({\n base: {\n cursor: 'pointer',\n opacity: 0.5,\n position: 'relative',\n },\n});\n\nRectComponent.propTypes = {\n classes: PropTypes.object.isRequired,\n height: PropTypes.number.isRequired,\n hotspotColor: PropTypes.string.isRequired,\n id: PropTypes.string.isRequired,\n isCorrect: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n isEvaluateMode: PropTypes.bool.isRequired,\n hoverOutlineColor: PropTypes.string,\n disabled: PropTypes.bool.isRequired,\n onClick: PropTypes.func.isRequired,\n outlineColor: PropTypes.string.isRequired,\n selected: PropTypes.bool.isRequired,\n width: PropTypes.number.isRequired,\n x: PropTypes.number.isRequired,\n y: PropTypes.number.isRequired,\n evaluateText: PropTypes.string,\n strokeWidth: PropTypes.number,\n scale: PropTypes.number,\n selectedHotspotColor: PropTypes.string,\n markAsCorrect: PropTypes.bool.isRequired,\n showCorrectEnabled: PropTypes.bool.isRequired,\n};\n\nRectComponent.defaultProps = {\n isCorrect: false,\n evaluateText: null,\n strokeWidth: 5,\n scale: 1,\n};\n\nexport default withStyles(styles)(RectComponent);\n"],"file":"rectangle.js"}
1
+ {"version":3,"sources":["../../src/hotspot/rectangle.jsx"],"names":["RectComponent","props","e","onClick","id","selected","disabled","cancelBubble","selector","document","body","style","cursor","setState","hovered","isCorrect","markAsCorrect","outlineColor","showCorrectEnabled","strokeWidth","state","classes","height","hotspotColor","hoverOutlineColor","selectedHotspotColor","isEvaluateMode","width","x","y","evaluateText","scale","outlineColorParsed","getEvaluateOutlineColor","outlineWidth","getOutlineWidth","iconX","iconY","iconSrc","faCorrect","faWrong","useHoveredStyle","base","handleClick","handleMouseLeave","handleMouseEnter","React","Component","styles","opacity","position","propTypes","PropTypes","object","isRequired","number","string","oneOfType","bool","func","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Rect, Group } from 'react-konva';\nimport { withStyles } from '@material-ui/core/styles';\nimport ImageComponent from './image-konva-tooltip';\nimport { faCorrect, faWrong } from './icons';\n\nclass RectComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n hovered: false,\n };\n }\n\n handleClick = (e) => {\n const { onClick, id, selected, disabled } = this.props;\n\n if (!disabled) {\n e.cancelBubble = true;\n onClick({ id, selected: !selected, selector: 'Mouse' });\n }\n };\n\n handleMouseEnter = () => {\n const { disabled } = this.props;\n\n if (!disabled) {\n document.body.style.cursor = 'pointer';\n }\n this.setState({ hovered: true });\n };\n\n handleMouseLeave = () => {\n document.body.style.cursor = 'default';\n this.setState({ hovered: false });\n };\n\n getEvaluateOutlineColor = (isCorrect, markAsCorrect, outlineColor) =>\n markAsCorrect ? 'green' : isCorrect ? outlineColor : 'red';\n\n getOutlineWidth = (showCorrectEnabled, selected, markAsCorrect, strokeWidth) =>\n markAsCorrect || (!markAsCorrect && !showCorrectEnabled && selected) ? strokeWidth : 0;\n\n render() {\n const {\n classes,\n height,\n hotspotColor,\n hoverOutlineColor,\n selectedHotspotColor,\n isCorrect,\n isEvaluateMode,\n outlineColor,\n selected,\n width,\n x,\n y,\n evaluateText,\n strokeWidth,\n scale,\n markAsCorrect,\n showCorrectEnabled,\n } = this.props;\n\n const outlineColorParsed = isEvaluateMode\n ? this.getEvaluateOutlineColor(isCorrect, markAsCorrect, outlineColor)\n : outlineColor;\n\n const outlineWidth = this.getOutlineWidth(showCorrectEnabled, selected, markAsCorrect, strokeWidth);\n\n const iconX = x + width / 2 - 10;\n const iconY = y + height / 2 - 10;\n\n // \"Show Correct Answer\" Enabled:\n // - Correctly Selected: white checkmark in green circle\n // - Correctly Not Selected: none\n // - Incorrectly Selected: none\n // - Incorrectly Not Selected: white checkmark in green circle\n // \"Show Correct Answer\" Disabled:\n // - Correctly Selected:\n // - white checkmark in green circle\n // - heavy outline, as on “Gather”\n // - Correctly Not Selected: none\n // - Incorrectly Selected:\n // - white \"X\" in red circle\n // - heavy outline around the selection should appear in red\n // - Incorrectly Not Selected: white \"X\" in red circle\n let iconSrc;\n\n if (showCorrectEnabled) {\n if ((selected && isCorrect) || (!selected && !isCorrect)) {\n iconSrc = faCorrect;\n }\n } else {\n if (selected) {\n if (isCorrect) {\n iconSrc = faCorrect;\n } else {\n iconSrc = faWrong;\n }\n } else if (!isCorrect) {\n iconSrc = faWrong;\n }\n }\n\n const { hovered } = this.state;\n const useHoveredStyle = hovered && hoverOutlineColor;\n\n return (\n <Group scaleX={scale} scaleY={scale}>\n {useHoveredStyle && (\n <Rect\n x={x}\n y={y}\n width={width}\n height={height}\n stroke={selected ? 'transparent' : hoverOutlineColor}\n strokeWidth={strokeWidth}\n listening={false}\n />\n )}\n <Rect\n classes={classes.base}\n width={width}\n height={height}\n fill={selected && selectedHotspotColor ? selectedHotspotColor : hotspotColor}\n onClick={this.handleClick}\n onTap={this.handleClick}\n draggable={false}\n stroke={useHoveredStyle && !selected ? 'transparent' : outlineColorParsed}\n strokeWidth={useHoveredStyle && !selected ? 0 : outlineWidth}\n onMouseLeave={this.handleMouseLeave}\n onMouseEnter={this.handleMouseEnter}\n x={x}\n y={y}\n />\n {isEvaluateMode && iconSrc ? <ImageComponent src={iconSrc} x={iconX} y={iconY} tooltip={evaluateText} /> : null}\n </Group>\n );\n }\n}\n\nconst styles = () => ({\n base: {\n cursor: 'pointer',\n opacity: 0.5,\n position: 'relative',\n },\n});\n\nRectComponent.propTypes = {\n classes: PropTypes.object.isRequired,\n height: PropTypes.number.isRequired,\n hotspotColor: PropTypes.string.isRequired,\n id: PropTypes.string.isRequired,\n isCorrect: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n isEvaluateMode: PropTypes.bool.isRequired,\n hoverOutlineColor: PropTypes.string,\n disabled: PropTypes.bool.isRequired,\n onClick: PropTypes.func.isRequired,\n outlineColor: PropTypes.string.isRequired,\n selected: PropTypes.bool.isRequired,\n width: PropTypes.number.isRequired,\n x: PropTypes.number.isRequired,\n y: PropTypes.number.isRequired,\n evaluateText: PropTypes.string,\n strokeWidth: PropTypes.number,\n scale: PropTypes.number,\n selectedHotspotColor: PropTypes.string,\n markAsCorrect: PropTypes.bool.isRequired,\n showCorrectEnabled: PropTypes.bool.isRequired,\n};\n\nRectComponent.defaultProps = {\n isCorrect: false,\n evaluateText: null,\n strokeWidth: 5,\n scale: 1,\n};\n\nexport default withStyles(styles)(RectComponent);\n"],"file":"rectangle.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pie-element/hotspot",
3
- "version": "7.9.10-next.8+1b882957d",
3
+ "version": "7.10.0",
4
4
  "description": "",
5
5
  "repository": "pie-framework/pie-elements",
6
6
  "publishConfig": {
@@ -9,7 +9,7 @@
9
9
  "dependencies": {
10
10
  "@material-ui/core": "^3.9.3",
11
11
  "@pie-framework/pie-player-events": "^0.1.0",
12
- "@pie-lib/pie-toolbox": "2.18.1",
12
+ "@pie-lib/pie-toolbox": "2.19.0",
13
13
  "konva": "^3.2.5",
14
14
  "prop-types": "^15.6.1",
15
15
  "react": "^16.8.1",
@@ -18,7 +18,7 @@
18
18
  },
19
19
  "author": "pie framework developers",
20
20
  "license": "ISC",
21
- "gitHead": "1b882957d8a58714cb1617f5145a970b04bd45e9",
21
+ "gitHead": "e54e56916867a5176bc13b46b21816164f4792ea",
22
22
  "scripts": {
23
23
  "postpublish": "../../scripts/postpublish"
24
24
  },
@@ -1,11 +1,10 @@
1
1
  import React from 'react';
2
- import _ from 'lodash';
3
2
  import { shallow } from 'enzyme';
4
3
  import toJson from 'enzyme-to-json';
5
4
  import Konva from 'konva';
6
5
 
7
6
  import { shallowChild } from '@pie-lib/pie-toolbox/test-utils';
8
- import {CorrectAnswerToggle} from '@pie-lib/pie-toolbox/correct-answer-toggle';
7
+ import { CorrectAnswerToggle } from '@pie-lib/pie-toolbox/correct-answer-toggle';
9
8
 
10
9
  import Container, { Container as ContainerComp } from '../hotspot/container';
11
10
  import HotspotComponent from '../hotspot/index';
@@ -129,28 +128,22 @@ describe('Container', () => {
129
128
  let onSelectChoice, wrapper;
130
129
 
131
130
  const mkWrapper = (opts = {}) => {
132
- opts = _.extend(
133
- {
134
- classes: {
135
- base: 'base',
136
- },
137
- dimensions: {
138
- height: 0,
139
- width: 0,
140
- },
141
- disabled: false,
142
- hotspotColor: 'rgba(137, 183, 244, 0.65)',
143
- imageUrl: '',
144
- isEvaluateMode: false,
145
- outlineColor: 'blue',
146
- session: { answers: [] },
147
- shapes: {
148
- rectangles: [],
149
- polygons: [],
150
- },
131
+ opts =
132
+ {
133
+ classes: { base: 'base' },
134
+ dimensions: { height: 0, width: 0, },
135
+ disabled: false,
136
+ hotspotColor: 'rgba(137, 183, 244, 0.65)',
137
+ imageUrl: '',
138
+ isEvaluateMode: false,
139
+ outlineColor: 'blue',
140
+ session: { answers: [] },
141
+ shapes: {
142
+ rectangles: [],
143
+ polygons: [],
151
144
  },
152
- opts,
153
- );
145
+ ...opts,
146
+ }
154
147
 
155
148
  return shallow(<Container {...opts} onSelectChoice={onSelectChoice} />);
156
149
  };
@@ -1,5 +1,4 @@
1
1
  import React from 'react';
2
- import _ from 'lodash';
3
2
  import { shallow } from 'enzyme';
4
3
  import toJson from 'enzyme-to-json';
5
4
  import Konva from 'konva';
@@ -8,7 +7,7 @@ import { Line } from 'react-konva';
8
7
  import { shallowChild } from '@pie-lib/pie-toolbox/test-utils';
9
8
 
10
9
  import Polygon from '../hotspot/polygon';
11
- import { ImageComponent } from '@pie-lib/pie-toolbox/icons';
10
+ import ImageComponent from '../hotspot/image-konva-tooltip';
12
11
  import { faCorrect, faWrong } from '../hotspot/icons';
13
12
 
14
13
  Konva.isBrowser = false;
@@ -17,28 +16,24 @@ describe('Polygon', () => {
17
16
  let onClick, wrapper;
18
17
 
19
18
  const mkWrapper = (opts = {}) => {
20
- opts = _.extend(
21
- {
22
- classes: {
23
- base: 'base',
24
- },
25
- height: 200,
26
- hotspotColor: 'rgba(137, 183, 244, 0.65)',
27
- id: '1',
28
- isCorrect: false,
29
- isEvaluateMode: false,
30
- evaluateText: null,
31
- disabled: false,
32
- outlineColor: 'blue',
33
- selected: false,
34
- points: [
35
- { x: 94, y: 4 },
36
- { x: 89, y: 4 },
37
- { x: 36, y: 40 },
38
- ],
39
- },
40
- opts,
41
- );
19
+ opts = {
20
+ classes: { base: 'base' },
21
+ height: 200,
22
+ hotspotColor: 'rgba(137, 183, 244, 0.65)',
23
+ id: '1',
24
+ isCorrect: false,
25
+ isEvaluateMode: false,
26
+ evaluateText: null,
27
+ disabled: false,
28
+ outlineColor: 'blue',
29
+ selected: false,
30
+ points: [
31
+ { x: 94, y: 4 },
32
+ { x: 89, y: 4 },
33
+ { x: 36, y: 40 },
34
+ ],
35
+ ...opts,
36
+ };
42
37
 
43
38
  return shallow(<Polygon {...opts} onClick={onClick} />);
44
39
  };
@@ -1,5 +1,4 @@
1
1
  import React from 'react';
2
- import _ from 'lodash';
3
2
  import { shallow } from 'enzyme';
4
3
  import toJson from 'enzyme-to-json';
5
4
  import Konva from 'konva';
@@ -8,7 +7,7 @@ import { Rect } from 'react-konva';
8
7
  import { shallowChild } from '@pie-lib/pie-toolbox/test-utils';
9
8
 
10
9
  import Rectangle from '../hotspot/rectangle';
11
- import { ImageComponent } from '@pie-lib/pie-toolbox/icons';
10
+ import ImageComponent from '../hotspot/image-konva-tooltip';
12
11
  import { faCorrect, faWrong } from '../hotspot/icons';
13
12
 
14
13
  global.MutationObserver = class {
@@ -23,26 +22,22 @@ describe('Rectangle', () => {
23
22
  let onClick, wrapper;
24
23
 
25
24
  const mkWrapper = (opts = {}) => {
26
- opts = _.extend(
27
- {
28
- classes: {
29
- base: 'base',
30
- },
31
- height: 200,
32
- hotspotColor: 'rgba(137, 183, 244, 0.65)',
33
- id: '1',
34
- isCorrect: false,
35
- isEvaluateMode: false,
36
- evaluateText: null,
37
- disabled: false,
38
- outlineColor: 'blue',
39
- selected: false,
40
- width: 300,
41
- x: 5,
42
- y: 5,
43
- },
44
- opts,
45
- );
25
+ opts = {
26
+ classes: { base: 'base' },
27
+ height: 200,
28
+ hotspotColor: 'rgba(137, 183, 244, 0.65)',
29
+ id: '1',
30
+ isCorrect: false,
31
+ isEvaluateMode: false,
32
+ evaluateText: null,
33
+ disabled: false,
34
+ outlineColor: 'blue',
35
+ selected: false,
36
+ width: 300,
37
+ x: 5,
38
+ y: 5,
39
+ ...opts,
40
+ };
46
41
 
47
42
  return shallow(<Rectangle {...opts} onClick={onClick} />);
48
43
  };
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import { Circle, Group, Rect } from 'react-konva';
4
4
  import { withStyles } from '@material-ui/core/styles';
5
- import { ImageComponent } from '@pie-lib/pie-toolbox/icons';
5
+ import ImageComponent from './image-konva-tooltip';
6
6
  import { faCorrect, faWrong } from './icons';
7
7
 
8
8
  class CircleComponent extends React.Component {
@@ -0,0 +1,76 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { Group, Image, Text, Tag, Label } from 'react-konva';
4
+
5
+ class ImageComponent extends React.Component {
6
+ constructor(props) {
7
+ super(props);
8
+ this.state = {
9
+ image: null,
10
+ showTooltip: false,
11
+ };
12
+ }
13
+
14
+ componentDidMount() {
15
+ this.loadImage();
16
+ }
17
+
18
+ componentDidUpdate(oldProps) {
19
+ if (oldProps.src !== this.props.src) {
20
+ this.loadImage();
21
+ }
22
+ }
23
+
24
+ componentWillUnmount() {
25
+ this.image.removeEventListener('load', this.handleLoad);
26
+ }
27
+
28
+ loadImage() {
29
+ const { src } = this.props;
30
+
31
+ this.image = new window.Image();
32
+ this.image.src = src;
33
+ this.image.addEventListener('load', this.handleLoad);
34
+ }
35
+
36
+ handleLoad = () => {
37
+ this.setState({
38
+ image: this.image,
39
+ });
40
+ };
41
+
42
+ render() {
43
+ const { x, y, tooltip } = this.props;
44
+ const { image, showTooltip } = this.state;
45
+
46
+ return (
47
+ <Group>
48
+ <Image
49
+ width={20}
50
+ height={20}
51
+ x={x}
52
+ y={y}
53
+ image={image}
54
+ onMouseEnter={() => this.setState({ showTooltip: true })}
55
+ onMouseLeave={() => this.setState({ showTooltip: false })}
56
+ />
57
+
58
+ {showTooltip && tooltip && (
59
+ <Label x={x - 30} y={y + 25}>
60
+ <Tag fill="white" cornerRadius={5} opacity={0.9} />
61
+ <Text text={tooltip} padding={5} />
62
+ </Label>
63
+ )}
64
+ </Group>
65
+ );
66
+ }
67
+ }
68
+
69
+ ImageComponent.propTypes = {
70
+ src: PropTypes.string.isRequired,
71
+ x: PropTypes.number.isRequired,
72
+ y: PropTypes.number.isRequired,
73
+ tooltip: PropTypes.string.isRequired,
74
+ };
75
+
76
+ export default ImageComponent;
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import { Line, Group, Rect } from 'react-konva';
4
4
  import { withStyles } from '@material-ui/core/styles';
5
- import { ImageComponent } from '@pie-lib/pie-toolbox/icons';
5
+ import ImageComponent from './image-konva-tooltip';
6
6
  import { faCorrect, faWrong } from './icons';
7
7
 
8
8
  class PolygonComponent extends React.Component {
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import { Rect, Group } from 'react-konva';
4
4
  import { withStyles } from '@material-ui/core/styles';
5
- import { ImageComponent } from '@pie-lib/pie-toolbox/icons';
5
+ import ImageComponent from './image-konva-tooltip';
6
6
  import { faCorrect, faWrong } from './icons';
7
7
 
8
8
  class RectComponent extends React.Component {