@pie-element/hotspot 9.0.1-next.0 → 9.0.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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pie-element/hotspot-configure",
3
3
  "private": true,
4
- "version": "8.0.1",
4
+ "version": "8.0.2",
5
5
  "description": "",
6
6
  "main": "lib/index.js",
7
7
  "module": "src/index.js",
@@ -10,8 +10,8 @@
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/config-ui": "^11.25.0",
14
- "@pie-lib/editable-html": "^11.17.0",
13
+ "@pie-lib/config-ui": "^11.26.0",
14
+ "@pie-lib/editable-html": "^11.18.0",
15
15
  "classnames": "^2.2.6",
16
16
  "debug": "^3.1.0",
17
17
  "konva": "^3.2.4",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pie-element/hotspot-controller",
3
3
  "private": true,
4
- "version": "6.0.1",
4
+ "version": "6.0.2",
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/controller-utils": "^0.18.0",
14
+ "@pie-lib/controller-utils": "^0.19.0",
15
15
  "debug": "^4.1.1",
16
16
  "lodash": "^4.17.15"
17
17
  }
@@ -0,0 +1,398 @@
1
+ import debug from 'debug';
2
+ import isEmpty from 'lodash/isEmpty';
3
+ import { partialScoring } from '@pie-lib/controller-utils';
4
+ import isEqual from 'lodash/isEqual';
5
+
6
+ function ownKeys(object, enumerableOnly) {
7
+ var keys = Object.keys(object);
8
+
9
+ if (Object.getOwnPropertySymbols) {
10
+ var symbols = Object.getOwnPropertySymbols(object);
11
+ enumerableOnly && (symbols = symbols.filter(function (sym) {
12
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
13
+ })), keys.push.apply(keys, symbols);
14
+ }
15
+
16
+ return keys;
17
+ }
18
+
19
+ function _objectSpread2(target) {
20
+ for (var i = 1; i < arguments.length; i++) {
21
+ var source = null != arguments[i] ? arguments[i] : {};
22
+ i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {
23
+ _defineProperty(target, key, source[key]);
24
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {
25
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
26
+ });
27
+ }
28
+
29
+ return target;
30
+ }
31
+
32
+ function _defineProperty(obj, key, value) {
33
+ if (key in obj) {
34
+ Object.defineProperty(obj, key, {
35
+ value: value,
36
+ enumerable: true,
37
+ configurable: true,
38
+ writable: true
39
+ });
40
+ } else {
41
+ obj[key] = value;
42
+ }
43
+
44
+ return obj;
45
+ }
46
+
47
+ function _objectWithoutPropertiesLoose(source, excluded) {
48
+ if (source == null) return {};
49
+ var target = {};
50
+ var sourceKeys = Object.keys(source);
51
+ var key, i;
52
+
53
+ for (i = 0; i < sourceKeys.length; i++) {
54
+ key = sourceKeys[i];
55
+ if (excluded.indexOf(key) >= 0) continue;
56
+ target[key] = source[key];
57
+ }
58
+
59
+ return target;
60
+ }
61
+
62
+ function _objectWithoutProperties(source, excluded) {
63
+ if (source == null) return {};
64
+
65
+ var target = _objectWithoutPropertiesLoose(source, excluded);
66
+
67
+ var key, i;
68
+
69
+ if (Object.getOwnPropertySymbols) {
70
+ var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
71
+
72
+ for (i = 0; i < sourceSymbolKeys.length; i++) {
73
+ key = sourceSymbolKeys[i];
74
+ if (excluded.indexOf(key) >= 0) continue;
75
+ if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
76
+ target[key] = source[key];
77
+ }
78
+ }
79
+
80
+ return target;
81
+ }
82
+
83
+ var getCorrectResponse = choices => choices.filter(c => c.correct).map(c => c.id).sort();
84
+ var isResponseCorrect = (question, session) => {
85
+ var {
86
+ shapes: {
87
+ rectangles = [],
88
+ polygons = [],
89
+ circles = []
90
+ }
91
+ } = question;
92
+ var choices = [...rectangles, ...polygons, ...circles];
93
+ var correctResponseIds = getCorrectResponse(choices);
94
+
95
+ if (!session || isEmpty(session)) {
96
+ return false;
97
+ }
98
+
99
+ if (session.answers && session.answers.length) {
100
+ var answerIds = (session.answers || []).map(a => a.id);
101
+ return isEqual(answerIds.sort(), correctResponseIds);
102
+ } else if (!(correctResponseIds && correctResponseIds.length)) {
103
+ return true;
104
+ }
105
+
106
+ return false;
107
+ };
108
+
109
+ var defaults = {
110
+ dimensions: {
111
+ height: 0,
112
+ width: 0
113
+ },
114
+ hotspotColor: 'rgba(137, 183, 244, 0.25)',
115
+ hotspotList: ['rgba(137, 183, 244, 0.25)'],
116
+ imageUrl: '',
117
+ multipleCorrect: true,
118
+ outlineColor: 'blue',
119
+ outlineList: ['blue'],
120
+ partialScoring: false,
121
+ prompt: '',
122
+ promptEnabled: true,
123
+ rationaleEnabled: true,
124
+ shapes: {
125
+ rectangles: [],
126
+ polygons: [],
127
+ circles: []
128
+ },
129
+ strokeWidth: 5,
130
+ studentInstructionsEnabled: true,
131
+ teacherInstructions: '',
132
+ teacherInstructionsEnabled: true,
133
+ toolbarEditorPosition: 'bottom'
134
+ };
135
+
136
+ var _excluded = ["index", "correct"],
137
+ _excluded2 = ["index", "correct"],
138
+ _excluded3 = ["index", "correct"];
139
+ var log = debug('pie-elements:hotspot:controller');
140
+ var normalize = question => _objectSpread2(_objectSpread2({}, defaults), question);
141
+ function model(question, session, env) {
142
+ var normalizedQuestion = normalize(question);
143
+ var {
144
+ imageUrl,
145
+ dimensions,
146
+ hotspotColor,
147
+ hoverOutlineColor,
148
+ selectedHotspotColor,
149
+ multipleCorrect,
150
+ outlineColor,
151
+ partialScoring,
152
+ prompt,
153
+ shapes,
154
+ language,
155
+ fontSizeFactor,
156
+ autoplayAudioEnabled,
157
+ completeAudioEnabled,
158
+ customAudioButton
159
+ } = normalizedQuestion;
160
+ var {
161
+ rectangles,
162
+ polygons,
163
+ circles
164
+ } = shapes || {};
165
+ var shouldIncludeCorrectResponse = env.mode === 'evaluate' || env.role === 'instructor' && env.mode === 'view';
166
+ return new Promise(resolve => {
167
+ var out = {
168
+ disabled: env.mode !== 'gather',
169
+ mode: env.mode,
170
+ dimensions,
171
+ imageUrl,
172
+ outlineColor,
173
+ hotspotColor,
174
+ hoverOutlineColor,
175
+ selectedHotspotColor,
176
+ multipleCorrect,
177
+ partialScoring,
178
+ language,
179
+ fontSizeFactor,
180
+ autoplayAudioEnabled,
181
+ completeAudioEnabled,
182
+ customAudioButton,
183
+ shapes: _objectSpread2(_objectSpread2({}, shapes), {}, {
184
+ // eslint-disable-next-line no-unused-vars
185
+ rectangles: (rectangles || []).map(_ref => {
186
+ var {
187
+ index,
188
+ correct
189
+ } = _ref,
190
+ rectProps = _objectWithoutProperties(_ref, _excluded);
191
+
192
+ return shouldIncludeCorrectResponse ? _objectSpread2({
193
+ correct
194
+ }, rectProps) : _objectSpread2({}, rectProps);
195
+ }),
196
+ // eslint-disable-next-line no-unused-vars
197
+ polygons: (polygons || []).map(_ref2 => {
198
+ var {
199
+ index,
200
+ correct
201
+ } = _ref2,
202
+ polyProps = _objectWithoutProperties(_ref2, _excluded2);
203
+
204
+ return shouldIncludeCorrectResponse ? _objectSpread2({
205
+ correct
206
+ }, polyProps) : _objectSpread2({}, polyProps);
207
+ }),
208
+ // eslint-disable-next-line no-unused-vars
209
+ circles: (circles || []).map(_ref3 => {
210
+ var {
211
+ index,
212
+ correct
213
+ } = _ref3,
214
+ circleProps = _objectWithoutProperties(_ref3, _excluded3);
215
+
216
+ return shouldIncludeCorrectResponse ? _objectSpread2({
217
+ correct
218
+ }, circleProps) : _objectSpread2({}, circleProps);
219
+ })
220
+ }),
221
+ responseCorrect: env.mode === 'evaluate' ? isResponseCorrect(normalizedQuestion, session) : undefined,
222
+ extraCSSRules: normalizedQuestion.extraCSSRules
223
+ };
224
+
225
+ if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {
226
+ out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;
227
+ out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled ? normalizedQuestion.teacherInstructions : null;
228
+ } else {
229
+ out.rationale = null;
230
+ out.teacherInstructions = null;
231
+ }
232
+
233
+ out.prompt = normalizedQuestion.promptEnabled ? prompt : null;
234
+ out.strokeWidth = normalizedQuestion.strokeWidth;
235
+ resolve(out);
236
+ });
237
+ }
238
+ var createDefaultModel = function createDefaultModel() {
239
+ var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
240
+ return new Promise(resolve => {
241
+ resolve(_objectSpread2(_objectSpread2({}, defaults), model));
242
+ });
243
+ };
244
+
245
+ var getScore = function getScore(config, session) {
246
+ var env = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
247
+ var {
248
+ answers
249
+ } = session || {};
250
+
251
+ if (!config.shapes || !config.shapes.rectangles && !config.shapes.polygons && !config.shapes.circles) {
252
+ return 0;
253
+ }
254
+
255
+ var {
256
+ shapes: {
257
+ rectangles = [],
258
+ polygons = [],
259
+ circles = []
260
+ } = {}
261
+ } = config;
262
+ var partialScoringEnabled = partialScoring.enabled(config, env);
263
+
264
+ if (!partialScoringEnabled) {
265
+ return isResponseCorrect(config, session) ? 1 : 0;
266
+ }
267
+
268
+ var correctAnswers = 0;
269
+ var selectedChoices = 0;
270
+ var choices = [...rectangles, ...polygons, ...circles];
271
+ var correctChoices = choices.filter(choice => choice.correct);
272
+ choices.forEach(shape => {
273
+ var selected = answers && answers.filter(answer => answer.id === shape.id)[0];
274
+ var correctlySelected = shape.correct && selected;
275
+
276
+ if (selected) {
277
+ selectedChoices += 1;
278
+ }
279
+
280
+ if (correctlySelected) {
281
+ correctAnswers += 1;
282
+ }
283
+ });
284
+ var extraAnswers = selectedChoices > correctChoices.length ? selectedChoices - correctChoices.length : 0;
285
+ var total = correctChoices.length === 0 ? 1 : correctChoices.length;
286
+ var str = ((correctAnswers - extraAnswers) / total).toFixed(2);
287
+ return str < 0 ? 0 : parseFloat(str);
288
+ };
289
+
290
+ function outcome(config, session) {
291
+ var env = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
292
+ return new Promise(resolve => {
293
+ log('outcome...');
294
+
295
+ if (!session || isEmpty(session)) {
296
+ resolve({
297
+ score: 0,
298
+ empty: true
299
+ });
300
+ }
301
+
302
+ if (session.answers) {
303
+ var score = getScore(config, session, env);
304
+ resolve({
305
+ score
306
+ });
307
+ } else {
308
+ resolve({
309
+ score: 0,
310
+ empty: true
311
+ });
312
+ }
313
+ });
314
+ }
315
+
316
+ var returnShapesCorrect = shapes => {
317
+ var answers = [];
318
+ shapes.forEach(i => {
319
+ var {
320
+ correct,
321
+ id
322
+ } = i;
323
+
324
+ if (correct) {
325
+ answers.push({
326
+ id
327
+ });
328
+ }
329
+ });
330
+ return answers;
331
+ };
332
+
333
+ var createCorrectResponseSession = (question, env) => {
334
+ return new Promise(resolve => {
335
+ if (env.mode !== 'evaluate' && env.role === 'instructor') {
336
+ var {
337
+ shapes: {
338
+ rectangles = [],
339
+ circles = [],
340
+ polygons = {}
341
+ } = {}
342
+ } = question;
343
+ var rectangleCorrect = returnShapesCorrect(rectangles);
344
+ var polygonsCorrect = returnShapesCorrect(polygons);
345
+ var circlesCorrect = returnShapesCorrect(circles);
346
+ resolve({
347
+ answers: [...rectangleCorrect, ...polygonsCorrect, ...circlesCorrect],
348
+ id: '1'
349
+ });
350
+ } else {
351
+ resolve(null);
352
+ }
353
+ });
354
+ }; // remove all html tags
355
+
356
+
357
+ var getContent = html => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');
358
+
359
+ var validate = function validate() {
360
+ var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
361
+ var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
362
+ var {
363
+ shapes
364
+ } = model;
365
+ var {
366
+ minShapes = 2,
367
+ maxShapes,
368
+ maxSelections
369
+ } = config;
370
+ var errors = {};
371
+ ['teacherInstructions', 'prompt', 'rationale'].forEach(field => {
372
+ var _config$field;
373
+
374
+ if ((_config$field = config[field]) !== null && _config$field !== void 0 && _config$field.required && !getContent(model[field])) {
375
+ errors[field] = 'This field is required.';
376
+ }
377
+ });
378
+ var allShapes = Object.values(shapes || {}).reduce((acc, shape) => [...acc, ...shape], []);
379
+ var nbOfSelections = (allShapes || []).reduce((acc, shape) => shape.correct ? acc + 1 : acc, 0);
380
+ var nbOfShapes = (allShapes || []).length;
381
+
382
+ if (nbOfShapes < minShapes) {
383
+ errors.shapes = "There should be at least ".concat(minShapes, " shapes defined.");
384
+ } else if (nbOfShapes > maxShapes) {
385
+ errors.shapes = "No more than ".concat(maxShapes, " shapes should be defined.");
386
+ }
387
+
388
+ if (nbOfSelections < 1) {
389
+ errors.selections = 'There should be at least 1 shape selected.';
390
+ } else if (nbOfSelections > maxSelections) {
391
+ errors.selections = "No more than ".concat(maxSelections, " shapes should be selected.");
392
+ }
393
+
394
+ return errors;
395
+ };
396
+
397
+ export { createCorrectResponseSession, createDefaultModel, model, normalize, outcome, validate };
398
+ //# sourceMappingURL=controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.js","sources":["../controller/src/utils.js","../controller/src/defaults.js","../controller/src/index.js"],"sourcesContent":["import isEqual from 'lodash/isEqual';\nimport isEmpty from 'lodash/isEmpty';\n\nexport const getCorrectResponse = (choices) =>\n choices\n .filter((c) => c.correct)\n .map((c) => c.id)\n .sort();\n\nexport const isResponseCorrect = (question, session) => {\n const {\n shapes: { rectangles = [], polygons = [], circles = [] },\n } = question;\n const choices = [...rectangles, ...polygons, ...circles];\n let correctResponseIds = getCorrectResponse(choices);\n\n if (!session || isEmpty(session)) {\n return false;\n }\n\n if (session.answers && session.answers.length) {\n let answerIds = (session.answers || []).map((a) => a.id);\n\n return isEqual(answerIds.sort(), correctResponseIds);\n } else if (!(correctResponseIds && correctResponseIds.length)) {\n return true;\n }\n\n return false;\n};\n","export default {\n dimensions: { height: 0, width: 0 },\n hotspotColor: 'rgba(137, 183, 244, 0.25)',\n hotspotList: ['rgba(137, 183, 244, 0.25)'],\n imageUrl: '',\n multipleCorrect: true,\n outlineColor: 'blue',\n outlineList: ['blue'],\n partialScoring: false,\n prompt: '',\n promptEnabled: true,\n rationaleEnabled: true,\n shapes: { rectangles: [], polygons: [], circles: [] },\n strokeWidth: 5,\n studentInstructionsEnabled: true,\n teacherInstructions: '',\n teacherInstructionsEnabled: true,\n toolbarEditorPosition: 'bottom',\n};\n","import debug from 'debug';\nimport isEmpty from 'lodash/isEmpty';\nimport { partialScoring } from '@pie-lib/controller-utils';\n\nimport { isResponseCorrect } from './utils';\n\nimport defaults from './defaults';\n\nconst log = debug('pie-elements:hotspot:controller');\n\nexport const normalize = (question) => ({\n ...defaults,\n ...question,\n});\n\nexport function model(question, session, env) {\n const normalizedQuestion = normalize(question);\n const {\n imageUrl,\n dimensions,\n hotspotColor,\n hoverOutlineColor,\n selectedHotspotColor,\n multipleCorrect,\n outlineColor,\n partialScoring,\n prompt,\n shapes,\n language,\n fontSizeFactor,\n autoplayAudioEnabled,\n completeAudioEnabled,\n customAudioButton,\n } = normalizedQuestion;\n const { rectangles, polygons, circles } = shapes || {};\n\n const shouldIncludeCorrectResponse = env.mode === 'evaluate' || (env.role === 'instructor' && env.mode === 'view');\n\n return new Promise((resolve) => {\n const out = {\n disabled: env.mode !== 'gather',\n mode: env.mode,\n dimensions,\n imageUrl,\n outlineColor,\n hotspotColor,\n hoverOutlineColor,\n selectedHotspotColor,\n multipleCorrect,\n partialScoring,\n language,\n fontSizeFactor,\n autoplayAudioEnabled,\n completeAudioEnabled,\n customAudioButton,\n shapes: {\n ...shapes,\n // eslint-disable-next-line no-unused-vars\n rectangles: (rectangles || []).map(({ index, correct, ...rectProps }) =>\n shouldIncludeCorrectResponse ? { correct, ...rectProps } : { ...rectProps },\n ),\n // eslint-disable-next-line no-unused-vars\n polygons: (polygons || []).map(({ index, correct, ...polyProps }) =>\n shouldIncludeCorrectResponse ? { correct, ...polyProps } : { ...polyProps },\n ),\n // eslint-disable-next-line no-unused-vars\n circles: (circles || []).map(({ index, correct, ...circleProps }) =>\n shouldIncludeCorrectResponse ? { correct, ...circleProps } : { ...circleProps },\n ),\n },\n responseCorrect: env.mode === 'evaluate' ? isResponseCorrect(normalizedQuestion, session) : undefined,\n extraCSSRules: normalizedQuestion.extraCSSRules,\n };\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n }\n\n out.prompt = normalizedQuestion.promptEnabled ? prompt : null;\n out.strokeWidth = normalizedQuestion.strokeWidth;\n\n resolve(out);\n });\n}\n\nexport const createDefaultModel = (model = {}) =>\n new Promise((resolve) => {\n resolve({\n ...defaults,\n ...model,\n });\n });\n\nconst getScore = (config, session, env = {}) => {\n const { answers } = session || {};\n\n if (!config.shapes || (!config.shapes.rectangles && !config.shapes.polygons && !config.shapes.circles)) {\n return 0;\n }\n\n const { shapes: { rectangles = [], polygons = [], circles = [] } = {} } = config;\n const partialScoringEnabled = partialScoring.enabled(config, env);\n\n if (!partialScoringEnabled) {\n return isResponseCorrect(config, session) ? 1 : 0;\n }\n\n let correctAnswers = 0;\n let selectedChoices = 0;\n\n const choices = [...rectangles, ...polygons, ...circles];\n\n const correctChoices = choices.filter((choice) => choice.correct);\n\n choices.forEach((shape) => {\n const selected = answers && answers.filter((answer) => answer.id === shape.id)[0];\n const correctlySelected = shape.correct && selected;\n\n if (selected) {\n selectedChoices += 1;\n }\n\n if (correctlySelected) {\n correctAnswers += 1;\n }\n });\n\n const extraAnswers = selectedChoices > correctChoices.length ? selectedChoices - correctChoices.length : 0;\n\n const total = correctChoices.length === 0 ? 1 : correctChoices.length;\n const str = ((correctAnswers - extraAnswers) / total).toFixed(2);\n\n return str < 0 ? 0 : parseFloat(str);\n};\n\nexport function outcome(config, session, env = {}) {\n return new Promise((resolve) => {\n log('outcome...');\n\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n\n if (session.answers) {\n const score = getScore(config, session, env);\n resolve({ score });\n } else {\n resolve({ score: 0, empty: true });\n }\n });\n}\n\nconst returnShapesCorrect = (shapes) => {\n let answers = [];\n\n shapes.forEach((i) => {\n const { correct, id } = i;\n if (correct) {\n answers.push({ id });\n }\n });\n return answers;\n};\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { shapes: { rectangles = [], circles = [], polygons = {} } = {} } = question;\n\n const rectangleCorrect = returnShapesCorrect(rectangles);\n const polygonsCorrect = returnShapesCorrect(polygons);\n const circlesCorrect = returnShapesCorrect(circles);\n\n resolve({\n answers: [...rectangleCorrect, ...polygonsCorrect, ...circlesCorrect],\n id: '1',\n });\n } else {\n resolve(null);\n }\n });\n};\n\n// remove all html tags\nconst getInnerText = (html) => (html || '').replaceAll(/<[^>]*>/g, '');\n\n// remove all html tags except img, iframe and source tag for audio\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');\n\nexport const validate = (model = {}, config = {}) => {\n const { shapes } = model;\n const { minShapes = 2, maxShapes, maxSelections } = config;\n const errors = {};\n\n ['teacherInstructions', 'prompt', 'rationale'].forEach((field) => {\n if (config[field]?.required && !getContent(model[field])) {\n errors[field] = 'This field is required.';\n }\n });\n\n const allShapes = Object.values(shapes || {}).reduce((acc, shape) => [...acc, ...shape], []);\n\n const nbOfSelections = (allShapes || []).reduce((acc, shape) => (shape.correct ? acc + 1 : acc), 0);\n\n const nbOfShapes = (allShapes || []).length;\n\n if (nbOfShapes < minShapes) {\n errors.shapes = `There should be at least ${minShapes} shapes defined.`;\n } else if (nbOfShapes > maxShapes) {\n errors.shapes = `No more than ${maxShapes} shapes should be defined.`;\n }\n\n if (nbOfSelections < 1) {\n errors.selections = 'There should be at least 1 shape selected.';\n } else if (nbOfSelections > maxSelections) {\n errors.selections = `No more than ${maxSelections} shapes should be selected.`;\n }\n\n return errors;\n};\n"],"names":["getCorrectResponse","choices","filter","c","correct","map","id","sort","isResponseCorrect","question","session","shapes","rectangles","polygons","circles","correctResponseIds","isEmpty","answers","length","answerIds","a","isEqual","dimensions","height","width","hotspotColor","hotspotList","imageUrl","multipleCorrect","outlineColor","outlineList","partialScoring","prompt","promptEnabled","rationaleEnabled","strokeWidth","studentInstructionsEnabled","teacherInstructions","teacherInstructionsEnabled","toolbarEditorPosition","log","debug","normalize","defaults","model","env","normalizedQuestion","hoverOutlineColor","selectedHotspotColor","language","fontSizeFactor","autoplayAudioEnabled","completeAudioEnabled","customAudioButton","shouldIncludeCorrectResponse","mode","role","Promise","resolve","out","disabled","index","rectProps","_objectSpread","polyProps","circleProps","responseCorrect","undefined","extraCSSRules","rationale","createDefaultModel","getScore","config","partialScoringEnabled","enabled","correctAnswers","selectedChoices","correctChoices","choice","forEach","shape","selected","answer","correctlySelected","extraAnswers","total","str","toFixed","parseFloat","outcome","score","empty","returnShapesCorrect","i","push","createCorrectResponseSession","rectangleCorrect","polygonsCorrect","circlesCorrect","getContent","html","replace","validate","minShapes","maxShapes","maxSelections","errors","field","required","allShapes","Object","values","reduce","acc","nbOfSelections","nbOfShapes","selections"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pie-element/hotspot",
3
- "version": "9.0.1-next.0+17e3b6c8d",
3
+ "version": "9.0.1",
4
4
  "description": "",
5
5
  "repository": "pie-framework/pie-elements",
6
6
  "publishConfig": {
@@ -9,10 +9,10 @@
9
9
  "dependencies": {
10
10
  "@material-ui/core": "^3.9.3",
11
11
  "@pie-framework/pie-player-events": "^0.1.0",
12
- "@pie-lib/correct-answer-toggle": "^2.21.0",
13
- "@pie-lib/math-rendering": "^3.18.0",
14
- "@pie-lib/render-ui": "^4.31.0",
15
- "@pie-lib/test-utils": "^0.18.0",
12
+ "@pie-lib/correct-answer-toggle": "^2.22.0",
13
+ "@pie-lib/math-rendering": "^3.19.0",
14
+ "@pie-lib/render-ui": "^4.32.0",
15
+ "@pie-lib/test-utils": "^0.19.0",
16
16
  "konva": "^3.2.5",
17
17
  "prop-types": "^15.6.1",
18
18
  "react": "^16.8.1",
@@ -21,10 +21,17 @@
21
21
  },
22
22
  "author": "pie framework developers",
23
23
  "license": "ISC",
24
- "gitHead": "17e3b6c8d7cd3ad6a2698703e595dc03d51b9df9",
24
+ "gitHead": "d82bdaf60534197ec8675bb5ebba1ad314075e58",
25
25
  "scripts": {
26
26
  "postpublish": "../../scripts/postpublish"
27
27
  },
28
28
  "main": "lib/index.js",
29
- "module": "src/index.js"
29
+ "module": "src/index.js",
30
+ "exports": {
31
+ "./controller": {
32
+ "import": "./esm/controller.js",
33
+ "require": "./controller/lib/index.js",
34
+ "default": "./esm/controller.js"
35
+ }
36
+ }
30
37
  }