@pie-element/match 11.0.5-esm.0 → 11.1.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/CHANGELOG.md +63 -0
  2. package/configure/CHANGELOG.md +63 -0
  3. package/configure/lib/add-row.js +27 -73
  4. package/configure/lib/add-row.js.map +1 -1
  5. package/configure/lib/answer-config-block.js +262 -335
  6. package/configure/lib/answer-config-block.js.map +1 -1
  7. package/configure/lib/common.js +18 -33
  8. package/configure/lib/common.js.map +1 -1
  9. package/configure/lib/configure.js +330 -420
  10. package/configure/lib/configure.js.map +1 -1
  11. package/configure/lib/defaults.js +5 -4
  12. package/configure/lib/defaults.js.map +1 -1
  13. package/configure/lib/general-config-block.js +123 -190
  14. package/configure/lib/general-config-block.js.map +1 -1
  15. package/configure/lib/index.js +117 -190
  16. package/configure/lib/index.js.map +1 -1
  17. package/configure/lib/row.js +269 -377
  18. package/configure/lib/row.js.map +1 -1
  19. package/configure/lib/utils.js +4 -15
  20. package/configure/lib/utils.js.map +1 -1
  21. package/configure/package.json +15 -14
  22. package/controller/CHANGELOG.md +49 -0
  23. package/controller/lib/defaults.js +2 -3
  24. package/controller/lib/defaults.js.map +1 -1
  25. package/controller/lib/index.js +173 -301
  26. package/controller/lib/index.js.map +1 -1
  27. package/controller/package.json +6 -6
  28. package/lib/answer-grid.js +142 -242
  29. package/lib/answer-grid.js.map +1 -1
  30. package/lib/index.js +59 -108
  31. package/lib/index.js.map +1 -1
  32. package/lib/main.js +123 -191
  33. package/lib/main.js.map +1 -1
  34. package/package.json +18 -29
  35. package/esm/configure.js +0 -3936
  36. package/esm/configure.js.map +0 -1
  37. package/esm/controller.js +0 -428
  38. package/esm/controller.js.map +0 -1
  39. package/esm/element.js +0 -472
  40. package/esm/element.js.map +0 -1
package/esm/element.js DELETED
@@ -1,472 +0,0 @@
1
- import React from 'react';
2
- import ReactDOM from 'react-dom';
3
- import PropTypes from 'prop-types';
4
- import CorrectAnswerToggle from '@pie-lib/correct-answer-toggle';
5
- import { color, hasText, hasMedia, UiLayout, Collapsible, PreviewPrompt, Feedback } from '@pie-lib/render-ui';
6
- import cx from 'classnames';
7
- import Radio from '@material-ui/core/Radio';
8
- import Checkbox from '@material-ui/core/Checkbox';
9
- import Typography from '@material-ui/core/Typography';
10
- import { withStyles } from '@material-ui/core/styles';
11
- import { SessionChangedEvent } from '@pie-framework/pie-player-events';
12
- import { renderMath } from '@pie-lib/math-rendering';
13
-
14
- function _extends() {
15
- _extends = Object.assign || function (target) {
16
- for (var i = 1; i < arguments.length; i++) {
17
- var source = arguments[i];
18
-
19
- for (var key in source) {
20
- if (Object.prototype.hasOwnProperty.call(source, key)) {
21
- target[key] = source[key];
22
- }
23
- }
24
- }
25
-
26
- return target;
27
- };
28
-
29
- return _extends.apply(this, arguments);
30
- }
31
-
32
- class AnswerGrid extends React.Component {
33
- constructor(...args) {
34
- super(...args);
35
-
36
- this.onRowValueChange = (rowId, answerIndex) => event => {
37
- const {
38
- onAnswerChange,
39
- choiceMode,
40
- answers
41
- } = this.props;
42
-
43
- const newAnswers = _extends({}, answers);
44
-
45
- if (choiceMode === 'radio') {
46
- for (let i = 0; i < newAnswers[rowId].length; i++) {
47
- newAnswers[rowId][i] = false;
48
- }
49
- }
50
-
51
- newAnswers[rowId][answerIndex] = event.target.checked;
52
- onAnswerChange(newAnswers);
53
- };
54
-
55
- this.answerIsCorrect = (rowId, rowValue, rowValueIndex) => {
56
- const {
57
- correctAnswers
58
- } = this.props;
59
- return correctAnswers[rowId][rowValueIndex] === rowValue && rowValue === true;
60
- };
61
-
62
- this.answerIsIncorrect = (rowId, rowValue, rowValueIndex) => {
63
- const {
64
- correctAnswers
65
- } = this.props;
66
- return correctAnswers[rowId][rowValueIndex] === true && rowValue === false || correctAnswers[rowId][rowValueIndex] === false && rowValue === true;
67
- };
68
- }
69
-
70
- render() {
71
- const {
72
- classes,
73
- showCorrect,
74
- headers,
75
- rows,
76
- choiceMode,
77
- answers,
78
- disabled,
79
- view
80
- } = this.props;
81
- const Tag = choiceMode === 'radio' ? Radio : Checkbox;
82
- const evaluate = disabled && !view;
83
-
84
- if (!rows || rows.length === 0) {
85
- return /*#__PURE__*/React.createElement("div", {
86
- className: classes.controlsContainer
87
- }, /*#__PURE__*/React.createElement(Typography, {
88
- className: classes.empty,
89
- component: "div"
90
- }, "There are currently no questions to show."));
91
- }
92
-
93
- return /*#__PURE__*/React.createElement("div", {
94
- className: classes.controlsContainer
95
- }, /*#__PURE__*/React.createElement("table", {
96
- className: classes.table
97
- }, /*#__PURE__*/React.createElement("colgroup", null, (headers || []).map((header, idx) => /*#__PURE__*/React.createElement("col", {
98
- key: `col-${idx}`
99
- }))), /*#__PURE__*/React.createElement("thead", null, /*#__PURE__*/React.createElement("tr", null, (headers || []).map((header, idx) => /*#__PURE__*/React.createElement("th", {
100
- className: classes.rowHeader,
101
- key: `th-${idx}`,
102
- "data-colno": `${idx}`,
103
- scope: "row"
104
- }, /*#__PURE__*/React.createElement("div", {
105
- className: cx(classes.rowItem, {
106
- [classes.questionText]: idx === 0
107
- }),
108
- dangerouslySetInnerHTML: {
109
- __html: header
110
- }
111
- }))))), (rows || []).map((row, idx) => /*#__PURE__*/React.createElement("tbody", {
112
- key: `row-${idx}`,
113
- role: "group"
114
- }, /*#__PURE__*/React.createElement("tr", {
115
- className: classes.separator
116
- }, /*#__PURE__*/React.createElement("td", {
117
- key: `td-title-${idx}`,
118
- "data-colno": '0'
119
- }, /*#__PURE__*/React.createElement("div", {
120
- className: cx(classes.rowItem, classes.questionText),
121
- dangerouslySetInnerHTML: {
122
- __html: row.title
123
- }
124
- })), (answers[row.id] || []).map((rowItem, answerIndex) => /*#__PURE__*/React.createElement("td", {
125
- key: `td-${idx}-${answerIndex}`,
126
- className: classes.column,
127
- "data-colno": `${answerIndex + 1}`
128
- }, /*#__PURE__*/React.createElement("div", {
129
- className: classes.rowItem
130
- }, /*#__PURE__*/React.createElement(Tag, {
131
- className: cx(classes.tag, {
132
- [classes.correct]: showCorrect && rowItem === true || evaluate && this.answerIsCorrect(row.id, rowItem, answerIndex),
133
- [classes.checked]: rowItem === true && !evaluate,
134
- [classes.tagDisabled]: disabled,
135
- [classes.incorrect]: evaluate && this.answerIsIncorrect(row.id, rowItem, answerIndex)
136
- }),
137
- disabled: disabled,
138
- onChange: this.onRowValueChange(row.id, answerIndex),
139
- checked: rowItem === true
140
- })))))))));
141
- }
142
-
143
- }
144
- AnswerGrid.propTypes = {
145
- classes: PropTypes.object.isRequired,
146
- correctAnswers: PropTypes.object,
147
- view: PropTypes.bool.isRequired,
148
- showCorrect: PropTypes.bool.isRequired,
149
- disabled: PropTypes.bool.isRequired,
150
- onAnswerChange: PropTypes.func.isRequired,
151
- choiceMode: PropTypes.string.isRequired,
152
- rows: PropTypes.array.isRequired,
153
- headers: PropTypes.array.isRequired,
154
- answers: PropTypes.object.isRequired
155
- };
156
-
157
- const styles$1 = theme => ({
158
- controlsContainer: {
159
- marginLeft: 'auto',
160
- marginRight: 'auto',
161
- marginTop: theme.spacing.unit,
162
- marginBottom: theme.spacing.unit
163
- },
164
- column: {
165
- padding: '5px 0'
166
- },
167
- correct: {
168
- color: `${color.correct()} !important`
169
- },
170
- incorrect: {
171
- color: `${color.incorrect()} !important`
172
- },
173
- empty: {
174
- margin: theme.spacing.unit * 2
175
- },
176
- rowContainer: {
177
- display: 'flex',
178
- alignItems: 'center'
179
- },
180
- rowHeader: {
181
- padding: 0
182
- },
183
- rowItem: {
184
- padding: theme.spacing.unit * 1.5,
185
- textAlign: 'center'
186
- },
187
- separator: {
188
- border: 0,
189
- borderTop: `2.5px solid ${color.primaryLight()}`,
190
- width: '100%'
191
- },
192
- tag: {
193
- padding: '6px',
194
- color: color.text(),
195
- '&:hover': {
196
- color: color.primaryLight()
197
- },
198
- '& input': {
199
- width: '100% !important'
200
- }
201
- },
202
- checked: {
203
- color: `${color.primary()} !important`
204
- },
205
- tagDisabled: {
206
- color: color.disabled(),
207
- cursor: 'not-allowed !important',
208
- pointerEvents: 'initial !important',
209
- opacity: 0.7,
210
- '&:hover': {
211
- color: color.disabled()
212
- }
213
- },
214
- table: {
215
- color: color.text(),
216
- backgroundColor: color.background(),
217
- borderCollapse: 'collapse',
218
- borderSpacing: 0,
219
- marginBottom: 0
220
- },
221
- questionText: {
222
- textAlign: 'left'
223
- }
224
- });
225
-
226
- var AnswerGrid$1 = withStyles(styles$1)(AnswerGrid);
227
-
228
- class Main extends React.Component {
229
- constructor(props) {
230
- super(props);
231
-
232
- this.generateAnswers = model => {
233
- var _model$rows;
234
-
235
- const answers = {};
236
- (_model$rows = model.rows) == null ? void 0 : _model$rows.forEach(row => {
237
- answers[row.id] = new Array(model.layout - 1).fill(false);
238
- });
239
- return answers;
240
- };
241
-
242
- this.isAnswerRegenerationRequired = nextProps => {
243
- const {
244
- model: {
245
- choiceMode,
246
- layout,
247
- rows
248
- } = {}
249
- } = this.props;
250
- const {
251
- session: {
252
- answers
253
- } = {}
254
- } = nextProps;
255
- let isRequired = false;
256
-
257
- if (choiceMode !== nextProps.model.choiceMode) {
258
- isRequired = true;
259
- }
260
-
261
- if (layout !== nextProps.model.layout) {
262
- isRequired = true;
263
- }
264
-
265
- if (rows.length !== nextProps.model.rows.length || answers && nextProps.model.rows.length !== Object.keys(answers).length) {
266
- isRequired = true;
267
- }
268
-
269
- return isRequired || !answers;
270
- };
271
-
272
- this.callOnSessionChange = () => {
273
- const {
274
- onSessionChange
275
- } = this.props;
276
-
277
- if (onSessionChange) {
278
- onSessionChange(this.state.session);
279
- }
280
- };
281
-
282
- this.toggleShowCorrect = show => {
283
- this.setState({
284
- showCorrect: show
285
- });
286
- };
287
-
288
- this.onAnswerChange = newAnswers => {
289
- this.setState(state => ({
290
- session: _extends({}, state.session, {
291
- answers: newAnswers
292
- })
293
- }), this.callOnSessionChange);
294
- };
295
-
296
- this.state = {
297
- session: _extends({}, props.session, {
298
- answers: props.session && props.session.answers || this.generateAnswers(props.model)
299
- }),
300
- showCorrect: false
301
- };
302
- this.callOnSessionChange();
303
- }
304
-
305
- UNSAFE_componentWillReceiveProps(nextProps) {
306
- const regenAnswers = this.isAnswerRegenerationRequired(nextProps);
307
- this.setState(state => ({
308
- session: _extends({}, nextProps.session, {
309
- // regenerate answers if layout or choiceMode change
310
- answers: regenAnswers ? this.generateAnswers(nextProps.model) : nextProps.session.answers
311
- }),
312
- showCorrect: this.props.model.disabled && !nextProps.model.disabled && state.showCorrect ? false : state.showCorrect
313
- }), () => {
314
- if (regenAnswers) this.callOnSessionChange();
315
- });
316
- }
317
-
318
- render() {
319
- const {
320
- model,
321
- classes
322
- } = this.props;
323
- const {
324
- showCorrect,
325
- session
326
- } = this.state;
327
- const {
328
- correctness = {},
329
- extraCSSRules,
330
- language
331
- } = model;
332
- const showCorrectAnswerToggle = correctness.correctness && correctness.correctness !== 'correct';
333
- const showRationale = model.rationale && (hasText(model.rationale) || hasMedia(model.rationale));
334
- const showTeacherInstructions = model.teacherInstructions && (hasText(model.teacherInstructions) || hasMedia(model.teacherInstructions));
335
- return /*#__PURE__*/React.createElement(UiLayout, {
336
- extraCSSRules: extraCSSRules,
337
- className: classes.mainContainer
338
- }, showTeacherInstructions && /*#__PURE__*/React.createElement(Collapsible, {
339
- labels: {
340
- hidden: 'Show Teacher Instructions',
341
- visible: 'Hide Teacher Instructions'
342
- },
343
- className: classes.collapsible
344
- }, /*#__PURE__*/React.createElement(PreviewPrompt, {
345
- prompt: model.teacherInstructions
346
- })), model.prompt && /*#__PURE__*/React.createElement("div", {
347
- className: classes.prompt
348
- }, /*#__PURE__*/React.createElement(PreviewPrompt, {
349
- prompt: model.prompt
350
- })), /*#__PURE__*/React.createElement(CorrectAnswerToggle, {
351
- language: language,
352
- show: showCorrectAnswerToggle,
353
- toggled: showCorrect,
354
- onToggle: this.toggleShowCorrect
355
- }), /*#__PURE__*/React.createElement(AnswerGrid$1, {
356
- showCorrect: showCorrect,
357
- correctAnswers: model.correctResponse,
358
- disabled: model.disabled,
359
- view: model.view,
360
- onAnswerChange: this.onAnswerChange,
361
- choiceMode: model.choiceMode,
362
- answers: showCorrect ? model.correctResponse || {} : session.answers,
363
- headers: model.headers,
364
- rows: model.rows
365
- }), showRationale && /*#__PURE__*/React.createElement(Collapsible, {
366
- labels: {
367
- hidden: 'Show Rationale',
368
- visible: 'Hide Rationale'
369
- },
370
- className: classes.collapsible
371
- }, /*#__PURE__*/React.createElement(PreviewPrompt, {
372
- prompt: model.rationale
373
- })), model.feedback && /*#__PURE__*/React.createElement(Feedback, {
374
- correctness: correctness.correctness,
375
- feedback: model.feedback
376
- }));
377
- }
378
-
379
- }
380
- Main.propTypes = {
381
- classes: PropTypes.object,
382
- session: PropTypes.object.isRequired,
383
- onSessionChange: PropTypes.func,
384
- model: PropTypes.object.isRequired
385
- };
386
-
387
- const styles = theme => ({
388
- mainContainer: {
389
- color: color.text(),
390
- backgroundColor: color.background()
391
- },
392
- main: {
393
- width: '100%'
394
- },
395
- prompt: {
396
- verticalAlign: 'middle'
397
- },
398
- collapsible: {
399
- marginBottom: theme.spacing.unit * 2
400
- }
401
- });
402
-
403
- var Main$1 = withStyles(styles)(Main);
404
-
405
- const isComplete = (session, model) => {
406
- var _model$rows;
407
-
408
- const ids = (model == null ? void 0 : (_model$rows = model.rows) == null ? void 0 : _model$rows.map(r => r.id)) || [];
409
- return ids.reduce((acc, id) => {
410
- if (!acc) {
411
- return false;
412
- }
413
-
414
- const arr = session.answers && session.answers[id];
415
- const hasChoice = Array.isArray(arr) && arr.includes(true);
416
- return hasChoice && acc;
417
- }, true);
418
- };
419
- class Match extends HTMLElement {
420
- constructor() {
421
- super();
422
- }
423
-
424
- set model(m) {
425
- // config object props should be part of the model props
426
- // model.config should be no longer used
427
- this._model = _extends({}, m, (m == null ? void 0 : m.config) || {});
428
-
429
- this._render();
430
- }
431
-
432
- set session(s) {
433
- this._session = s;
434
-
435
- this._render();
436
- }
437
-
438
- get session() {
439
- return this._session;
440
- }
441
-
442
- sessionChanged(s) {
443
- this._session.answers = s.answers;
444
- const complete = isComplete(this._session, this._model);
445
- this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), complete));
446
-
447
- this._render();
448
- }
449
-
450
- connectedCallback() {
451
- this._render();
452
- }
453
-
454
- _render() {
455
- if (!this._model || !this._session) {
456
- return;
457
- }
458
-
459
- const el = /*#__PURE__*/React.createElement(Main$1, {
460
- model: this._model,
461
- session: this._session,
462
- onSessionChange: this.sessionChanged.bind(this)
463
- });
464
- ReactDOM.render(el, this, () => {
465
- renderMath(this);
466
- });
467
- }
468
-
469
- }
470
-
471
- export { Main$1 as Component, Match as default, isComplete };
472
- //# sourceMappingURL=element.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"element.js","sources":["../src/answer-grid.jsx","../src/main.jsx","../src/index.js"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport cx from 'classnames';\nimport Radio from '@material-ui/core/Radio';\nimport Checkbox from '@material-ui/core/Checkbox';\nimport Typography from '@material-ui/core/Typography';\nimport { withStyles } from '@material-ui/core/styles';\nimport { color } from '@pie-lib/render-ui';\n\nexport class AnswerGrid extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n correctAnswers: PropTypes.object,\n view: PropTypes.bool.isRequired,\n showCorrect: PropTypes.bool.isRequired,\n disabled: PropTypes.bool.isRequired,\n onAnswerChange: PropTypes.func.isRequired,\n choiceMode: PropTypes.string.isRequired,\n rows: PropTypes.array.isRequired,\n headers: PropTypes.array.isRequired,\n answers: PropTypes.object.isRequired,\n };\n\n onRowValueChange = (rowId, answerIndex) => (event) => {\n const { onAnswerChange, choiceMode, answers } = this.props;\n const newAnswers = { ...answers };\n\n if (choiceMode === 'radio') {\n for (let i = 0; i < newAnswers[rowId].length; i++) {\n newAnswers[rowId][i] = false;\n }\n }\n\n newAnswers[rowId][answerIndex] = event.target.checked;\n\n onAnswerChange(newAnswers);\n };\n\n answerIsCorrect = (rowId, rowValue, rowValueIndex) => {\n const { correctAnswers } = this.props;\n\n return correctAnswers[rowId][rowValueIndex] === rowValue && rowValue === true;\n };\n\n // needs a separate method because what isn't correct isn't necessarily incorrect\n answerIsIncorrect = (rowId, rowValue, rowValueIndex) => {\n const { correctAnswers } = this.props;\n\n return (\n (correctAnswers[rowId][rowValueIndex] === true && rowValue === false) ||\n (correctAnswers[rowId][rowValueIndex] === false && rowValue === true)\n );\n };\n\n render() {\n const { classes, showCorrect, headers, rows, choiceMode, answers, disabled, view } = this.props;\n const Tag = choiceMode === 'radio' ? Radio : Checkbox;\n const evaluate = disabled && !view;\n\n if (!rows || rows.length === 0) {\n return (\n <div className={classes.controlsContainer}>\n <Typography className={classes.empty} component=\"div\">\n There are currently no questions to show.\n </Typography>\n </div>\n );\n }\n\n return (\n <div className={classes.controlsContainer}>\n <table className={classes.table}>\n <colgroup>\n {(headers || []).map((header, idx) => (\n <col key={`col-${idx}`} />\n ))}\n </colgroup>\n\n <thead>\n <tr>\n {(headers || []).map((header, idx) => (\n <th className={classes.rowHeader} key={`th-${idx}`} data-colno={`${idx}`} scope=\"row\">\n <div\n className={cx(classes.rowItem, { [classes.questionText]: idx === 0 })}\n dangerouslySetInnerHTML={{ __html: header }}\n />\n </th>\n ))}\n </tr>\n </thead>\n\n {(rows || []).map((row, idx) => (\n <tbody key={`row-${idx}`} role=\"group\">\n <tr className={classes.separator}>\n <td key={`td-title-${idx}`} data-colno={'0'}>\n <div\n className={cx(classes.rowItem, classes.questionText)}\n dangerouslySetInnerHTML={{ __html: row.title }}\n />\n </td>\n\n {(answers[row.id] || []).map((rowItem, answerIndex) => (\n <td key={`td-${idx}-${answerIndex}`} className={classes.column} data-colno={`${answerIndex + 1}`}>\n <div className={classes.rowItem}>\n <Tag\n className={cx(classes.tag, {\n [classes.correct]:\n (showCorrect && rowItem === true) ||\n (evaluate && this.answerIsCorrect(row.id, rowItem, answerIndex)),\n [classes.checked]: rowItem === true && !evaluate,\n [classes.tagDisabled]: disabled,\n [classes.incorrect]: evaluate && this.answerIsIncorrect(row.id, rowItem, answerIndex),\n })}\n disabled={disabled}\n onChange={this.onRowValueChange(row.id, answerIndex)}\n checked={rowItem === true}\n />\n </div>\n </td>\n ))}\n </tr>\n </tbody>\n ))}\n </table>\n </div>\n );\n }\n}\n\nconst styles = (theme) => ({\n controlsContainer: {\n marginLeft: 'auto',\n marginRight: 'auto',\n marginTop: theme.spacing.unit,\n marginBottom: theme.spacing.unit,\n },\n column: {\n padding: '5px 0',\n },\n correct: {\n color: `${color.correct()} !important`,\n },\n incorrect: {\n color: `${color.incorrect()} !important`,\n },\n empty: {\n margin: theme.spacing.unit * 2,\n },\n rowContainer: {\n display: 'flex',\n alignItems: 'center',\n },\n rowHeader: {\n padding: 0,\n },\n rowItem: {\n padding: theme.spacing.unit * 1.5,\n textAlign: 'center',\n },\n separator: {\n border: 0,\n borderTop: `2.5px solid ${color.primaryLight()}`,\n width: '100%',\n },\n tag: {\n padding: '6px',\n color: color.text(),\n '&:hover': {\n color: color.primaryLight(),\n },\n '& input': {\n width: '100% !important',\n },\n },\n checked: {\n color: `${color.primary()} !important`,\n },\n tagDisabled: {\n color: color.disabled(),\n cursor: 'not-allowed !important',\n pointerEvents: 'initial !important',\n opacity: 0.7,\n '&:hover': {\n color: color.disabled(),\n },\n },\n table: {\n color: color.text(),\n backgroundColor: color.background(),\n borderCollapse: 'collapse',\n borderSpacing: 0,\n marginBottom: 0,\n },\n questionText: {\n textAlign: 'left',\n },\n});\n\nexport default withStyles(styles)(AnswerGrid);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport CorrectAnswerToggle from '@pie-lib/correct-answer-toggle';\nimport { color, Collapsible, Feedback, hasText, PreviewPrompt, UiLayout, hasMedia } from '@pie-lib/render-ui';\nimport AnswerGrid from './answer-grid';\nimport { withStyles } from '@material-ui/core/styles';\n\nexport class Main extends React.Component {\n static propTypes = {\n classes: PropTypes.object,\n session: PropTypes.object.isRequired,\n onSessionChange: PropTypes.func,\n model: PropTypes.object.isRequired,\n };\n\n constructor(props) {\n super(props);\n\n this.state = {\n session: {\n ...props.session,\n answers: (props.session && props.session.answers) || this.generateAnswers(props.model),\n },\n showCorrect: false,\n };\n\n this.callOnSessionChange();\n }\n\n generateAnswers = (model) => {\n const answers = {};\n\n model.rows?.forEach((row) => {\n answers[row.id] = new Array(model.layout - 1).fill(false);\n });\n\n return answers;\n };\n\n isAnswerRegenerationRequired = (nextProps) => {\n const { model: { choiceMode, layout, rows } = {} } = this.props;\n const { session: { answers } = {} } = nextProps;\n let isRequired = false;\n\n if (choiceMode !== nextProps.model.choiceMode) {\n isRequired = true;\n }\n\n if (layout !== nextProps.model.layout) {\n isRequired = true;\n }\n\n if (\n rows.length !== nextProps.model.rows.length ||\n (answers && nextProps.model.rows.length !== Object.keys(answers).length)\n ) {\n isRequired = true;\n }\n\n return isRequired || !answers;\n };\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n const regenAnswers = this.isAnswerRegenerationRequired(nextProps);\n\n this.setState(\n (state) => ({\n session: {\n ...nextProps.session,\n // regenerate answers if layout or choiceMode change\n answers: regenAnswers ? this.generateAnswers(nextProps.model) : nextProps.session.answers,\n },\n showCorrect:\n this.props.model.disabled && !nextProps.model.disabled && state.showCorrect ? false : state.showCorrect,\n }),\n () => {\n if (regenAnswers) this.callOnSessionChange();\n },\n );\n }\n\n callOnSessionChange = () => {\n const { onSessionChange } = this.props;\n\n if (onSessionChange) {\n onSessionChange(this.state.session);\n }\n };\n\n toggleShowCorrect = (show) => {\n this.setState({ showCorrect: show });\n };\n\n onAnswerChange = (newAnswers) => {\n this.setState(\n (state) => ({\n session: {\n ...state.session,\n answers: newAnswers,\n },\n }),\n this.callOnSessionChange,\n );\n };\n\n render() {\n const { model, classes } = this.props;\n const { showCorrect, session } = this.state;\n const { correctness = {}, extraCSSRules, language } = model;\n const showCorrectAnswerToggle = correctness.correctness && correctness.correctness !== 'correct';\n\n const showRationale = model.rationale && (hasText(model.rationale) || hasMedia(model.rationale));\n const showTeacherInstructions =\n model.teacherInstructions && (hasText(model.teacherInstructions) || hasMedia(model.teacherInstructions));\n\n return (\n <UiLayout extraCSSRules={extraCSSRules} className={classes.mainContainer}>\n {showTeacherInstructions && (\n <Collapsible\n labels={{\n hidden: 'Show Teacher Instructions',\n visible: 'Hide Teacher Instructions',\n }}\n className={classes.collapsible}\n >\n <PreviewPrompt prompt={model.teacherInstructions} />\n </Collapsible>\n )}\n\n {model.prompt && (\n <div className={classes.prompt}>\n <PreviewPrompt prompt={model.prompt} />\n </div>\n )}\n\n <CorrectAnswerToggle\n language={language}\n show={showCorrectAnswerToggle}\n toggled={showCorrect}\n onToggle={this.toggleShowCorrect}\n />\n\n <AnswerGrid\n showCorrect={showCorrect}\n correctAnswers={model.correctResponse}\n disabled={model.disabled}\n view={model.view}\n onAnswerChange={this.onAnswerChange}\n choiceMode={model.choiceMode}\n answers={showCorrect ? model.correctResponse || {} : session.answers}\n headers={model.headers}\n rows={model.rows}\n />\n\n {showRationale && (\n <Collapsible labels={{ hidden: 'Show Rationale', visible: 'Hide Rationale' }} className={classes.collapsible}>\n <PreviewPrompt prompt={model.rationale} />\n </Collapsible>\n )}\n\n {model.feedback && <Feedback correctness={correctness.correctness} feedback={model.feedback} />}\n </UiLayout>\n );\n }\n}\n\nconst styles = (theme) => ({\n mainContainer: {\n color: color.text(),\n backgroundColor: color.background(),\n },\n main: {\n width: '100%',\n },\n prompt: {\n verticalAlign: 'middle',\n },\n collapsible: {\n marginBottom: theme.spacing.unit * 2,\n },\n});\n\nexport default withStyles(styles)(Main);\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport Main from './main';\nimport { SessionChangedEvent } from '@pie-framework/pie-player-events';\nimport { renderMath } from '@pie-lib/math-rendering';\n\nexport { Main as Component };\n\nexport const isComplete = (session, model) => {\n const ids = model?.rows?.map((r) => r.id) || [];\n\n return ids.reduce((acc, id) => {\n if (!acc) {\n return false;\n }\n\n const arr = session.answers && session.answers[id];\n const hasChoice = Array.isArray(arr) && arr.includes(true);\n\n return hasChoice && acc;\n }, true);\n};\n\nexport default class Match extends HTMLElement {\n constructor() {\n super();\n }\n\n set model(m) {\n // config object props should be part of the model props\n // model.config should be no longer used\n this._model = { ...m, ...(m?.config || {}) };\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 sessionChanged(s) {\n this._session.answers = s.answers;\n const complete = isComplete(this._session, this._model);\n\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), complete));\n\n this._render();\n }\n\n connectedCallback() {\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 onSessionChange: this.sessionChanged.bind(this),\n });\n\n ReactDOM.render(el, this, () => {\n renderMath(this);\n });\n }\n}\n"],"names":["AnswerGrid","React","Component","onRowValueChange","rowId","answerIndex","event","onAnswerChange","choiceMode","answers","props","newAnswers","i","length","target","checked","answerIsCorrect","rowValue","rowValueIndex","correctAnswers","answerIsIncorrect","render","classes","showCorrect","headers","rows","disabled","view","Tag","Radio","Checkbox","evaluate","controlsContainer","empty","table","map","header","idx","rowHeader","cx","rowItem","questionText","__html","row","separator","title","id","column","tag","correct","tagDisabled","incorrect","propTypes","PropTypes","object","isRequired","bool","func","string","array","styles","theme","marginLeft","marginRight","marginTop","spacing","unit","marginBottom","padding","color","margin","rowContainer","display","alignItems","textAlign","border","borderTop","primaryLight","width","text","primary","cursor","pointerEvents","opacity","backgroundColor","background","borderCollapse","borderSpacing","withStyles","Main","constructor","generateAnswers","model","forEach","Array","layout","fill","isAnswerRegenerationRequired","nextProps","session","Object","keys","callOnSessionChange","onSessionChange","state","toggleShowCorrect","show","setState","UNSAFE_componentWillReceiveProps","regenAnswers","correctness","extraCSSRules","language","showCorrectAnswerToggle","showRationale","rationale","hasText","hasMedia","showTeacherInstructions","teacherInstructions","mainContainer","hidden","visible","collapsible","prompt","correctResponse","feedback","main","verticalAlign","isComplete","ids","r","reduce","acc","arr","hasChoice","isArray","includes","Match","HTMLElement","m","_model","config","_render","s","_session","sessionChanged","complete","dispatchEvent","SessionChangedEvent","tagName","toLowerCase","connectedCallback","el","createElement","bind","ReactDOM","renderMath"],"mappings":"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"}