@pie-element/multiple-choice 9.7.2-next.20 → 9.7.2-next.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.js CHANGED
@@ -33,8 +33,6 @@ var _debounce = _interopRequireDefault(require("lodash/debounce"));
33
33
 
34
34
  var _debug = _interopRequireDefault(require("debug"));
35
35
 
36
- var _piePlayerEvents = require("@pie-framework/pie-player-events");
37
-
38
36
  var _mathRendering = require("@pie-lib/pie-toolbox/math-rendering");
39
37
 
40
38
  var _sessionUpdater = require("./session-updater");
@@ -52,8 +50,7 @@ var isComplete = function isComplete(session, model) {
52
50
 
53
51
  var _ref = model || {},
54
52
  choiceMode = _ref.choiceMode,
55
- _ref$minSelections = _ref.minSelections,
56
- minSelections = _ref$minSelections === void 0 ? 1 : _ref$minSelections,
53
+ minSelections = _ref.minSelections,
57
54
  maxSelections = _ref.maxSelections;
58
55
 
59
56
  var selections = session.value.length || 0;
@@ -111,10 +108,28 @@ var MultipleChoice = /*#__PURE__*/function (_HTMLElement) {
111
108
  trailing: true
112
109
  });
113
110
  _this._dispatchResponseChanged = (0, _debounce["default"])(function () {
114
- _this.dispatchEvent(new _piePlayerEvents.SessionChangedEvent(_this.tagName.toLowerCase(), isComplete(_this._session, _this._model)));
111
+ console.log('>> dispatch event');
112
+ var event = new CustomEvent('session-changed', {
113
+ bubbles: true,
114
+ composed: true,
115
+ detail: {
116
+ complete: isComplete(_this._session, _this._model),
117
+ component: _this.tagName.toLowerCase()
118
+ }
119
+ });
120
+
121
+ _this.dispatchEvent(event);
115
122
  });
116
123
  _this._dispatchModelSet = (0, _debounce["default"])(function () {
117
- _this.dispatchEvent(new _piePlayerEvents.ModelSetEvent(_this.tagName.toLowerCase(), isComplete(_this._session, _this._model), _this._model !== undefined));
124
+ _this.dispatchEvent(new CustomEvent('model-set', {
125
+ bubbles: true,
126
+ composed: true,
127
+ detail: {
128
+ complete: isComplete(_this._session, _this._model),
129
+ component: _this.tagName.toLowerCase(),
130
+ hasModel: _this._model !== undefined
131
+ }
132
+ }));
118
133
  }, 50, {
119
134
  leading: false,
120
135
  trailing: true
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.js"],"names":["log","isComplete","session","model","value","choiceMode","minSelections","maxSelections","selections","length","MultipleChoice","_model","_session","_rerender","element","React","createElement","Main","onChoiceChanged","_onChange","bind","onShowCorrectToggle","setAttribute","setLangAttribute","ReactDOM","render","leading","trailing","_dispatchResponseChanged","dispatchEvent","SessionChangedEvent","tagName","toLowerCase","_dispatchModelSet","ModelSetEvent","undefined","language","lang","slice","s","data","HTMLElement"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;AAEA,IAAMA,GAAG,GAAG,uBAAM,wBAAN,CAAZ;;AAEO,IAAMC,UAAU,GAAG,SAAbA,UAAa,CAACC,OAAD,EAAUC,KAAV,EAAoB;AAC5C,MAAI,CAACD,OAAD,IAAY,CAACA,OAAO,CAACE,KAAzB,EAAgC;AAC9B,WAAO,KAAP;AACD;;AAED,aAAyDD,KAAK,IAAI,EAAlE;AAAA,MAAQE,UAAR,QAAQA,UAAR;AAAA,gCAAoBC,aAApB;AAAA,MAAoBA,aAApB,mCAAoC,CAApC;AAAA,MAAuCC,aAAvC,QAAuCA,aAAvC;;AACA,MAAMC,UAAU,GAAGN,OAAO,CAACE,KAAR,CAAcK,MAAd,IAAwB,CAA3C;;AAEA,MAAIJ,UAAU,KAAK,OAAnB,EAA4B;AAC1B,WAAO,CAAC,CAACG,UAAT;AACD;;AAED,MAAIA,UAAU,GAAGF,aAAb,IAA8BE,UAAU,GAAGD,aAA/C,EAA8D;AAC5D,WAAO,KAAP;AACD;;AAED,SAAO,IAAP;AACD,CAjBM;;;;IAmBcG,c;;;;;AACnB,4BAAc;AAAA;;AAAA;AACZ;AACA,UAAKC,MAAL,GAAc,IAAd;AACA,UAAKC,QAAL,GAAgB,IAAhB;AAEA,UAAKC,SAAL,GAAiB,0BACf,YAAM;AACJ,UAAI,MAAKF,MAAL,IAAe,MAAKC,QAAxB,EAAkC;AAChC,YAAIE,OAAO,gBAAGC,kBAAMC,aAAN,CAAoBC,gBAApB,EAA0B;AACtCd,UAAAA,KAAK,EAAE,MAAKQ,MAD0B;AAEtCT,UAAAA,OAAO,EAAE,MAAKU,QAFwB;AAGtCM,UAAAA,eAAe,EAAE,MAAKC,SAAL,CAAeC,IAAf,gDAHqB;AAItCC,UAAAA,mBAAmB,EAAE,MAAKA,mBAAL,CAAyBD,IAAzB;AAJiB,SAA1B,CAAd,CADgC,CAQhC;;;AACA,cAAKE,YAAL,CACE,YADF,EAEE,MAAKX,MAAL,CAAYN,UAAZ,KAA2B,OAA3B,GAAqC,0BAArC,GAAkE,kCAFpE;;AAIA,cAAKiB,YAAL,CAAkB,MAAlB,EAA0B,QAA1B;;AACA,cAAKC,gBAAL;;AAEAC,6BAASC,MAAT,CAAgBX,OAAhB,kDAA+B,YAAM;AACnCd,UAAAA,GAAG,CAAC,+BAAD,CAAH;AACA;AACD,SAHD;AAID,OApBD,MAoBO;AACLA,QAAAA,GAAG,CAAC,MAAD,CAAH;AACD;AACF,KAzBc,EA0Bf,EA1Be,EA2Bf;AAAE0B,MAAAA,OAAO,EAAE,KAAX;AAAkBC,MAAAA,QAAQ,EAAE;AAA5B,KA3Be,CAAjB;AA8BA,UAAKC,wBAAL,GAAgC,0BAAS,YAAM;AAC7C,YAAKC,aAAL,CAAmB,IAAIC,oCAAJ,CAAwB,MAAKC,OAAL,CAAaC,WAAb,EAAxB,EAAoD/B,UAAU,CAAC,MAAKW,QAAN,EAAgB,MAAKD,MAArB,CAA9D,CAAnB;AACD,KAF+B,CAAhC;AAIA,UAAKsB,iBAAL,GAAyB,0BACvB,YAAM;AACJ,YAAKJ,aAAL,CACE,IAAIK,8BAAJ,CACE,MAAKH,OAAL,CAAaC,WAAb,EADF,EAEE/B,UAAU,CAAC,MAAKW,QAAN,EAAgB,MAAKD,MAArB,CAFZ,EAGE,MAAKA,MAAL,KAAgBwB,SAHlB,CADF;AAOD,KATsB,EAUvB,EAVuB,EAWvB;AAAET,MAAAA,OAAO,EAAE,KAAX;AAAkBC,MAAAA,QAAQ,EAAE;AAA5B,KAXuB,CAAzB;AAvCY;AAoDb;;;;WAED,+BAAsB;AACpB,qCAAW,IAAX;AACD;;;WAED,4BAAmB;AACjB,UAAMS,QAAQ,GAAG,KAAKzB,MAAL,6BAAsB,KAAKA,MAAL,CAAYyB,QAAlC,IAA6C,KAAKzB,MAAL,CAAYyB,QAAzD,GAAoE,EAArF;AACA,UAAMC,IAAI,GAAGD,QAAQ,GAAGA,QAAQ,CAACE,KAAT,CAAe,CAAf,EAAkB,CAAlB,CAAH,GAA0B,IAA/C;AACA,WAAKhB,YAAL,CAAkB,MAAlB,EAA0Be,IAA1B;AACD;;;SAED,aAAUE,CAAV,EAAa;AACX,WAAK5B,MAAL,GAAc4B,CAAd;;AACA,WAAK1B,SAAL;;AACA,WAAKoB,iBAAL;AACD;;;SAED,eAAc;AACZ,aAAO,KAAKrB,QAAZ;AACD,K;SAED,aAAY2B,CAAZ,EAAe;AACb,WAAK3B,QAAL,GAAgB2B,CAAhB;;AACA,WAAK1B,SAAL,GAFa,CAGb;;;AACA,WAAKe,wBAAL;AACD;;;WAED,mBAAUY,IAAV,EAAgB;AACd,8CAAmB,KAAK5B,QAAxB,EAAkC,KAAKD,MAAL,CAAYN,UAA9C,EAA0DmC,IAA1D;;AACA,WAAKZ,wBAAL;;AACA,WAAKf,SAAL;AACD;;;WAED,6BAAoB;AAClB,WAAKA,SAAL;AACD;;;kDA1FyC4B,W","sourcesContent":["import Main from './main';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport debounce from 'lodash/debounce';\nimport debug from 'debug';\nimport { ModelSetEvent, SessionChangedEvent } from '@pie-framework/pie-player-events';\nimport { renderMath } from '@pie-lib/pie-toolbox/math-rendering';\nimport { updateSessionValue } from './session-updater';\n\nconst log = debug('pie-ui:multiple-choice');\n\nexport const isComplete = (session, model) => {\n if (!session || !session.value) {\n return false;\n }\n\n const { choiceMode, minSelections = 1, maxSelections } = model || {};\n const selections = session.value.length || 0;\n\n if (choiceMode === 'radio') {\n return !!selections;\n }\n\n if (selections < minSelections || selections > maxSelections) {\n return false;\n }\n\n return true;\n};\n\nexport default class MultipleChoice extends HTMLElement {\n constructor() {\n super();\n this._model = null;\n this._session = null;\n\n this._rerender = debounce(\n () => {\n if (this._model && this._session) {\n var element = React.createElement(Main, {\n model: this._model,\n session: this._session,\n onChoiceChanged: this._onChange.bind(this),\n onShowCorrectToggle: this.onShowCorrectToggle.bind(this),\n });\n\n //TODO: aria-label is set in the _rerender because we need to change it when the model.choiceMode is updated. Consider revisiting the placement of the aria-label setting in the _rerender\n this.setAttribute(\n 'aria-label',\n this._model.choiceMode === 'radio' ? 'Multiple Choice Question' : 'Multiple Correct Answer Question',\n );\n this.setAttribute('role', 'region');\n this.setLangAttribute();\n\n ReactDOM.render(element, this, () => {\n log('render complete - render math');\n renderMath(this);\n });\n } else {\n log('skip');\n }\n },\n 50,\n { leading: false, trailing: true },\n );\n\n this._dispatchResponseChanged = debounce(() => {\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), isComplete(this._session, this._model)));\n });\n\n this._dispatchModelSet = debounce(\n () => {\n this.dispatchEvent(\n new ModelSetEvent(\n this.tagName.toLowerCase(),\n isComplete(this._session, this._model),\n this._model !== undefined,\n ),\n );\n },\n 50,\n { leading: false, trailing: true },\n );\n }\n\n onShowCorrectToggle() {\n renderMath(this);\n }\n\n setLangAttribute() {\n const language = this._model && typeof this._model.language ? this._model.language : '';\n const lang = language ? language.slice(0, 2) : 'en';\n this.setAttribute('lang', lang);\n }\n\n set model(s) {\n this._model = s;\n this._rerender();\n this._dispatchModelSet();\n }\n\n get session() {\n return this._session;\n }\n\n set session(s) {\n this._session = s;\n this._rerender();\n //TODO: remove this session-changed should only be emit on user change\n this._dispatchResponseChanged();\n }\n\n _onChange(data) {\n updateSessionValue(this._session, this._model.choiceMode, data);\n this._dispatchResponseChanged();\n this._rerender();\n }\n\n connectedCallback() {\n this._rerender();\n }\n}\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../src/index.js"],"names":["log","isComplete","session","model","value","choiceMode","minSelections","maxSelections","selections","length","MultipleChoice","_model","_session","_rerender","element","React","createElement","Main","onChoiceChanged","_onChange","bind","onShowCorrectToggle","setAttribute","setLangAttribute","ReactDOM","render","leading","trailing","_dispatchResponseChanged","console","event","CustomEvent","bubbles","composed","detail","complete","component","tagName","toLowerCase","dispatchEvent","_dispatchModelSet","hasModel","undefined","language","lang","slice","s","data","HTMLElement"],"mappings":"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","sourcesContent":["import Main from './main';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport debounce from 'lodash/debounce';\nimport debug from 'debug';\nimport { renderMath } from '@pie-lib/pie-toolbox/math-rendering';\nimport { updateSessionValue } from './session-updater';\n\nconst log = debug('pie-ui:multiple-choice');\n\nexport const isComplete = (session, model) => {\n if (!session || !session.value) {\n return false;\n }\n\n const { choiceMode, minSelections, maxSelections } = model || {};\n const selections = session.value.length || 0;\n\n if (choiceMode === 'radio') {\n return !!selections;\n }\n\n if (selections < minSelections || selections > maxSelections) {\n return false;\n }\n\n return true;\n};\n\nexport default class MultipleChoice extends HTMLElement {\n constructor() {\n super();\n this._model = null;\n this._session = null;\n\n this._rerender = debounce(\n () => {\n if (this._model && this._session) {\n var element = React.createElement(Main, {\n model: this._model,\n session: this._session,\n onChoiceChanged: this._onChange.bind(this),\n onShowCorrectToggle: this.onShowCorrectToggle.bind(this),\n });\n\n //TODO: aria-label is set in the _rerender because we need to change it when the model.choiceMode is updated. Consider revisiting the placement of the aria-label setting in the _rerender\n this.setAttribute(\n 'aria-label',\n this._model.choiceMode === 'radio' ? 'Multiple Choice Question' : 'Multiple Correct Answer Question',\n );\n this.setAttribute('role', 'region');\n this.setLangAttribute();\n\n ReactDOM.render(element, this, () => {\n log('render complete - render math');\n renderMath(this);\n });\n } else {\n log('skip');\n }\n },\n 50,\n { leading: false, trailing: true },\n );\n\n this._dispatchResponseChanged = debounce(() => {\n console.log('>> dispatch event');\n var event = new CustomEvent('session-changed', {\n bubbles: true,\n composed: true,\n detail: {\n complete: isComplete(this._session, this._model),\n component: this.tagName.toLowerCase(),\n },\n });\n\n this.dispatchEvent(event);\n });\n\n this._dispatchModelSet = debounce(\n () => {\n this.dispatchEvent(\n new CustomEvent('model-set', {\n bubbles: true,\n composed: true,\n detail: {\n complete: isComplete(this._session, this._model),\n component: this.tagName.toLowerCase(),\n hasModel: this._model !== undefined,\n },\n }),\n );\n },\n 50,\n { leading: false, trailing: true },\n );\n }\n\n onShowCorrectToggle() {\n renderMath(this);\n }\n\n setLangAttribute() {\n const language = this._model && typeof this._model.language ? this._model.language : '';\n const lang = language ? language.slice(0, 2) : 'en';\n this.setAttribute('lang', lang);\n }\n\n set model(s) {\n this._model = s;\n this._rerender();\n this._dispatchModelSet();\n }\n\n get session() {\n return this._session;\n }\n\n set session(s) {\n this._session = s;\n this._rerender();\n //TODO: remove this session-changed should only be emit on user change\n this._dispatchResponseChanged();\n }\n\n _onChange(data) {\n updateSessionValue(this._session, this._model.choiceMode, data);\n this._dispatchResponseChanged();\n this._rerender();\n }\n\n connectedCallback() {\n this._rerender();\n }\n}\n"],"file":"index.js"}
@@ -7,6 +7,8 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports["default"] = exports.MultipleChoice = void 0;
9
9
 
10
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
+
10
12
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
13
 
12
14
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
@@ -108,20 +110,29 @@ var MultipleChoice = /*#__PURE__*/function (_React$Component) {
108
110
  value = _event$target.value,
109
111
  checked = _event$target.checked;
110
112
  var _this$props = _this.props,
113
+ choiceMode = _this$props.choiceMode,
111
114
  maxSelections = _this$props.maxSelections,
112
- onChoiceChanged = _this$props.onChoiceChanged,
113
- session = _this$props.session;
115
+ onChoiceChanged = _this$props.onChoiceChanged;
114
116
 
115
- if (session.value && session.value.length >= maxSelections) {
116
- // show/hide max selections error when user select/deselect an answer
117
+ if (choiceMode === 'radio') {
117
118
  _this.setState({
118
- maxSelectionsErrorState: checked
119
+ selectedValue: value
119
120
  });
121
+ } else {
122
+ var selectedValues = _this.state.selectedValues;
120
123
 
121
- if (checked) {
122
- // prevent selecting more answers
124
+ if (checked && selectedValues.length >= maxSelections) {
123
125
  return;
124
126
  }
127
+
128
+ _this.setState(function (prevState) {
129
+ var selectedValues = checked ? [].concat((0, _toConsumableArray2["default"])(prevState.selectedValues), [value]) : prevState.selectedValues.filter(function (currentValue) {
130
+ return currentValue !== value;
131
+ });
132
+ return {
133
+ selectedValues: selectedValues
134
+ };
135
+ });
125
136
  }
126
137
 
127
138
  onChoiceChanged({
@@ -169,8 +180,9 @@ var MultipleChoice = /*#__PURE__*/function (_React$Component) {
169
180
  }
170
181
  });
171
182
  _this.state = {
172
- showCorrect: _this.props.alwaysShowCorrect || false,
173
- maxSelectionsErrorState: false
183
+ selectedValue: null,
184
+ selectedValues: [],
185
+ showCorrect: _this.props.alwaysShowCorrect || false
174
186
  };
175
187
  _this.onToggle = _this.onToggle.bind((0, _assertThisInitialized2["default"])(_this));
176
188
  return _this;
@@ -182,6 +194,7 @@ var MultipleChoice = /*#__PURE__*/function (_React$Component) {
182
194
  var sessionValue = this.props.session && this.props.session.value;
183
195
  return sessionValue && sessionValue.indexOf && sessionValue.indexOf(value) >= 0;
184
196
  } // handleChange was added for accessibility. Please see comments and videos from PD-2441.
197
+ // TODO: Should only be removed if a better solution is found.
185
198
 
186
199
  }, {
187
200
  key: "UNSAFE_componentWillReceiveProps",
@@ -228,7 +241,11 @@ var MultipleChoice = /*#__PURE__*/function (_React$Component) {
228
241
  return choice.correct || false;
229
242
  }
230
243
 
231
- return this.isSelected(choice.value);
244
+ if (this.isSelected(choice.value)) {
245
+ return true;
246
+ }
247
+
248
+ return this.props.choiceMode === 'radio' ? this.state.selectedValue === choice.value : this.state.selectedValues.includes(choice.value);
232
249
  } // renderHeading function was added for accessibility.
233
250
 
234
251
  }, {
@@ -275,9 +292,7 @@ var MultipleChoice = /*#__PURE__*/function (_React$Component) {
275
292
  minSelections = _this$props3.minSelections,
276
293
  maxSelections = _this$props3.maxSelections,
277
294
  session = _this$props3.session;
278
- var _this$state = this.state,
279
- showCorrect = _this$state.showCorrect,
280
- maxSelectionsErrorState = _this$state.maxSelectionsErrorState;
295
+ var showCorrect = this.state.showCorrect;
281
296
  var isEvaluateMode = mode === 'evaluate';
282
297
  var showCorrectAnswerToggle = isEvaluateMode && !responseCorrect;
283
298
  var columnsStyle = gridColumns > 1 ? {
@@ -343,7 +358,7 @@ var MultipleChoice = /*#__PURE__*/function (_React$Component) {
343
358
  }, translator.t("translation:multipleChoice:minSelections_".concat(minSelections === 1 ? 'one' : 'other'), {
344
359
  lng: language,
345
360
  minSelections: minSelections
346
- })), choiceMode === 'checkbox' && maxSelectionsErrorState && /*#__PURE__*/_react["default"].createElement("div", {
361
+ })), choiceMode === 'checkbox' && selections >= maxSelections && /*#__PURE__*/_react["default"].createElement("div", {
347
362
  className: classes.errorText
348
363
  }, translator.t("translation:multipleChoice:maxSelections_".concat(maxSelections === 1 ? 'one' : 'other'), {
349
364
  lng: language,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/multiple-choice.jsx"],"names":["translator","Translator","styles","theme","main","color","text","backgroundColor","background","partLabel","display","fontSize","margin","fontWeight","paddingBottom","spacing","unit","teacherInstructions","marginBottom","horizontalLayout","flexDirection","flexWrap","gridLayout","fieldset","border","padding","minWidth","srOnly","position","left","top","width","height","overflow","errorText","typography","palette","error","paddingTop","MultipleChoice","props","event","target","value","checked","maxSelections","onChoiceChanged","session","length","setState","maxSelectionsErrorState","selected","mode","showCorrect","state","onShowCorrectToggle","choice","isCorrect","correct","isChecked","isSelected","undefined","alwaysShowCorrect","onToggle","bind","sessionValue","indexOf","nextProps","correctResponse","index","keyMode","String","fromCharCode","toUpperCase","choiceMode","classes","disabled","className","choices","gridColumns","prompt","responseCorrect","animationsDisabled","language","isSelectionButtonBelow","minSelections","isEvaluateMode","showCorrectAnswerToggle","columnsStyle","gridTemplateColumns","selections","teacherInstructionsDiv","renderHeading","hidden","visible","choicesLayout","map","selectedAnswerBackgroundColor","handleChange","hideTick","getChecked","getCorrectness","indexToSymbol","t","lng","React","Component","PropTypes","string","oneOf","array","object","bool","func","isRequired","number","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { CorrectAnswerToggle } from '@pie-lib/pie-toolbox/correct-answer-toggle';\nimport classNames from 'classnames';\nimport { withStyles } from '@material-ui/core/styles';\nimport { color, Collapsible, PreviewPrompt } from '@pie-lib/pie-toolbox/render-ui';\nimport Translator from '@pie-lib/pie-toolbox/translator';\n\nimport StyledChoice from './choice';\n\n// MultipleChoice\n\nconst { translator } = Translator;\n\nconst styles = (theme) => ({\n main: {\n color: color.text(),\n backgroundColor: color.background(),\n '& *': {\n '-webkit-font-smoothing': 'antialiased',\n },\n },\n partLabel: {\n display: 'block',\n fontSize: 'inherit',\n margin: '0',\n fontWeight: 'normal',\n paddingBottom: theme.spacing.unit * 2,\n },\n teacherInstructions: {\n marginBottom: theme.spacing.unit * 2,\n },\n horizontalLayout: {\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n },\n gridLayout: {\n display: 'grid',\n },\n fieldset: {\n border: '0px',\n padding: '0.01em 0 0 0',\n margin: '0px',\n minWidth: '0px',\n },\n srOnly: {\n position: 'absolute',\n left: '-10000px',\n top: 'auto',\n width: '1px',\n height: '1px',\n overflow: 'hidden',\n },\n errorText: {\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingTop: theme.spacing.unit,\n },\n});\n\nexport class MultipleChoice extends React.Component {\n static propTypes = {\n className: PropTypes.string,\n mode: PropTypes.oneOf(['gather', 'view', 'evaluate']),\n choiceMode: PropTypes.oneOf(['radio', 'checkbox']),\n keyMode: PropTypes.oneOf(['numbers', 'letters', 'none']),\n choices: PropTypes.array,\n partLabel: PropTypes.string,\n prompt: PropTypes.string,\n teacherInstructions: PropTypes.string,\n session: PropTypes.object,\n disabled: PropTypes.bool,\n onChoiceChanged: PropTypes.func,\n responseCorrect: PropTypes.bool,\n classes: PropTypes.object.isRequired,\n correctResponse: PropTypes.array,\n choicesLayout: PropTypes.oneOf(['vertical', 'grid', 'horizontal']),\n gridColumns: PropTypes.string,\n alwaysShowCorrect: PropTypes.bool,\n animationsDisabled: PropTypes.bool,\n language: PropTypes.string,\n selectedAnswerBackgroundColor: PropTypes.string,\n onShowCorrectToggle: PropTypes.func,\n isSelectionButtonBelow: PropTypes.bool,\n minSelections: PropTypes.number,\n maxSelections: PropTypes.number,\n };\n\n constructor(props) {\n super(props);\n\n this.state = {\n showCorrect: this.props.alwaysShowCorrect || false,\n maxSelectionsErrorState: false,\n };\n\n this.onToggle = this.onToggle.bind(this);\n }\n\n isSelected(value) {\n const sessionValue = this.props.session && this.props.session.value;\n\n return sessionValue && sessionValue.indexOf && sessionValue.indexOf(value) >= 0;\n }\n\n // handleChange was added for accessibility. Please see comments and videos from PD-2441.\n handleChange = (event) => {\n const { value, checked } = event.target;\n const { maxSelections, onChoiceChanged, session } = this.props;\n\n if (session.value && session.value.length >= maxSelections) {\n // show/hide max selections error when user select/deselect an answer\n this.setState({ maxSelectionsErrorState: checked });\n\n if (checked) {\n // prevent selecting more answers\n return;\n }\n }\n\n onChoiceChanged({ value, selected: checked });\n };\n\n onToggle = () => {\n if (this.props.mode === 'evaluate') {\n this.setState({ showCorrect: !this.state.showCorrect }, () => {\n if (this.props.onShowCorrectToggle) {\n this.props.onShowCorrectToggle();\n }\n });\n }\n };\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (!nextProps.correctResponse && this.state.showCorrect !== false) {\n this.setState({ showCorrect: false }, () => {\n if (this.props.onShowCorrectToggle) {\n this.props.onShowCorrectToggle();\n }\n });\n }\n\n if (nextProps.alwaysShowCorrect && this.state.showCorrect !== true) {\n this.setState({ showCorrect: true }, () => {\n if (this.props.onShowCorrectToggle) {\n this.props.onShowCorrectToggle();\n }\n });\n }\n }\n\n indexToSymbol(index) {\n if (this.props.keyMode === 'numbers') {\n return `${index + 1}`;\n }\n\n if (this.props.keyMode === 'letters') {\n return String.fromCharCode(97 + index).toUpperCase();\n }\n\n return '';\n }\n\n getCorrectness = (choice = {}) => {\n const isCorrect = choice.correct;\n const isChecked = this.isSelected(choice.value);\n\n if (this.state.showCorrect) {\n return isCorrect ? 'correct' : undefined;\n }\n\n if (isCorrect) {\n if (isChecked) {\n // A correct answer is selected: marked with a green checkmark\n return 'correct';\n } else {\n // A correct answer is NOT selected: marked with an orange X\n return 'incorrect';\n }\n } else {\n if (isChecked) {\n // An incorrect answer is selected: marked with an orange X\n return 'incorrect';\n } else {\n // An incorrect answer is NOT selected: not marked\n return undefined;\n }\n }\n };\n\n getChecked(choice) {\n if (this.state.showCorrect) {\n return choice.correct || false;\n }\n\n return this.isSelected(choice.value);\n }\n\n // renderHeading function was added for accessibility.\n renderHeading() {\n const { mode, choiceMode, classes } = this.props;\n\n if (mode !== 'gather') {\n return null;\n }\n\n return choiceMode === 'radio' ? (\n <h2 className={classes.srOnly}>Multiple Choice Question</h2>\n ) : (\n <h2 className={classes.srOnly}>Multiple Select Question</h2>\n );\n }\n\n render() {\n const {\n mode,\n disabled,\n className,\n choices = [],\n choiceMode,\n gridColumns,\n partLabel,\n prompt,\n responseCorrect,\n teacherInstructions,\n classes,\n alwaysShowCorrect,\n animationsDisabled,\n language,\n isSelectionButtonBelow,\n minSelections,\n maxSelections,\n session,\n } = this.props;\n const { showCorrect, maxSelectionsErrorState } = this.state;\n const isEvaluateMode = mode === 'evaluate';\n const showCorrectAnswerToggle = isEvaluateMode && !responseCorrect;\n const columnsStyle = gridColumns > 1 ? { gridTemplateColumns: `repeat(${gridColumns}, 1fr)` } : undefined;\n const selections = (session.value && session.value.length) || 0;\n\n const teacherInstructionsDiv = (\n <PreviewPrompt\n tagName=\"div\"\n className=\"prompt\"\n defaultClassName=\"teacher-instructions\"\n prompt={teacherInstructions}\n />\n );\n\n return (\n <div className={classNames(classes.main, className, 'multiple-choice')}>\n {partLabel && <h3 className={classes.partLabel}>{partLabel}</h3>}\n\n {this.renderHeading()}\n\n {teacherInstructions && (\n <div className={classes.teacherInstructions}>\n {!animationsDisabled ? (\n <Collapsible\n labels={{\n hidden: 'Show Teacher Instructions',\n visible: 'Hide Teacher Instructions',\n }}\n >\n {teacherInstructionsDiv}\n </Collapsible>\n ) : (\n teacherInstructionsDiv\n )}\n </div>\n )}\n\n <fieldset className={classes.fieldset}>\n <PreviewPrompt className=\"prompt\" defaultClassName=\"prompt\" prompt={prompt} tagName={'legend'} />\n\n {!alwaysShowCorrect && (\n <CorrectAnswerToggle\n show={showCorrectAnswerToggle}\n toggled={showCorrect}\n onToggle={this.onToggle.bind(this)}\n language={language}\n />\n )}\n\n <div\n className={classNames({\n [classes.gridLayout]: this.props.choicesLayout === 'grid',\n [classes.horizontalLayout]: this.props.choicesLayout === 'horizontal',\n })}\n style={columnsStyle}\n >\n {choices.map((choice, index) => (\n <StyledChoice\n choicesLayout={this.props.choicesLayout}\n selectedAnswerBackgroundColor={this.props.selectedAnswerBackgroundColor}\n gridColumns={gridColumns}\n key={`choice-${index}`}\n choice={choice}\n index={index}\n choicesLength={choices.length}\n showCorrect={showCorrect}\n isEvaluateMode={isEvaluateMode}\n choiceMode={choiceMode}\n disabled={disabled}\n onChoiceChanged={this.handleChange}\n hideTick={choice.hideTick}\n checked={this.getChecked(choice)}\n correctness={isEvaluateMode ? this.getCorrectness(choice) : undefined}\n displayKey={this.indexToSymbol(index)}\n isSelectionButtonBelow={isSelectionButtonBelow}\n />\n ))}\n </div>\n </fieldset>\n\n {choiceMode === 'checkbox' && selections < minSelections && (\n <div className={classes.errorText}>\n {translator.t(`translation:multipleChoice:minSelections_${minSelections === 1 ? 'one' : 'other'}`, {\n lng: language,\n minSelections,\n })}\n </div>\n )}\n {choiceMode === 'checkbox' && maxSelectionsErrorState && (\n <div className={classes.errorText}>\n {translator.t(`translation:multipleChoice:maxSelections_${maxSelections === 1 ? 'one' : 'other'}`, {\n lng: language,\n maxSelections,\n })}\n </div>\n )}\n </div>\n );\n }\n}\n\nMultipleChoice.defaultProps = {\n session: {\n value: [],\n },\n};\n\nexport default withStyles(styles)(MultipleChoice);\n"],"file":"multiple-choice.js"}
1
+ {"version":3,"sources":["../src/multiple-choice.jsx"],"names":["translator","Translator","styles","theme","main","color","text","backgroundColor","background","partLabel","display","fontSize","margin","fontWeight","paddingBottom","spacing","unit","teacherInstructions","marginBottom","horizontalLayout","flexDirection","flexWrap","gridLayout","fieldset","border","padding","minWidth","srOnly","position","left","top","width","height","overflow","errorText","typography","palette","error","paddingTop","MultipleChoice","props","event","target","value","checked","choiceMode","maxSelections","onChoiceChanged","setState","selectedValue","selectedValues","state","length","prevState","filter","currentValue","selected","mode","showCorrect","onShowCorrectToggle","choice","isCorrect","correct","isChecked","isSelected","undefined","alwaysShowCorrect","onToggle","bind","sessionValue","session","indexOf","nextProps","correctResponse","index","keyMode","String","fromCharCode","toUpperCase","includes","classes","disabled","className","choices","gridColumns","prompt","responseCorrect","animationsDisabled","language","isSelectionButtonBelow","minSelections","isEvaluateMode","showCorrectAnswerToggle","columnsStyle","gridTemplateColumns","selections","teacherInstructionsDiv","renderHeading","hidden","visible","choicesLayout","map","selectedAnswerBackgroundColor","handleChange","hideTick","getChecked","getCorrectness","indexToSymbol","t","lng","React","Component","PropTypes","string","oneOf","array","object","bool","func","isRequired","number","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { CorrectAnswerToggle } from '@pie-lib/pie-toolbox/correct-answer-toggle';\nimport classNames from 'classnames';\nimport { withStyles } from '@material-ui/core/styles';\nimport { color, Collapsible, PreviewPrompt } from '@pie-lib/pie-toolbox/render-ui';\nimport Translator from '@pie-lib/pie-toolbox/translator';\n\nimport StyledChoice from './choice';\n\n// MultipleChoice\n\nconst { translator } = Translator;\n\nconst styles = (theme) => ({\n main: {\n color: color.text(),\n backgroundColor: color.background(),\n '& *': {\n '-webkit-font-smoothing': 'antialiased',\n },\n },\n partLabel: {\n display: 'block',\n fontSize: 'inherit',\n margin: '0',\n fontWeight: 'normal',\n paddingBottom: theme.spacing.unit * 2,\n },\n teacherInstructions: {\n marginBottom: theme.spacing.unit * 2,\n },\n horizontalLayout: {\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n },\n gridLayout: {\n display: 'grid',\n },\n fieldset: {\n border: '0px',\n padding: '0.01em 0 0 0',\n margin: '0px',\n minWidth: '0px',\n },\n srOnly: {\n position: 'absolute',\n left: '-10000px',\n top: 'auto',\n width: '1px',\n height: '1px',\n overflow: 'hidden',\n },\n errorText: {\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingTop: theme.spacing.unit,\n },\n});\n\nexport class MultipleChoice extends React.Component {\n static propTypes = {\n className: PropTypes.string,\n mode: PropTypes.oneOf(['gather', 'view', 'evaluate']),\n choiceMode: PropTypes.oneOf(['radio', 'checkbox']),\n keyMode: PropTypes.oneOf(['numbers', 'letters', 'none']),\n choices: PropTypes.array,\n partLabel: PropTypes.string,\n prompt: PropTypes.string,\n teacherInstructions: PropTypes.string,\n session: PropTypes.object,\n disabled: PropTypes.bool,\n onChoiceChanged: PropTypes.func,\n responseCorrect: PropTypes.bool,\n classes: PropTypes.object.isRequired,\n correctResponse: PropTypes.array,\n choicesLayout: PropTypes.oneOf(['vertical', 'grid', 'horizontal']),\n gridColumns: PropTypes.string,\n alwaysShowCorrect: PropTypes.bool,\n animationsDisabled: PropTypes.bool,\n language: PropTypes.string,\n selectedAnswerBackgroundColor: PropTypes.string,\n onShowCorrectToggle: PropTypes.func,\n isSelectionButtonBelow: PropTypes.bool,\n minSelections: PropTypes.number,\n maxSelections: PropTypes.number,\n };\n\n constructor(props) {\n super(props);\n\n this.state = {\n selectedValue: null,\n selectedValues: [],\n showCorrect: this.props.alwaysShowCorrect || false,\n };\n\n this.onToggle = this.onToggle.bind(this);\n }\n\n isSelected(value) {\n const sessionValue = this.props.session && this.props.session.value;\n\n return sessionValue && sessionValue.indexOf && sessionValue.indexOf(value) >= 0;\n }\n\n // handleChange was added for accessibility. Please see comments and videos from PD-2441.\n // TODO: Should only be removed if a better solution is found.\n handleChange = (event) => {\n const { value, checked } = event.target;\n const { choiceMode, maxSelections, onChoiceChanged } = this.props;\n\n if (choiceMode === 'radio') {\n this.setState({ selectedValue: value });\n } else {\n const { selectedValues } = this.state;\n\n if (checked && selectedValues.length >= maxSelections) {\n return;\n }\n\n this.setState((prevState) => {\n const selectedValues = checked\n ? [...prevState.selectedValues, value]\n : prevState.selectedValues.filter((currentValue) => currentValue !== value);\n\n return { selectedValues };\n });\n }\n\n onChoiceChanged({ value, selected: checked });\n };\n\n onToggle = () => {\n if (this.props.mode === 'evaluate') {\n this.setState({ showCorrect: !this.state.showCorrect }, () => {\n if (this.props.onShowCorrectToggle) {\n this.props.onShowCorrectToggle();\n }\n });\n }\n };\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (!nextProps.correctResponse && this.state.showCorrect !== false) {\n this.setState({ showCorrect: false }, () => {\n if (this.props.onShowCorrectToggle) {\n this.props.onShowCorrectToggle();\n }\n });\n }\n\n if (nextProps.alwaysShowCorrect && this.state.showCorrect !== true) {\n this.setState({ showCorrect: true }, () => {\n if (this.props.onShowCorrectToggle) {\n this.props.onShowCorrectToggle();\n }\n });\n }\n }\n\n indexToSymbol(index) {\n if (this.props.keyMode === 'numbers') {\n return `${index + 1}`;\n }\n\n if (this.props.keyMode === 'letters') {\n return String.fromCharCode(97 + index).toUpperCase();\n }\n\n return '';\n }\n\n getCorrectness = (choice = {}) => {\n const isCorrect = choice.correct;\n const isChecked = this.isSelected(choice.value);\n\n if (this.state.showCorrect) {\n return isCorrect ? 'correct' : undefined;\n }\n\n if (isCorrect) {\n if (isChecked) {\n // A correct answer is selected: marked with a green checkmark\n return 'correct';\n } else {\n // A correct answer is NOT selected: marked with an orange X\n return 'incorrect';\n }\n } else {\n if (isChecked) {\n // An incorrect answer is selected: marked with an orange X\n return 'incorrect';\n } else {\n // An incorrect answer is NOT selected: not marked\n return undefined;\n }\n }\n };\n\n getChecked(choice) {\n if (this.state.showCorrect) {\n return choice.correct || false;\n }\n\n if (this.isSelected(choice.value)) {\n return true;\n }\n\n return this.props.choiceMode === 'radio'\n ? this.state.selectedValue === choice.value\n : this.state.selectedValues.includes(choice.value);\n }\n\n // renderHeading function was added for accessibility.\n renderHeading() {\n const { mode, choiceMode, classes } = this.props;\n\n if (mode !== 'gather') {\n return null;\n }\n\n return choiceMode === 'radio' ? (\n <h2 className={classes.srOnly}>Multiple Choice Question</h2>\n ) : (\n <h2 className={classes.srOnly}>Multiple Select Question</h2>\n );\n }\n\n render() {\n const {\n mode,\n disabled,\n className,\n choices = [],\n choiceMode,\n gridColumns,\n partLabel,\n prompt,\n responseCorrect,\n teacherInstructions,\n classes,\n alwaysShowCorrect,\n animationsDisabled,\n language,\n isSelectionButtonBelow,\n minSelections,\n maxSelections,\n session,\n } = this.props;\n const { showCorrect } = this.state;\n const isEvaluateMode = mode === 'evaluate';\n const showCorrectAnswerToggle = isEvaluateMode && !responseCorrect;\n const columnsStyle = gridColumns > 1 ? { gridTemplateColumns: `repeat(${gridColumns}, 1fr)` } : undefined;\n const selections = (session.value && session.value.length) || 0;\n\n const teacherInstructionsDiv = (\n <PreviewPrompt\n tagName=\"div\"\n className=\"prompt\"\n defaultClassName=\"teacher-instructions\"\n prompt={teacherInstructions}\n />\n );\n\n return (\n <div className={classNames(classes.main, className, 'multiple-choice')}>\n {partLabel && <h3 className={classes.partLabel}>{partLabel}</h3>}\n\n {this.renderHeading()}\n\n {teacherInstructions && (\n <div className={classes.teacherInstructions}>\n {!animationsDisabled ? (\n <Collapsible\n labels={{\n hidden: 'Show Teacher Instructions',\n visible: 'Hide Teacher Instructions',\n }}\n >\n {teacherInstructionsDiv}\n </Collapsible>\n ) : (\n teacherInstructionsDiv\n )}\n </div>\n )}\n\n <fieldset className={classes.fieldset}>\n <PreviewPrompt className=\"prompt\" defaultClassName=\"prompt\" prompt={prompt} tagName={'legend'} />\n\n {!alwaysShowCorrect && (\n <CorrectAnswerToggle\n show={showCorrectAnswerToggle}\n toggled={showCorrect}\n onToggle={this.onToggle.bind(this)}\n language={language}\n />\n )}\n\n <div\n className={classNames({\n [classes.gridLayout]: this.props.choicesLayout === 'grid',\n [classes.horizontalLayout]: this.props.choicesLayout === 'horizontal',\n })}\n style={columnsStyle}\n >\n {choices.map((choice, index) => (\n <StyledChoice\n choicesLayout={this.props.choicesLayout}\n selectedAnswerBackgroundColor={this.props.selectedAnswerBackgroundColor}\n gridColumns={gridColumns}\n key={`choice-${index}`}\n choice={choice}\n index={index}\n choicesLength={choices.length}\n showCorrect={showCorrect}\n isEvaluateMode={isEvaluateMode}\n choiceMode={choiceMode}\n disabled={disabled}\n onChoiceChanged={this.handleChange}\n hideTick={choice.hideTick}\n checked={this.getChecked(choice)}\n correctness={isEvaluateMode ? this.getCorrectness(choice) : undefined}\n displayKey={this.indexToSymbol(index)}\n isSelectionButtonBelow={isSelectionButtonBelow}\n />\n ))}\n </div>\n </fieldset>\n\n {choiceMode === 'checkbox' && selections < minSelections && (\n <div className={classes.errorText}>\n {translator.t(`translation:multipleChoice:minSelections_${minSelections === 1 ? 'one' : 'other'}`, {\n lng: language,\n minSelections,\n })}\n </div>\n )}\n {choiceMode === 'checkbox' && selections >= maxSelections && (\n <div className={classes.errorText}>\n {translator.t(`translation:multipleChoice:maxSelections_${maxSelections === 1 ? 'one' : 'other'}`, {\n lng: language,\n maxSelections,\n })}\n </div>\n )}\n </div>\n );\n }\n}\n\nMultipleChoice.defaultProps = {\n session: {\n value: [],\n },\n};\n\nexport default withStyles(styles)(MultipleChoice);\n"],"file":"multiple-choice.js"}
package/module/element.js CHANGED
@@ -1381,8 +1381,8 @@ function createMuiTheme() {
1381
1381
  var _default$C = createMuiTheme;
1382
1382
  createMuiTheme$1.default = _default$C;
1383
1383
  var jssPreset$1 = {};
1384
- var lib$8 = {};
1385
1384
  var lib$7 = {};
1385
+ var lib$6 = {};
1386
1386
  var getDynamicStyles = {};
1387
1387
  (function (exports) {
1388
1388
  Object.defineProperty(exports, "__esModule", {
@@ -3631,8 +3631,8 @@ getDefaultExportFromCjs(Jss);
3631
3631
  return new _Jss2['default'](options);
3632
3632
  };
3633
3633
  exports['default'] = create();
3634
- })(lib$7);
3635
- getDefaultExportFromCjs(lib$7);
3634
+ })(lib$6);
3635
+ getDefaultExportFromCjs(lib$6);
3636
3636
  (function (exports) {
3637
3637
  Object.defineProperty(exports, "__esModule", {
3638
3638
  value: true
@@ -3665,7 +3665,7 @@ getDefaultExportFromCjs(lib$7);
3665
3665
  };
3666
3666
  })();
3667
3667
  exports['default'] = jssGlobal;
3668
- var _jss = lib$7;
3668
+ var _jss = lib$6;
3669
3669
  function _classCallCheck(instance, Constructor) {
3670
3670
  if (!(instance instanceof Constructor)) {
3671
3671
  throw new TypeError("Cannot call a class as a function");
@@ -3792,9 +3792,9 @@ getDefaultExportFromCjs(lib$7);
3792
3792
  onProcessRule: onProcessRule
3793
3793
  };
3794
3794
  }
3795
- })(lib$8);
3796
- getDefaultExportFromCjs(lib$8);
3797
- var lib$6 = {};
3795
+ })(lib$7);
3796
+ getDefaultExportFromCjs(lib$7);
3797
+ var lib$5 = {};
3798
3798
  var warning = function () {};
3799
3799
  {
3800
3800
  warning = function (condition, format, args) {
@@ -3824,7 +3824,7 @@ var warning = function () {};
3824
3824
  };
3825
3825
  }
3826
3826
  var browser = warning;
3827
- Object.defineProperty(lib$6, "__esModule", {
3827
+ Object.defineProperty(lib$5, "__esModule", {
3828
3828
  value: true
3829
3829
  });
3830
3830
  var _extends = Object.assign || (function (target) {
@@ -3838,7 +3838,7 @@ var _extends = Object.assign || (function (target) {
3838
3838
  }
3839
3839
  return target;
3840
3840
  });
3841
- lib$6.default = jssNested;
3841
+ lib$5.default = jssNested;
3842
3842
  var _warning$6 = browser;
3843
3843
  var _warning2 = _interopRequireDefault$A(_warning$6);
3844
3844
  function _interopRequireDefault$A(obj) {
@@ -3916,7 +3916,7 @@ function jssNested() {
3916
3916
  onProcessStyle: onProcessStyle
3917
3917
  };
3918
3918
  }
3919
- var lib$5 = {};
3919
+ var lib$4 = {};
3920
3920
  var uppercasePattern = /[A-Z]/g;
3921
3921
  var msPattern = /^ms-/;
3922
3922
  var cache = {};
@@ -3978,9 +3978,9 @@ var require$$0$6 = getAugmentedNamespace(hyphenateStyleName$1);
3978
3978
  onChangeValue: onChangeValue
3979
3979
  };
3980
3980
  }
3981
- })(lib$5);
3982
- getDefaultExportFromCjs(lib$5);
3983
- var lib$4 = {};
3981
+ })(lib$4);
3982
+ getDefaultExportFromCjs(lib$4);
3983
+ var lib$3 = {};
3984
3984
  var defaultUnits = {};
3985
3985
  (function (exports) {
3986
3986
  Object.defineProperty(exports, "__esModule", {
@@ -4171,10 +4171,10 @@ getDefaultExportFromCjs(defaultUnits);
4171
4171
  onChangeValue: onChangeValue
4172
4172
  };
4173
4173
  }
4174
- })(lib$4);
4175
- getDefaultExportFromCjs(lib$4);
4176
- var lib$3 = {};
4174
+ })(lib$3);
4175
+ getDefaultExportFromCjs(lib$3);
4177
4176
  var lib$2 = {};
4177
+ var lib$1 = {};
4178
4178
  var prefix = {};
4179
4179
  (function (exports) {
4180
4180
  Object.defineProperty(exports, "__esModule", {
@@ -4334,14 +4334,14 @@ getDefaultExportFromCjs(supportedValue);
4334
4334
  exports.prefix = _prefix2['default'];
4335
4335
  exports.supportedProperty = _supportedProperty2['default'];
4336
4336
  exports.supportedValue = _supportedValue2['default'];
4337
- })(lib$2);
4338
- getDefaultExportFromCjs(lib$2);
4337
+ })(lib$1);
4338
+ getDefaultExportFromCjs(lib$1);
4339
4339
  (function (exports) {
4340
4340
  Object.defineProperty(exports, "__esModule", {
4341
4341
  value: true
4342
4342
  });
4343
4343
  exports['default'] = jssVendorPrefixer;
4344
- var _cssVendor = lib$2;
4344
+ var _cssVendor = lib$1;
4345
4345
  var vendor = _interopRequireWildcard(_cssVendor);
4346
4346
  function _interopRequireWildcard(obj) {
4347
4347
  if (obj && obj.__esModule) {
@@ -4389,9 +4389,9 @@ getDefaultExportFromCjs(lib$2);
4389
4389
  onChangeValue: onChangeValue
4390
4390
  };
4391
4391
  }
4392
- })(lib$3);
4393
- getDefaultExportFromCjs(lib$3);
4394
- var lib$1 = {};
4392
+ })(lib$2);
4393
+ getDefaultExportFromCjs(lib$2);
4394
+ var lib = {};
4395
4395
  (function (exports) {
4396
4396
  Object.defineProperty(exports, "__esModule", {
4397
4397
  value: true
@@ -4414,19 +4414,19 @@ var lib$1 = {};
4414
4414
  onProcessStyle: onProcessStyle
4415
4415
  };
4416
4416
  }
4417
- })(lib$1);
4418
- getDefaultExportFromCjs(lib$1);
4417
+ })(lib);
4418
+ getDefaultExportFromCjs(lib);
4419
4419
  var _interopRequireDefault$z = interopRequireDefault.exports;
4420
4420
  Object.defineProperty(jssPreset$1, "__esModule", {
4421
4421
  value: true
4422
4422
  });
4423
4423
  jssPreset$1.default = void 0;
4424
- var _jssGlobal = _interopRequireDefault$z(lib$8);
4425
- var _jssNested = _interopRequireDefault$z(lib$6);
4426
- var _jssCamelCase = _interopRequireDefault$z(lib$5);
4427
- var _jssDefaultUnit = _interopRequireDefault$z(lib$4);
4428
- var _jssVendorPrefixer = _interopRequireDefault$z(lib$3);
4429
- var _jssPropsSort = _interopRequireDefault$z(lib$1);
4424
+ var _jssGlobal = _interopRequireDefault$z(lib$7);
4425
+ var _jssNested = _interopRequireDefault$z(lib$5);
4426
+ var _jssCamelCase = _interopRequireDefault$z(lib$4);
4427
+ var _jssDefaultUnit = _interopRequireDefault$z(lib$3);
4428
+ var _jssVendorPrefixer = _interopRequireDefault$z(lib$2);
4429
+ var _jssPropsSort = _interopRequireDefault$z(lib);
4430
4430
  function jssPreset() {
4431
4431
  return {
4432
4432
  plugins: [(0, _jssGlobal.default)(), (0, _jssNested.default)(), (0, _jssCamelCase.default)(), (0, _jssDefaultUnit.default)(), typeof window === 'undefined' ? null : (0, _jssVendorPrefixer.default)(), (0, _jssPropsSort.default)()]
@@ -5026,7 +5026,7 @@ var _propTypes$d = _interopRequireDefault$u(require$$10$4);
5026
5026
  var _warning$2 = _interopRequireDefault$u(warning_1);
5027
5027
  var _hoistNonReactStatics$2 = _interopRequireDefault$u(hoistNonReactStatics_cjs);
5028
5028
  var _utils$7 = require$$7$1;
5029
- var _jss = lib$7;
5029
+ var _jss = lib$6;
5030
5030
  var _reactJssContext = _interopRequireDefault$u(reactJssContext);
5031
5031
  var _jssPreset = _interopRequireDefault$u(jssPreset$1);
5032
5032
  var _mergeClasses = _interopRequireDefault$u(mergeClasses$1);
@@ -12666,8 +12666,9 @@ class MultipleChoice$1 extends React$2.Component {
12666
12666
  MultipleChoice$1.prototype.__init2.call(this);
12667
12667
  MultipleChoice$1.prototype.__init3.call(this);
12668
12668
  this.state = {
12669
- showCorrect: this.props.alwaysShowCorrect || false,
12670
- maxSelectionsErrorState: false
12669
+ selectedValue: null,
12670
+ selectedValues: [],
12671
+ showCorrect: this.props.alwaysShowCorrect || false
12671
12672
  };
12672
12673
  this.onToggle = this.onToggle.bind(this);
12673
12674
  }
@@ -12678,14 +12679,22 @@ class MultipleChoice$1 extends React$2.Component {
12678
12679
  __init() {
12679
12680
  this.handleChange = event => {
12680
12681
  const {value, checked} = event.target;
12681
- const {maxSelections, onChoiceChanged, session} = this.props;
12682
- if (session.value && session.value.length >= maxSelections) {
12682
+ const {choiceMode, maxSelections, onChoiceChanged} = this.props;
12683
+ if (choiceMode === 'radio') {
12683
12684
  this.setState({
12684
- maxSelectionsErrorState: checked
12685
+ selectedValue: value
12685
12686
  });
12686
- if (checked) {
12687
+ } else {
12688
+ const {selectedValues} = this.state;
12689
+ if (checked && selectedValues.length >= maxSelections) {
12687
12690
  return;
12688
12691
  }
12692
+ this.setState(prevState => {
12693
+ const selectedValues = checked ? [...prevState.selectedValues, value] : prevState.selectedValues.filter(currentValue => currentValue !== value);
12694
+ return {
12695
+ selectedValues
12696
+ };
12697
+ });
12689
12698
  }
12690
12699
  onChoiceChanged({
12691
12700
  value,
@@ -12761,7 +12770,10 @@ class MultipleChoice$1 extends React$2.Component {
12761
12770
  if (this.state.showCorrect) {
12762
12771
  return choice.correct || false;
12763
12772
  }
12764
- return this.isSelected(choice.value);
12773
+ if (this.isSelected(choice.value)) {
12774
+ return true;
12775
+ }
12776
+ return this.props.choiceMode === 'radio' ? this.state.selectedValue === choice.value : this.state.selectedValues.includes(choice.value);
12765
12777
  }
12766
12778
  renderHeading() {
12767
12779
  const {mode, choiceMode, classes} = this.props;
@@ -12773,20 +12785,20 @@ class MultipleChoice$1 extends React$2.Component {
12773
12785
  __self: this,
12774
12786
  __source: {
12775
12787
  fileName: _jsxFileName$1,
12776
- lineNumber: 209
12788
+ lineNumber: 225
12777
12789
  }
12778
12790
  }, "Multiple Choice Question") : React$2.createElement('h2', {
12779
12791
  className: classes.srOnly,
12780
12792
  __self: this,
12781
12793
  __source: {
12782
12794
  fileName: _jsxFileName$1,
12783
- lineNumber: 211
12795
+ lineNumber: 227
12784
12796
  }
12785
12797
  }, "Multiple Select Question");
12786
12798
  }
12787
12799
  render() {
12788
12800
  const {mode, disabled, className, choices = [], choiceMode, gridColumns, partLabel, prompt, responseCorrect, teacherInstructions, classes, alwaysShowCorrect, animationsDisabled, language, isSelectionButtonBelow, minSelections, maxSelections, session} = this.props;
12789
- const {showCorrect, maxSelectionsErrorState} = this.state;
12801
+ const {showCorrect} = this.state;
12790
12802
  const isEvaluateMode = mode === 'evaluate';
12791
12803
  const showCorrectAnswerToggle = isEvaluateMode && !responseCorrect;
12792
12804
  const columnsStyle = gridColumns > 1 ? {
@@ -12801,7 +12813,7 @@ class MultipleChoice$1 extends React$2.Component {
12801
12813
  __self: this,
12802
12814
  __source: {
12803
12815
  fileName: _jsxFileName$1,
12804
- lineNumber: 243
12816
+ lineNumber: 259
12805
12817
  }
12806
12818
  });
12807
12819
  return React$2.createElement('div', {
@@ -12809,21 +12821,21 @@ class MultipleChoice$1 extends React$2.Component {
12809
12821
  __self: this,
12810
12822
  __source: {
12811
12823
  fileName: _jsxFileName$1,
12812
- lineNumber: 252
12824
+ lineNumber: 268
12813
12825
  }
12814
12826
  }, partLabel && React$2.createElement('h3', {
12815
12827
  className: classes.partLabel,
12816
12828
  __self: this,
12817
12829
  __source: {
12818
12830
  fileName: _jsxFileName$1,
12819
- lineNumber: 253
12831
+ lineNumber: 269
12820
12832
  }
12821
12833
  }, partLabel), this.renderHeading(), teacherInstructions && React$2.createElement('div', {
12822
12834
  className: classes.teacherInstructions,
12823
12835
  __self: this,
12824
12836
  __source: {
12825
12837
  fileName: _jsxFileName$1,
12826
- lineNumber: 258
12838
+ lineNumber: 274
12827
12839
  }
12828
12840
  }, !animationsDisabled ? React$2.createElement(Collapsible, {
12829
12841
  labels: {
@@ -12833,14 +12845,14 @@ class MultipleChoice$1 extends React$2.Component {
12833
12845
  __self: this,
12834
12846
  __source: {
12835
12847
  fileName: _jsxFileName$1,
12836
- lineNumber: 260
12848
+ lineNumber: 276
12837
12849
  }
12838
12850
  }, teacherInstructionsDiv) : teacherInstructionsDiv), React$2.createElement('fieldset', {
12839
12851
  className: classes.fieldset,
12840
12852
  __self: this,
12841
12853
  __source: {
12842
12854
  fileName: _jsxFileName$1,
12843
- lineNumber: 274
12855
+ lineNumber: 290
12844
12856
  }
12845
12857
  }, React$2.createElement(PreviewPrompt, {
12846
12858
  className: "prompt",
@@ -12850,7 +12862,7 @@ class MultipleChoice$1 extends React$2.Component {
12850
12862
  __self: this,
12851
12863
  __source: {
12852
12864
  fileName: _jsxFileName$1,
12853
- lineNumber: 275
12865
+ lineNumber: 291
12854
12866
  }
12855
12867
  }), !alwaysShowCorrect && React$2.createElement(CorrectAnswerToggle, {
12856
12868
  show: showCorrectAnswerToggle,
@@ -12860,7 +12872,7 @@ class MultipleChoice$1 extends React$2.Component {
12860
12872
  __self: this,
12861
12873
  __source: {
12862
12874
  fileName: _jsxFileName$1,
12863
- lineNumber: 278
12875
+ lineNumber: 294
12864
12876
  }
12865
12877
  }), React$2.createElement('div', {
12866
12878
  className: classNames({
@@ -12871,7 +12883,7 @@ class MultipleChoice$1 extends React$2.Component {
12871
12883
  __self: this,
12872
12884
  __source: {
12873
12885
  fileName: _jsxFileName$1,
12874
- lineNumber: 286
12886
+ lineNumber: 302
12875
12887
  }
12876
12888
  }, choices.map((choice, index) => React$2.createElement(StyledChoice, {
12877
12889
  choicesLayout: this.props.choicesLayout,
@@ -12894,24 +12906,24 @@ class MultipleChoice$1 extends React$2.Component {
12894
12906
  __self: this,
12895
12907
  __source: {
12896
12908
  fileName: _jsxFileName$1,
12897
- lineNumber: 294
12909
+ lineNumber: 310
12898
12910
  }
12899
12911
  })))), choiceMode === 'checkbox' && selections < minSelections && React$2.createElement('div', {
12900
12912
  className: classes.errorText,
12901
12913
  __self: this,
12902
12914
  __source: {
12903
12915
  fileName: _jsxFileName$1,
12904
- lineNumber: 318
12916
+ lineNumber: 334
12905
12917
  }
12906
12918
  }, translator.t(`translation:multipleChoice:minSelections_${minSelections === 1 ? 'one' : 'other'}`, {
12907
12919
  lng: language,
12908
12920
  minSelections
12909
- })), choiceMode === 'checkbox' && maxSelectionsErrorState && React$2.createElement('div', {
12921
+ })), choiceMode === 'checkbox' && selections >= maxSelections && React$2.createElement('div', {
12910
12922
  className: classes.errorText,
12911
12923
  __self: this,
12912
12924
  __source: {
12913
12925
  fileName: _jsxFileName$1,
12914
- lineNumber: 326
12926
+ lineNumber: 342
12915
12927
  }
12916
12928
  }, translator.t(`translation:multipleChoice:maxSelections_${maxSelections === 1 ? 'one' : 'other'}`, {
12917
12929
  lng: language,
@@ -13003,43 +13015,6 @@ const Root = props => React$1.createElement(styles$b.MuiThemeProvider, {
13003
13015
  lineNumber: 59
13004
13016
  }
13005
13017
  }));
13006
- var lib = {};
13007
- Object.defineProperty(lib, "__esModule", {
13008
- value: true
13009
- });
13010
- class ModelSetEvent extends CustomEvent {
13011
- constructor(component, complete, hasModel) {
13012
- super(ModelSetEvent.TYPE, {
13013
- bubbles: true,
13014
- composed: true,
13015
- detail: {
13016
- complete,
13017
- component,
13018
- hasModel
13019
- }
13020
- });
13021
- this.component = component;
13022
- this.complete = complete;
13023
- }
13024
- }
13025
- ModelSetEvent.TYPE = 'model-set';
13026
- var ModelSetEvent_1 = lib.ModelSetEvent = ModelSetEvent;
13027
- class SessionChangedEvent extends CustomEvent {
13028
- constructor(component, complete) {
13029
- super(SessionChangedEvent.TYPE, {
13030
- bubbles: true,
13031
- composed: true,
13032
- detail: {
13033
- complete,
13034
- component
13035
- }
13036
- });
13037
- this.component = component;
13038
- this.complete = complete;
13039
- }
13040
- }
13041
- SessionChangedEvent.TYPE = 'session-changed';
13042
- var SessionChangedEvent_1 = lib.SessionChangedEvent = SessionChangedEvent;
13043
13018
  const {concat: concat} = _dll_lodash;
13044
13019
  const {uniq: uniq} = _dll_lodash;
13045
13020
  const {without: without} = _dll_lodash;
@@ -13070,7 +13045,7 @@ const isComplete = (session, model) => {
13070
13045
  if (!session || !session.value) {
13071
13046
  return false;
13072
13047
  }
13073
- const {choiceMode, minSelections = 1, maxSelections} = model || ({});
13048
+ const {choiceMode, minSelections, maxSelections} = model || ({});
13074
13049
  const selections = session.value.length || 0;
13075
13050
  if (choiceMode === 'radio') {
13076
13051
  return !!selections;
@@ -13108,10 +13083,27 @@ class MultipleChoice extends HTMLElement {
13108
13083
  trailing: true
13109
13084
  });
13110
13085
  this._dispatchResponseChanged = debounce(() => {
13111
- this.dispatchEvent(new SessionChangedEvent_1(this.tagName.toLowerCase(), isComplete(this._session, this._model)));
13086
+ console.log('>> dispatch event');
13087
+ var event = new CustomEvent('session-changed', {
13088
+ bubbles: true,
13089
+ composed: true,
13090
+ detail: {
13091
+ complete: isComplete(this._session, this._model),
13092
+ component: this.tagName.toLowerCase()
13093
+ }
13094
+ });
13095
+ this.dispatchEvent(event);
13112
13096
  });
13113
13097
  this._dispatchModelSet = debounce(() => {
13114
- this.dispatchEvent(new ModelSetEvent_1(this.tagName.toLowerCase(), isComplete(this._session, this._model), this._model !== undefined));
13098
+ this.dispatchEvent(new CustomEvent('model-set', {
13099
+ bubbles: true,
13100
+ composed: true,
13101
+ detail: {
13102
+ complete: isComplete(this._session, this._model),
13103
+ component: this.tagName.toLowerCase(),
13104
+ hasModel: this._model !== undefined
13105
+ }
13106
+ }));
13115
13107
  }, 50, {
13116
13108
  leading: false,
13117
13109
  trailing: true
package/module/print.js CHANGED
@@ -12666,8 +12666,9 @@ class MultipleChoice extends React$2.Component {
12666
12666
  MultipleChoice.prototype.__init2.call(this);
12667
12667
  MultipleChoice.prototype.__init3.call(this);
12668
12668
  this.state = {
12669
- showCorrect: this.props.alwaysShowCorrect || false,
12670
- maxSelectionsErrorState: false
12669
+ selectedValue: null,
12670
+ selectedValues: [],
12671
+ showCorrect: this.props.alwaysShowCorrect || false
12671
12672
  };
12672
12673
  this.onToggle = this.onToggle.bind(this);
12673
12674
  }
@@ -12678,14 +12679,22 @@ class MultipleChoice extends React$2.Component {
12678
12679
  __init() {
12679
12680
  this.handleChange = event => {
12680
12681
  const {value, checked} = event.target;
12681
- const {maxSelections, onChoiceChanged, session} = this.props;
12682
- if (session.value && session.value.length >= maxSelections) {
12682
+ const {choiceMode, maxSelections, onChoiceChanged} = this.props;
12683
+ if (choiceMode === 'radio') {
12683
12684
  this.setState({
12684
- maxSelectionsErrorState: checked
12685
+ selectedValue: value
12685
12686
  });
12686
- if (checked) {
12687
+ } else {
12688
+ const {selectedValues} = this.state;
12689
+ if (checked && selectedValues.length >= maxSelections) {
12687
12690
  return;
12688
12691
  }
12692
+ this.setState(prevState => {
12693
+ const selectedValues = checked ? [...prevState.selectedValues, value] : prevState.selectedValues.filter(currentValue => currentValue !== value);
12694
+ return {
12695
+ selectedValues
12696
+ };
12697
+ });
12689
12698
  }
12690
12699
  onChoiceChanged({
12691
12700
  value,
@@ -12761,7 +12770,10 @@ class MultipleChoice extends React$2.Component {
12761
12770
  if (this.state.showCorrect) {
12762
12771
  return choice.correct || false;
12763
12772
  }
12764
- return this.isSelected(choice.value);
12773
+ if (this.isSelected(choice.value)) {
12774
+ return true;
12775
+ }
12776
+ return this.props.choiceMode === 'radio' ? this.state.selectedValue === choice.value : this.state.selectedValues.includes(choice.value);
12765
12777
  }
12766
12778
  renderHeading() {
12767
12779
  const {mode, choiceMode, classes} = this.props;
@@ -12773,20 +12785,20 @@ class MultipleChoice extends React$2.Component {
12773
12785
  __self: this,
12774
12786
  __source: {
12775
12787
  fileName: _jsxFileName$1,
12776
- lineNumber: 209
12788
+ lineNumber: 225
12777
12789
  }
12778
12790
  }, "Multiple Choice Question") : React$2.createElement('h2', {
12779
12791
  className: classes.srOnly,
12780
12792
  __self: this,
12781
12793
  __source: {
12782
12794
  fileName: _jsxFileName$1,
12783
- lineNumber: 211
12795
+ lineNumber: 227
12784
12796
  }
12785
12797
  }, "Multiple Select Question");
12786
12798
  }
12787
12799
  render() {
12788
12800
  const {mode, disabled, className, choices = [], choiceMode, gridColumns, partLabel, prompt, responseCorrect, teacherInstructions, classes, alwaysShowCorrect, animationsDisabled, language, isSelectionButtonBelow, minSelections, maxSelections, session} = this.props;
12789
- const {showCorrect, maxSelectionsErrorState} = this.state;
12801
+ const {showCorrect} = this.state;
12790
12802
  const isEvaluateMode = mode === 'evaluate';
12791
12803
  const showCorrectAnswerToggle = isEvaluateMode && !responseCorrect;
12792
12804
  const columnsStyle = gridColumns > 1 ? {
@@ -12801,7 +12813,7 @@ class MultipleChoice extends React$2.Component {
12801
12813
  __self: this,
12802
12814
  __source: {
12803
12815
  fileName: _jsxFileName$1,
12804
- lineNumber: 243
12816
+ lineNumber: 259
12805
12817
  }
12806
12818
  });
12807
12819
  return React$2.createElement('div', {
@@ -12809,21 +12821,21 @@ class MultipleChoice extends React$2.Component {
12809
12821
  __self: this,
12810
12822
  __source: {
12811
12823
  fileName: _jsxFileName$1,
12812
- lineNumber: 252
12824
+ lineNumber: 268
12813
12825
  }
12814
12826
  }, partLabel && React$2.createElement('h3', {
12815
12827
  className: classes.partLabel,
12816
12828
  __self: this,
12817
12829
  __source: {
12818
12830
  fileName: _jsxFileName$1,
12819
- lineNumber: 253
12831
+ lineNumber: 269
12820
12832
  }
12821
12833
  }, partLabel), this.renderHeading(), teacherInstructions && React$2.createElement('div', {
12822
12834
  className: classes.teacherInstructions,
12823
12835
  __self: this,
12824
12836
  __source: {
12825
12837
  fileName: _jsxFileName$1,
12826
- lineNumber: 258
12838
+ lineNumber: 274
12827
12839
  }
12828
12840
  }, !animationsDisabled ? React$2.createElement(Collapsible, {
12829
12841
  labels: {
@@ -12833,14 +12845,14 @@ class MultipleChoice extends React$2.Component {
12833
12845
  __self: this,
12834
12846
  __source: {
12835
12847
  fileName: _jsxFileName$1,
12836
- lineNumber: 260
12848
+ lineNumber: 276
12837
12849
  }
12838
12850
  }, teacherInstructionsDiv) : teacherInstructionsDiv), React$2.createElement('fieldset', {
12839
12851
  className: classes.fieldset,
12840
12852
  __self: this,
12841
12853
  __source: {
12842
12854
  fileName: _jsxFileName$1,
12843
- lineNumber: 274
12855
+ lineNumber: 290
12844
12856
  }
12845
12857
  }, React$2.createElement(PreviewPrompt, {
12846
12858
  className: "prompt",
@@ -12850,7 +12862,7 @@ class MultipleChoice extends React$2.Component {
12850
12862
  __self: this,
12851
12863
  __source: {
12852
12864
  fileName: _jsxFileName$1,
12853
- lineNumber: 275
12865
+ lineNumber: 291
12854
12866
  }
12855
12867
  }), !alwaysShowCorrect && React$2.createElement(CorrectAnswerToggle, {
12856
12868
  show: showCorrectAnswerToggle,
@@ -12860,7 +12872,7 @@ class MultipleChoice extends React$2.Component {
12860
12872
  __self: this,
12861
12873
  __source: {
12862
12874
  fileName: _jsxFileName$1,
12863
- lineNumber: 278
12875
+ lineNumber: 294
12864
12876
  }
12865
12877
  }), React$2.createElement('div', {
12866
12878
  className: classNames({
@@ -12871,7 +12883,7 @@ class MultipleChoice extends React$2.Component {
12871
12883
  __self: this,
12872
12884
  __source: {
12873
12885
  fileName: _jsxFileName$1,
12874
- lineNumber: 286
12886
+ lineNumber: 302
12875
12887
  }
12876
12888
  }, choices.map((choice, index) => React$2.createElement(StyledChoice, {
12877
12889
  choicesLayout: this.props.choicesLayout,
@@ -12894,24 +12906,24 @@ class MultipleChoice extends React$2.Component {
12894
12906
  __self: this,
12895
12907
  __source: {
12896
12908
  fileName: _jsxFileName$1,
12897
- lineNumber: 294
12909
+ lineNumber: 310
12898
12910
  }
12899
12911
  })))), choiceMode === 'checkbox' && selections < minSelections && React$2.createElement('div', {
12900
12912
  className: classes.errorText,
12901
12913
  __self: this,
12902
12914
  __source: {
12903
12915
  fileName: _jsxFileName$1,
12904
- lineNumber: 318
12916
+ lineNumber: 334
12905
12917
  }
12906
12918
  }, translator.t(`translation:multipleChoice:minSelections_${minSelections === 1 ? 'one' : 'other'}`, {
12907
12919
  lng: language,
12908
12920
  minSelections
12909
- })), choiceMode === 'checkbox' && maxSelectionsErrorState && React$2.createElement('div', {
12921
+ })), choiceMode === 'checkbox' && selections >= maxSelections && React$2.createElement('div', {
12910
12922
  className: classes.errorText,
12911
12923
  __self: this,
12912
12924
  __source: {
12913
12925
  fileName: _jsxFileName$1,
12914
- lineNumber: 326
12926
+ lineNumber: 342
12915
12927
  }
12916
12928
  }, translator.t(`translation:multipleChoice:maxSelections_${maxSelections === 1 ? 'one' : 'other'}`, {
12917
12929
  lng: language,
package/package.json CHANGED
@@ -1,13 +1,12 @@
1
1
  {
2
2
  "name": "@pie-element/multiple-choice",
3
3
  "repository": "pie-framework/pie-elements",
4
- "version": "9.7.2-next.20+e7e5cd4eb",
4
+ "version": "9.7.2-next.7+2e72baca5",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
8
8
  "dependencies": {
9
9
  "@material-ui/core": "^3.9.2",
10
- "@pie-framework/pie-player-events": "^0.1.0",
11
10
  "@pie-lib/pie-toolbox": "2.6.1",
12
11
  "classnames": "^2.2.5",
13
12
  "debug": "^4.1.1",
@@ -19,7 +18,7 @@
19
18
  "react-test-renderer": "^16.3.2",
20
19
  "react-transition-group": "^2.3.1"
21
20
  },
22
- "gitHead": "e7e5cd4eb2d1360d4b18ff8f0756cff448dc1574",
21
+ "gitHead": "2e72baca5a8804c802a4bd5e45ff59feccee930e",
23
22
  "scripts": {
24
23
  "postpublish": "../../scripts/postpublish"
25
24
  },