@pie-element/hotspot 9.3.4-next.3 → 10.0.0-beta.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 (106) hide show
  1. package/CHANGELOG.md +0 -11
  2. package/configure/CHANGELOG.md +0 -11
  3. package/configure/lib/DeleteWidget.js +30 -43
  4. package/configure/lib/DeleteWidget.js.map +1 -1
  5. package/configure/lib/button.js +26 -45
  6. package/configure/lib/button.js.map +1 -1
  7. package/configure/lib/buttons/circle.js +20 -27
  8. package/configure/lib/buttons/circle.js.map +1 -1
  9. package/configure/lib/buttons/polygon.js +26 -33
  10. package/configure/lib/buttons/polygon.js.map +1 -1
  11. package/configure/lib/buttons/rectangle.js +26 -33
  12. package/configure/lib/buttons/rectangle.js.map +1 -1
  13. package/configure/lib/defaults.js +2 -3
  14. package/configure/lib/defaults.js.map +1 -1
  15. package/configure/lib/hotspot-circle.js +132 -198
  16. package/configure/lib/hotspot-circle.js.map +1 -1
  17. package/configure/lib/hotspot-container.js +250 -355
  18. package/configure/lib/hotspot-container.js.map +1 -1
  19. package/configure/lib/hotspot-drawable.js +360 -472
  20. package/configure/lib/hotspot-drawable.js.map +1 -1
  21. package/configure/lib/hotspot-palette.js +92 -139
  22. package/configure/lib/hotspot-palette.js.map +1 -1
  23. package/configure/lib/hotspot-polygon.js +212 -317
  24. package/configure/lib/hotspot-polygon.js.map +1 -1
  25. package/configure/lib/hotspot-rectangle.js +128 -192
  26. package/configure/lib/hotspot-rectangle.js.map +1 -1
  27. package/configure/lib/icons.js.map +1 -1
  28. package/configure/lib/image-konva.js +46 -86
  29. package/configure/lib/image-konva.js.map +1 -1
  30. package/configure/lib/index.js +162 -222
  31. package/configure/lib/index.js.map +1 -1
  32. package/configure/lib/root.js +302 -394
  33. package/configure/lib/root.js.map +1 -1
  34. package/configure/lib/shapes/circle.js +69 -101
  35. package/configure/lib/shapes/circle.js.map +1 -1
  36. package/configure/lib/shapes/index.js +4 -12
  37. package/configure/lib/shapes/index.js.map +1 -1
  38. package/configure/lib/shapes/polygon.js +64 -96
  39. package/configure/lib/shapes/polygon.js.map +1 -1
  40. package/configure/lib/shapes/rectagle.js +69 -101
  41. package/configure/lib/shapes/rectagle.js.map +1 -1
  42. package/configure/lib/shapes/utils.js +2 -8
  43. package/configure/lib/shapes/utils.js.map +1 -1
  44. package/configure/lib/upload-control.js +25 -52
  45. package/configure/lib/upload-control.js.map +1 -1
  46. package/configure/lib/utils.js +84 -137
  47. package/configure/lib/utils.js.map +1 -1
  48. package/configure/package.json +11 -10
  49. package/configure/src/__tests__/hotspot-container.test.js +50 -19
  50. package/configure/src/__tests__/hotspot-drawable.test.js +55 -34
  51. package/configure/src/__tests__/index.test.js +167 -5
  52. package/configure/src/__tests__/root.test.js +89 -63
  53. package/configure/src/button.jsx +12 -20
  54. package/configure/src/hotspot-circle.jsx +5 -18
  55. package/configure/src/hotspot-container.jsx +82 -98
  56. package/configure/src/hotspot-drawable.jsx +43 -45
  57. package/configure/src/hotspot-palette.jsx +45 -37
  58. package/configure/src/hotspot-polygon.jsx +4 -20
  59. package/configure/src/hotspot-rectangle.jsx +4 -17
  60. package/configure/src/index.js +12 -2
  61. package/configure/src/root.jsx +86 -80
  62. package/configure/src/upload-control.jsx +6 -16
  63. package/controller/CHANGELOG.md +0 -11
  64. package/controller/lib/defaults.js +2 -3
  65. package/controller/lib/defaults.js.map +1 -1
  66. package/controller/lib/index.js +151 -205
  67. package/controller/lib/index.js.map +1 -1
  68. package/controller/lib/utils.js +14 -34
  69. package/controller/lib/utils.js.map +1 -1
  70. package/controller/package.json +2 -2
  71. package/lib/hotspot/circle.js +110 -169
  72. package/lib/hotspot/circle.js.map +1 -1
  73. package/lib/hotspot/container.js +174 -260
  74. package/lib/hotspot/container.js.map +1 -1
  75. package/lib/hotspot/icons.js.map +1 -1
  76. package/lib/hotspot/image-konva-tooltip.js +65 -112
  77. package/lib/hotspot/image-konva-tooltip.js.map +1 -1
  78. package/lib/hotspot/index.js +135 -198
  79. package/lib/hotspot/index.js.map +1 -1
  80. package/lib/hotspot/polygon.js +150 -214
  81. package/lib/hotspot/polygon.js.map +1 -1
  82. package/lib/hotspot/rectangle.js +128 -185
  83. package/lib/hotspot/rectangle.js.map +1 -1
  84. package/lib/index.js +187 -256
  85. package/lib/index.js.map +1 -1
  86. package/lib/session-updater.js +12 -18
  87. package/lib/session-updater.js.map +1 -1
  88. package/package.json +14 -11
  89. package/src/__tests__/container.test.jsx +27 -175
  90. package/src/__tests__/index.test.js +70 -30
  91. package/src/hotspot/circle.jsx +2 -13
  92. package/src/hotspot/container.jsx +35 -50
  93. package/src/hotspot/index.jsx +16 -28
  94. package/src/hotspot/polygon.jsx +4 -13
  95. package/src/hotspot/rectangle.jsx +5 -15
  96. package/src/index.js +21 -12
  97. package/configure/src/__tests__/DeleteWidget.test.js +0 -64
  98. package/configure/src/__tests__/__snapshots__/hotspot-container.test.js.snap +0 -192
  99. package/configure/src/__tests__/__snapshots__/hotspot-drawable.test.js.snap +0 -562
  100. package/configure/src/__tests__/__snapshots__/root.test.js.snap +0 -469
  101. package/src/__tests__/__snapshots__/container.test.jsx.snap +0 -264
  102. package/src/__tests__/__snapshots__/index.test.js.snap +0 -81
  103. package/src/__tests__/__snapshots__/polygon.test.jsx.snap +0 -192
  104. package/src/__tests__/__snapshots__/rectangle.test.jsx.snap +0 -127
  105. package/src/__tests__/polygon.test.jsx +0 -230
  106. package/src/__tests__/rectangle.test.jsx +0 -232
@@ -1,254 +1,194 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
- 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 _wrapNativeSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapNativeSuper"));
23
-
7
+ exports.default = void 0;
24
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
25
-
26
9
  var _react = _interopRequireDefault(require("react"));
27
-
28
- var _reactDom = _interopRequireDefault(require("react-dom"));
29
-
10
+ var _client = require("react-dom/client");
30
11
  var _debug = _interopRequireDefault(require("debug"));
31
-
32
12
  var _pieConfigureEvents = require("@pie-framework/pie-configure-events");
33
-
34
13
  var _root = _interopRequireDefault(require("./root"));
35
-
36
14
  var _defaults = _interopRequireDefault(require("./defaults"));
37
-
38
- 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; }
39
-
40
- 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; }
41
-
42
- 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); }; }
43
-
44
- 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; } }
45
-
46
- var log = (0, _debug["default"])('hotspot:configure');
47
-
48
- var HotspotConfigure = /*#__PURE__*/function (_HTMLElement) {
49
- (0, _inherits2["default"])(HotspotConfigure, _HTMLElement);
50
-
51
- var _super = _createSuper(HotspotConfigure);
52
-
53
- function HotspotConfigure() {
54
- var _this;
55
-
56
- (0, _classCallCheck2["default"])(this, HotspotConfigure);
57
- _this = _super.call(this);
58
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onConfigurationChanged", function (c) {
59
- _this._configuration = c;
60
-
61
- _this._render();
15
+ const log = (0, _debug.default)('hotspot:configure');
16
+ class HotspotConfigure extends HTMLElement {
17
+ constructor() {
18
+ super();
19
+ (0, _defineProperty2.default)(this, "onConfigurationChanged", c => {
20
+ this._configuration = c;
21
+ this._render();
62
22
  });
63
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onModelChangedByConfig", function (m, propertyType) {
64
- var _model = m;
65
-
23
+ (0, _defineProperty2.default)(this, "onModelChangedByConfig", (m, propertyType) => {
24
+ const _model = m;
66
25
  if (propertyType === 'multipleCorrect') {
67
- var _ref = _model.shapes || {},
68
- _ref$rectangles = _ref.rectangles,
69
- rectangles = _ref$rectangles === void 0 ? [] : _ref$rectangles,
70
- _ref$polygons = _ref.polygons,
71
- polygons = _ref$polygons === void 0 ? [] : _ref$polygons,
72
- _ref$circles = _ref.circles,
73
- circles = _ref$circles === void 0 ? [] : _ref$circles;
74
-
75
- _model.shapes.rectangles = rectangles.map(function (shape) {
76
- return _objectSpread(_objectSpread({}, shape), {}, {
77
- correct: false
78
- });
79
- });
80
- _model.shapes.polygons = polygons.map(function (shape) {
81
- return _objectSpread(_objectSpread({}, shape), {}, {
82
- correct: false
83
- });
84
- });
85
- _model.shapes.circles = circles.map(function (shape) {
86
- return _objectSpread(_objectSpread({}, shape), {}, {
87
- correct: false
88
- });
89
- });
26
+ const {
27
+ rectangles = [],
28
+ polygons = [],
29
+ circles = []
30
+ } = _model.shapes || {};
31
+ _model.shapes.rectangles = rectangles.map(shape => ({
32
+ ...shape,
33
+ correct: false
34
+ }));
35
+ _model.shapes.polygons = polygons.map(shape => ({
36
+ ...shape,
37
+ correct: false
38
+ }));
39
+ _model.shapes.circles = circles.map(shape => ({
40
+ ...shape,
41
+ correct: false
42
+ }));
90
43
  }
91
-
92
- _this.onModelChanged(_model);
44
+ this.onModelChanged(_model);
93
45
  });
94
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onColorChanged", function (colorType, color) {
95
- _this.onModelChanged(_objectSpread(_objectSpread({}, _this._model), {}, (0, _defineProperty2["default"])({}, colorType, color)));
46
+ (0, _defineProperty2.default)(this, "onColorChanged", (colorType, color) => {
47
+ this.onModelChanged({
48
+ ...this._model,
49
+ [colorType]: color
50
+ });
96
51
  });
97
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onPromptChanged", function (prompt) {
98
- _this.onModelChanged(_objectSpread(_objectSpread({}, _this._model), {}, {
99
- prompt: prompt
100
- }));
52
+ (0, _defineProperty2.default)(this, "onPromptChanged", prompt => {
53
+ this.onModelChanged({
54
+ ...this._model,
55
+ prompt
56
+ });
101
57
  });
102
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onRationaleChanged", function (rationale) {
103
- _this.onModelChanged(_objectSpread(_objectSpread({}, _this._model), {}, {
104
- rationale: rationale
105
- }));
58
+ (0, _defineProperty2.default)(this, "onRationaleChanged", rationale => {
59
+ this.onModelChanged({
60
+ ...this._model,
61
+ rationale
62
+ });
106
63
  });
107
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onTeacherInstructionsChanged", function (teacherInstructions) {
108
- _this.onModelChanged(_objectSpread(_objectSpread({}, _this._model), {}, {
109
- teacherInstructions: teacherInstructions
110
- }));
64
+ (0, _defineProperty2.default)(this, "onTeacherInstructionsChanged", teacherInstructions => {
65
+ this.onModelChanged({
66
+ ...this._model,
67
+ teacherInstructions
68
+ });
111
69
  });
112
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onUpdateImageDimension", function (dimensions) {
113
- _this.onModelChanged(_objectSpread(_objectSpread({}, _this._model), {}, {
114
- dimensions: dimensions
115
- }));
70
+ (0, _defineProperty2.default)(this, "onUpdateImageDimension", dimensions => {
71
+ this.onModelChanged({
72
+ ...this._model,
73
+ dimensions
74
+ });
116
75
  });
117
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onUpdateShapes", function (shapes) {
118
- _this.onModelChanged(_objectSpread(_objectSpread({}, _this._model), {}, {
119
- shapes: shapes
120
- }));
76
+ (0, _defineProperty2.default)(this, "onUpdateShapes", shapes => {
77
+ this.onModelChanged({
78
+ ...this._model,
79
+ shapes
80
+ });
121
81
  });
122
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onImageUpload", function (imageUrl) {
123
- _this.onModelChanged(_objectSpread(_objectSpread({}, _this._model), {}, {
124
- imageUrl: imageUrl
125
- }));
82
+ (0, _defineProperty2.default)(this, "onImageUpload", imageUrl => {
83
+ this.onModelChanged({
84
+ ...this._model,
85
+ imageUrl
86
+ });
126
87
  });
127
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "insertImage", function (handler) {
128
- _this.dispatchEvent(new _pieConfigureEvents.InsertImageEvent(handler));
88
+ (0, _defineProperty2.default)(this, "insertImage", handler => {
89
+ this.dispatchEvent(new _pieConfigureEvents.InsertImageEvent(handler));
129
90
  });
130
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onDeleteImage", function (src, done) {
131
- _this.dispatchEvent(new _pieConfigureEvents.DeleteImageEvent(src, done));
91
+ (0, _defineProperty2.default)(this, "onDeleteImage", (src, done) => {
92
+ this.dispatchEvent(new _pieConfigureEvents.DeleteImageEvent(src, done));
132
93
  });
133
- _this._model = HotspotConfigure.createDefaultModel();
134
- _this._configuration = _defaults["default"].configuration;
135
- _this.onModelChanged = _this.onModelChanged.bind((0, _assertThisInitialized2["default"])(_this));
136
- return _this;
94
+ this._root = null;
95
+ this._model = HotspotConfigure.createDefaultModel();
96
+ this._configuration = _defaults.default.configuration;
97
+ this.onModelChanged = this.onModelChanged.bind(this);
137
98
  }
138
-
139
- (0, _createClass2["default"])(HotspotConfigure, [{
140
- key: "model",
141
- set: function set(s) {
142
- this._model = HotspotConfigure.createDefaultModel(s);
143
-
144
- this._render();
145
- }
146
- }, {
147
- key: "configuration",
148
- set: function set(c) {
149
- var _newConfiguration$lan,
150
- _this2 = this;
151
-
152
- var newConfiguration = _objectSpread(_objectSpread({}, _defaults["default"].configuration), c);
153
-
154
- this._configuration = newConfiguration; // if language:enabled is true, then the corresponding default item model should include a language value;
155
- // if it is false, then the language field should be omitted from the item model.
156
- // if a default item model includes a language value (e.g., en_US) and the corresponding authoring view settings have language:settings = true,
157
- // then (a) language:enabled should also be true, and (b) that default language value should be represented in languageChoices[] (as a key).
158
-
159
- if (newConfiguration !== null && newConfiguration !== void 0 && (_newConfiguration$lan = newConfiguration.language) !== null && _newConfiguration$lan !== void 0 && _newConfiguration$lan.enabled) {
160
- var _newConfiguration$lan2, _newConfiguration$lan3;
161
-
162
- if (newConfiguration !== null && newConfiguration !== void 0 && (_newConfiguration$lan2 = newConfiguration.languageChoices) !== null && _newConfiguration$lan2 !== void 0 && (_newConfiguration$lan3 = _newConfiguration$lan2.options) !== null && _newConfiguration$lan3 !== void 0 && _newConfiguration$lan3.length) {
163
- this._model.language = newConfiguration === null || newConfiguration === void 0 ? void 0 : newConfiguration.languageChoices.options[0].value;
164
- }
165
- } else if (newConfiguration.language.settings && this._model.language) {
166
- this._configuration.language.enabled = true;
167
-
168
- if (!this._configuration.languageChoices.options || !this._configuration.languageChoices.options.length) {
169
- this._configuration.languageChoices.options = [];
170
- } // check if the language is already included in the languageChoices.options array
171
- // and if not, then add it.
172
-
173
-
174
- if (!this._configuration.languageChoices.options.find(function (option) {
175
- return option.value === _this2._model.language;
176
- })) {
177
- this._configuration.languageChoices.options.push({
178
- value: this._model.language,
179
- label: this._model.language
180
- });
181
- }
182
- } else {
183
- delete this._model.language;
99
+ set model(s) {
100
+ this._model = HotspotConfigure.createDefaultModel(s);
101
+ this._render();
102
+ }
103
+ set configuration(c) {
104
+ const newConfiguration = {
105
+ ..._defaults.default.configuration,
106
+ ...c
107
+ };
108
+ this._configuration = newConfiguration;
109
+
110
+ // if language:enabled is true, then the corresponding default item model should include a language value;
111
+ // if it is false, then the language field should be omitted from the item model.
112
+ // if a default item model includes a language value (e.g., en_US) and the corresponding authoring view settings have language:settings = true,
113
+ // then (a) language:enabled should also be true, and (b) that default language value should be represented in languageChoices[] (as a key).
114
+ if (newConfiguration?.language?.enabled) {
115
+ if (newConfiguration?.languageChoices?.options?.length) {
116
+ this._model.language = newConfiguration?.languageChoices.options[0].value;
117
+ }
118
+ } else if (newConfiguration.language.settings && this._model.language) {
119
+ this._configuration.language.enabled = true;
120
+ if (!this._configuration.languageChoices.options || !this._configuration.languageChoices.options.length) {
121
+ this._configuration.languageChoices.options = [];
184
122
  }
185
123
 
186
- this._render();
187
- }
188
- }, {
189
- key: "dispatchModelUpdated",
190
- value: function dispatchModelUpdated(reset) {
191
- var resetValue = !!reset;
192
- this.dispatchEvent(new _pieConfigureEvents.ModelUpdatedEvent(this._model, resetValue));
193
- }
194
- }, {
195
- key: "onModelChanged",
196
- value: function onModelChanged(m, reset) {
197
- this._model = m;
198
- this.dispatchModelUpdated(reset);
199
-
200
- this._render();
201
- }
202
- }, {
203
- key: "insertSound",
204
- value: function insertSound(handler) {
205
- this.dispatchEvent(new _pieConfigureEvents.InsertSoundEvent(handler));
124
+ // check if the language is already included in the languageChoices.options array
125
+ // and if not, then add it.
126
+ if (!this._configuration.languageChoices.options.find(option => option.value === this._model.language)) {
127
+ this._configuration.languageChoices.options.push({
128
+ value: this._model.language,
129
+ label: this._model.language
130
+ });
131
+ }
132
+ } else {
133
+ delete this._model.language;
206
134
  }
207
- }, {
208
- key: "onDeleteSound",
209
- value: function onDeleteSound(src, done) {
210
- this.dispatchEvent(new _pieConfigureEvents.DeleteSoundEvent(src, done));
135
+ this._render();
136
+ }
137
+ dispatchModelUpdated(reset) {
138
+ const resetValue = !!reset;
139
+ this.dispatchEvent(new _pieConfigureEvents.ModelUpdatedEvent(this._model, resetValue));
140
+ }
141
+ onModelChanged(m, reset) {
142
+ this._model = m;
143
+ this.dispatchModelUpdated(reset);
144
+ this._render();
145
+ }
146
+ insertSound(handler) {
147
+ this.dispatchEvent(new _pieConfigureEvents.InsertSoundEvent(handler));
148
+ }
149
+ onDeleteSound(src, done) {
150
+ this.dispatchEvent(new _pieConfigureEvents.DeleteSoundEvent(src, done));
151
+ }
152
+ _render() {
153
+ log('_render');
154
+ let element = /*#__PURE__*/_react.default.createElement(_root.default, {
155
+ configuration: this._configuration,
156
+ model: this._model,
157
+ onColorChanged: this.onColorChanged,
158
+ onImageUpload: this.onImageUpload,
159
+ onRationaleChanged: this.onRationaleChanged,
160
+ onConfigurationChanged: this.onConfigurationChanged,
161
+ onPromptChanged: this.onPromptChanged,
162
+ onUpdateImageDimension: this.onUpdateImageDimension,
163
+ imageSupport: {
164
+ add: this.insertImage,
165
+ delete: this.onDeleteImage
166
+ },
167
+ uploadSoundSupport: {
168
+ add: this.insertSound.bind(this),
169
+ delete: this.onDeleteSound.bind(this)
170
+ },
171
+ onUpdateShapes: this.onUpdateShapes,
172
+ onModelChangedByConfig: this.onModelChangedByConfig,
173
+ onTeacherInstructionsChanged: this.onTeacherInstructionsChanged
174
+ });
175
+ if (!this._root) {
176
+ this._root = (0, _client.createRoot)(this);
211
177
  }
212
- }, {
213
- key: "_render",
214
- value: function _render() {
215
- log('_render');
216
-
217
- var element = /*#__PURE__*/_react["default"].createElement(_root["default"], {
218
- configuration: this._configuration,
219
- model: this._model,
220
- onColorChanged: this.onColorChanged,
221
- onImageUpload: this.onImageUpload,
222
- onRationaleChanged: this.onRationaleChanged,
223
- onConfigurationChanged: this.onConfigurationChanged,
224
- onPromptChanged: this.onPromptChanged,
225
- onUpdateImageDimension: this.onUpdateImageDimension,
226
- imageSupport: {
227
- add: this.insertImage,
228
- "delete": this.onDeleteImage
229
- },
230
- uploadSoundSupport: {
231
- add: this.insertSound.bind(this),
232
- "delete": this.onDeleteSound.bind(this)
233
- },
234
- onUpdateShapes: this.onUpdateShapes,
235
- onModelChangedByConfig: this.onModelChangedByConfig,
236
- onTeacherInstructionsChanged: this.onTeacherInstructionsChanged
237
- });
238
-
239
- _reactDom["default"].render(element, this);
178
+ this._root.render(element);
179
+ }
180
+ disconnectedCallback() {
181
+ if (this._root) {
182
+ this._root.unmount();
240
183
  }
241
- }]);
242
- return HotspotConfigure;
243
- }( /*#__PURE__*/(0, _wrapNativeSuper2["default"])(HTMLElement));
244
-
245
- exports["default"] = HotspotConfigure;
246
- (0, _defineProperty2["default"])(HotspotConfigure, "createDefaultModel", function () {
247
- var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
248
- return _objectSpread(_objectSpread(_objectSpread({}, _defaults["default"].model), model), {}, {
249
- hotspotList: model.hotspotList || [model.hotspotColor] || _defaults["default"].model.hotspotList,
250
- outlineList: model.outlineList || [model.outlineColor] || _defaults["default"].model.outlineList,
251
- shapes: model.shapes || _defaults["default"].model.shapes || {}
252
- });
253
- });
184
+ }
185
+ }
186
+ exports.default = HotspotConfigure;
187
+ (0, _defineProperty2.default)(HotspotConfigure, "createDefaultModel", (model = {}) => ({
188
+ ..._defaults.default.model,
189
+ ...model,
190
+ hotspotList: model.hotspotList || [model.hotspotColor] || _defaults.default.model.hotspotList,
191
+ outlineList: model.outlineList || [model.outlineColor] || _defaults.default.model.outlineList,
192
+ shapes: model.shapes || _defaults.default.model.shapes || {}
193
+ }));
254
194
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.js"],"names":["log","HotspotConfigure","c","_configuration","_render","m","propertyType","_model","shapes","rectangles","polygons","circles","map","shape","correct","onModelChanged","colorType","color","prompt","rationale","teacherInstructions","dimensions","imageUrl","handler","dispatchEvent","InsertImageEvent","src","done","DeleteImageEvent","createDefaultModel","sensibleDefaults","configuration","bind","s","newConfiguration","language","enabled","languageChoices","options","length","value","settings","find","option","push","label","reset","resetValue","ModelUpdatedEvent","dispatchModelUpdated","InsertSoundEvent","DeleteSoundEvent","element","React","createElement","Root","model","onColorChanged","onImageUpload","onRationaleChanged","onConfigurationChanged","onPromptChanged","onUpdateImageDimension","imageSupport","add","insertImage","onDeleteImage","uploadSoundSupport","insertSound","onDeleteSound","onUpdateShapes","onModelChangedByConfig","onTeacherInstructionsChanged","ReactDOM","render","HTMLElement","hotspotList","hotspotColor","outlineList","outlineColor"],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport debug from 'debug';\nimport {\n ModelUpdatedEvent,\n DeleteImageEvent,\n InsertImageEvent,\n InsertSoundEvent,\n DeleteSoundEvent,\n} from '@pie-framework/pie-configure-events';\n\nimport Root from './root';\nimport sensibleDefaults from './defaults';\n\nconst log = debug('hotspot:configure');\n\nexport default class HotspotConfigure extends HTMLElement {\n static createDefaultModel = (model = {}) => ({\n ...sensibleDefaults.model,\n ...model,\n hotspotList: model.hotspotList || [model.hotspotColor] || sensibleDefaults.model.hotspotList,\n outlineList: model.outlineList || [model.outlineColor] || sensibleDefaults.model.outlineList,\n shapes: model.shapes || sensibleDefaults.model.shapes || {},\n });\n\n constructor() {\n super();\n this._model = HotspotConfigure.createDefaultModel();\n this._configuration = sensibleDefaults.configuration;\n this.onModelChanged = this.onModelChanged.bind(this);\n }\n\n set model(s) {\n this._model = HotspotConfigure.createDefaultModel(s);\n this._render();\n }\n\n set configuration(c) {\n const newConfiguration = {\n ...sensibleDefaults.configuration,\n ...c,\n };\n\n this._configuration = newConfiguration;\n\n // if language:enabled is true, then the corresponding default item model should include a language value;\n // if it is false, then the language field should be omitted from the item model.\n // if a default item model includes a language value (e.g., en_US) and the corresponding authoring view settings have language:settings = true,\n // then (a) language:enabled should also be true, and (b) that default language value should be represented in languageChoices[] (as a key).\n if (newConfiguration?.language?.enabled) {\n if (newConfiguration?.languageChoices?.options?.length) {\n this._model.language = newConfiguration?.languageChoices.options[0].value;\n }\n } else if (newConfiguration.language.settings && this._model.language) {\n this._configuration.language.enabled = true;\n\n if (!this._configuration.languageChoices.options || !this._configuration.languageChoices.options.length) {\n this._configuration.languageChoices.options = [];\n }\n\n // check if the language is already included in the languageChoices.options array\n // and if not, then add it.\n if (!this._configuration.languageChoices.options.find((option) => option.value === this._model.language)) {\n this._configuration.languageChoices.options.push({\n value: this._model.language,\n label: this._model.language,\n });\n }\n } else {\n delete this._model.language;\n }\n\n this._render();\n }\n\n dispatchModelUpdated(reset) {\n const resetValue = !!reset;\n\n this.dispatchEvent(new ModelUpdatedEvent(this._model, resetValue));\n }\n\n onModelChanged(m, reset) {\n this._model = m;\n this.dispatchModelUpdated(reset);\n this._render();\n }\n\n onConfigurationChanged = (c) => {\n this._configuration = c;\n this._render();\n };\n\n onModelChangedByConfig = (m, propertyType) => {\n const _model = m;\n\n if (propertyType === 'multipleCorrect') {\n const { rectangles = [], polygons = [], circles = [] } = _model.shapes || {};\n\n _model.shapes.rectangles = rectangles.map((shape) => ({ ...shape, correct: false }));\n _model.shapes.polygons = polygons.map((shape) => ({ ...shape, correct: false }));\n _model.shapes.circles = circles.map((shape) => ({ ...shape, correct: false }));\n }\n\n this.onModelChanged(_model);\n };\n\n onColorChanged = (colorType, color) => {\n this.onModelChanged({\n ...this._model,\n [colorType]: color,\n });\n };\n\n onPromptChanged = (prompt) => {\n this.onModelChanged({\n ...this._model,\n prompt,\n });\n };\n\n onRationaleChanged = (rationale) => {\n this.onModelChanged({\n ...this._model,\n rationale,\n });\n };\n\n onTeacherInstructionsChanged = (teacherInstructions) => {\n this.onModelChanged({\n ...this._model,\n teacherInstructions,\n });\n };\n\n onUpdateImageDimension = (dimensions) => {\n this.onModelChanged({\n ...this._model,\n dimensions,\n });\n };\n\n onUpdateShapes = (shapes) => {\n this.onModelChanged({\n ...this._model,\n shapes,\n });\n };\n\n onImageUpload = (imageUrl) => {\n this.onModelChanged({\n ...this._model,\n imageUrl,\n });\n };\n\n insertImage = (handler) => {\n this.dispatchEvent(new InsertImageEvent(handler));\n };\n\n onDeleteImage = (src, done) => {\n this.dispatchEvent(new DeleteImageEvent(src, done));\n };\n\n insertSound(handler) {\n this.dispatchEvent(new InsertSoundEvent(handler));\n }\n\n onDeleteSound(src, done) {\n this.dispatchEvent(new DeleteSoundEvent(src, done));\n }\n\n _render() {\n log('_render');\n let element = React.createElement(Root, {\n configuration: this._configuration,\n model: this._model,\n onColorChanged: this.onColorChanged,\n onImageUpload: this.onImageUpload,\n onRationaleChanged: this.onRationaleChanged,\n onConfigurationChanged: this.onConfigurationChanged,\n onPromptChanged: this.onPromptChanged,\n onUpdateImageDimension: this.onUpdateImageDimension,\n imageSupport: {\n add: this.insertImage,\n delete: this.onDeleteImage,\n },\n uploadSoundSupport: {\n add: this.insertSound.bind(this),\n delete: this.onDeleteSound.bind(this),\n },\n onUpdateShapes: this.onUpdateShapes,\n onModelChangedByConfig: this.onModelChangedByConfig,\n onTeacherInstructionsChanged: this.onTeacherInstructionsChanged,\n });\n\n ReactDOM.render(element, this);\n }\n}\n"],"file":"index.js"}
1
+ {"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_client","_debug","_pieConfigureEvents","_root","_defaults","log","debug","HotspotConfigure","HTMLElement","constructor","_defineProperty2","default","c","_configuration","_render","m","propertyType","_model","rectangles","polygons","circles","shapes","map","shape","correct","onModelChanged","colorType","color","prompt","rationale","teacherInstructions","dimensions","imageUrl","handler","dispatchEvent","InsertImageEvent","src","done","DeleteImageEvent","createDefaultModel","sensibleDefaults","configuration","bind","model","s","newConfiguration","language","enabled","languageChoices","options","length","value","settings","find","option","push","label","dispatchModelUpdated","reset","resetValue","ModelUpdatedEvent","insertSound","InsertSoundEvent","onDeleteSound","DeleteSoundEvent","element","React","createElement","Root","onColorChanged","onImageUpload","onRationaleChanged","onConfigurationChanged","onPromptChanged","onUpdateImageDimension","imageSupport","add","insertImage","delete","onDeleteImage","uploadSoundSupport","onUpdateShapes","onModelChangedByConfig","onTeacherInstructionsChanged","createRoot","render","disconnectedCallback","unmount","exports","hotspotList","hotspotColor","outlineList","outlineColor"],"sources":["../src/index.js"],"sourcesContent":["import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport debug from 'debug';\nimport {\n ModelUpdatedEvent,\n DeleteImageEvent,\n InsertImageEvent,\n InsertSoundEvent,\n DeleteSoundEvent,\n} from '@pie-framework/pie-configure-events';\n\nimport Root from './root';\nimport sensibleDefaults from './defaults';\n\nconst log = debug('hotspot:configure');\n\nexport default class HotspotConfigure extends HTMLElement {\n static createDefaultModel = (model = {}) => ({\n ...sensibleDefaults.model,\n ...model,\n hotspotList: model.hotspotList || [model.hotspotColor] || sensibleDefaults.model.hotspotList,\n outlineList: model.outlineList || [model.outlineColor] || sensibleDefaults.model.outlineList,\n shapes: model.shapes || sensibleDefaults.model.shapes || {},\n });\n\n constructor() {\n super();\n this._root = null;\n this._model = HotspotConfigure.createDefaultModel();\n this._configuration = sensibleDefaults.configuration;\n this.onModelChanged = this.onModelChanged.bind(this);\n }\n\n set model(s) {\n this._model = HotspotConfigure.createDefaultModel(s);\n this._render();\n }\n\n set configuration(c) {\n const newConfiguration = {\n ...sensibleDefaults.configuration,\n ...c,\n };\n\n this._configuration = newConfiguration;\n\n // if language:enabled is true, then the corresponding default item model should include a language value;\n // if it is false, then the language field should be omitted from the item model.\n // if a default item model includes a language value (e.g., en_US) and the corresponding authoring view settings have language:settings = true,\n // then (a) language:enabled should also be true, and (b) that default language value should be represented in languageChoices[] (as a key).\n if (newConfiguration?.language?.enabled) {\n if (newConfiguration?.languageChoices?.options?.length) {\n this._model.language = newConfiguration?.languageChoices.options[0].value;\n }\n } else if (newConfiguration.language.settings && this._model.language) {\n this._configuration.language.enabled = true;\n\n if (!this._configuration.languageChoices.options || !this._configuration.languageChoices.options.length) {\n this._configuration.languageChoices.options = [];\n }\n\n // check if the language is already included in the languageChoices.options array\n // and if not, then add it.\n if (!this._configuration.languageChoices.options.find((option) => option.value === this._model.language)) {\n this._configuration.languageChoices.options.push({\n value: this._model.language,\n label: this._model.language,\n });\n }\n } else {\n delete this._model.language;\n }\n\n this._render();\n }\n\n dispatchModelUpdated(reset) {\n const resetValue = !!reset;\n\n this.dispatchEvent(new ModelUpdatedEvent(this._model, resetValue));\n }\n\n onModelChanged(m, reset) {\n this._model = m;\n this.dispatchModelUpdated(reset);\n this._render();\n }\n\n onConfigurationChanged = (c) => {\n this._configuration = c;\n this._render();\n };\n\n onModelChangedByConfig = (m, propertyType) => {\n const _model = m;\n\n if (propertyType === 'multipleCorrect') {\n const { rectangles = [], polygons = [], circles = [] } = _model.shapes || {};\n\n _model.shapes.rectangles = rectangles.map((shape) => ({ ...shape, correct: false }));\n _model.shapes.polygons = polygons.map((shape) => ({ ...shape, correct: false }));\n _model.shapes.circles = circles.map((shape) => ({ ...shape, correct: false }));\n }\n\n this.onModelChanged(_model);\n };\n\n onColorChanged = (colorType, color) => {\n this.onModelChanged({\n ...this._model,\n [colorType]: color,\n });\n };\n\n onPromptChanged = (prompt) => {\n this.onModelChanged({\n ...this._model,\n prompt,\n });\n };\n\n onRationaleChanged = (rationale) => {\n this.onModelChanged({\n ...this._model,\n rationale,\n });\n };\n\n onTeacherInstructionsChanged = (teacherInstructions) => {\n this.onModelChanged({\n ...this._model,\n teacherInstructions,\n });\n };\n\n onUpdateImageDimension = (dimensions) => {\n this.onModelChanged({\n ...this._model,\n dimensions,\n });\n };\n\n onUpdateShapes = (shapes) => {\n this.onModelChanged({\n ...this._model,\n shapes,\n });\n };\n\n onImageUpload = (imageUrl) => {\n this.onModelChanged({\n ...this._model,\n imageUrl,\n });\n };\n\n insertImage = (handler) => {\n this.dispatchEvent(new InsertImageEvent(handler));\n };\n\n onDeleteImage = (src, done) => {\n this.dispatchEvent(new DeleteImageEvent(src, done));\n };\n\n insertSound(handler) {\n this.dispatchEvent(new InsertSoundEvent(handler));\n }\n\n onDeleteSound(src, done) {\n this.dispatchEvent(new DeleteSoundEvent(src, done));\n }\n\n _render() {\n log('_render');\n let element = React.createElement(Root, {\n configuration: this._configuration,\n model: this._model,\n onColorChanged: this.onColorChanged,\n onImageUpload: this.onImageUpload,\n onRationaleChanged: this.onRationaleChanged,\n onConfigurationChanged: this.onConfigurationChanged,\n onPromptChanged: this.onPromptChanged,\n onUpdateImageDimension: this.onUpdateImageDimension,\n imageSupport: {\n add: this.insertImage,\n delete: this.onDeleteImage,\n },\n uploadSoundSupport: {\n add: this.insertSound.bind(this),\n delete: this.onDeleteSound.bind(this),\n },\n onUpdateShapes: this.onUpdateShapes,\n onModelChangedByConfig: this.onModelChangedByConfig,\n onTeacherInstructionsChanged: this.onTeacherInstructionsChanged,\n });\n\n if (!this._root) {\n this._root = createRoot(this);\n }\n this._root.render(element);\n }\n\n disconnectedCallback() {\n if (this._root) {\n this._root.unmount();\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}