@pie-element/graphing 5.13.1 → 5.13.2-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,466 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.sortedAnswers = exports.removeInvalidSegments = exports.removeInvalidAnswers = exports.removeDuplicateSegments = exports.equalVector = exports.equalSine = exports.equalSegment = exports.equalRay = exports.equalPolygon = exports.equalPoint = exports.equalParabola = exports.equalMarks = exports.equalLine = exports.equalExponential = exports.equalCircle = exports.equalAbsolute = exports.constructSegmentsFromPoints = void 0;
9
-
10
- var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
11
-
12
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
-
14
- var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
15
-
16
- var _lodash = _interopRequireDefault(require("lodash"));
17
-
18
- var _uniqWith = _interopRequireDefault(require("lodash/uniqWith"));
19
-
20
- var _differenceWith = _interopRequireDefault(require("lodash/differenceWith"));
21
-
22
- var _graphingUtils = require("@pie-lib/pie-toolbox/graphing-utils");
23
-
24
- var _excluded = ["type"];
25
-
26
- 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; }
27
-
28
- 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; }
29
-
30
- var equalPoint = function equalPoint(A, B) {
31
- // x1 = x2 & y1 = y2
32
- var equalLabel = true;
33
- A = _objectSpread({}, A);
34
- B = _objectSpread({}, B);
35
-
36
- if (A.label || B.label) {
37
- equalLabel = (0, _isEqual["default"])(A.label, B.label);
38
- }
39
-
40
- return (0, _isEqual["default"])(A.x, B.x) && (0, _isEqual["default"])(A.y, B.y) && equalLabel;
41
- };
42
-
43
- exports.equalPoint = equalPoint;
44
-
45
- var equalSegment = function equalSegment(segment1, segment2) {
46
- // A.from = B.from, A.to = B.to OR A.from = B.to, A.to = B.from
47
- // x1 = x3 & y1 = y3 & x2 = x4 & y2 = y4
48
- return (0, _isEqual["default"])(segment1.from, segment2.from) && (0, _isEqual["default"])(segment1.to, segment2.to) || (0, _isEqual["default"])(segment1.to, segment2.from) && (0, _isEqual["default"])(segment1.from, segment2.to);
49
- };
50
-
51
- exports.equalSegment = equalSegment;
52
-
53
- var equalVector = function equalVector(vector1, vector2) {
54
- // A.from = B.from, A.to = B.to;
55
- // x1 = x3 & y1 = y3 & x2 = x4 & y2 = y4
56
- return (0, _isEqual["default"])(vector1.from, vector2.from) && (0, _isEqual["default"])(vector1.to, vector2.to);
57
- }; // this function is implemented in configure as well
58
-
59
-
60
- exports.equalVector = equalVector;
61
-
62
- var sortedAnswers = function sortedAnswers(answers) {
63
- return Object.keys(answers || {}).sort().reduce(function (result, key) {
64
- if (key !== 'correctAnswer') {
65
- result[key] = answers[key];
66
- }
67
-
68
- return result;
69
- }, {});
70
- };
71
-
72
- exports.sortedAnswers = sortedAnswers;
73
-
74
- var returnLineEquationCoefficients = function returnLineEquationCoefficients(line) {
75
- line = _objectSpread(_objectSpread({}, line), {}, {
76
- to: _objectSpread({}, line.to),
77
- from: _objectSpread({}, line.from)
78
- });
79
- var xA = line.from.x;
80
- var yA = line.from.y;
81
- var xB = line.to.x;
82
- var yB = line.to.y;
83
- return {
84
- a: yB - yA,
85
- b: xA - xB,
86
- c: xB * yA - xA * yB
87
- };
88
- };
89
-
90
- var getSignificantDecimals = function getSignificantDecimals(number) {
91
- return Math.round(number * 10000) / 10000;
92
- };
93
-
94
- var equalLine = function equalLine(line1, line2) {
95
- // line equation: ax + by + c = 0
96
- // 2 lines are equal if a1/a2 = b1/b2 = c1/c2, where a, b, c are the coefficients in line equation
97
- // line equation knowing 2 points: (y - yA) / (yB - yA) = (x - xA) / (xB - xA)
98
- // extending this equation, we get: x * (yB - yA) + y * (xA - xB) + (xB * yA - xA * yB) = 0
99
- // where a = yB - yA; b = xA - xB; c = xB * yA - xA * yB
100
- var _returnLineEquationCo = returnLineEquationCoefficients(line1),
101
- a1 = _returnLineEquationCo.a,
102
- b1 = _returnLineEquationCo.b,
103
- c1 = _returnLineEquationCo.c;
104
-
105
- var _returnLineEquationCo2 = returnLineEquationCoefficients(line2),
106
- a2 = _returnLineEquationCo2.a,
107
- b2 = _returnLineEquationCo2.b,
108
- c2 = _returnLineEquationCo2.c;
109
-
110
- var proportions = [];
111
-
112
- if (a2 !== 0) {
113
- proportions.push(getSignificantDecimals(a1 / a2));
114
- } else if (a1 !== a2) {
115
- return false;
116
- }
117
-
118
- if (b2 !== 0) {
119
- proportions.push(getSignificantDecimals(b1 / b2));
120
- } else if (b1 !== b2) {
121
- return false;
122
- }
123
-
124
- if (c2 !== 0) {
125
- proportions.push(getSignificantDecimals(c1 / c2));
126
- } else if (c1 !== c2) {
127
- return false;
128
- }
129
-
130
- return _lodash["default"].uniq(proportions).length === 1; // (y2 - y1)/(x2 - x1) = (y4 - y3)/(x4 - x3);
131
- // return ((Math.abs((line1.to.y - line1.from.y) / (line1.to.x - line1.from.x))) === (Math.abs((line2.to.y - line2.from.y) / (line2.to.x - line2.from.x))));
132
- };
133
-
134
- exports.equalLine = equalLine;
135
-
136
- var equalRay = function equalRay(ray1, ray2) {
137
- ray1 = _objectSpread(_objectSpread({}, ray1), {}, {
138
- to: _objectSpread({}, ray1.to),
139
- from: _objectSpread({}, ray1.from)
140
- });
141
- ray2 = _objectSpread(_objectSpread({}, ray2), {}, {
142
- to: _objectSpread({}, ray2.to),
143
- from: _objectSpread({}, ray2.from)
144
- }); // slope: m = (y2-y1)/(x2-x1)
145
- // slope & x1 = x3 & y1 = y3 & angle between (x1, y1) (x2, y2) is same as angle between (x3, y3) (x4, y4)
146
-
147
- var mRay1 = (ray1.to.y - ray1.from.y) / (ray1.to.x - ray1.from.x);
148
- var mRay2 = (ray2.to.y - ray2.from.y) / (ray2.to.x - ray2.from.x);
149
- var angleRay1 = Math.atan2(ray1.to.y - ray1.from.y, ray1.to.x - ray1.from.x) * 180 / Math.PI;
150
- var angleRay2 = Math.atan2(ray2.to.y - ray2.from.y, ray2.to.x - ray2.from.x) * 180 / Math.PI;
151
- return mRay1 === mRay2 && ray1.from.x === ray2.from.x && ray1.from.y === ray2.from.y && angleRay1 === angleRay2;
152
- };
153
-
154
- exports.equalRay = equalRay;
155
-
156
- var constructSegmentsFromPoints = function constructSegmentsFromPoints(points) {
157
- // takes the list of points that represent a polygon and transforms it into a list of segments; eg.:
158
- // points: A, B, C, D => segments: AB, BC, CD, DA
159
- return (points || []).map(function (point, index) {
160
- return {
161
- from: point,
162
- to: points[(index + 1) % points.length]
163
- };
164
- });
165
- };
166
-
167
- exports.constructSegmentsFromPoints = constructSegmentsFromPoints;
168
-
169
- var removeDuplicateSegments = function removeDuplicateSegments(segments) {
170
- segments = segments || []; // removes segments that are duplicates; eg. These segments are the same, so one will be removed:
171
- // segment1: from: { x: 1, y: 1 }, to: { x: 2, y: 1 }
172
- // segment2: from: { x: 2, y: 1 }, to: { x: 1, y: 1 }
173
-
174
- return (0, _uniqWith["default"])(segments, function (s1, s2) {
175
- return equalSegment(s1, s2);
176
- });
177
- };
178
-
179
- exports.removeDuplicateSegments = removeDuplicateSegments;
180
-
181
- var removeInvalidSegments = function removeInvalidSegments(segments) {
182
- segments = segments || []; // removes segments that start in a point and end in the same point (eg.: from: { x: 1, y: 1 }, to: { x: 1, y: 1 })
183
-
184
- return segments.filter(function (segment) {
185
- return !(0, _isEqual["default"])(segment.from, segment.to);
186
- });
187
- };
188
-
189
- exports.removeInvalidSegments = removeInvalidSegments;
190
-
191
- var equalPolygon = function equalPolygon(poly1, poly2) {
192
- var points1 = poly1.points;
193
- var points2 = poly2.points; // generate segments
194
-
195
- var segments1 = constructSegmentsFromPoints(points1);
196
- var segments2 = constructSegmentsFromPoints(points2);
197
- var segments1NoDuplicates = removeDuplicateSegments(removeInvalidSegments(segments1));
198
- var segments2NoDuplicates = removeDuplicateSegments(removeInvalidSegments(segments2));
199
- var differentSegments1 = (0, _differenceWith["default"])(segments1NoDuplicates, segments2NoDuplicates, equalSegment);
200
- var differentSegments2 = (0, _differenceWith["default"])(segments2NoDuplicates, segments1NoDuplicates, equalSegment);
201
- return (!differentSegments1 || !differentSegments1.length) && (!differentSegments2 || !differentSegments2.length);
202
- };
203
-
204
- exports.equalPolygon = equalPolygon;
205
-
206
- var equalCircle = function equalCircle(c1, c2) {
207
- c1 = _objectSpread(_objectSpread({}, c1), {}, {
208
- root: _objectSpread({}, c1.root),
209
- edge: _objectSpread({}, c1.edge)
210
- });
211
- c2 = _objectSpread(_objectSpread({}, c2), {}, {
212
- root: _objectSpread({}, c2.root),
213
- edge: _objectSpread({}, c2.edge)
214
- });
215
- var equalRootAndEdge = (0, _isEqual["default"])(c2.edge, c1.edge) && (0, _isEqual["default"])(c2.root, c1.root); // if both edge and root are the same, it means the shapes are exactly the same
216
-
217
- if (equalRootAndEdge) return true;
218
- var rC1 = Math.sqrt(Math.pow(c1.edge.x - c1.root.x, 2) + Math.pow(c1.edge.y - c1.root.y, 2));
219
- var rC2 = Math.sqrt(Math.pow(c2.edge.x - c2.root.x, 2) + Math.pow(c2.edge.y - c2.root.y, 2)); // if both root and radius are the same, it means the shapes are equal
220
-
221
- return (0, _isEqual["default"])(c2.root, c1.root) && (0, _isEqual["default"])(rC1, rC2);
222
- };
223
-
224
- exports.equalCircle = equalCircle;
225
-
226
- var equalSine = function equalSine(sine1, sine2) {
227
- var getPoints = function getPoints(_ref) {
228
- var root = _ref.root,
229
- edge = _ref.edge;
230
- root = _objectSpread({}, root);
231
- edge = _objectSpread({}, edge);
232
-
233
- var _getAmplitudeAndFreq = (0, _graphingUtils.getAmplitudeAndFreq)(root, edge),
234
- amplitude = _getAmplitudeAndFreq.amplitude,
235
- freq = _getAmplitudeAndFreq.freq; // the height of the sine wave
236
-
237
-
238
- var tY = Math.abs(root.y - edge.y) * 2; // the distance on x axis between edge and root
239
-
240
- var tXRoot = Math.abs(root.x - edge.x); // the distance on x axis between 2 edges for sine wave (min & max)
241
-
242
- var tX = tXRoot * 2; // the first edge placed east side of root
243
-
244
- var edgeAboveZeroX = edge.x;
245
- var edgeAboveZeroY = edge.y; // if edge less then 0, find out the appropriate edge placed east side of zero (0)
246
-
247
- while (edgeAboveZeroX < 0 && tX !== 0) {
248
- edgeAboveZeroX = edgeAboveZeroX + tX;
249
- edgeAboveZeroY = edgeAboveZeroY < root.y ? edgeAboveZeroY + tY : edgeAboveZeroY - tY;
250
- } // if edge more then 0, find out the appropriate edge placed east side of zero (0)
251
-
252
-
253
- while (edgeAboveZeroX - tX > 0 && tX !== 0) {
254
- edgeAboveZeroX = edgeAboveZeroX - tX;
255
- edgeAboveZeroY = edgeAboveZeroY < root.y ? edgeAboveZeroY + tY : edgeAboveZeroY - tY;
256
- }
257
-
258
- return {
259
- amplitude: getSignificantDecimals(amplitude),
260
- freq: getSignificantDecimals(freq),
261
- min: getSignificantDecimals(edge.y < root.y ? edge.y : edge.y - tY),
262
- max: getSignificantDecimals(edge.y < root.y ? edge.y + tY : edge.y),
263
- edgeAboveZeroX: getSignificantDecimals(edgeAboveZeroX),
264
- edgeAboveZeroY: getSignificantDecimals(edgeAboveZeroY)
265
- };
266
- };
267
-
268
- var studentAnswerBpY = getPoints(sine1);
269
- var correctAnswerBpY = getPoints(sine2);
270
- var amplitude1 = studentAnswerBpY.amplitude,
271
- freq1 = studentAnswerBpY.freq,
272
- min1 = studentAnswerBpY.min,
273
- max1 = studentAnswerBpY.max,
274
- edgeAboveZeroX1 = studentAnswerBpY.edgeAboveZeroX,
275
- edgeAboveZeroY1 = studentAnswerBpY.edgeAboveZeroY;
276
- var amplitude2 = correctAnswerBpY.amplitude,
277
- freq2 = correctAnswerBpY.freq,
278
- min2 = correctAnswerBpY.min,
279
- max2 = correctAnswerBpY.max,
280
- edgeAboveZeroX2 = correctAnswerBpY.edgeAboveZeroX,
281
- edgeAboveZeroY2 = correctAnswerBpY.edgeAboveZeroY;
282
- return Math.abs(amplitude1) === Math.abs(amplitude2) && Math.abs(freq1) === Math.abs(freq2) && min1 === min2 && max1 === max2 && edgeAboveZeroX1 === edgeAboveZeroX2 && edgeAboveZeroY1 === edgeAboveZeroY2; // rootDiff1 === rootDiff2);
283
- };
284
-
285
- exports.equalSine = equalSine;
286
-
287
- var equalParabola = function equalParabola(p1, p2) {
288
- var edgeP1 = p1.edge;
289
- var edgeP2 = p2.edge;
290
- var rootP1 = p1.root;
291
- var rootP2 = p2.root;
292
- rootP1 = _objectSpread({}, rootP1);
293
- rootP2 = _objectSpread({}, rootP2);
294
-
295
- var p1edge = edgeP1 || _objectSpread({}, rootP1);
296
-
297
- var p2edge = edgeP2 || _objectSpread({}, rootP2);
298
-
299
- var p1mirrorEdge = {
300
- x: rootP1.x - (p1edge.x - rootP1.x),
301
- y: p1edge.y
302
- };
303
- var p2mirrorEdge = {
304
- x: rootP2.x - (p2edge.x - rootP2.x),
305
- y: p2edge.y
306
- };
307
- if (!edgeP1 || !edgeP2) return false;
308
-
309
- var _pointsToABC = (0, _graphingUtils.pointsToABC)(rootP1, edgeP1, p1mirrorEdge),
310
- a1 = _pointsToABC.a,
311
- b1 = _pointsToABC.b,
312
- c1 = _pointsToABC.c;
313
-
314
- var _pointsToABC2 = (0, _graphingUtils.pointsToABC)(rootP2, edgeP2, p2mirrorEdge),
315
- a2 = _pointsToABC2.a,
316
- b2 = _pointsToABC2.b,
317
- c2 = _pointsToABC2.c; // sometimes numbers have this form: 1.00000000002 because of calculations, we have to round them
318
-
319
-
320
- var round = function round(number) {
321
- return Math.round(number * 10000) / 10000;
322
- };
323
-
324
- return round(a1) === round(a2) && round(b1) === round(b2) && round(c1) === round(c2);
325
- };
326
- /*
327
- * Function to check if given two points for absolute function
328
- * for correct answer and student answer are equal or not.
329
- * @param p1 - student answer
330
- * @param p2 - correct answer
331
- * */
332
-
333
-
334
- exports.equalParabola = equalParabola;
335
-
336
- var equalAbsolute = function equalAbsolute(p1, p2) {
337
- var edgeP1 = p1.edge;
338
- var edgeP2 = p2.edge;
339
- var rootP1 = p1.root;
340
- var rootP2 = p2.root;
341
- rootP1 = _objectSpread({}, rootP1);
342
- rootP2 = _objectSpread({}, rootP2);
343
-
344
- var p1edge = edgeP1 || _objectSpread({}, rootP1);
345
-
346
- var p2edge = edgeP2 || _objectSpread({}, rootP2);
347
-
348
- var p1a1 = (0, _graphingUtils.pointsToAForAbsolute)(rootP1, p1edge);
349
- var p2a2 = (0, _graphingUtils.pointsToAForAbsolute)(rootP2, p2edge); // if both root and a value are equal
350
-
351
- return (0, _isEqual["default"])(rootP2, rootP1) && (0, _isEqual["default"])(p2a2, p1a1);
352
- };
353
- /*
354
- * Function to check if given two points for exponential function
355
- * for correct answer and student answer are equal or not.
356
- * @param p1 - student answer
357
- * @param p2 - correct answer
358
- * */
359
-
360
-
361
- exports.equalAbsolute = equalAbsolute;
362
-
363
- var equalExponential = function equalExponential(p1, p2) {
364
- var edgeP1 = p1.edge;
365
- var edgeP2 = p2.edge;
366
- var rootP1 = p1.root;
367
- var rootP2 = p2.root;
368
- rootP1 = _objectSpread({}, rootP1);
369
- rootP2 = _objectSpread({}, rootP2);
370
-
371
- var p1edge = edgeP1 || _objectSpread({}, rootP1);
372
-
373
- var p2edge = edgeP2 || _objectSpread({}, rootP2);
374
-
375
- var _pointsToABForExponen = (0, _graphingUtils.pointsToABForExponential)(rootP1, p1edge),
376
- a1 = _pointsToABForExponen.a1,
377
- b1 = _pointsToABForExponen.b1;
378
-
379
- var _pointsToABForExponen2 = (0, _graphingUtils.pointsToABForExponential)(rootP2, p2edge),
380
- a2 = _pointsToABForExponen2.a2,
381
- b2 = _pointsToABForExponen2.b2; // if both a and b value are equal
382
-
383
-
384
- return (0, _isEqual["default"])(a2, a1) && (0, _isEqual["default"])(b2, b1);
385
- };
386
-
387
- exports.equalExponential = equalExponential;
388
- var equalMarks = {
389
- circle: function circle(sessAnswer, mark) {
390
- return equalCircle(sessAnswer, mark);
391
- },
392
- line: function line(sessAnswer, mark) {
393
- return equalLine(sessAnswer, mark);
394
- },
395
- parabola: function parabola(sessAnswer, mark) {
396
- return equalParabola(sessAnswer, mark);
397
- },
398
- absolute: function absolute(sessAnswer, mark) {
399
- return equalAbsolute(sessAnswer, mark);
400
- },
401
- exponential: function exponential(sessAnswer, mark) {
402
- return equalExponential(sessAnswer, mark);
403
- },
404
- point: function point(sessAnswer, mark) {
405
- return equalPoint(sessAnswer, mark);
406
- },
407
- polygon: function polygon(sessAnswer, poly) {
408
- return equalPolygon(sessAnswer, poly);
409
- },
410
- ray: function ray(sessAnswer, mark) {
411
- return equalRay(sessAnswer, mark);
412
- },
413
- segment: function segment(sessAnswer, mark) {
414
- return equalSegment(sessAnswer, mark);
415
- },
416
- sine: function sine(sessAnswer, mark) {
417
- return equalSine(sessAnswer, mark);
418
- },
419
- vector: function vector(sessAnswer, mark) {
420
- return equalVector(sessAnswer, mark);
421
- }
422
- };
423
- exports.equalMarks = equalMarks;
424
-
425
- var completePoint = function completePoint(point) {
426
- return point && Number.isFinite(point.x) && Number.isFinite(point.y);
427
- };
428
-
429
- var completeFromTo = function completeFromTo(item) {
430
- return item && completeMark.point(item.from) && completeMark.point(item.to);
431
- };
432
-
433
- var completeRootEdge = function completeRootEdge(item) {
434
- return item && completeMark.point(item.edge) && completeMark.point(item.root);
435
- };
436
-
437
- var completePoints = function completePoints(item) {
438
- return item && item.points && item.points.length && (item.points.filter(function (point) {
439
- return completePoint(point);
440
- }) || []).length === item.points.length;
441
- };
442
-
443
- var completeMark = {
444
- point: completePoint,
445
- line: completeFromTo,
446
- ray: completeFromTo,
447
- segment: completeFromTo,
448
- vector: completeFromTo,
449
- circle: completeRootEdge,
450
- parabola: completeRootEdge,
451
- absolute: completeRootEdge,
452
- exponential: completeRootEdge,
453
- sine: completeRootEdge,
454
- polygon: completePoints
455
- };
456
-
457
- var removeInvalidAnswers = function removeInvalidAnswers(answers) {
458
- return answers ? (answers || []).filter(function (_ref2) {
459
- var type = _ref2.type,
460
- answer = (0, _objectWithoutProperties2["default"])(_ref2, _excluded);
461
- return completeMark[type] ? completeMark[type](answer) : false;
462
- }) : [];
463
- };
464
-
465
- exports.removeInvalidAnswers = removeInvalidAnswers;
466
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils.js"],"names":["equalPoint","A","B","equalLabel","label","x","y","equalSegment","segment1","segment2","from","to","equalVector","vector1","vector2","sortedAnswers","answers","Object","keys","sort","reduce","result","key","returnLineEquationCoefficients","line","xA","yA","xB","yB","a","b","c","getSignificantDecimals","number","Math","round","equalLine","line1","line2","a1","b1","c1","a2","b2","c2","proportions","push","lodash","uniq","length","equalRay","ray1","ray2","mRay1","mRay2","angleRay1","atan2","PI","angleRay2","constructSegmentsFromPoints","points","map","point","index","removeDuplicateSegments","segments","s1","s2","removeInvalidSegments","filter","segment","equalPolygon","poly1","poly2","points1","points2","segments1","segments2","segments1NoDuplicates","segments2NoDuplicates","differentSegments1","differentSegments2","equalCircle","root","edge","equalRootAndEdge","rC1","sqrt","rC2","equalSine","sine1","sine2","getPoints","amplitude","freq","tY","abs","tXRoot","tX","edgeAboveZeroX","edgeAboveZeroY","min","max","studentAnswerBpY","correctAnswerBpY","amplitude1","freq1","min1","max1","edgeAboveZeroX1","edgeAboveZeroY1","amplitude2","freq2","min2","max2","edgeAboveZeroX2","edgeAboveZeroY2","equalParabola","p1","p2","edgeP1","edgeP2","rootP1","rootP2","p1edge","p2edge","p1mirrorEdge","p2mirrorEdge","equalAbsolute","p1a1","p2a2","equalExponential","equalMarks","circle","sessAnswer","mark","parabola","absolute","exponential","polygon","poly","ray","sine","vector","completePoint","Number","isFinite","completeFromTo","item","completeMark","completeRootEdge","completePoints","removeInvalidAnswers","type","answer"],"mappings":"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","sourcesContent":["import isEqual from 'lodash/isEqual';\nimport lodash from 'lodash';\nimport uniqWith from 'lodash/uniqWith';\nimport differenceWith from 'lodash/differenceWith';\nimport {\n getAmplitudeAndFreq,\n pointsToABC,\n pointsToAForAbsolute,\n pointsToABForExponential,\n} from '@pie-lib/pie-toolbox/graphing-utils';\n\nexport const equalPoint = (A, B) => {\n // x1 = x2 & y1 = y2\n let equalLabel = true;\n\n A = {...A};\n B = {...B};\n\n if (A.label || B.label) {\n equalLabel = isEqual(A.label, B.label);\n }\n\n return isEqual(A.x, B.x) && isEqual(A.y, B.y) && equalLabel;\n};\n\nexport const equalSegment = (segment1, segment2) => {\n // A.from = B.from, A.to = B.to OR A.from = B.to, A.to = B.from\n // x1 = x3 & y1 = y3 & x2 = x4 & y2 = y4\n return (\n (isEqual(segment1.from, segment2.from) && isEqual(segment1.to, segment2.to)) ||\n (isEqual(segment1.to, segment2.from) && isEqual(segment1.from, segment2.to))\n );\n};\n\nexport const equalVector = (vector1, vector2) => {\n // A.from = B.from, A.to = B.to;\n // x1 = x3 & y1 = y3 & x2 = x4 & y2 = y4\n return isEqual(vector1.from, vector2.from) && isEqual(vector1.to, vector2.to);\n};\n\n// this function is implemented in configure as well\nexport const sortedAnswers = (answers) =>\n Object.keys(answers || {})\n .sort()\n .reduce((result, key) => {\n if (key !== 'correctAnswer') {\n result[key] = answers[key];\n }\n\n return result;\n }, {});\n\nconst returnLineEquationCoefficients = (line) => {\n line = {...line, to: { ...line.to }, from: { ...line.from }};\n\n const xA = line.from.x;\n const yA = line.from.y;\n const xB = line.to.x;\n const yB = line.to.y;\n\n return {\n a: yB - yA,\n b: xA - xB,\n c: xB * yA - xA * yB,\n };\n};\n\nconst getSignificantDecimals = (number) => Math.round(number * 10000) / 10000;\n\nexport const equalLine = (line1, line2) => {\n // line equation: ax + by + c = 0\n // 2 lines are equal if a1/a2 = b1/b2 = c1/c2, where a, b, c are the coefficients in line equation\n\n // line equation knowing 2 points: (y - yA) / (yB - yA) = (x - xA) / (xB - xA)\n // extending this equation, we get: x * (yB - yA) + y * (xA - xB) + (xB * yA - xA * yB) = 0\n // where a = yB - yA; b = xA - xB; c = xB * yA - xA * yB\n\n const { a: a1, b: b1, c: c1 } = returnLineEquationCoefficients(line1);\n const { a: a2, b: b2, c: c2 } = returnLineEquationCoefficients(line2);\n\n const proportions = [];\n\n if (a2 !== 0) {\n proportions.push(getSignificantDecimals(a1 / a2));\n } else if (a1 !== a2) {\n return false;\n }\n\n if (b2 !== 0) {\n proportions.push(getSignificantDecimals(b1 / b2));\n } else if (b1 !== b2) {\n return false;\n }\n\n if (c2 !== 0) {\n proportions.push(getSignificantDecimals(c1 / c2));\n } else if (c1 !== c2) {\n return false;\n }\n\n return lodash.uniq(proportions).length === 1;\n\n // (y2 - y1)/(x2 - x1) = (y4 - y3)/(x4 - x3);\n // return ((Math.abs((line1.to.y - line1.from.y) / (line1.to.x - line1.from.x))) === (Math.abs((line2.to.y - line2.from.y) / (line2.to.x - line2.from.x))));\n};\n\nexport const equalRay = (ray1, ray2) => {\n ray1 = {...ray1, to: { ...ray1.to }, from: { ...ray1.from }};\n ray2 = {...ray2, to: { ...ray2.to }, from: { ...ray2.from }};\n\n // slope: m = (y2-y1)/(x2-x1)\n // slope & x1 = x3 & y1 = y3 & angle between (x1, y1) (x2, y2) is same as angle between (x3, y3) (x4, y4)\n const mRay1 = (ray1.to.y - ray1.from.y) / (ray1.to.x - ray1.from.x);\n const mRay2 = (ray2.to.y - ray2.from.y) / (ray2.to.x - ray2.from.x);\n const angleRay1 = (Math.atan2(ray1.to.y - ray1.from.y, ray1.to.x - ray1.from.x) * 180) / Math.PI;\n const angleRay2 = (Math.atan2(ray2.to.y - ray2.from.y, ray2.to.x - ray2.from.x) * 180) / Math.PI;\n\n return mRay1 === mRay2 && ray1.from.x === ray2.from.x && ray1.from.y === ray2.from.y && angleRay1 === angleRay2;\n};\n\nexport const constructSegmentsFromPoints = (points) => {\n // takes the list of points that represent a polygon and transforms it into a list of segments; eg.:\n // points: A, B, C, D => segments: AB, BC, CD, DA\n return (points || []).map((point, index) => ({ from: point, to: points[(index + 1) % points.length] }));\n};\n\nexport const removeDuplicateSegments = (segments) => {\n segments = segments || [];\n // removes segments that are duplicates; eg. These segments are the same, so one will be removed:\n // segment1: from: { x: 1, y: 1 }, to: { x: 2, y: 1 }\n // segment2: from: { x: 2, y: 1 }, to: { x: 1, y: 1 }\n return uniqWith(segments, (s1, s2) => equalSegment(s1, s2));\n};\n\nexport const removeInvalidSegments = (segments) => {\n segments = segments || [];\n // removes segments that start in a point and end in the same point (eg.: from: { x: 1, y: 1 }, to: { x: 1, y: 1 })\n\n return segments.filter((segment) => !isEqual(segment.from, segment.to));\n};\n\nexport const equalPolygon = (poly1, poly2) => {\n const { points: points1 } = poly1;\n const { points: points2 } = poly2;\n\n // generate segments\n const segments1 = constructSegmentsFromPoints(points1);\n const segments2 = constructSegmentsFromPoints(points2);\n\n const segments1NoDuplicates = removeDuplicateSegments(removeInvalidSegments(segments1));\n const segments2NoDuplicates = removeDuplicateSegments(removeInvalidSegments(segments2));\n\n const differentSegments1 = differenceWith(segments1NoDuplicates, segments2NoDuplicates, equalSegment);\n const differentSegments2 = differenceWith(segments2NoDuplicates, segments1NoDuplicates, equalSegment);\n\n return (!differentSegments1 || !differentSegments1.length) && (!differentSegments2 || !differentSegments2.length);\n};\n\nexport const equalCircle = (c1, c2) => {\n c1 = {...c1, root: { ...c1.root }, edge: { ...c1.edge }};\n c2 = {...c2, root: { ...c2.root }, edge: { ...c2.edge }};\n const equalRootAndEdge = isEqual(c2.edge, c1.edge) && isEqual(c2.root, c1.root);\n\n // if both edge and root are the same, it means the shapes are exactly the same\n if (equalRootAndEdge) return true;\n\n const rC1 = Math.sqrt((c1.edge.x - c1.root.x) ** 2 + (c1.edge.y - c1.root.y) ** 2);\n const rC2 = Math.sqrt((c2.edge.x - c2.root.x) ** 2 + (c2.edge.y - c2.root.y) ** 2);\n\n // if both root and radius are the same, it means the shapes are equal\n return isEqual(c2.root, c1.root) && isEqual(rC1, rC2);\n};\n\nexport const equalSine = (sine1, sine2) => {\n const getPoints = ({ root, edge }) => {\n root = { ...root};\n edge = { ...edge};\n\n const { amplitude, freq } = getAmplitudeAndFreq(root, edge);\n // the height of the sine wave\n const tY = Math.abs(root.y - edge.y) * 2;\n // the distance on x axis between edge and root\n const tXRoot = Math.abs(root.x - edge.x);\n // the distance on x axis between 2 edges for sine wave (min & max)\n const tX = tXRoot * 2;\n // the first edge placed east side of root\n let edgeAboveZeroX = edge.x;\n let edgeAboveZeroY = edge.y;\n\n // if edge less then 0, find out the appropriate edge placed east side of zero (0)\n while (edgeAboveZeroX < 0 && tX !== 0) {\n edgeAboveZeroX = edgeAboveZeroX + tX;\n edgeAboveZeroY = edgeAboveZeroY < root.y ? edgeAboveZeroY + tY : edgeAboveZeroY - tY;\n }\n\n // if edge more then 0, find out the appropriate edge placed east side of zero (0)\n while (edgeAboveZeroX - tX > 0 && tX !== 0) {\n edgeAboveZeroX = edgeAboveZeroX - tX;\n edgeAboveZeroY = edgeAboveZeroY < root.y ? edgeAboveZeroY + tY : edgeAboveZeroY - tY;\n }\n\n return {\n amplitude: getSignificantDecimals(amplitude),\n freq: getSignificantDecimals(freq),\n min: getSignificantDecimals(edge.y < root.y ? edge.y : edge.y - tY),\n max: getSignificantDecimals(edge.y < root.y ? edge.y + tY : edge.y),\n edgeAboveZeroX: getSignificantDecimals(edgeAboveZeroX),\n edgeAboveZeroY: getSignificantDecimals(edgeAboveZeroY),\n };\n };\n\n const studentAnswerBpY = getPoints(sine1);\n const correctAnswerBpY = getPoints(sine2);\n\n const {\n amplitude: amplitude1,\n freq: freq1,\n min: min1,\n max: max1,\n edgeAboveZeroX: edgeAboveZeroX1,\n edgeAboveZeroY: edgeAboveZeroY1,\n } = studentAnswerBpY;\n const {\n amplitude: amplitude2,\n freq: freq2,\n min: min2,\n max: max2,\n edgeAboveZeroX: edgeAboveZeroX2,\n edgeAboveZeroY: edgeAboveZeroY2,\n } = correctAnswerBpY;\n\n return (\n Math.abs(amplitude1) === Math.abs(amplitude2) &&\n Math.abs(freq1) === Math.abs(freq2) &&\n min1 === min2 &&\n max1 === max2 &&\n edgeAboveZeroX1 === edgeAboveZeroX2 &&\n edgeAboveZeroY1 === edgeAboveZeroY2\n );\n // rootDiff1 === rootDiff2);\n};\n\nexport const equalParabola = (p1, p2) => {\n const { edge: edgeP1 } = p1;\n const { edge: edgeP2 } = p2;\n let { root: rootP1 } = p1;\n let { root: rootP2 } = p2;\n\n rootP1 = {...rootP1};\n rootP2 = {...rootP2};\n\n const p1edge = edgeP1 || { ...rootP1 };\n const p2edge = edgeP2 || { ...rootP2 };\n\n const p1mirrorEdge = { x: rootP1.x - (p1edge.x - rootP1.x), y: p1edge.y };\n const p2mirrorEdge = { x: rootP2.x - (p2edge.x - rootP2.x), y: p2edge.y };\n\n if (!edgeP1 || !edgeP2) return false;\n\n const { a: a1, b: b1, c: c1 } = pointsToABC(rootP1, edgeP1, p1mirrorEdge);\n const { a: a2, b: b2, c: c2 } = pointsToABC(rootP2, edgeP2, p2mirrorEdge);\n\n // sometimes numbers have this form: 1.00000000002 because of calculations, we have to round them\n const round = (number) => Math.round(number * 10000) / 10000;\n\n return round(a1) === round(a2) && round(b1) === round(b2) && round(c1) === round(c2);\n};\n\n/*\n * Function to check if given two points for absolute function\n * for correct answer and student answer are equal or not.\n * @param p1 - student answer\n * @param p2 - correct answer\n * */\nexport const equalAbsolute = (p1, p2) => {\n const { edge: edgeP1 } = p1;\n const { edge: edgeP2 } = p2;\n let { root: rootP1 } = p1;\n let { root: rootP2 } = p2;\n\n rootP1 = { ...rootP1 };\n rootP2 = { ...rootP2 };\n\n const p1edge = edgeP1 || { ...rootP1 };\n const p2edge = edgeP2 || { ...rootP2 };\n\n const p1a1 = pointsToAForAbsolute(rootP1, p1edge);\n const p2a2 = pointsToAForAbsolute(rootP2, p2edge);\n\n // if both root and a value are equal\n return isEqual(rootP2, rootP1) && isEqual(p2a2, p1a1);\n};\n\n/*\n * Function to check if given two points for exponential function\n * for correct answer and student answer are equal or not.\n * @param p1 - student answer\n * @param p2 - correct answer\n * */\nexport const equalExponential = (p1, p2) => {\n const { edge: edgeP1 } = p1;\n const { edge: edgeP2 } = p2;\n let { root: rootP1 } = p1;\n let { root: rootP2 } = p2;\n\n rootP1 = { ...rootP1 };\n rootP2 = { ...rootP2 };\n\n const p1edge = edgeP1 || { ...rootP1 };\n const p2edge = edgeP2 || { ...rootP2 };\n\n const { a1, b1 } = pointsToABForExponential(rootP1, p1edge);\n const { a2, b2 } = pointsToABForExponential(rootP2, p2edge);\n\n // if both a and b value are equal\n return isEqual(a2, a1) && isEqual(b2, b1);\n};\n\nexport const equalMarks = {\n circle: (sessAnswer, mark) => equalCircle(sessAnswer, mark),\n line: (sessAnswer, mark) => equalLine(sessAnswer, mark),\n parabola: (sessAnswer, mark) => equalParabola(sessAnswer, mark),\n absolute: (sessAnswer, mark) => equalAbsolute(sessAnswer, mark),\n exponential: (sessAnswer, mark) => equalExponential(sessAnswer, mark),\n point: (sessAnswer, mark) => equalPoint(sessAnswer, mark),\n polygon: (sessAnswer, poly) => equalPolygon(sessAnswer, poly),\n ray: (sessAnswer, mark) => equalRay(sessAnswer, mark),\n segment: (sessAnswer, mark) => equalSegment(sessAnswer, mark),\n sine: (sessAnswer, mark) => equalSine(sessAnswer, mark),\n vector: (sessAnswer, mark) => equalVector(sessAnswer, mark),\n};\n\nconst completePoint = (point) => point && Number.isFinite(point.x) && Number.isFinite(point.y);\nconst completeFromTo = (item) => item && completeMark.point(item.from) && completeMark.point(item.to);\nconst completeRootEdge = (item) => item && completeMark.point(item.edge) && completeMark.point(item.root);\nconst completePoints = (item) =>\n item &&\n item.points &&\n item.points.length &&\n (item.points.filter((point) => completePoint(point)) || []).length === item.points.length;\n\nconst completeMark = {\n point: completePoint,\n line: completeFromTo,\n ray: completeFromTo,\n segment: completeFromTo,\n vector: completeFromTo,\n circle: completeRootEdge,\n parabola: completeRootEdge,\n absolute: completeRootEdge,\n exponential: completeRootEdge,\n sine: completeRootEdge,\n polygon: completePoints,\n};\n\nexport const removeInvalidAnswers = (answers) =>\n answers\n ? (answers || []).filter(({ type, ...answer }) => (completeMark[type] ? completeMark[type](answer) : false))\n : [];\n"],"file":"utils.js"}
package/lib/index.js DELETED
@@ -1,123 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- Object.defineProperty(exports, "Component", {
9
- enumerable: true,
10
- get: function get() {
11
- return _main["default"];
12
- }
13
- });
14
- exports["default"] = void 0;
15
-
16
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
17
-
18
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
19
-
20
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
21
-
22
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
23
-
24
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
25
-
26
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
27
-
28
- var _wrapNativeSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapNativeSuper"));
29
-
30
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
31
-
32
- var _react = _interopRequireDefault(require("react"));
33
-
34
- var _reactDom = _interopRequireDefault(require("react-dom"));
35
-
36
- var _piePlayerEvents = require("@pie-framework/pie-player-events");
37
-
38
- var _mathRenderingAccessible = require("@pie-lib/pie-toolbox/math-rendering-accessible");
39
-
40
- var _utils = require("./utils");
41
-
42
- var _main = _interopRequireDefault(require("./main"));
43
-
44
- 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); }; }
45
-
46
- 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; } }
47
-
48
- var Graphing = /*#__PURE__*/function (_HTMLElement) {
49
- (0, _inherits2["default"])(Graphing, _HTMLElement);
50
-
51
- var _super = _createSuper(Graphing);
52
-
53
- function Graphing() {
54
- var _this;
55
-
56
- (0, _classCallCheck2["default"])(this, Graphing);
57
- _this = _super.call(this);
58
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "isComplete", function (answer) {
59
- return Array.isArray(answer) && answer.length > 0;
60
- });
61
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeAnswers", function (answer, isUndoOperation) {
62
- // avoid removeInvalidObjects when undo or redo operations are executed
63
- // in order to preserve the logic of undo and redo
64
- if (!isUndoOperation) {
65
- _this._session.answer = (0, _utils.removeInvalidAnswers)(answer);
66
- } else {
67
- _this._session.answer = answer;
68
- }
69
-
70
- _this.dispatchEvent(new _piePlayerEvents.SessionChangedEvent(_this.tagName.toLowerCase(), _this.isComplete(_this._session.answer)));
71
-
72
- _this._render();
73
- });
74
- return _this;
75
- }
76
-
77
- (0, _createClass2["default"])(Graphing, [{
78
- key: "model",
79
- set: function set(m) {
80
- this._model = m;
81
-
82
- this._render();
83
- }
84
- }, {
85
- key: "session",
86
- get: function get() {
87
- return this._session;
88
- },
89
- set: function set(s) {
90
- this._session = s;
91
-
92
- this._render();
93
- }
94
- }, {
95
- key: "connectedCallback",
96
- value: function connectedCallback() {
97
- this._render();
98
- }
99
- }, {
100
- key: "_render",
101
- value: function _render() {
102
- var _this2 = this;
103
-
104
- if (!this._model || !this._session) {
105
- return;
106
- }
107
-
108
- var el = /*#__PURE__*/_react["default"].createElement(_main["default"], {
109
- model: this._model,
110
- session: this._session,
111
- onAnswersChange: this.changeAnswers
112
- });
113
-
114
- _reactDom["default"].render(el, this, function () {
115
- (0, _mathRenderingAccessible.renderMath)(_this2);
116
- });
117
- }
118
- }]);
119
- return Graphing;
120
- }( /*#__PURE__*/(0, _wrapNativeSuper2["default"])(HTMLElement));
121
-
122
- exports["default"] = Graphing;
123
- //# sourceMappingURL=index.js.map
package/lib/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/index.js"],"names":["Graphing","answer","Array","isArray","length","isUndoOperation","_session","dispatchEvent","SessionChangedEvent","tagName","toLowerCase","isComplete","_render","m","_model","s","el","React","createElement","Main","model","session","onAnswersChange","changeAnswers","ReactDOM","render","HTMLElement"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AAEA;;AACA;;;;;;IAIqBA,Q;;;;;AACnB,sBAAc;AAAA;;AAAA;AACZ;AADY,mGAsBD,UAACC,MAAD;AAAA,aAAYC,KAAK,CAACC,OAAN,CAAcF,MAAd,KAAyBA,MAAM,CAACG,MAAP,GAAgB,CAArD;AAAA,KAtBC;AAAA,sGAwBE,UAACH,MAAD,EAASI,eAAT,EAA6B;AAC3C;AACA;AACA,UAAI,CAACA,eAAL,EAAsB;AACpB,cAAKC,QAAL,CAAcL,MAAd,GAAuB,iCAAqBA,MAArB,CAAvB;AACD,OAFD,MAEO;AACL,cAAKK,QAAL,CAAcL,MAAd,GAAuBA,MAAvB;AACD;;AAED,YAAKM,aAAL,CAAmB,IAAIC,oCAAJ,CAAwB,MAAKC,OAAL,CAAaC,WAAb,EAAxB,EAAoD,MAAKC,UAAL,CAAgB,MAAKL,QAAL,CAAcL,MAA9B,CAApD,CAAnB;;AAEA,YAAKW,OAAL;AACD,KApCa;AAAA;AAEb;;;;SAED,aAAUC,CAAV,EAAa;AACX,WAAKC,MAAL,GAAcD,CAAd;;AACA,WAAKD,OAAL;AACD;;;SAOD,eAAc;AACZ,aAAO,KAAKN,QAAZ;AACD,K;SAPD,aAAYS,CAAZ,EAAe;AACb,WAAKT,QAAL,GAAgBS,CAAhB;;AACA,WAAKH,OAAL;AACD;;;WAMD,6BAAoB;AAClB,WAAKA,OAAL;AACD;;;WAkBD,mBAAU;AAAA;;AACR,UAAI,CAAC,KAAKE,MAAN,IAAgB,CAAC,KAAKR,QAA1B,EAAoC;AAClC;AACD;;AAED,UAAMU,EAAE,gBAAGC,kBAAMC,aAAN,CAAoBC,gBAApB,EAA0B;AACnCC,QAAAA,KAAK,EAAE,KAAKN,MADuB;AAEnCO,QAAAA,OAAO,EAAE,KAAKf,QAFqB;AAGnCgB,QAAAA,eAAe,EAAE,KAAKC;AAHa,OAA1B,CAAX;;AAMAC,2BAASC,MAAT,CAAgBT,EAAhB,EAAoB,IAApB,EAA0B,YAAM;AAC9B,iDAAW,MAAX;AACD,OAFD;AAGD;;;kDArDmCU,W","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { SessionChangedEvent } from '@pie-framework/pie-player-events';\nimport { renderMath } from '@pie-lib/pie-toolbox/math-rendering-accessible';\n\nimport { removeInvalidAnswers } from './utils';\nimport Main from './main';\n\nexport { Main as Component };\n\nexport default class Graphing extends HTMLElement {\n constructor() {\n super();\n }\n\n set model(m) {\n this._model = m;\n this._render();\n }\n\n set session(s) {\n this._session = s;\n this._render();\n }\n\n get session() {\n return this._session;\n }\n\n connectedCallback() {\n this._render();\n }\n\n isComplete = (answer) => Array.isArray(answer) && answer.length > 0;\n\n changeAnswers = (answer, isUndoOperation) => {\n // avoid removeInvalidObjects when undo or redo operations are executed\n // in order to preserve the logic of undo and redo\n if (!isUndoOperation) {\n this._session.answer = removeInvalidAnswers(answer);\n } else {\n this._session.answer = answer;\n }\n\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), this.isComplete(this._session.answer)));\n\n this._render();\n };\n\n _render() {\n if (!this._model || !this._session) {\n return;\n }\n\n const el = React.createElement(Main, {\n model: this._model,\n session: this._session,\n onAnswersChange: this.changeAnswers,\n });\n\n ReactDOM.render(el, this, () => {\n renderMath(this);\n });\n }\n}\n"],"file":"index.js"}