@pie-element/math-inline 7.26.1-next.3 → 7.27.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.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,18 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [7.27.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/math-inline@7.26.0...@pie-element/math-inline@7.27.0) (2024-08-27)
7
+
8
+
9
+ ### Features
10
+
11
+ * **math-inline:** Adjust tooltip positioning with PopperProps for enhanced accessibility, Ensure logical DOM placement and improve screen reader support PD-2452 ([76421f3](https://github.com/pie-framework/pie-elements/commit/76421f34c2637c848954e1121c1eca9b8251b459))
12
+ * **math-inline:** Enhance keyboard navigation, focus and aria attributes for math editors PD-2453 ([9fff559](https://github.com/pie-framework/pie-elements/commit/9fff559ef4e138cea76972bd20f3e245b30c1c03))
13
+
14
+
15
+
16
+
17
+
6
18
  # [7.26.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/math-inline@7.25.4...@pie-element/math-inline@7.26.0) (2024-08-27)
7
19
 
8
20
 
package/lib/main.js CHANGED
@@ -438,7 +438,8 @@ var Main = /*#__PURE__*/function (_React$Component) {
438
438
  answers: _answers
439
439
  }),
440
440
  activeAnswerBlock: '',
441
- showCorrect: _this.props.model.config.alwaysShowCorrect || false
441
+ showCorrect: _this.props.model.config.alwaysShowCorrect || false,
442
+ tooltipContainerRef: /*#__PURE__*/_react["default"].createRef()
442
443
  };
443
444
  return _this;
444
445
  }
@@ -601,7 +602,8 @@ var Main = /*#__PURE__*/function (_React$Component) {
601
602
  var _this$state2 = this.state,
602
603
  activeAnswerBlock = _this$state2.activeAnswerBlock,
603
604
  showCorrect = _this$state2.showCorrect,
604
- session = _this$state2.session;
605
+ session = _this$state2.session,
606
+ tooltipContainerRef = _this$state2.tooltipContainerRef;
605
607
 
606
608
  var _ref5 = model || {},
607
609
  config = _ref5.config,
@@ -694,6 +696,7 @@ var Main = /*#__PURE__*/function (_React$Component) {
694
696
  onSubFieldFocus: this.onSubFieldFocus,
695
697
  showKeypad: !!activeAnswerBlock
696
698
  }), responseType === _utils.ResponseTypes.advanced && /*#__PURE__*/_react["default"].createElement("div", {
699
+ ref: tooltipContainerRef,
697
700
  className: (0, _classnames["default"])(classes.expression, (_cx = {}, (0, _defineProperty2["default"])(_cx, classes.incorrect, !emptyResponse && !correct && !showCorrect), (0, _defineProperty2["default"])(_cx, classes.correct, !emptyResponse && (correct || showCorrect)), (0, _defineProperty2["default"])(_cx, classes.showCorrectness, !emptyResponse && disabled && correctness && !view), (0, _defineProperty2["default"])(_cx, classes.correctAnswerShown, showCorrect), (0, _defineProperty2["default"])(_cx, classes.printCorrect, printMode && alwaysShowCorrect), _cx))
698
701
  }, /*#__PURE__*/_react["default"].createElement(_Tooltip["default"], {
699
702
  ref: function ref(_ref7) {
@@ -706,6 +709,9 @@ var Main = /*#__PURE__*/function (_React$Component) {
706
709
  tooltip: classes.keypadTooltip,
707
710
  popper: classes.keypadTooltipPopper
708
711
  },
712
+ PopperProps: {
713
+ container: (tooltipContainerRef === null || tooltipContainerRef === void 0 ? void 0 : tooltipContainerRef.current) || undefined
714
+ },
709
715
  title: Object.keys(session.answers).map(function (answerId) {
710
716
  return answerId === activeAnswerBlock && !(showCorrect || disabled) && /*#__PURE__*/_react["default"].createElement("div", {
711
717
  "data-keypad": true,
package/lib/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/main.jsx"],"names":["translator","Translator","registered","NEWLINE_LATEX","REGEX","DEFAULT_KEYPAD_VARIANT","IS_SAFARI","test","navigator","userAgent","generateAdditionalKeys","keyData","map","key","name","latex","write","label","getKeyPadWidth","additionalKeys","equationEditor","Math","floor","length","prepareForStatic","model","state","config","disabled","expression","responses","printMode","alwaysShowCorrect","modelExpression","showCorrect","answer","answerBlocks","replace","session","answers","blankSpace","repeat","value","Main","props","classes","root","Object","keys","forEach","answerId","el","querySelector","indexEl","MQ","MathQuill","getInterface","textContent","view","parentElement","classList","remove","correct","incorrect","StaticMath","selectableElements","querySelectorAll","elem","setAttribute","textareaElements","index","instructionsId","parent","closest","instructionsElement","document","createElement","id","className","srOnly","insertBefore","setTimeout","keypadElement","firstButton","focus","event","isAnswerInputFocused","activeElement","getAttribute","isClickOrTouchEvent","type","setState","activeAnswerBlock","focusFirstKeypadElement","handleEvent","handleKeyDown","addEventListener","removeEventListener","response","callOnSessionChange","data","input","c","toNodeData","clear","Array","isArray","vv","cmd","keystroke","onSessionChange","show","handleAnswerBlockDomUpdate","subfieldValue","completeAnswer","mqStatic","mathField","changeField","fields","find","k","tf","e","relatedTarget","currentTarget","getParentWithRoleTooltip","element","depth","offsetParent","getDeepChildDataKeypad","child","children","attributes","parentWithTooltipRole","childWithDataKeypad","window","registerEmbed","htmlString","blockContainer","blockResponse","blockMath","text","pattern","matches","match","nextProps","nextConfig","note","language","t","lng","env","mode","countResponseOccurrences","updateAria","newAnswers","nextState","sameModel","sameState","prevProps","prevState","prevResponseType","responseType","currentResponseType","cleanupKeyDownListener","ref","div","firstChild","correctness","teacherInstructions","rationale","feedback","animationsDisabled","showNote","prompt","customKeys","role","displayNote","emptyResponse","showCorrectAnswerToggle","tooltipModeEnabled","staticLatex","viewMode","studentPrintMode","printView","printContainer","subFieldChanged","getFieldName","setInput","onSubFieldFocus","onBlur","midContent","main","collapsible","hidden","visible","__html","promptContainer","inputAndKeypadContainer","ResponseTypes","simple","onSimpleResponseChange","advanced","showCorrectness","correctAnswerShown","printCorrect","setTooltipRef","tooltip","keypadTooltip","popper","keypadTooltipPopper","responseContainer","width","onClick","tooltipPopper","toggle","toggleShowCorrect","mainContainer","r","React","Component","PropTypes","object","isRequired","func","styles","theme","color","backgroundColor","background","display","primaryLight","padding","spacing","unit","border","secondary","fontSize","opacity","marginTop","paddingTop","marginBottom","position","title","paddingBottom","zIndex","minWidth","maxWidth","margin","top","borderColor","lineHeight","left","right","borderTop","letterSpacing","palette","grey","alignItems","justifyContent","borderRight","flexShrink","flexGrow","flexBasis","pointerEvents","height","overflow"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;;;;;;;;;AACA,IAAQA,UAAR,GAAuBC,sBAAvB,CAAQD,UAAR;AACA,IAAIE,UAAU,GAAG,KAAjB;AAEA,IAAMC,aAAa,GAAG,YAAtB;AACA,IAAMC,KAAK,GAAG,gBAAd;AACA,IAAMC,sBAAsB,GAAG,CAA/B,C,CAEA;AACA;AACA;AACA;AACA;AACA;;AACA,IAAMC,SAAS,GAAG,iCAAiCC,IAAjC,CAAsCC,SAAS,CAACC,SAAhD,CAAlB;;AAEA,SAASC,sBAAT,GAA8C;AAAA,MAAdC,OAAc,uEAAJ,EAAI;AAC5C,SAAOA,OAAO,CAACC,GAAR,CAAY,UAACC,GAAD;AAAA,WAAU;AAC3BC,MAAAA,IAAI,EAAED,GADqB;AAE3BE,MAAAA,KAAK,EAAEF,GAFoB;AAG3BG,MAAAA,KAAK,EAAEH,GAHoB;AAI3BI,MAAAA,KAAK,EAAEJ;AAJoB,KAAV;AAAA,GAAZ,CAAP;AAMD;;AAED,SAASK,cAAT,GAA6D;AAAA,MAArCC,cAAqC,uEAApB,EAAoB;AAAA,MAAhBC,cAAgB;AAC3D,SAAOC,IAAI,CAACC,KAAL,CAAWH,cAAc,CAACI,MAAf,GAAwB,CAAnC,IAAwC,EAAxC,IAA8CH,cAAc,KAAK,eAAnB,GAAqC,GAArC,GAA2C,GAAzF,CAAP;AACD;;AAED,SAASI,gBAAT,CAA0BC,KAA1B,EAAiCC,KAAjC,EAAwC;AACtC,aAA6BD,KAAK,IAAI,EAAtC;AAAA,MAAQE,MAAR,QAAQA,MAAR;AAAA,MAAgBC,QAAhB,QAAgBA,QAAhB;;AACA,cAAgED,MAAM,IAAI,EAA1E;AAAA,MAAQE,UAAR,SAAQA,UAAR;AAAA,MAAoBC,SAApB,SAAoBA,SAApB;AAAA,MAA+BC,SAA/B,SAA+BA,SAA/B;AAAA,MAA0CC,iBAA1C,SAA0CA,iBAA1C;;AAEA,MAAIL,MAAM,IAAIE,UAAd,EAA0B;AACxB,QAAMI,eAAe,GAAGJ,UAAxB;;AAEA,QAAIH,KAAK,CAACQ,WAAV,EAAuB;AACrB,aAAOJ,SAAS,IAAIA,SAAS,CAACP,MAAvB,IAAiCO,SAAS,CAAC,CAAD,CAAT,CAAaK,MAArD;AACD;;AAED,QAAIC,YAAY,GAAG,CAAnB,CAPwB,CAOF;AACtB;;AAEA,WAAO,CAACH,eAAe,IAAI,EAApB,EACJI,OADI,CACIjC,KADJ,EACW,YAAY;AAC1B,UAAM+B,MAAM,GAAGT,KAAK,CAACY,OAAN,CAAcC,OAAd,YAA0BH,YAA1B,EAAf;;AAEA,UAAIL,SAAS,IAAI,CAACC,iBAAlB,EAAqC;AACnC,YAAMQ,UAAU,GAAG,SAASC,MAAT,CAAgB,EAAhB,IAAsB,YAAzC;AAEA,+CAAgCL,YAAY,EAA5C,eAAmDI,UAAU,CAACC,MAAX,CAAkB,CAAlB,CAAnD;AACD;;AAED,UAAIb,QAAJ,EAAc;AACZ,+CAAgCQ,YAAY,EAA5C;AACD;;AAED,6CAAgCA,YAAY,EAA5C,eAAoDD,MAAM,IAAIA,MAAM,CAACO,KAAlB,IAA4B,EAA/E;AACD,KAfI,EAgBJL,OAhBI,CAgBIlC,aAhBJ,EAgBmB,oBAhBnB,CAAP;AAiBD;AACF;;IAEYwC,I;;;;;AAQX,gBAAYC,KAAZ,EAAmB;AAAA;;AAAA;AACjB,8BAAMA,KAAN;AADiB,mHAuDU,YAAM;AACjC,wBAA2B,MAAKA,KAAhC;AAAA,UAAQnB,KAAR,eAAQA,KAAR;AAAA,UAAeoB,OAAf,eAAeA,OAAf;AACA,wBAAiC,MAAKnB,KAAtC;AAAA,UAAQY,OAAR,eAAQA,OAAR;AAAA,UAAiBJ,WAAjB,eAAiBA,WAAjB;AACA,UAAMK,OAAO,GAAGD,OAAO,CAACC,OAAxB;;AAEA,UAAI,MAAKO,IAAL,IAAarB,KAAK,CAACG,QAAnB,IAA+B,CAACM,WAApC,EAAiD;AAC/Ca,QAAAA,MAAM,CAACC,IAAP,CAAYT,OAAZ,EAAqBU,OAArB,CAA6B,UAACC,QAAD,EAAc;AACzC,cAAMC,EAAE,GAAG,MAAKL,IAAL,CAAUM,aAAV,YAA4BF,QAA5B,EAAX;;AACA,cAAMG,OAAO,GAAG,MAAKP,IAAL,CAAUM,aAAV,YAA4BF,QAA5B,WAAhB,CAFyC,CAGzC;;;AAEA,cAAIC,EAAJ,EAAQ;AACN,gBAAIG,EAAE,GAAGC,sBAAUC,YAAV,CAAuB,CAAvB,CAAT;;AACA,gBAAMrB,MAAM,GAAGI,OAAO,CAACW,QAAD,CAAtB;AAEAC,YAAAA,EAAE,CAACM,WAAH,GAAkBtB,MAAM,IAAIA,MAAM,CAACO,KAAlB,IAA4B,EAA7C;;AAEA,gBAAI,CAACjB,KAAK,CAACiC,IAAX,EAAiB,CACf;AACA;AACA;AACA;AACA;AACD,aAND,MAMO;AACLP,cAAAA,EAAE,CAACQ,aAAH,CAAiBA,aAAjB,CAA+BC,SAA/B,CAAyCC,MAAzC,CAAgDhB,OAAO,CAACiB,OAAxD;AACAX,cAAAA,EAAE,CAACQ,aAAH,CAAiBA,aAAjB,CAA+BC,SAA/B,CAAyCC,MAAzC,CAAgDhB,OAAO,CAACkB,SAAxD;AACD;;AAEDT,YAAAA,EAAE,CAACU,UAAH,CAAcb,EAAd,EAjBM,CAmBN;AACA;AACA;;AACAE,YAAAA,OAAO,CAACI,WAAR,GAAsB,GAAtB;AACD;AACF,SA7BD;AA8BD;;AAED,+CAAW,MAAKX,IAAhB;AACD,KA9FkB;AAAA,mGAyLN,YAAM;AACjB,UAAQD,OAAR,GAAoB,MAAKD,KAAzB,CAAQC,OAAR;;AAEA,UAAI,MAAKC,IAAT,EAAe;AACb;AACA,YAAMmB,kBAAkB,GAAG,MAAKnB,IAAL,CAAUoB,gBAAV,CAA2B,gBAA3B,CAA3B;;AACAD,QAAAA,kBAAkB,CAAChB,OAAnB,CAA2B,UAACkB,IAAD;AAAA,iBAAUA,IAAI,CAACC,YAAL,CAAkB,aAAlB,EAAiC,MAAjC,CAAV;AAAA,SAA3B,EAHa,CAKb;;AACA,YAAMC,gBAAgB,GAAG,MAAKvB,IAAL,CAAUoB,gBAAV,CAA2B,UAA3B,CAAzB;;AACAG,QAAAA,gBAAgB,CAACpB,OAAjB,CAAyB,UAACkB,IAAD,EAAOG,KAAP,EAAiB;AACxCH,UAAAA,IAAI,CAACC,YAAL,CAAkB,YAAlB,EAAgC,eAAhC,EADwC,CAGxC;;AACA,cAAMG,cAAc,0BAAmBD,KAAnB,CAApB,CAJwC,CAMxC;;AACA,cAAME,MAAM,GAAGL,IAAI,CAACM,OAAL,CAAa,cAAb,CAAf;;AAEA,cAAID,MAAJ,EAAY;AACV;AACA,gBAAIE,mBAAmB,GAAGF,MAAM,CAACpB,aAAP,YAAyBmB,cAAzB,EAA1B;;AAEA,gBAAI,CAACG,mBAAL,EAA0B;AACxBA,cAAAA,mBAAmB,GAAGC,QAAQ,CAACC,aAAT,CAAuB,MAAvB,CAAtB;AACAF,cAAAA,mBAAmB,CAACG,EAApB,GAAyBN,cAAzB;AACAG,cAAAA,mBAAmB,CAACI,SAApB,GAAgCjC,OAAO,CAACkC,MAAxC;AACAL,cAAAA,mBAAmB,CAACjB,WAApB,GACE,mSADF;AAEAe,cAAAA,MAAM,CAACQ,YAAP,CAAoBN,mBAApB,EAAyCP,IAAzC;AACD;;AAEDA,YAAAA,IAAI,CAACC,YAAL,CAAkB,kBAAlB,EAAsCG,cAAtC;AACD;AACF,SAxBD;AAyBD;AACF,KA7NkB;AAAA,gHA+NO,YAAM;AAC9BU,MAAAA,UAAU,CAAC,YAAM;AACf,YAAMC,aAAa,GAAGP,QAAQ,CAACvB,aAAT,CAAuB,eAAvB,CAAtB;;AAEA,YAAI8B,aAAJ,EAAmB;AACjB,cAAMC,WAAW,GAAGD,aAAa,CAAC9B,aAAd,CAA4B,yBAA5B,CAApB;;AAEA,cAAI+B,WAAJ,EAAiB;AACfA,YAAAA,WAAW,CAACC,KAAZ;AACD;AACF;AACF,OAVS,EAUP,CAVO,CAAV;AAWD,KA3OkB;AAAA,sGA6OH,UAACC,KAAD,EAAQR,EAAR,EAAe;AAC7B,UAAMS,oBAAoB,GAAGX,QAAQ,CAACY,aAAT,CAAuBC,YAAvB,CAAoC,YAApC,MAAsD,eAAnF;AACA,UAAMC,mBAAmB,GAAGJ,KAAK,CAACK,IAAN,KAAe,OAAf,IAA0BL,KAAK,CAACK,IAAN,KAAe,YAArE;;AAEA,UAAIJ,oBAAoB,KAAKD,KAAK,CAACxE,GAAN,KAAc,WAAd,IAA6B4E,mBAAlC,CAAxB,EAAgF;AAC9E,cAAKE,QAAL,CAAc;AAAEC,UAAAA,iBAAiB,EAAEf;AAArB,SAAd,EAAyC,YAAM;AAC7C,cAAIQ,KAAK,CAACxE,GAAN,KAAc,WAAlB,EAA+B;AAC7B,kBAAKgF,uBAAL;AACD;AACF,SAJD;AAKD;;AAED,UAAK,CAACP,oBAAD,IAAyBG,mBAA1B,IAAkDJ,KAAK,CAACxE,GAAN,KAAc,QAApE,EAA8E;AAC5E,cAAK8E,QAAL,CAAc;AAAEC,UAAAA,iBAAiB,EAAE;AAArB,SAAd;AACD;AACF,KA5PkB;AAAA,wGA8PD,UAACf,EAAD,EAAQ;AACxB,UAAMiB,WAAW,GAAG,SAAdA,WAAc,CAACT,KAAD,EAAW;AAC7B,cAAKU,aAAL,CAAmBV,KAAnB,EAA0BR,EAA1B;AACD,OAFD;;AAIAF,MAAAA,QAAQ,CAACqB,gBAAT,CAA0B,SAA1B,EAAqCF,WAArC;AACAnB,MAAAA,QAAQ,CAACqB,gBAAT,CAA0B,OAA1B,EAAmCF,WAAnC;AACAnB,MAAAA,QAAQ,CAACqB,gBAAT,CAA0B,YAA1B,EAAwCF,WAAxC;AACD,KAtQkB;AAAA,+GAwQM,YAAM;AAC7BnB,MAAAA,QAAQ,CAACsB,mBAAT,CAA6B,SAA7B,EAAwC,MAAKH,WAA7C;AACAnB,MAAAA,QAAQ,CAACsB,mBAAT,CAA6B,OAA7B,EAAsC,MAAKH,WAA3C;AACAnB,MAAAA,QAAQ,CAACsB,mBAAT,CAA6B,YAA7B,EAA2C,MAAKH,WAAhD;AACD,KA5QkB;AAAA,+FAoRV,YAAM,CAAE,CApRE;AAAA,+GAsRM,UAACI,QAAD,EAAc;AACrC,YAAKP,QAAL,CAAc,UAACjE,KAAD;AAAA,eAAY;AAAEY,UAAAA,OAAO,kCAAOZ,KAAK,CAACY,OAAb;AAAsB4D,YAAAA,QAAQ,EAARA;AAAtB;AAAT,SAAZ;AAAA,OAAd,EAAwE,MAAKC,mBAA7E;AACD,KAxRkB;AAAA,mGA0RN,UAACC,IAAD,EAAU;AACrB,UAAI,CAACA,IAAL,EAAW;AACT;AACD;;AAED,UAAQV,IAAR,GAAwBU,IAAxB,CAAQV,IAAR;AAAA,UAAchD,KAAd,GAAwB0D,IAAxB,CAAc1D,KAAd;;AAEA,UAAIgD,IAAI,KAAK,SAAT,IAAsBA,IAAI,KAAK,QAAnC,EAA6C;AAC3C,eAAOU,IAAP;AACD,OAFD,MAEO,IAAIV,IAAI,KAAK,QAAb,EAAuB;AAC5B;AAASA,UAAAA,IAAI,EAAE;AAAf,WAA4BU,IAA5B;AACD,OAFM,MAEA,IAAI1D,KAAK,KAAK,OAAd,EAAuB;AAC5B,eAAO;AAAEgD,UAAAA,IAAI,EAAE;AAAR,SAAP;AACD,OAFM,MAEA;AACL,eAAO;AAAEA,UAAAA,IAAI,EAAE,OAAR;AAAiBhD,UAAAA,KAAK,EAALA;AAAjB,SAAP;AACD;AACF,KA1SkB;AAAA,iGA4SR,UAAC2D,KAAD,EAAW;AACpB,YAAKA,KAAL,GAAaA,KAAb;AACD,KA9SkB;AAAA,gGAgTT,UAACD,IAAD,EAAU;AAClB,UAAME,CAAC,GAAG,MAAKC,UAAL,CAAgBH,IAAhB,CAAV;;AAEA,UAAIE,CAAC,CAACZ,IAAF,KAAW,OAAf,EAAwB;AACtB,cAAKW,KAAL,CAAWG,KAAX;AACD,OAFD,MAEO,IAAIF,CAAC,CAACZ,IAAF,KAAW,SAAf,EAA0B;AAC/B,YAAIe,KAAK,CAACC,OAAN,CAAcJ,CAAC,CAAC5D,KAAhB,CAAJ,EAA4B;AAC1B4D,UAAAA,CAAC,CAAC5D,KAAF,CAAQO,OAAR,CAAgB,UAAC0D,EAAD,EAAQ;AACtB,kBAAKN,KAAL,CAAWO,GAAX,CAAeD,EAAf;AACD,WAFD;AAGD,SAJD,MAIO;AACL,gBAAKN,KAAL,CAAWO,GAAX,CAAeN,CAAC,CAAC5D,KAAjB;AACD;AACF,OARM,MAQA,IAAI4D,CAAC,CAACZ,IAAF,KAAW,QAAf,EAAyB;AAC9B,cAAKW,KAAL,CAAWQ,SAAX,CAAqBP,CAAC,CAAC5D,KAAvB;AACD,OAFM,MAEA;AACL,cAAK2D,KAAL,CAAWrF,KAAX,CAAiBsF,CAAC,CAAC5D,KAAnB;AACD;;AAED,YAAK2D,KAAL,CAAWjB,KAAX;AACD,KApUkB;AAAA,4GAsUG,YAAM;AAC1B,UAAQ0B,eAAR,GAA4B,MAAKlE,KAAjC,CAAQkE,eAAR;;AAEA,UAAIA,eAAJ,EAAqB;AACnBA,QAAAA,eAAe,CAAC,MAAKpF,KAAL,CAAWY,OAAZ,CAAf;AACD;AACF,KA5UkB;AAAA,0GA8UC,UAACyE,IAAD,EAAU;AAC5B,YAAKpB,QAAL,CAAc;AAAEzD,QAAAA,WAAW,EAAE6E;AAAf,OAAd,EAAqC,MAAKC,0BAA1C;AACD,KAhVkB;AAAA,wGAkVD,UAAClG,IAAD,EAAOmG,aAAP,EAAyB;AACzC;;AAEA,UAAInG,IAAJ,EAAU;AACR,cAAK6E,QAAL,CACE,UAACjE,KAAD;AAAA,iBAAY;AACVY,YAAAA,OAAO,kCACFZ,KAAK,CAACY,OADJ;AAEL4E,cAAAA,cAAc,EAAE,MAAKC,QAAL,IAAiB,MAAKA,QAAL,CAAcC,SAAd,CAAwBrG,KAAxB,EAF5B;AAGLwB,cAAAA,OAAO,kCACFb,KAAK,CAACY,OAAN,CAAcC,OADZ,4CAEJzB,IAFI,EAEG;AAAE4B,gBAAAA,KAAK,EAAEuE;AAAT,eAFH;AAHF;AADG,WAAZ;AAAA,SADF,EAWE,MAAKd,mBAXP;AAaD;AACF,KApWkB;AAAA,qGAsWJ,UAACkB,WAAD,EAAcC,MAAd,EAAyB;AACtC,UAAQ/E,OAAR,GAAoB,MAAKb,KAAL,CAAWY,OAA/B,CAAQC,OAAR;;AAEA,UAAIQ,MAAM,CAACC,IAAP,CAAYT,OAAO,IAAI,EAAvB,EAA2BhB,MAA/B,EAAuC;AACrC,YAAMyB,IAAI,GAAGD,MAAM,CAACC,IAAP,CAAYT,OAAZ,CAAb;AAEA,eAAOS,IAAI,CAACuE,IAAL,CAAU,UAACC,CAAD,EAAO;AACtB,cAAMC,EAAE,GAAGH,MAAM,CAACE,CAAD,CAAjB;AAEA,iBAAOC,EAAE,IAAIA,EAAE,CAAC5C,EAAH,IAASwC,WAAW,CAACxC,EAAlC;AACD,SAJM,CAAP;AAKD;AACF,KAlXkB;AAAA,+FAoXV,UAAC6C,CAAD,EAAO;AACd,kBAAyCA,CAAC,IAAI,EAA9C;AAAA,UAAQC,aAAR,SAAQA,aAAR;AAAA,UAAuBC,aAAvB,SAAuBA,aAAvB;;AAEA,eAASC,wBAAT,CAAkCC,OAAlC,EAAsD;AAAA,YAAXC,KAAW,uEAAH,CAAG;AACpD;AACA,YAAI,CAACD,OAAD,IAAYC,KAAK,IAAI,EAAzB,EAA6B,OAAO,IAAP;AAE7B,YAAMvD,MAAM,GAAGsD,OAAO,CAACE,YAAvB;AAEA,YAAI,CAACxD,MAAL,EAAa,OAAO,IAAP;;AAEb,YAAIA,MAAM,CAACgB,YAAP,CAAoB,MAApB,MAAgC,SAApC,EAA+C;AAC7C,iBAAOhB,MAAP;AACD;;AAED,eAAOqD,wBAAwB,CAACrD,MAAD,EAASuD,KAAK,GAAG,CAAjB,CAA/B;AACD;;AAED,eAASE,sBAAT,CAAgCH,OAAhC,EAAoD;AAAA;;AAAA,YAAXC,KAAW,uEAAH,CAAG;AAClD;AACA,YAAI,CAACD,OAAD,IAAYC,KAAK,IAAI,CAAzB,EAA4B,OAAO,IAAP;AAE5B,YAAMG,KAAK,GAAGJ,OAAH,aAAGA,OAAH,4CAAGA,OAAO,CAAEK,QAAZ,sDAAG,kBAAoB,CAApB,CAAd;AAEA,YAAI,CAACD,KAAL,EAAY,OAAO,IAAP;;AAEZ,YAAIA,KAAK,CAACE,UAAN,IAAoBF,KAAK,CAACE,UAAN,CAAiB,aAAjB,CAAxB,EAAyD;AACvD,iBAAOF,KAAP;AACD;;AAED,eAAOD,sBAAsB,CAACC,KAAD,EAAQH,KAAK,GAAG,CAAhB,CAA7B;AACD;;AAED,UAAMM,qBAAqB,GAAGR,wBAAwB,CAACF,aAAD,CAAtD;AACA,UAAMW,mBAAmB,GAAGD,qBAAqB,GAAGJ,sBAAsB,CAACI,qBAAD,CAAzB,GAAmD,IAApG;;AAEA,UAAI,CAACV,aAAD,IAAkB,CAACC,aAAnB,IAAoC,EAACU,mBAAD,aAACA,mBAAD,eAACA,mBAAmB,CAAEF,UAArB,CAAgC,aAAhC,CAAD,CAAxC,EAAyF;AACvF,cAAKzC,QAAL,CAAc;AAAEC,UAAAA,iBAAiB,EAAE;AAArB,SAAd;AACD,OAtCa,CAuCd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACD,KAvakB;AAGjB,QAAMrD,QAAO,GAAG,EAAhB;;AAEA,QAAIK,KAAK,CAACnB,KAAN,CAAYE,MAAZ,IAAsBiB,KAAK,CAACnB,KAAN,CAAYE,MAAZ,CAAmBE,UAA7C,EAAyD;AACvD,UAAIO,YAAY,GAAG,CAAnB,CADuD,CACjC;AACtB;;AAEA,OAACQ,KAAK,CAACnB,KAAN,CAAYE,MAAZ,CAAmBE,UAAnB,IAAiC,EAAlC,EAAsCQ,OAAtC,CAA8CjC,KAA9C,EAAqD,YAAM;AACzDmC,QAAAA,QAAO,YAAKH,YAAL,EAAP,GAA8B;AAC5BM,UAAAA,KAAK,EACFE,KAAK,CAACN,OAAN,IACCM,KAAK,CAACN,OAAN,CAAcC,OADf,IAECK,KAAK,CAACN,OAAN,CAAcC,OAAd,YAA0BH,YAA1B,EAFD,IAGCQ,KAAK,CAACN,OAAN,CAAcC,OAAd,YAA0BH,YAA1B,GAA0CM,KAH5C,IAIA;AAN0B,SAA9B;AASAN,QAAAA,YAAY,IAAI,CAAhB;AACD,OAXD;AAYD;;AAED,UAAKV,KAAL,GAAa;AACXY,MAAAA,OAAO,kCAAOM,KAAK,CAACN,OAAb;AAAsBC,QAAAA,OAAO,EAAPA;AAAtB,QADI;AAEXqD,MAAAA,iBAAiB,EAAE,EAFR;AAGX1D,MAAAA,WAAW,EAAE,MAAKU,KAAL,CAAWnB,KAAX,CAAiBE,MAAjB,CAAwBK,iBAAxB,IAA6C;AAH/C,KAAb;AAvBiB;AA4BlB;;;;WAED,qCAA4B;AAC1B,UAAQa,OAAR,GAAoB,KAAKD,KAAzB,CAAQC,OAAR;;AAEA,UAAI,OAAO0F,MAAP,KAAkB,WAAtB,EAAmC;AACjC,YAAIjF,EAAE,GAAGC,sBAAUC,YAAV,CAAuB,CAAvB,CAAT;;AAEA,YAAI,CAACtD,UAAL,EAAiB;AACfoD,UAAAA,EAAE,CAACkF,aAAH,CAAiB,aAAjB,EAAgC,UAACpC,IAAD,EAAU;AACxC,mBAAO;AACLqC,cAAAA,UAAU,yBAAiB5F,OAAO,CAAC6F,cAAzB,+CACQ7F,OAAO,CAAC8F,aADhB,qBACsCvC,IADtC,2DAEQvD,OAAO,CAAC+F,SAFhB,+CAGQxC,IAHR,6DADL;AAOLyC,cAAAA,IAAI,EAAE;AAAA,uBAAM,MAAN;AAAA,eAPD;AAQL9H,cAAAA,KAAK,EAAE;AAAA,sDAA8BqF,IAA9B;AAAA;AARF,aAAP;AAUD,WAXD;AAaAlG,UAAAA,UAAU,GAAG,IAAb;AACD;AACF;AACF;;;WA2CD,kCAAyB2B,UAAzB,EAAqC;AACnC,UAAMiH,OAAO,GAAG,mBAAhB;AACA,UAAMC,OAAO,GAAGlH,UAAH,aAAGA,UAAH,uBAAGA,UAAU,CAAEmH,KAAZ,CAAkBF,OAAlB,CAAhB;AAEA,aAAOC,OAAO,GAAGA,OAAO,CAACxH,MAAX,GAAoB,CAAlC;AACD;;;WAED,0CAAiC0H,SAAjC,EAA4C;AAAA;;AAC1C,UAAQtH,MAAR,GAAmB,KAAKiB,KAAL,CAAWnB,KAA9B,CAAQE,MAAR;;AACA,kBAAoCsH,SAAS,CAACxH,KAAV,IAAmB,EAAvD;AAAA,+BAAQE,MAAR;AAAA,UAAgBuH,UAAhB,6BAA6B,EAA7B,gBAF0C,CAG1C;AACA;AACA;;;AACA,UACEvH,MAAM,CAACwH,IAAP,IACAxH,MAAM,CAACyH,QADP,IAEAzH,MAAM,CAACyH,QAAP,KAAoBF,UAAU,CAACE,QAF/B,IAGAzH,MAAM,CAACwH,IAAP,KAAgBnJ,UAAU,CAACqJ,CAAX,CAAa,yCAAb,EAAwD;AAAEC,QAAAA,GAAG,EAAE3H,MAAM,CAACyH;AAAd,OAAxD,CAJlB,EAKE;AACAzH,QAAAA,MAAM,CAACwH,IAAP,GAAcnJ,UAAU,CAACqJ,CAAX,CAAa,yCAAb,EAAwD;AAAEC,UAAAA,GAAG,EAAEJ,UAAU,CAACE;AAAlB,SAAxD,CAAd;AACD;;AAED,UAAKzH,MAAM,CAAC4H,GAAP,IAAc5H,MAAM,CAAC4H,GAAP,CAAWC,IAAX,KAAoB,UAAnC,IAAmDN,UAAU,CAACK,GAAX,IAAkBL,UAAU,CAACK,GAAX,CAAeC,IAAf,KAAwB,UAAjG,EAA8G;AAC5G,aAAK7D,QAAL,iCAAmB,KAAKjE,KAAL,CAAWY,OAA9B;AAAuCJ,UAAAA,WAAW,EAAE;AAApD;AACD;;AAED,UAAIgH,UAAU,CAAClH,iBAAf,EAAkC;AAChC,aAAK2D,QAAL,CAAc;AAAEzD,UAAAA,WAAW,EAAE;AAAf,SAAd;AACD;;AAED,UAAI,KAAKuH,wBAAL,CAA8B9H,MAAM,CAACE,UAArC,IAAmD,KAAK4H,wBAAL,CAA8BP,UAAU,CAACrH,UAAzC,CAAvD,EAA6G;AAC3GoD,QAAAA,UAAU,CAAC;AAAA,iBAAM,MAAI,CAACyE,UAAL,EAAN;AAAA,SAAD,EAA0B,GAA1B,CAAV;AACD;;AAED,UACG/H,MAAM,IAAIA,MAAM,CAACG,SAAjB,IAA8BH,MAAM,CAACG,SAAP,CAAiBP,MAAjB,KAA4B2H,UAAU,CAACpH,SAAX,CAAqBP,MAAhF,IACC,CAACI,MAAD,IAAWuH,UAAX,IAAyBA,UAAU,CAACpH,SADrC,IAECH,MAAM,IAAIuH,UAAV,IAAwBvH,MAAM,CAACE,UAAP,KAAsBqH,UAAU,CAACrH,UAH5D,EAIE;AACA,YAAM8H,UAAU,GAAG,EAAnB;AACA,YAAMpH,OAAO,GAAG,KAAKb,KAAL,CAAWY,OAAX,CAAmBC,OAAnC;AAEA,YAAIH,YAAY,GAAG,CAAnB,CAJA,CAIsB;AAEtB;;AACA,SAAC8G,UAAU,CAACrH,UAAX,IAAyB,EAA1B,EAA8BQ,OAA9B,CAAsCjC,KAAtC,EAA6C,YAAM;AACjDuJ,UAAAA,UAAU,YAAKvH,YAAL,EAAV,GAAiC;AAC/BM,YAAAA,KAAK,EAAGH,OAAO,IAAIA,OAAO,YAAKH,YAAL,EAAlB,IAA0CG,OAAO,YAAKH,YAAL,EAAP,CAA4BM,KAAvE,IAAiF;AADzD,WAAjC;AAGAN,UAAAA,YAAY;AACb,SALD;AAOA,aAAKuD,QAAL,CACE,UAACjE,KAAD;AAAA,iBAAY;AACVY,YAAAA,OAAO,kCACFZ,KAAK,CAACY,OADJ;AAEL4E,cAAAA,cAAc,EAAE,MAAI,CAACC,QAAL,IAAiB,MAAI,CAACA,QAAL,CAAcC,SAAd,CAAwBrG,KAAxB,EAF5B;AAGLwB,cAAAA,OAAO,EAAEoH;AAHJ;AADG,WAAZ;AAAA,SADF,EAQE,KAAK3C,0BARP;AAUD;AACF;;;WAED,+BAAsBiC,SAAtB,EAAiCW,SAAjC,EAA4C;AAC1C,UAAMC,SAAS,GAAG,yBAAQ,KAAKjH,KAAL,CAAWnB,KAAnB,EAA0BwH,SAAS,CAACxH,KAApC,CAAlB;AACA,UAAMqI,SAAS,GAAG,yBAAQ,KAAKpI,KAAb,EAAoBkI,SAApB,CAAlB;AAEA,aAAO,CAACC,SAAD,IAAc,CAACC,SAAtB;AACD;;;WAED,6BAAoB;AAAA;;AAClB,WAAK9C,0BAAL;AACA,WAAK0C,UAAL;AACAzE,MAAAA,UAAU,CAAC;AAAA,eAAM,yCAAW,MAAI,CAACnC,IAAhB,CAAN;AAAA,OAAD,EAA8B,GAA9B,CAAV;AACD;;;WAED,4BAAmBiH,SAAnB,EAA8BC,SAA9B,EAAyC;AAAA;;AACvC,WAAKhD,0BAAL;AAEA,UAAMiD,gBAAgB,uBAAGF,SAAS,CAACtI,KAAb,8EAAG,iBAAiBE,MAApB,0DAAG,sBAAyBuI,YAAlD;AACA,UAAMC,mBAAmB,wBAAG,KAAKvH,KAAL,CAAWnB,KAAd,+EAAG,kBAAkBE,MAArB,0DAAG,sBAA0BuI,YAAtD;;AAEA,UAAID,gBAAgB,KAAKE,mBAAzB,EAA8C;AAC5C,aAAKT,UAAL;AACD;AACF;;;WAuFD,gCAAuB;AACrB,UAAI,KAAKU,sBAAT,EAAiC;AAC/B,aAAKA,sBAAL;AACD;AACF;;;WAuJD,uBAAcC,GAAd,EAAmB;AACjB;AACApF,MAAAA,UAAU,CAAC,YAAM;AACf,YAAIoF,GAAG,IAAI/J,SAAX,EAAsB;AACpB,cAAMgK,GAAG,GAAG3F,QAAQ,CAACvB,aAAT,CAAuB,kBAAvB,CAAZ;;AAEA,cAAIkH,GAAJ,EAAS;AACP,gBAAMnH,EAAE,GAAGmH,GAAG,CAACC,UAAf;AACApH,YAAAA,EAAE,CAACiB,YAAH,CAAgB,UAAhB,EAA4B,IAA5B;AACD;AACF;AACF,OATS,EASP,CATO,CAAV;AAUD;;;WAED,kBAAS;AAAA;AAAA;;AACP,yBAA2B,KAAKxB,KAAhC;AAAA,UAAQnB,KAAR,gBAAQA,KAAR;AAAA,UAAeoB,OAAf,gBAAeA,OAAf;AACA,yBAAoD,KAAKnB,KAAzD;AAAA,UAAQkE,iBAAR,gBAAQA,iBAAR;AAAA,UAA2B1D,WAA3B,gBAA2BA,WAA3B;AAAA,UAAwCI,OAAxC,gBAAwCA,OAAxC;;AACA,kBAYIb,KAAK,IAAI,EAZb;AAAA,UACEE,MADF,SACEA,MADF;AAAA,UAEE6I,WAFF,SAEEA,WAFF;AAAA,UAGE5I,QAHF,SAGEA,QAHF;AAAA,UAIE8B,IAJF,SAIEA,IAJF;AAAA,UAKE+G,mBALF,SAKEA,mBALF;AAAA,UAMEC,SANF,SAMEA,SANF;AAAA,UAOEC,QAPF,SAOEA,QAPF;AAAA,UAQEC,kBARF,SAQEA,kBARF;AAAA,UASE7I,SATF,SASEA,SATF;AAAA,UAUEC,iBAVF,SAUEA,iBAVF;AAAA,UAWEoH,QAXF,SAWEA,QAXF;;AAcA,UAAI,CAACzH,MAAL,EAAa;AACX,eAAO,IAAP;AACD;;AAED,kBASIA,MAAM,IAAI,EATd;AAAA,UACEkJ,QADF,SACEA,QADF;AAAA,UAEE1B,IAFF,SAEEA,IAFF;AAAA,UAGE2B,MAHF,SAGEA,MAHF;AAAA,UAIEhJ,SAJF,SAIEA,SAJF;AAAA,UAKEoI,YALF,SAKEA,YALF;AAAA,UAME9I,cANF,SAMEA,cANF;AAAA,UAOE2J,UAPF,SAOEA,UAPF;AAAA,4BAQExB,GARF;;AAAA,yCAQwB,EARxB;AAAA,UAQSC,IART,aAQSA,IART;AAAA,UAQewB,IARf,aAQeA,IARf;AAUA,UAAMC,WAAW,GAAG,CAAC/I,WAAW,IAAKsH,IAAI,KAAK,MAAT,IAAmBwB,IAAI,KAAK,YAA7C,KAA+DH,QAA/D,IAA2E1B,IAA/F;AACA,UAAM+B,aAAa,GAAG,yBAAQpJ,SAAR,CAAtB;AACA,UAAMqJ,uBAAuB,GAAG,CAACD,aAAD,IAAkBV,WAAlB,IAAiCA,WAAW,CAACA,WAAZ,KAA4B,SAA7F;AACA,UAAMY,kBAAkB,GAAGxJ,QAAQ,IAAI4I,WAAvC;AACA,UAAMrJ,cAAc,GAAGT,sBAAsB,CAACqK,UAAD,CAA7C;AACA,UAAMjH,OAAO,GAAG0G,WAAW,IAAIA,WAAW,CAAC1G,OAA3C;AACA,UAAMuH,WAAW,GAAG7J,gBAAgB,CAACC,KAAD,EAAQ,KAAKC,KAAb,CAAhB,IAAuC,EAA3D;AACA,UAAM4J,QAAQ,GAAG1J,QAAQ,IAAI,CAAC4I,WAA9B;AACA,UAAMe,gBAAgB,GAAGxJ,SAAS,IAAI,CAACC,iBAAvC;;AAEA,UAAMwJ,SAAS,gBACb;AAAK,QAAA,SAAS,EAAE3I,OAAO,CAAC4I;AAAxB,sBACE,gCAAC,aAAD,CAAI,MAAJ;AACE,QAAA,SAAS,EAAE5I,OAAO,UADpB;AAEE,QAAA,GAAG,EAAE,aAACsE,QAAD;AAAA,iBAAe,MAAI,CAACA,QAAL,GAAgBA,QAAQ,IAAI,MAAI,CAACA,QAAhD;AAAA,SAFP;AAGE,QAAA,KAAK,EAAEkE,WAHT;AAIE,QAAA,gBAAgB,EAAE,KAAKK,eAJzB;AAKE,QAAA,YAAY,EAAE,KAAKC,YALrB;AAME,QAAA,QAAQ,EAAE,KAAKC,QANjB;AAOE,QAAA,eAAe,EAAE,KAAKC,eAPxB;AAQE,QAAA,MAAM,EAAE,KAAKC;AARf,QADF,CADF;;AAeA,UAAMC,UAAU,gBACd;AAAK,QAAA,SAAS,EAAElJ,OAAO,CAACmJ;AAAxB,SACGxC,IAAI,KAAK,QAAT,iBAAqB;AAAI,QAAA,SAAS,EAAE3G,OAAO,CAACkC;AAAvB,2CADxB,EAGGuG,QAAQ,IACPb,mBADD,IAEC,uBAAQA,mBAAR,CAFD,KAGE,CAACG,kBAAD,gBACC,gCAAC,qBAAD;AACE,QAAA,SAAS,EAAE/H,OAAO,CAACoJ,WADrB;AAEE,QAAA,MAAM,EAAE;AAAEC,UAAAA,MAAM,EAAE,2BAAV;AAAuCC,UAAAA,OAAO,EAAE;AAAhD;AAFV,sBAIE;AAAK,QAAA,uBAAuB,EAAE;AAAEC,UAAAA,MAAM,EAAE3B;AAAV;AAA9B,QAJF,CADD,gBAQC;AAAK,QAAA,uBAAuB,EAAE;AAAE2B,UAAAA,MAAM,EAAE3B;AAAV;AAA9B,QAXH,CAHH,EAiBGK,MAAM,iBACL;AAAK,QAAA,SAAS,EAAEjI,OAAO,CAACwJ;AAAxB,sBACE,gCAAC,uBAAD;AAAe,QAAA,MAAM,EAAEvB;AAAvB,QADF,CAlBJ,EAuBGS,gBAAgB,GACfC,SADe,gBAGf,gCAAC,kBAAD;AAAU;AAAV,sBACE;AAAK,QAAA,SAAS,EAAE3I,OAAO,CAACyJ,uBAAxB;AAAiD,QAAA,QAAQ,EAAE;AAA3D,SACGpC,YAAY,KAAKqC,qBAAcC,MAA/B,iBACC,gCAAC,+BAAD;AACE,QAAA,sBAAsB,EAAE,KAAKC,sBAD/B;AAEE,QAAA,WAAW,EAAEvK,WAFf;AAGE,QAAA,aAAa,EAAEgJ,aAHjB;AAIE,QAAA,KAAK,EAAEzJ,KAJT;AAKE,QAAA,OAAO,EAAEa,OALX;AAME,QAAA,eAAe,EAAE,KAAKuJ,eANxB;AAOE,QAAA,UAAU,EAAE,CAAC,CAACjG;AAPhB,QAFJ,EAaGsE,YAAY,KAAKqC,qBAAcG,QAA/B,iBACC;AACE,QAAA,SAAS,EAAE,4BAAG7J,OAAO,CAAChB,UAAX,mDACRgB,OAAO,CAACkB,SADA,EACY,CAACmH,aAAD,IAAkB,CAACpH,OAAnB,IAA8B,CAAC5B,WAD3C,yCAERW,OAAO,CAACiB,OAFA,EAEU,CAACoH,aAAD,KAAmBpH,OAAO,IAAI5B,WAA9B,CAFV,yCAGRW,OAAO,CAAC8J,eAHA,EAGkB,CAACzB,aAAD,IAAkBtJ,QAAlB,IAA8B4I,WAA9B,IAA6C,CAAC9G,IAHhE,yCAIRb,OAAO,CAAC+J,kBAJA,EAIqB1K,WAJrB,yCAKRW,OAAO,CAACgK,YALA,EAKe9K,SAAS,IAAIC,iBAL5B;AADb,sBASE,gCAAC,mBAAD;AACE,QAAA,GAAG,EAAE,aAACqI,KAAD;AAAA,iBAAS,MAAI,CAACyC,aAAL,CAAmBzC,KAAnB,CAAT;AAAA,SADP;AAEE,QAAA,eAAe,EAAE,CAFnB;AAGE,QAAA,WAAW,MAHb;AAIE,QAAA,IAAI,EAAE,CAAC,CAACzE,iBAJV;AAKE,QAAA,OAAO,EAAE;AACPmH,UAAAA,OAAO,EAAElK,OAAO,CAACmK,aADV;AAEPC,UAAAA,MAAM,EAAEpK,OAAO,CAACqK;AAFT,SALX;AASE,QAAA,KAAK,EAAEnK,MAAM,CAACC,IAAP,CAAYV,OAAO,CAACC,OAApB,EAA6B3B,GAA7B,CACL,UAACsC,QAAD;AAAA,iBACGA,QAAQ,KAAK0C,iBAAb,IAAkC,EAAE1D,WAAW,IAAIN,QAAjB,CAAlC,iBACC;AACE,2BAAa,IADf;AAEE,YAAA,GAAG,EAAEsB,QAFP;AAGE,YAAA,SAAS,EAAEL,OAAO,CAACsK,iBAHrB;AAIE,YAAA,KAAK,EAAE;AACL;AACAC,cAAAA,KAAK,EAAElM,cAAc,CAACC,cAAD,EAAiBC,cAAjB;AAFhB;AAJT,0BASE,gCAAC,2BAAD;AACE,YAAA,cAAc,EAAED,cADlB;AAEE,YAAA,IAAI,EAAEC,cAAc,IAAIf,sBAF1B;AAGE,YAAA,OAAO,EAAE,MAAI,CAACgN;AAHhB,YATF,CADF,IAiBA,IAlBF;AAAA,SADK;AATT,sBA+BE,gCAAC,aAAD,CAAI,MAAJ;AACE,QAAA,SAAS,EAAExK,OAAO,UADpB;AAEE,QAAA,GAAG,EAAE,aAACsE,QAAD;AAAA,iBAAe,MAAI,CAACA,QAAL,GAAgBA,QAAQ,IAAI,MAAI,CAACA,QAAhD;AAAA,SAFP;AAGE,QAAA,KAAK,EAAEkE,WAHT;AAIE,QAAA,gBAAgB,EAAE,KAAKK,eAJzB;AAKE,QAAA,YAAY,EAAE,KAAKC,YALrB;AAME,QAAA,QAAQ,EAAE,KAAKC,QANjB;AAOE,QAAA,eAAe,EAAE,KAAKC,eAPxB;AAQE,QAAA,MAAM,EAAE,KAAKC;AARf,QA/BF,CATF,CAdJ,CADF,CA1BJ,EAkGGR,QAAQ,IAAIL,WAAZ,iBACC;AAAK,QAAA,SAAS,EAAEpI,OAAO,CAACsG,IAAxB;AAA8B,QAAA,uBAAuB,EAAE;AAAEiD,UAAAA,MAAM,mCAA4BjD,IAA5B;AAAR;AAAvD,QAnGJ,EAsGGmC,QAAQ,IACPZ,SADD,IAEC,uBAAQA,SAAR,CAFD,KAGE,CAACE,kBAAD,gBACC,gCAAC,qBAAD;AAAa,QAAA,MAAM,EAAE;AAAEsB,UAAAA,MAAM,EAAE,gBAAV;AAA4BC,UAAAA,OAAO,EAAE;AAArC;AAArB,sBACE;AAAK,QAAA,uBAAuB,EAAE;AAAEC,UAAAA,MAAM,EAAE1B;AAAV;AAA9B,QADF,CADD,gBAKC;AAAK,QAAA,uBAAuB,EAAE;AAAE0B,UAAAA,MAAM,EAAE1B;AAAV;AAA9B,QARH,CAtGH,CADF;;AAoHA,UACEU,kBAAkB,KACjBD,uBAAuB,IACrBV,mBAAmB,IAAI,uBAAQA,mBAAR,CADzB,IAEEC,SAAS,IAAI,uBAAQA,SAAR,CAFf,IAGCC,QAJgB,CADpB,EAME;AACA,4BACE,gCAAC,mBAAD;AACE,UAAA,WAAW,MADb;AAEE,UAAA,eAAe,EAAE,CAFnB;AAGE,UAAA,OAAO,EAAE;AACPoC,YAAAA,OAAO,EAAElK,OAAO,CAACkK,OADV;AAEPE,YAAAA,MAAM,EAAEpK,OAAO,CAACyK;AAFT,WAHX;AAOE,UAAA,KAAK,eACH,0DACE;AAAK,YAAA,SAAS,EAAEzK,OAAO,CAACmJ;AAAxB,aACGb,uBAAuB,iBACtB,gCAAC,wCAAD;AACE,YAAA,QAAQ,EAAE/B,QADZ;AAEE,YAAA,SAAS,EAAEvG,OAAO,CAAC0K,MAFrB;AAGE,YAAA,IAAI,MAHN;AAIE,YAAA,OAAO,EAAErL,WAJX;AAKE,YAAA,QAAQ,EAAE,KAAKsL;AALjB,YAFJ,CADF,EAaG/C,mBAAmB,IAAI,uBAAQA,mBAAR,CAAvB,iBACC,gCAAC,qBAAD;AACE,YAAA,SAAS,EAAE5H,OAAO,CAACoJ,WADrB;AAEE,YAAA,GAAG,EAAC,kCAFN;AAGE,YAAA,MAAM,EAAE;AACNC,cAAAA,MAAM,EAAE,2BADF;AAENC,cAAAA,OAAO,EAAE;AAFH;AAHV,0BAQE,gCAAC,uBAAD;AAAe,YAAA,MAAM,EAAE1B;AAAvB,YARF,CAdJ,EAyBGQ,WAAW,IAAI,uBAAQ9B,IAAR,CAAf,iBACC,gCAAC,qBAAD;AACE,YAAA,SAAS,EAAEtG,OAAO,CAACoJ,WADrB;AAEE,YAAA,GAAG,EAAC,kBAFN;AAGE,YAAA,MAAM,EAAE;AACNC,cAAAA,MAAM,EAAElM,UAAU,CAACqJ,CAAX,CAAa,iBAAb,EAAgC;AAAEC,gBAAAA,GAAG,EAAEF;AAAP,eAAhC,CADF;AAEN+C,cAAAA,OAAO,EAAEnM,UAAU,CAACqJ,CAAX,CAAa,iBAAb,EAAgC;AAAEC,gBAAAA,GAAG,EAAEF;AAAP,eAAhC;AAFH;AAHV,0BAQE,gCAAC,uBAAD;AAAe,YAAA,MAAM,EAAED;AAAvB,YARF,CA1BJ,EAsCGuB,SAAS,IAAI,uBAAQA,SAAR,CAAb,iBACC,gCAAC,qBAAD;AACE,YAAA,SAAS,EAAE7H,OAAO,CAACoJ,WADrB;AAEE,YAAA,GAAG,EAAC,uBAFN;AAGE,YAAA,MAAM,EAAE;AACNC,cAAAA,MAAM,EAAE,gBADF;AAENC,cAAAA,OAAO,EAAE;AAFH;AAHV,0BAQE,gCAAC,uBAAD;AAAe,YAAA,MAAM,EAAEzB;AAAvB,YARF,CAvCJ,EAmDGC,QAAQ,iBAAI,gCAAC,kBAAD;AAAU,YAAA,WAAW,EAAEH,WAAW,CAACA,WAAnC;AAAgD,YAAA,QAAQ,EAAEG;AAA1D,YAnDf;AARJ,wBA+DE;AAAK,UAAA,SAAS,EAAE9H,OAAO,CAAC4K,aAAxB;AAAuC,UAAA,GAAG,EAAE,aAACC,CAAD;AAAA,mBAAQ,MAAI,CAAC5K,IAAL,GAAY4K,CAAC,IAAI,MAAI,CAAC5K,IAA9B;AAAA;AAA5C,WACGiJ,UADH,CA/DF,CADF;AAqED;;AAED,0BACE;AAAK,QAAA,SAAS,EAAElJ,OAAO,CAAC4K,aAAxB;AAAuC,QAAA,GAAG,EAAE,aAACC,CAAD;AAAA,iBAAQ,MAAI,CAAC5K,IAAL,GAAY4K,CAAC,IAAI,MAAI,CAAC5K,IAA9B;AAAA;AAA5C,SACGiJ,UADH,CADF;AAKD;;;EA9rBuB4B,kBAAMC,S;;;iCAAnBjL,I,eACQ;AACjBE,EAAAA,OAAO,EAAEgL,sBAAUC,MADF;AAEjBxL,EAAAA,OAAO,EAAEuL,sBAAUC,MAAV,CAAiBC,UAFT;AAGjBjH,EAAAA,eAAe,EAAE+G,sBAAUG,IAHV;AAIjBvM,EAAAA,KAAK,EAAEoM,sBAAUC,MAAV,CAAiBC;AAJP,C;;AAgsBrB,IAAME,MAAM,GAAG,SAATA,MAAS,CAACC,KAAD;AAAA,SAAY;AACzBT,IAAAA,aAAa,EAAE;AACbU,MAAAA,KAAK,EAAEA,gBAAMtF,IAAN,EADM;AAEbuF,MAAAA,eAAe,EAAED,gBAAME,UAAN,EAFJ;AAGbC,MAAAA,OAAO,EAAE;AAHI,KADU;AAMzBvB,IAAAA,OAAO,EAAE;AACPsB,MAAAA,UAAU,YAAKF,gBAAMI,YAAN,EAAL,gBADH;AAEPJ,MAAAA,KAAK,EAAEA,gBAAMtF,IAAN,EAFA;AAGP2F,MAAAA,OAAO,EAAEN,KAAK,CAACO,OAAN,CAAcC,IAAd,GAAqB,CAHvB;AAIPC,MAAAA,MAAM,sBAAeR,gBAAMS,SAAN,EAAf,CAJC;AAKPC,MAAAA,QAAQ,EAAE,MALH;AAMP,qCAA+B;AAC7B,2BAAmB;AACjBT,UAAAA,eAAe,EAAE;AADA;AADU;AANxB,KANgB;AAkBzBd,IAAAA,aAAa,EAAE;AACbwB,MAAAA,OAAO,EAAE;AADI,KAlBU;AAqBzB9B,IAAAA,aAAa,EAAE;AACb6B,MAAAA,QAAQ,EAAE,SADG;AAEbR,MAAAA,UAAU,EAAE,aAFC;AAGbjB,MAAAA,KAAK,EAAE,OAHM;AAIb2B,MAAAA,SAAS,EAAE,CAJE;AAKbC,MAAAA,UAAU,EAAE;AALC,KArBU;AA4BzB9B,IAAAA,mBAAmB,EAAE;AACnBmB,MAAAA,UAAU,EAAE,aADO;AAEnBjB,MAAAA,KAAK,EAAE,OAFY;AAGnB0B,MAAAA,OAAO,EAAE;AAHU,KA5BI;AAiCzBzC,IAAAA,eAAe,EAAE;AACf4C,MAAAA,YAAY,EAAEf,KAAK,CAACO,OAAN,CAAcC,IAAd,GAAqB;AADpB,KAjCQ;AAoCzB1C,IAAAA,IAAI,EAAE;AACJoB,MAAAA,KAAK,EAAE,MADH;AAEJ8B,MAAAA,QAAQ,EAAE,UAFN;AAGJd,MAAAA,eAAe,EAAED,gBAAME,UAAN,EAHb;AAIJF,MAAAA,KAAK,EAAEA,gBAAMtF,IAAN;AAJH,KApCmB;AA0CzBsG,IAAAA,KAAK,EAAE;AACLN,MAAAA,QAAQ,EAAE,QADL;AAELP,MAAAA,OAAO,EAAE,OAFJ;AAGLS,MAAAA,SAAS,EAAEb,KAAK,CAACO,OAAN,CAAcC,IAAd,GAAqB,CAH3B;AAILO,MAAAA,YAAY,EAAEf,KAAK,CAACO,OAAN,CAAcC;AAJvB,KA1CkB;AAgDzBvF,IAAAA,IAAI,EAAE;AACJiG,MAAAA,aAAa,EAAElB,KAAK,CAACO,OAAN,CAAcC,IAAd,GAAqB;AADhC,KAhDmB;AAmDzBzC,IAAAA,WAAW,EAAE;AACXgD,MAAAA,YAAY,EAAEf,KAAK,CAACO,OAAN,CAAcC,IAAd,GAAqB;AADxB,KAnDY;AAsDzBvB,IAAAA,iBAAiB,EAAE;AACjBkC,MAAAA,MAAM,EAAE,EADS;AAEjB;AACA;AACAC,MAAAA,QAAQ,EAAE,OAJO;AAKjBP,MAAAA,SAAS,EAAEb,KAAK,CAACO,OAAN,CAAcC,IAAd,GAAqB;AALf,KAtDM;AA6DzB7M,IAAAA,UAAU,EAAE;AACV0N,MAAAA,QAAQ,EAAE,aADA;AAEV,2BAAqB;AACnB,8BAAsB;AACpB,oCAA0B;AACxBD,YAAAA,QAAQ,EAAE,MADc;AAExBE,YAAAA,MAAM,EAAGtB,KAAK,CAACO,OAAN,CAAcC,IAAd,GAAqB,CAAtB,GAA2B,CAFX;AAGxBF,YAAAA,OAAO,EAAEN,KAAK,CAACO,OAAN,CAAcC,IAAd,GAAqB;AAHN;AADN,SADH;AAQnB,iBAAS;AACPe,UAAAA,GAAG,EAAE;AADE;AARU;AAFX,KA7Da;AA4EzB,cAAQ;AACN,4BAAsB;AACpB,kCAA0B;AACxBC,UAAAA,WAAW,EAAEvB,gBAAMtF,IAAN;AADW;AADN;AADhB,KA5EiB;AAmFzByD,IAAAA,uBAAuB,EAAE;AACvB4C,MAAAA,QAAQ,EAAE,UADa;AAEvB,+BAAyB;AACvBP,QAAAA,MAAM,EAAE,iBADe;AAEvBH,QAAAA,OAAO,EAAE;AAFc,OAFF;AAMvB,qCAA+B;AAC7BF,QAAAA,OAAO,EAAE;AADoB,OANR;AASvB,oCAA8B;AAC5BA,QAAAA,OAAO,EAAE;AADmB,OATP;AAYvB,uCAAiC;AAC/BgB,QAAAA,QAAQ,EAAE,QADqB;AAE/B,eAAO;AACLK,UAAAA,UAAU,EAAE;AADP,SAFwB;AAK/B,oBAAY;AACVF,UAAAA,GAAG,EAAE,QADK;AAEVG,UAAAA,IAAI,EAAE;AAFI,SALmB;AAS/B,mBAAW;AACTH,UAAAA,GAAG,EAAE,QADI;AAETI,UAAAA,KAAK,EAAE;AAFE,SAToB;AAa/B,4BAAoB;AAClBJ,UAAAA,GAAG,EAAE;AADa;AAbW,OAZV;AA6BvB,wCAAkC;AAChC,oBAAY;AACVA,UAAAA,GAAG,EAAE,QADK;AAEVI,UAAAA,KAAK,EAAE;AAFG;AADoB,OA7BX;AAmCvB,6BAAuB;AACrBC,QAAAA,SAAS,EAAE,sBADU;AAErBd,QAAAA,UAAU,EAAE;AAFS,OAnCA;AAuCvB,6BAAuB;AACrBW,QAAAA,UAAU,EAAE;AADS;AAvCA,KAnFA;AA8HzBhD,IAAAA,eAAe,EAAE;AACfgC,MAAAA,MAAM,EAAE;AADO,KA9HQ;AAiIzB/B,IAAAA,kBAAkB,EAAE;AAClB4B,MAAAA,OAAO,EAAEN,KAAK,CAACO,OAAN,CAAcC,IADL;AAElBqB,MAAAA,aAAa,EAAE;AAFG,KAjIK;AAqIzBlD,IAAAA,YAAY,EAAE;AACZ8B,MAAAA,MAAM,sBAAeR,gBAAMrK,OAAN,EAAf;AADM,KArIW;AAwIzBA,IAAAA,OAAO,EAAE;AACP4L,MAAAA,WAAW,YAAKvB,gBAAMrK,OAAN,EAAL;AADJ,KAxIgB;AA2IzBC,IAAAA,SAAS,EAAE;AACT2L,MAAAA,WAAW,YAAKvB,gBAAMpK,SAAN,EAAL;AADF,KA3Ic;AA8IzB2E,IAAAA,cAAc,EAAE;AACd8G,MAAAA,MAAM,YAAKtB,KAAK,CAACO,OAAN,CAAcC,IAAnB,kBADQ;AAEdJ,MAAAA,OAAO,EAAE,aAFK;AAGdK,MAAAA,MAAM,EAAE;AAHM,KA9IS;AAmJzBhG,IAAAA,aAAa,EAAE;AACbwF,MAAAA,KAAK,EAAE,MADM;AAEbE,MAAAA,UAAU,EAAEH,KAAK,CAAC8B,OAAN,CAAcC,IAAd,CAAmB,MAAnB,CAFC;AAGbpB,MAAAA,QAAQ,EAAE,mBAHG;AAIbL,MAAAA,OAAO,YAAKN,KAAK,CAACO,OAAN,CAAcC,IAAd,GAAqB,CAA1B,kBAJM;AAKbJ,MAAAA,OAAO,EAAE,MALI;AAMb4B,MAAAA,UAAU,EAAE,QANC;AAObC,MAAAA,cAAc,EAAE,QAPH;AAQbC,MAAAA,WAAW,sBAAejC,gBAAMvM,QAAN,EAAf,gBARE;AASbyO,MAAAA,UAAU,EAAE,CATC;AAUbC,MAAAA,QAAQ,EAAE,CAVG;AAWbC,MAAAA,SAAS,EAAE,MAXE,CAWM;;AAXN,KAnJU;AAgKzBhD,IAAAA,MAAM,EAAE;AACNY,MAAAA,KAAK,EAAEA,gBAAMtF,IAAN,EADD;AAENoG,MAAAA,YAAY,EAAEf,KAAK,CAACO,OAAN,CAAcC,IAAd,GAAqB;AAF7B,KAhKiB;AAoKzB9F,IAAAA,SAAS,EAAE;AACTuF,MAAAA,KAAK,EAAEA,gBAAMtF,IAAN,EADE;AAETuF,MAAAA,eAAe,EAAED,gBAAME,UAAN,EAFR;AAGTG,MAAAA,OAAO,YAAKN,KAAK,CAACO,OAAN,CAAcC,IAAd,GAAqB,CAA1B,kBAHE;AAITJ,MAAAA,OAAO,EAAE,MAJA;AAKT4B,MAAAA,UAAU,EAAE,QALH;AAMTC,MAAAA,cAAc,EAAE,QANP;AAOTG,MAAAA,QAAQ,EAAE,CAPD;AAOI;AACb,2BAAqB;AACnB,6BAAqB;AACnB,4BAAkB;AAChBhC,YAAAA,OAAO,EAAE;AADO;AADC;AADF;AARZ,KApKc;AAoLzB7C,IAAAA,cAAc,EAAE;AACdwD,MAAAA,YAAY,EAAEf,KAAK,CAACO,OAAN,CAAcC,IADd;AAEd8B,MAAAA,aAAa,EAAE;AAFD,KApLS;AAwLzBzL,IAAAA,MAAM,EAAE;AACNmK,MAAAA,QAAQ,EAAE,UADJ;AAENU,MAAAA,IAAI,EAAE,UAFA;AAGNH,MAAAA,GAAG,EAAE,MAHC;AAINrC,MAAAA,KAAK,EAAE,KAJD;AAKNqD,MAAAA,MAAM,EAAE,KALF;AAMNC,MAAAA,QAAQ,EAAE;AANJ;AAxLiB,GAAZ;AAAA,CAAf;;eAkMe,wBAAWzC,MAAX,EAAmBtL,IAAnB,C","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { CorrectAnswerToggle } from '@pie-lib/pie-toolbox/correct-answer-toggle';\nimport { mq, HorizontalKeypad, updateSpans } from '@pie-lib/pie-toolbox/math-input';\nimport { Feedback, Collapsible, Readable, hasText, PreviewPrompt } from '@pie-lib/pie-toolbox/render-ui';\nimport { renderMath } from '@pie-lib/pie-toolbox/math-rendering-accessible';\nimport { withStyles } from '@material-ui/core/styles';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport { ResponseTypes } from './utils';\nimport isEqual from 'lodash/isEqual';\nimport cx from 'classnames';\nimport SimpleQuestionBlock from './simple-question-block';\nimport MathQuill from '@pie-framework/mathquill';\nimport { color } from '@pie-lib/pie-toolbox/render-ui';\nimport isEmpty from 'lodash/isEmpty';\nimport Translator from '@pie-lib/pie-toolbox/translator';\nconst { translator } = Translator;\nlet registered = false;\n\nconst NEWLINE_LATEX = /\\\\newline/g;\nconst REGEX = /{{response}}/gm;\nconst DEFAULT_KEYPAD_VARIANT = 6;\n\n// !!! If you're using Chrome but have selected the \"iPad\" device in Chrome Developer Tools, the navigator.userAgent string may still report as\n// Safari because Chrome on iOS actually uses the Safari rendering engine under the hood due to Apple's restrictions on third-party browser engines.\n// When you select the \"iPad\" device in Chrome Developer Tools, you're essentially emulating the behavior of Safari on an iPad, including the user agent string.\n// Therefore, even though you're using Chrome, the user agent string will resemble that of Safari on an iPad.\n// Since the regular expression /^((?!chrome|android).)*safari/i checks for the presence of \"safari\" in the user agent string while excluding \"chrome\" and \"android\",\n// it will return true in this case because \"safari\" is present in the user agent string emulated by Chrome when in iPad mode.\nconst IS_SAFARI = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\nfunction generateAdditionalKeys(keyData = []) {\n return keyData.map((key) => ({\n name: key,\n latex: key,\n write: key,\n label: key,\n }));\n}\n\nfunction getKeyPadWidth(additionalKeys = [], equationEditor) {\n return Math.floor(additionalKeys.length / 5) * 30 + (equationEditor === 'miscellaneous' ? 600 : 500);\n}\n\nfunction prepareForStatic(model, state) {\n const { config, disabled } = model || {};\n const { expression, responses, printMode, alwaysShowCorrect } = config || {};\n\n if (config && expression) {\n const modelExpression = expression;\n\n if (state.showCorrect) {\n return responses && responses.length && responses[0].answer;\n }\n\n let answerBlocks = 1; // assume one at least\n // build out local state model using responses declared in expression\n\n return (modelExpression || '')\n .replace(REGEX, function () {\n const answer = state.session.answers[`r${answerBlocks}`];\n\n if (printMode && !alwaysShowCorrect) {\n const blankSpace = '\\\\ \\\\ '.repeat(30) + '\\\\newline ';\n\n return `\\\\MathQuillMathField[r${answerBlocks++}]{${blankSpace.repeat(3)}}`;\n }\n\n if (disabled) {\n return `\\\\embed{answerBlock}[r${answerBlocks++}]`;\n }\n\n return `\\\\MathQuillMathField[r${answerBlocks++}]{${(answer && answer.value) || ''}}`;\n })\n .replace(NEWLINE_LATEX, '\\\\embed{newLine}[]');\n }\n}\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 const answers = {};\n\n if (props.model.config && props.model.config.expression) {\n let answerBlocks = 1; // assume one at least\n // build out local state model using responses declared in expression\n\n (props.model.config.expression || '').replace(REGEX, () => {\n answers[`r${answerBlocks}`] = {\n value:\n (props.session &&\n props.session.answers &&\n props.session.answers[`r${answerBlocks}`] &&\n props.session.answers[`r${answerBlocks}`].value) ||\n '',\n };\n\n answerBlocks += 1;\n });\n }\n\n this.state = {\n session: { ...props.session, answers },\n activeAnswerBlock: '',\n showCorrect: this.props.model.config.alwaysShowCorrect || false,\n };\n }\n\n UNSAFE_componentWillMount() {\n const { classes } = this.props;\n\n if (typeof window !== 'undefined') {\n let MQ = MathQuill.getInterface(2);\n\n if (!registered) {\n MQ.registerEmbed('answerBlock', (data) => {\n return {\n htmlString: `<div class=\"${classes.blockContainer}\">\n <div class=\"${classes.blockResponse}\" id=\"${data}Index\">R</div>\n <div class=\"${classes.blockMath}\">\n <span id=\"${data}\"></span>\n </div>\n </div>`,\n text: () => 'text',\n latex: () => `\\\\embed{answerBlock}[${data}]`,\n };\n });\n\n registered = true;\n }\n }\n }\n\n handleAnswerBlockDomUpdate = () => {\n const { model, classes } = this.props;\n const { session, showCorrect } = this.state;\n const answers = session.answers;\n\n if (this.root && model.disabled && !showCorrect) {\n Object.keys(answers).forEach((answerId) => {\n const el = this.root.querySelector(`#${answerId}`);\n const indexEl = this.root.querySelector(`#${answerId}Index`);\n // const correct = model.correctness && model.correctness.correct;\n\n if (el) {\n let MQ = MathQuill.getInterface(2);\n const answer = answers[answerId];\n\n el.textContent = (answer && answer.value) || '';\n\n if (!model.view) {\n // for now, we're not going to be showing individual response correctness\n // TODO re-attach the classes once we are\n // el.parentElement.parentElement.classList.add(\n // correct ? classes.correct : classes.incorrect\n // );\n } else {\n el.parentElement.parentElement.classList.remove(classes.correct);\n el.parentElement.parentElement.classList.remove(classes.incorrect);\n }\n\n MQ.StaticMath(el);\n\n // For now, we're not going to be indexing response blocks\n // TODO go back to indexing once we support individual response correctness\n // indexEl.textContent = `R${idx + 1}`;\n indexEl.textContent = 'R';\n }\n });\n }\n\n renderMath(this.root);\n };\n\n countResponseOccurrences(expression) {\n const pattern = /\\{\\{response\\}\\}/g;\n const matches = expression?.match(pattern);\n\n return matches ? matches.length : 0;\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n const { config } = this.props.model;\n const { config: nextConfig = {} } = nextProps.model || {};\n // check if the note is the default one for prev language and change to the default one for new language\n // this check is necessary in order to diferanciate between default and authour defined note\n // and only change between languages for default ones\n if (\n config.note &&\n config.language &&\n config.language !== nextConfig.language &&\n config.note === translator.t('mathInline.primaryCorrectWithAlternates', { lng: config.language })\n ) {\n config.note = translator.t('mathInline.primaryCorrectWithAlternates', { lng: nextConfig.language });\n }\n\n if ((config.env && config.env.mode !== 'evaluate') || (nextConfig.env && nextConfig.env.mode !== 'evaluate')) {\n this.setState({ ...this.state.session, showCorrect: false });\n }\n\n if (nextConfig.alwaysShowCorrect) {\n this.setState({ showCorrect: true });\n }\n\n if (this.countResponseOccurrences(config.expression) < this.countResponseOccurrences(nextConfig.expression)) {\n setTimeout(() => this.updateAria(), 100);\n }\n\n if (\n (config && config.responses && config.responses.length !== nextConfig.responses.length) ||\n (!config && nextConfig && nextConfig.responses) ||\n (config && nextConfig && config.expression !== nextConfig.expression)\n ) {\n const newAnswers = {};\n const answers = this.state.session.answers;\n\n let answerBlocks = 1; // assume one at least\n\n // build out local state model using responses declared in expression\n (nextConfig.expression || '').replace(REGEX, () => {\n newAnswers[`r${answerBlocks}`] = {\n value: (answers && answers[`r${answerBlocks}`] && answers[`r${answerBlocks}`].value) || '',\n };\n answerBlocks++;\n });\n\n this.setState(\n (state) => ({\n session: {\n ...state.session,\n completeAnswer: this.mqStatic && this.mqStatic.mathField.latex(),\n answers: newAnswers,\n },\n }),\n this.handleAnswerBlockDomUpdate,\n );\n }\n }\n\n shouldComponentUpdate(nextProps, nextState) {\n const sameModel = isEqual(this.props.model, nextProps.model);\n const sameState = isEqual(this.state, nextState);\n\n return !sameModel || !sameState;\n }\n\n componentDidMount() {\n this.handleAnswerBlockDomUpdate();\n this.updateAria();\n setTimeout(() => renderMath(this.root), 100);\n }\n\n componentDidUpdate(prevProps, prevState) {\n this.handleAnswerBlockDomUpdate();\n\n const prevResponseType = prevProps.model?.config?.responseType;\n const currentResponseType = this.props.model?.config?.responseType;\n\n if (prevResponseType !== currentResponseType) {\n this.updateAria();\n }\n }\n\n updateAria = () => {\n const { classes } = this.props;\n\n if (this.root) {\n // Update aria-hidden for .mq-selectable elements\n const selectableElements = this.root.querySelectorAll('.mq-selectable');\n selectableElements.forEach((elem) => elem.setAttribute('aria-hidden', 'true'));\n\n // Update aria-label for textarea elements and add aria-describedby\n const textareaElements = this.root.querySelectorAll('textarea');\n textareaElements.forEach((elem, index) => {\n elem.setAttribute('aria-label', 'Enter answer.');\n\n // Create a unique id for each instructions element\n const instructionsId = `instructions-${index}`;\n\n // Find the parent element that contains the textarea\n const parent = elem.closest('.mq-textarea');\n\n if (parent) {\n // Create or find the instructions element within the parent\n let instructionsElement = parent.querySelector(`#${instructionsId}`);\n\n if (!instructionsElement) {\n instructionsElement = document.createElement('span');\n instructionsElement.id = instructionsId;\n instructionsElement.className = classes.srOnly;\n instructionsElement.textContent =\n 'This field supports both keypad and keyboard input. Use the keyboard to access and interact with the on-screen math keypad, which accepts LaTeX markup. Use the down arrow key to open the keypad and navigate its buttons. Use the escape key to close the keypad and return to the input field.';\n parent.insertBefore(instructionsElement, elem);\n }\n\n elem.setAttribute('aria-describedby', instructionsId);\n }\n });\n }\n };\n\n focusFirstKeypadElement = () => {\n setTimeout(() => {\n const keypadElement = document.querySelector('[data-keypad]');\n\n if (keypadElement) {\n const firstButton = keypadElement.querySelector(\"button, [role='button']\");\n\n if (firstButton) {\n firstButton.focus();\n }\n }\n }, 0);\n };\n\n handleKeyDown = (event, id) => {\n const isAnswerInputFocused = document.activeElement.getAttribute('aria-label') === 'Enter answer.';\n const isClickOrTouchEvent = event.type === 'click' || event.type === 'touchstart';\n\n if (isAnswerInputFocused && (event.key === 'ArrowDown' || isClickOrTouchEvent)) {\n this.setState({ activeAnswerBlock: id }, () => {\n if (event.key === 'ArrowDown') {\n this.focusFirstKeypadElement();\n }\n });\n }\n\n if ((!isAnswerInputFocused && isClickOrTouchEvent) || event.key === 'Escape') {\n this.setState({ activeAnswerBlock: '' });\n }\n };\n\n onSubFieldFocus = (id) => {\n const handleEvent = (event) => {\n this.handleKeyDown(event, id);\n };\n\n document.addEventListener('keydown', handleEvent);\n document.addEventListener('click', handleEvent);\n document.addEventListener('touchstart', handleEvent);\n };\n\n cleanupKeyDownListener = () => {\n document.removeEventListener('keydown', this.handleEvent);\n document.removeEventListener('click', this.handleEvent);\n document.removeEventListener('touchstart', this.handleEvent);\n };\n\n componentWillUnmount() {\n if (this.cleanupKeyDownListener) {\n this.cleanupKeyDownListener();\n }\n }\n\n onDone = () => {};\n\n onSimpleResponseChange = (response) => {\n this.setState((state) => ({ session: { ...state.session, response } }), this.callOnSessionChange);\n };\n\n toNodeData = (data) => {\n if (!data) {\n return;\n }\n\n const { type, value } = data;\n\n if (type === 'command' || type === 'cursor') {\n return data;\n } else if (type === 'answer') {\n return { type: 'answer', ...data };\n } else if (value === 'clear') {\n return { type: 'clear' };\n } else {\n return { type: 'write', value };\n }\n };\n\n setInput = (input) => {\n this.input = input;\n };\n\n onClick = (data) => {\n const c = this.toNodeData(data);\n\n if (c.type === 'clear') {\n this.input.clear();\n } else if (c.type === 'command') {\n if (Array.isArray(c.value)) {\n c.value.forEach((vv) => {\n this.input.cmd(vv);\n });\n } else {\n this.input.cmd(c.value);\n }\n } else if (c.type === 'cursor') {\n this.input.keystroke(c.value);\n } else {\n this.input.write(c.value);\n }\n\n this.input.focus();\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 }, this.handleAnswerBlockDomUpdate);\n };\n\n subFieldChanged = (name, subfieldValue) => {\n updateSpans();\n\n if (name) {\n this.setState(\n (state) => ({\n session: {\n ...state.session,\n completeAnswer: this.mqStatic && this.mqStatic.mathField.latex(),\n answers: {\n ...state.session.answers,\n [name]: { value: subfieldValue },\n },\n },\n }),\n this.callOnSessionChange,\n );\n }\n };\n\n getFieldName = (changeField, fields) => {\n const { answers } = this.state.session;\n\n if (Object.keys(answers || {}).length) {\n const keys = Object.keys(answers);\n\n return keys.find((k) => {\n const tf = fields[k];\n\n return tf && tf.id == changeField.id;\n });\n }\n };\n\n onBlur = (e) => {\n const { relatedTarget, currentTarget } = e || {};\n\n function getParentWithRoleTooltip(element, depth = 0) {\n // only run this max 16 times\n if (!element || depth >= 16) return null;\n\n const parent = element.offsetParent;\n\n if (!parent) return null;\n\n if (parent.getAttribute('role') === 'tooltip') {\n return parent;\n }\n\n return getParentWithRoleTooltip(parent, depth + 1);\n }\n\n function getDeepChildDataKeypad(element, depth = 0) {\n // only run this max 4 times\n if (!element || depth >= 4) return null;\n\n const child = element?.children?.[0];\n\n if (!child) return null;\n\n if (child.attributes && child.attributes['data-keypad']) {\n return child;\n }\n\n return getDeepChildDataKeypad(child, depth + 1);\n }\n\n const parentWithTooltipRole = getParentWithRoleTooltip(relatedTarget);\n const childWithDataKeypad = parentWithTooltipRole ? getDeepChildDataKeypad(parentWithTooltipRole) : null;\n\n if (!relatedTarget || !currentTarget || !childWithDataKeypad?.attributes['data-keypad']) {\n this.setState({ activeAnswerBlock: '' });\n }\n // else {\n // // Just for debugging purpose:\n // console.log('\\n\\nNew childWithDataKeypad', childWithDataKeypad);\n //\n // if (IS_SAFARI) {\n // // (IS_SAFARI && !relatedTarget?.offsetParent?.children[0]?.children[0]?.attributes?.['data-keypad'])\n // console.log('What was being used', relatedTarget?.offsetParent?.children[0]?.children[0]);\n // } else {\n // // (!IS_SAFARI && !relatedTarget?.offsetParent?.children[0]?.attributes?.['data-keypad']) ||\n // console.log('What was being used', relatedTarget?.offsetParent?.children[0]);\n // }\n // }\n };\n\n setTooltipRef(ref) {\n // Safari Hack: https://stackoverflow.com/a/42764495/5757635\n setTimeout(() => {\n if (ref && IS_SAFARI) {\n const div = document.querySelector(\"[role='tooltip']\");\n\n if (div) {\n const el = div.firstChild;\n el.setAttribute('tabindex', '-1');\n }\n }\n }, 1);\n }\n\n render() {\n const { model, classes } = this.props;\n const { activeAnswerBlock, showCorrect, session } = this.state;\n const {\n config,\n correctness,\n disabled,\n view,\n teacherInstructions,\n rationale,\n feedback,\n animationsDisabled,\n printMode,\n alwaysShowCorrect,\n language,\n } = model || {};\n\n if (!config) {\n return null;\n }\n\n const {\n showNote,\n note,\n prompt,\n responses,\n responseType,\n equationEditor,\n customKeys,\n env: { mode, role } = {},\n } = config || {};\n const displayNote = (showCorrect || (mode === 'view' && role === 'instructor')) && showNote && note;\n const emptyResponse = isEmpty(responses);\n const showCorrectAnswerToggle = !emptyResponse && correctness && correctness.correctness !== 'correct';\n const tooltipModeEnabled = disabled && correctness;\n const additionalKeys = generateAdditionalKeys(customKeys);\n const correct = correctness && correctness.correct;\n const staticLatex = prepareForStatic(model, this.state) || '';\n const viewMode = disabled && !correctness;\n const studentPrintMode = printMode && !alwaysShowCorrect;\n\n const printView = (\n <div className={classes.printContainer}>\n <mq.Static\n className={classes.static}\n ref={(mqStatic) => (this.mqStatic = mqStatic || this.mqStatic)}\n latex={staticLatex}\n onSubFieldChange={this.subFieldChanged}\n getFieldName={this.getFieldName}\n setInput={this.setInput}\n onSubFieldFocus={this.onSubFieldFocus}\n onBlur={this.onBlur}\n />\n </div>\n );\n\n const midContent = (\n <div className={classes.main}>\n {mode === 'gather' && <h2 className={classes.srOnly}>Math Equation Response Question</h2>}\n\n {viewMode &&\n teacherInstructions &&\n hasText(teacherInstructions) &&\n (!animationsDisabled ? (\n <Collapsible\n className={classes.collapsible}\n labels={{ hidden: 'Show Teacher Instructions', visible: 'Hide Teacher Instructions' }}\n >\n <div dangerouslySetInnerHTML={{ __html: teacherInstructions }} />\n </Collapsible>\n ) : (\n <div dangerouslySetInnerHTML={{ __html: teacherInstructions }} />\n ))}\n\n {prompt && (\n <div className={classes.promptContainer}>\n <PreviewPrompt prompt={prompt} />\n </div>\n )}\n\n {studentPrintMode ? (\n printView\n ) : (\n <Readable false>\n <div className={classes.inputAndKeypadContainer} tabIndex={0}>\n {responseType === ResponseTypes.simple && (\n <SimpleQuestionBlock\n onSimpleResponseChange={this.onSimpleResponseChange}\n showCorrect={showCorrect}\n emptyResponse={emptyResponse}\n model={model}\n session={session}\n onSubFieldFocus={this.onSubFieldFocus}\n showKeypad={!!activeAnswerBlock}\n />\n )}\n\n {responseType === ResponseTypes.advanced && (\n <div\n className={cx(classes.expression, {\n [classes.incorrect]: !emptyResponse && !correct && !showCorrect,\n [classes.correct]: !emptyResponse && (correct || showCorrect),\n [classes.showCorrectness]: !emptyResponse && disabled && correctness && !view,\n [classes.correctAnswerShown]: showCorrect,\n [classes.printCorrect]: printMode && alwaysShowCorrect,\n })}\n >\n <Tooltip\n ref={(ref) => this.setTooltipRef(ref)}\n enterTouchDelay={0}\n interactive\n open={!!activeAnswerBlock}\n classes={{\n tooltip: classes.keypadTooltip,\n popper: classes.keypadTooltipPopper,\n }}\n title={Object.keys(session.answers).map(\n (answerId) =>\n (answerId === activeAnswerBlock && !(showCorrect || disabled) && (\n <div\n data-keypad={true}\n key={answerId}\n className={classes.responseContainer}\n style={{\n // marginTop: this.mqStatic && this.mqStatic.input.offsetHeight - 20,\n width: getKeyPadWidth(additionalKeys, equationEditor),\n }}\n >\n <HorizontalKeypad\n additionalKeys={additionalKeys}\n mode={equationEditor || DEFAULT_KEYPAD_VARIANT}\n onClick={this.onClick}\n />\n </div>\n )) ||\n null,\n )}\n >\n <mq.Static\n className={classes.static}\n ref={(mqStatic) => (this.mqStatic = mqStatic || this.mqStatic)}\n latex={staticLatex}\n onSubFieldChange={this.subFieldChanged}\n getFieldName={this.getFieldName}\n setInput={this.setInput}\n onSubFieldFocus={this.onSubFieldFocus}\n onBlur={this.onBlur}\n />\n </Tooltip>\n </div>\n )}\n </div>\n </Readable>\n )}\n\n {viewMode && displayNote && (\n <div className={classes.note} dangerouslySetInnerHTML={{ __html: `<strong>Note:</strong> ${note}` }} />\n )}\n\n {viewMode &&\n rationale &&\n hasText(rationale) &&\n (!animationsDisabled ? (\n <Collapsible labels={{ hidden: 'Show Rationale', visible: 'Hide Rationale' }}>\n <div dangerouslySetInnerHTML={{ __html: rationale }} />\n </Collapsible>\n ) : (\n <div dangerouslySetInnerHTML={{ __html: rationale }} />\n ))}\n </div>\n );\n\n if (\n tooltipModeEnabled &&\n (showCorrectAnswerToggle ||\n (teacherInstructions && hasText(teacherInstructions)) ||\n (rationale && hasText(rationale)) ||\n feedback)\n ) {\n return (\n <Tooltip\n interactive\n enterTouchDelay={0}\n classes={{\n tooltip: classes.tooltip,\n popper: classes.tooltipPopper,\n }}\n title={\n <div>\n <div className={classes.main}>\n {showCorrectAnswerToggle && (\n <CorrectAnswerToggle\n language={language}\n className={classes.toggle}\n show\n toggled={showCorrect}\n onToggle={this.toggleShowCorrect}\n />\n )}\n </div>\n\n {teacherInstructions && hasText(teacherInstructions) && (\n <Collapsible\n className={classes.collapsible}\n key=\"collapsible-teacher-instructions\"\n labels={{\n hidden: 'Show Teacher Instructions',\n visible: 'Hide Teacher Instructions',\n }}\n >\n <PreviewPrompt prompt={teacherInstructions} />\n </Collapsible>\n )}\n {displayNote && hasText(note) && (\n <Collapsible\n className={classes.collapsible}\n key=\"collapsible-note\"\n labels={{\n hidden: translator.t('common:showNote', { lng: language }),\n visible: translator.t('common:hideNote', { lng: language }),\n }}\n >\n <PreviewPrompt prompt={note} />\n </Collapsible>\n )}\n\n {rationale && hasText(rationale) && (\n <Collapsible\n className={classes.collapsible}\n key=\"collapsible-rationale\"\n labels={{\n hidden: 'Show Rationale',\n visible: 'Hide Rationale',\n }}\n >\n <PreviewPrompt prompt={rationale} />\n </Collapsible>\n )}\n\n {feedback && <Feedback correctness={correctness.correctness} feedback={feedback} />}\n </div>\n }\n >\n <div className={classes.mainContainer} ref={(r) => (this.root = r || this.root)}>\n {midContent}\n </div>\n </Tooltip>\n );\n }\n\n return (\n <div className={classes.mainContainer} ref={(r) => (this.root = r || this.root)}>\n {midContent}\n </div>\n );\n }\n}\n\nconst styles = (theme) => ({\n mainContainer: {\n color: color.text(),\n backgroundColor: color.background(),\n display: 'inline-block',\n },\n tooltip: {\n background: `${color.primaryLight()} !important`,\n color: color.text(),\n padding: theme.spacing.unit * 2,\n border: `1px solid ${color.secondary()}`,\n fontSize: '16px',\n '& :not(.MathJax) > table tr': {\n '&:nth-child(2n)': {\n backgroundColor: 'unset !important',\n },\n },\n },\n tooltipPopper: {\n opacity: 1,\n },\n keypadTooltip: {\n fontSize: 'initial',\n background: 'transparent',\n width: '600px',\n marginTop: 0,\n paddingTop: 0,\n },\n keypadTooltipPopper: {\n background: 'transparent',\n width: '650px',\n opacity: 1,\n },\n promptContainer: {\n marginBottom: theme.spacing.unit * 2,\n },\n main: {\n width: '100%',\n position: 'relative',\n backgroundColor: color.background(),\n color: color.text(),\n },\n title: {\n fontSize: '1.1rem',\n display: 'block',\n marginTop: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit,\n },\n note: {\n paddingBottom: theme.spacing.unit * 2,\n },\n collapsible: {\n marginBottom: theme.spacing.unit * 2,\n },\n responseContainer: {\n zIndex: 10,\n // position: 'absolute',\n // right: 0,\n minWidth: '400px',\n marginTop: theme.spacing.unit * 2,\n },\n expression: {\n maxWidth: 'fit-content',\n '& > .mq-math-mode': {\n '& > .mq-root-block': {\n '& > .mq-editable-field': {\n minWidth: '10px',\n margin: (theme.spacing.unit * 2) / 3,\n padding: theme.spacing.unit / 4,\n },\n },\n '& sup': {\n top: 0,\n },\n },\n },\n static: {\n '& > .mq-root-block': {\n '& > .mq-editable-field': {\n borderColor: color.text(),\n },\n },\n },\n inputAndKeypadContainer: {\n position: 'relative',\n '& .mq-overarrow-inner': {\n border: 'none !important',\n padding: '0 !important',\n },\n '& .mq-overarrow-inner-right': {\n display: 'none !important',\n },\n '& .mq-overarrow-inner-left': {\n display: 'none !important',\n },\n '& .mq-overarrow.mq-arrow-both': {\n minWidth: '1.23em',\n '& *': {\n lineHeight: '1 !important',\n },\n '&:before': {\n top: '-0.4em',\n left: '-1px',\n },\n '&:after': {\n top: '-2.4em',\n right: '-1px',\n },\n '&.mq-empty:after': {\n top: '-0.45em',\n },\n },\n '& .mq-overarrow.mq-arrow-right': {\n '&:before': {\n top: '-0.4em',\n right: '-1px',\n },\n },\n '& .mq-longdiv-inner': {\n borderTop: '1px solid !important',\n paddingTop: '1.5px !important',\n },\n '& .mq-parallelogram': {\n lineHeight: 0.85,\n },\n },\n showCorrectness: {\n border: '2px solid',\n },\n correctAnswerShown: {\n padding: theme.spacing.unit,\n letterSpacing: '0.5px',\n },\n printCorrect: {\n border: `2px solid ${color.correct()} !important`,\n },\n correct: {\n borderColor: `${color.correct()} !important`,\n },\n incorrect: {\n borderColor: `${color.incorrect()} !important`,\n },\n blockContainer: {\n margin: `${theme.spacing.unit}px !important`,\n display: 'inline-flex',\n border: '2px solid grey !important',\n },\n blockResponse: {\n color: 'grey',\n background: theme.palette.grey['A100'],\n fontSize: '0.8rem !important',\n padding: `${theme.spacing.unit / 2}px !important`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRight: `2px solid ${color.disabled()} !important`,\n flexShrink: 0,\n flexGrow: 0,\n flexBasis: 'auto', // take only the space needed for content + padding\n },\n toggle: {\n color: color.text(),\n marginBottom: theme.spacing.unit * 2,\n },\n blockMath: {\n color: color.text(),\n backgroundColor: color.background(),\n padding: `${theme.spacing.unit / 2}px !important`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexGrow: 1, // take all the remaining space\n '& > .mq-math-mode': {\n '& > .mq-hasCursor': {\n '& > .mq-cursor': {\n display: 'none',\n },\n },\n },\n },\n printContainer: {\n marginBottom: theme.spacing.unit,\n pointerEvents: 'none',\n },\n srOnly: {\n position: 'absolute',\n left: '-10000px',\n top: 'auto',\n width: '1px',\n height: '1px',\n overflow: 'hidden',\n },\n});\n\nexport default withStyles(styles)(Main);\n"],"file":"main.js"}
1
+ {"version":3,"sources":["../src/main.jsx"],"names":["translator","Translator","registered","NEWLINE_LATEX","REGEX","DEFAULT_KEYPAD_VARIANT","IS_SAFARI","test","navigator","userAgent","generateAdditionalKeys","keyData","map","key","name","latex","write","label","getKeyPadWidth","additionalKeys","equationEditor","Math","floor","length","prepareForStatic","model","state","config","disabled","expression","responses","printMode","alwaysShowCorrect","modelExpression","showCorrect","answer","answerBlocks","replace","session","answers","blankSpace","repeat","value","Main","props","classes","root","Object","keys","forEach","answerId","el","querySelector","indexEl","MQ","MathQuill","getInterface","textContent","view","parentElement","classList","remove","correct","incorrect","StaticMath","selectableElements","querySelectorAll","elem","setAttribute","textareaElements","index","instructionsId","parent","closest","instructionsElement","document","createElement","id","className","srOnly","insertBefore","setTimeout","keypadElement","firstButton","focus","event","isAnswerInputFocused","activeElement","getAttribute","isClickOrTouchEvent","type","setState","activeAnswerBlock","focusFirstKeypadElement","handleEvent","handleKeyDown","addEventListener","removeEventListener","response","callOnSessionChange","data","input","c","toNodeData","clear","Array","isArray","vv","cmd","keystroke","onSessionChange","show","handleAnswerBlockDomUpdate","subfieldValue","completeAnswer","mqStatic","mathField","changeField","fields","find","k","tf","e","relatedTarget","currentTarget","getParentWithRoleTooltip","element","depth","offsetParent","getDeepChildDataKeypad","child","children","attributes","parentWithTooltipRole","childWithDataKeypad","tooltipContainerRef","React","createRef","window","registerEmbed","htmlString","blockContainer","blockResponse","blockMath","text","pattern","matches","match","nextProps","nextConfig","note","language","t","lng","env","mode","countResponseOccurrences","updateAria","newAnswers","nextState","sameModel","sameState","prevProps","prevState","prevResponseType","responseType","currentResponseType","cleanupKeyDownListener","ref","div","firstChild","correctness","teacherInstructions","rationale","feedback","animationsDisabled","showNote","prompt","customKeys","role","displayNote","emptyResponse","showCorrectAnswerToggle","tooltipModeEnabled","staticLatex","viewMode","studentPrintMode","printView","printContainer","subFieldChanged","getFieldName","setInput","onSubFieldFocus","onBlur","midContent","main","collapsible","hidden","visible","__html","promptContainer","inputAndKeypadContainer","ResponseTypes","simple","onSimpleResponseChange","advanced","showCorrectness","correctAnswerShown","printCorrect","setTooltipRef","tooltip","keypadTooltip","popper","keypadTooltipPopper","container","current","undefined","responseContainer","width","onClick","tooltipPopper","toggle","toggleShowCorrect","mainContainer","r","Component","PropTypes","object","isRequired","func","styles","theme","color","backgroundColor","background","display","primaryLight","padding","spacing","unit","border","secondary","fontSize","opacity","marginTop","paddingTop","marginBottom","position","title","paddingBottom","zIndex","minWidth","maxWidth","margin","top","borderColor","lineHeight","left","right","borderTop","letterSpacing","palette","grey","alignItems","justifyContent","borderRight","flexShrink","flexGrow","flexBasis","pointerEvents","height","overflow"],"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 { mq, HorizontalKeypad, updateSpans } from '@pie-lib/pie-toolbox/math-input';\nimport { Feedback, Collapsible, Readable, hasText, PreviewPrompt } from '@pie-lib/pie-toolbox/render-ui';\nimport { renderMath } from '@pie-lib/pie-toolbox/math-rendering-accessible';\nimport { withStyles } from '@material-ui/core/styles';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport { ResponseTypes } from './utils';\nimport isEqual from 'lodash/isEqual';\nimport cx from 'classnames';\nimport SimpleQuestionBlock from './simple-question-block';\nimport MathQuill from '@pie-framework/mathquill';\nimport { color } from '@pie-lib/pie-toolbox/render-ui';\nimport isEmpty from 'lodash/isEmpty';\nimport Translator from '@pie-lib/pie-toolbox/translator';\nconst { translator } = Translator;\nlet registered = false;\n\nconst NEWLINE_LATEX = /\\\\newline/g;\nconst REGEX = /{{response}}/gm;\nconst DEFAULT_KEYPAD_VARIANT = 6;\n\n// !!! If you're using Chrome but have selected the \"iPad\" device in Chrome Developer Tools, the navigator.userAgent string may still report as\n// Safari because Chrome on iOS actually uses the Safari rendering engine under the hood due to Apple's restrictions on third-party browser engines.\n// When you select the \"iPad\" device in Chrome Developer Tools, you're essentially emulating the behavior of Safari on an iPad, including the user agent string.\n// Therefore, even though you're using Chrome, the user agent string will resemble that of Safari on an iPad.\n// Since the regular expression /^((?!chrome|android).)*safari/i checks for the presence of \"safari\" in the user agent string while excluding \"chrome\" and \"android\",\n// it will return true in this case because \"safari\" is present in the user agent string emulated by Chrome when in iPad mode.\nconst IS_SAFARI = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\nfunction generateAdditionalKeys(keyData = []) {\n return keyData.map((key) => ({\n name: key,\n latex: key,\n write: key,\n label: key,\n }));\n}\n\nfunction getKeyPadWidth(additionalKeys = [], equationEditor) {\n return Math.floor(additionalKeys.length / 5) * 30 + (equationEditor === 'miscellaneous' ? 600 : 500);\n}\n\nfunction prepareForStatic(model, state) {\n const { config, disabled } = model || {};\n const { expression, responses, printMode, alwaysShowCorrect } = config || {};\n\n if (config && expression) {\n const modelExpression = expression;\n\n if (state.showCorrect) {\n return responses && responses.length && responses[0].answer;\n }\n\n let answerBlocks = 1; // assume one at least\n // build out local state model using responses declared in expression\n\n return (modelExpression || '')\n .replace(REGEX, function () {\n const answer = state.session.answers[`r${answerBlocks}`];\n\n if (printMode && !alwaysShowCorrect) {\n const blankSpace = '\\\\ \\\\ '.repeat(30) + '\\\\newline ';\n\n return `\\\\MathQuillMathField[r${answerBlocks++}]{${blankSpace.repeat(3)}}`;\n }\n\n if (disabled) {\n return `\\\\embed{answerBlock}[r${answerBlocks++}]`;\n }\n\n return `\\\\MathQuillMathField[r${answerBlocks++}]{${(answer && answer.value) || ''}}`;\n })\n .replace(NEWLINE_LATEX, '\\\\embed{newLine}[]');\n }\n}\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 const answers = {};\n\n if (props.model.config && props.model.config.expression) {\n let answerBlocks = 1; // assume one at least\n // build out local state model using responses declared in expression\n\n (props.model.config.expression || '').replace(REGEX, () => {\n answers[`r${answerBlocks}`] = {\n value:\n (props.session &&\n props.session.answers &&\n props.session.answers[`r${answerBlocks}`] &&\n props.session.answers[`r${answerBlocks}`].value) ||\n '',\n };\n\n answerBlocks += 1;\n });\n }\n\n this.state = {\n session: { ...props.session, answers },\n activeAnswerBlock: '',\n showCorrect: this.props.model.config.alwaysShowCorrect || false,\n tooltipContainerRef: React.createRef(),\n };\n }\n\n UNSAFE_componentWillMount() {\n const { classes } = this.props;\n\n if (typeof window !== 'undefined') {\n let MQ = MathQuill.getInterface(2);\n\n if (!registered) {\n MQ.registerEmbed('answerBlock', (data) => {\n return {\n htmlString: `<div class=\"${classes.blockContainer}\">\n <div class=\"${classes.blockResponse}\" id=\"${data}Index\">R</div>\n <div class=\"${classes.blockMath}\">\n <span id=\"${data}\"></span>\n </div>\n </div>`,\n text: () => 'text',\n latex: () => `\\\\embed{answerBlock}[${data}]`,\n };\n });\n\n registered = true;\n }\n }\n }\n\n handleAnswerBlockDomUpdate = () => {\n const { model, classes } = this.props;\n const { session, showCorrect } = this.state;\n const answers = session.answers;\n\n if (this.root && model.disabled && !showCorrect) {\n Object.keys(answers).forEach((answerId) => {\n const el = this.root.querySelector(`#${answerId}`);\n const indexEl = this.root.querySelector(`#${answerId}Index`);\n // const correct = model.correctness && model.correctness.correct;\n\n if (el) {\n let MQ = MathQuill.getInterface(2);\n const answer = answers[answerId];\n\n el.textContent = (answer && answer.value) || '';\n\n if (!model.view) {\n // for now, we're not going to be showing individual response correctness\n // TODO re-attach the classes once we are\n // el.parentElement.parentElement.classList.add(\n // correct ? classes.correct : classes.incorrect\n // );\n } else {\n el.parentElement.parentElement.classList.remove(classes.correct);\n el.parentElement.parentElement.classList.remove(classes.incorrect);\n }\n\n MQ.StaticMath(el);\n\n // For now, we're not going to be indexing response blocks\n // TODO go back to indexing once we support individual response correctness\n // indexEl.textContent = `R${idx + 1}`;\n indexEl.textContent = 'R';\n }\n });\n }\n\n renderMath(this.root);\n };\n\n countResponseOccurrences(expression) {\n const pattern = /\\{\\{response\\}\\}/g;\n const matches = expression?.match(pattern);\n\n return matches ? matches.length : 0;\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n const { config } = this.props.model;\n const { config: nextConfig = {} } = nextProps.model || {};\n // check if the note is the default one for prev language and change to the default one for new language\n // this check is necessary in order to diferanciate between default and authour defined note\n // and only change between languages for default ones\n if (\n config.note &&\n config.language &&\n config.language !== nextConfig.language &&\n config.note === translator.t('mathInline.primaryCorrectWithAlternates', { lng: config.language })\n ) {\n config.note = translator.t('mathInline.primaryCorrectWithAlternates', { lng: nextConfig.language });\n }\n\n if ((config.env && config.env.mode !== 'evaluate') || (nextConfig.env && nextConfig.env.mode !== 'evaluate')) {\n this.setState({ ...this.state.session, showCorrect: false });\n }\n\n if (nextConfig.alwaysShowCorrect) {\n this.setState({ showCorrect: true });\n }\n\n if (this.countResponseOccurrences(config.expression) < this.countResponseOccurrences(nextConfig.expression)) {\n setTimeout(() => this.updateAria(), 100);\n }\n\n if (\n (config && config.responses && config.responses.length !== nextConfig.responses.length) ||\n (!config && nextConfig && nextConfig.responses) ||\n (config && nextConfig && config.expression !== nextConfig.expression)\n ) {\n const newAnswers = {};\n const answers = this.state.session.answers;\n\n let answerBlocks = 1; // assume one at least\n\n // build out local state model using responses declared in expression\n (nextConfig.expression || '').replace(REGEX, () => {\n newAnswers[`r${answerBlocks}`] = {\n value: (answers && answers[`r${answerBlocks}`] && answers[`r${answerBlocks}`].value) || '',\n };\n answerBlocks++;\n });\n\n this.setState(\n (state) => ({\n session: {\n ...state.session,\n completeAnswer: this.mqStatic && this.mqStatic.mathField.latex(),\n answers: newAnswers,\n },\n }),\n this.handleAnswerBlockDomUpdate,\n );\n }\n }\n\n shouldComponentUpdate(nextProps, nextState) {\n const sameModel = isEqual(this.props.model, nextProps.model);\n const sameState = isEqual(this.state, nextState);\n\n return !sameModel || !sameState;\n }\n\n componentDidMount() {\n this.handleAnswerBlockDomUpdate();\n this.updateAria();\n setTimeout(() => renderMath(this.root), 100);\n }\n\n componentDidUpdate(prevProps, prevState) {\n this.handleAnswerBlockDomUpdate();\n\n const prevResponseType = prevProps.model?.config?.responseType;\n const currentResponseType = this.props.model?.config?.responseType;\n\n if (prevResponseType !== currentResponseType) {\n this.updateAria();\n }\n }\n\n updateAria = () => {\n const { classes } = this.props;\n\n if (this.root) {\n // Update aria-hidden for .mq-selectable elements\n const selectableElements = this.root.querySelectorAll('.mq-selectable');\n selectableElements.forEach((elem) => elem.setAttribute('aria-hidden', 'true'));\n\n // Update aria-label for textarea elements and add aria-describedby\n const textareaElements = this.root.querySelectorAll('textarea');\n textareaElements.forEach((elem, index) => {\n elem.setAttribute('aria-label', 'Enter answer.');\n\n // Create a unique id for each instructions element\n const instructionsId = `instructions-${index}`;\n\n // Find the parent element that contains the textarea\n const parent = elem.closest('.mq-textarea');\n\n if (parent) {\n // Create or find the instructions element within the parent\n let instructionsElement = parent.querySelector(`#${instructionsId}`);\n\n if (!instructionsElement) {\n instructionsElement = document.createElement('span');\n instructionsElement.id = instructionsId;\n instructionsElement.className = classes.srOnly;\n instructionsElement.textContent =\n 'This field supports both keypad and keyboard input. Use the keyboard to access and interact with the on-screen math keypad, which accepts LaTeX markup. Use the down arrow key to open the keypad and navigate its buttons. Use the escape key to close the keypad and return to the input field.';\n parent.insertBefore(instructionsElement, elem);\n }\n\n elem.setAttribute('aria-describedby', instructionsId);\n }\n });\n }\n };\n\n focusFirstKeypadElement = () => {\n setTimeout(() => {\n const keypadElement = document.querySelector('[data-keypad]');\n\n if (keypadElement) {\n const firstButton = keypadElement.querySelector(\"button, [role='button']\");\n\n if (firstButton) {\n firstButton.focus();\n }\n }\n }, 0);\n };\n\n handleKeyDown = (event, id) => {\n const isAnswerInputFocused = document.activeElement.getAttribute('aria-label') === 'Enter answer.';\n const isClickOrTouchEvent = event.type === 'click' || event.type === 'touchstart';\n\n if (isAnswerInputFocused && (event.key === 'ArrowDown' || isClickOrTouchEvent)) {\n this.setState({ activeAnswerBlock: id }, () => {\n if (event.key === 'ArrowDown') {\n this.focusFirstKeypadElement();\n }\n });\n }\n\n if ((!isAnswerInputFocused && isClickOrTouchEvent) || event.key === 'Escape') {\n this.setState({ activeAnswerBlock: '' });\n }\n };\n\n onSubFieldFocus = (id) => {\n const handleEvent = (event) => {\n this.handleKeyDown(event, id);\n };\n\n document.addEventListener('keydown', handleEvent);\n document.addEventListener('click', handleEvent);\n document.addEventListener('touchstart', handleEvent);\n };\n\n cleanupKeyDownListener = () => {\n document.removeEventListener('keydown', this.handleEvent);\n document.removeEventListener('click', this.handleEvent);\n document.removeEventListener('touchstart', this.handleEvent);\n };\n\n componentWillUnmount() {\n if (this.cleanupKeyDownListener) {\n this.cleanupKeyDownListener();\n }\n }\n\n onDone = () => {};\n\n onSimpleResponseChange = (response) => {\n this.setState((state) => ({ session: { ...state.session, response } }), this.callOnSessionChange);\n };\n\n toNodeData = (data) => {\n if (!data) {\n return;\n }\n\n const { type, value } = data;\n\n if (type === 'command' || type === 'cursor') {\n return data;\n } else if (type === 'answer') {\n return { type: 'answer', ...data };\n } else if (value === 'clear') {\n return { type: 'clear' };\n } else {\n return { type: 'write', value };\n }\n };\n\n setInput = (input) => {\n this.input = input;\n };\n\n onClick = (data) => {\n const c = this.toNodeData(data);\n\n if (c.type === 'clear') {\n this.input.clear();\n } else if (c.type === 'command') {\n if (Array.isArray(c.value)) {\n c.value.forEach((vv) => {\n this.input.cmd(vv);\n });\n } else {\n this.input.cmd(c.value);\n }\n } else if (c.type === 'cursor') {\n this.input.keystroke(c.value);\n } else {\n this.input.write(c.value);\n }\n\n this.input.focus();\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 }, this.handleAnswerBlockDomUpdate);\n };\n\n subFieldChanged = (name, subfieldValue) => {\n updateSpans();\n\n if (name) {\n this.setState(\n (state) => ({\n session: {\n ...state.session,\n completeAnswer: this.mqStatic && this.mqStatic.mathField.latex(),\n answers: {\n ...state.session.answers,\n [name]: { value: subfieldValue },\n },\n },\n }),\n this.callOnSessionChange,\n );\n }\n };\n\n getFieldName = (changeField, fields) => {\n const { answers } = this.state.session;\n\n if (Object.keys(answers || {}).length) {\n const keys = Object.keys(answers);\n\n return keys.find((k) => {\n const tf = fields[k];\n\n return tf && tf.id == changeField.id;\n });\n }\n };\n\n onBlur = (e) => {\n const { relatedTarget, currentTarget } = e || {};\n\n function getParentWithRoleTooltip(element, depth = 0) {\n // only run this max 16 times\n if (!element || depth >= 16) return null;\n\n const parent = element.offsetParent;\n\n if (!parent) return null;\n\n if (parent.getAttribute('role') === 'tooltip') {\n return parent;\n }\n\n return getParentWithRoleTooltip(parent, depth + 1);\n }\n\n function getDeepChildDataKeypad(element, depth = 0) {\n // only run this max 4 times\n if (!element || depth >= 4) return null;\n\n const child = element?.children?.[0];\n\n if (!child) return null;\n\n if (child.attributes && child.attributes['data-keypad']) {\n return child;\n }\n\n return getDeepChildDataKeypad(child, depth + 1);\n }\n\n const parentWithTooltipRole = getParentWithRoleTooltip(relatedTarget);\n const childWithDataKeypad = parentWithTooltipRole ? getDeepChildDataKeypad(parentWithTooltipRole) : null;\n\n if (!relatedTarget || !currentTarget || !childWithDataKeypad?.attributes['data-keypad']) {\n this.setState({ activeAnswerBlock: '' });\n }\n // else {\n // // Just for debugging purpose:\n // console.log('\\n\\nNew childWithDataKeypad', childWithDataKeypad);\n //\n // if (IS_SAFARI) {\n // // (IS_SAFARI && !relatedTarget?.offsetParent?.children[0]?.children[0]?.attributes?.['data-keypad'])\n // console.log('What was being used', relatedTarget?.offsetParent?.children[0]?.children[0]);\n // } else {\n // // (!IS_SAFARI && !relatedTarget?.offsetParent?.children[0]?.attributes?.['data-keypad']) ||\n // console.log('What was being used', relatedTarget?.offsetParent?.children[0]);\n // }\n // }\n };\n\n setTooltipRef(ref) {\n // Safari Hack: https://stackoverflow.com/a/42764495/5757635\n setTimeout(() => {\n if (ref && IS_SAFARI) {\n const div = document.querySelector(\"[role='tooltip']\");\n\n if (div) {\n const el = div.firstChild;\n el.setAttribute('tabindex', '-1');\n }\n }\n }, 1);\n }\n\n render() {\n const { model, classes } = this.props;\n const { activeAnswerBlock, showCorrect, session, tooltipContainerRef } = this.state;\n const {\n config,\n correctness,\n disabled,\n view,\n teacherInstructions,\n rationale,\n feedback,\n animationsDisabled,\n printMode,\n alwaysShowCorrect,\n language,\n } = model || {};\n\n if (!config) {\n return null;\n }\n\n const {\n showNote,\n note,\n prompt,\n responses,\n responseType,\n equationEditor,\n customKeys,\n env: { mode, role } = {},\n } = config || {};\n const displayNote = (showCorrect || (mode === 'view' && role === 'instructor')) && showNote && note;\n const emptyResponse = isEmpty(responses);\n const showCorrectAnswerToggle = !emptyResponse && correctness && correctness.correctness !== 'correct';\n const tooltipModeEnabled = disabled && correctness;\n const additionalKeys = generateAdditionalKeys(customKeys);\n const correct = correctness && correctness.correct;\n const staticLatex = prepareForStatic(model, this.state) || '';\n const viewMode = disabled && !correctness;\n const studentPrintMode = printMode && !alwaysShowCorrect;\n\n const printView = (\n <div className={classes.printContainer}>\n <mq.Static\n className={classes.static}\n ref={(mqStatic) => (this.mqStatic = mqStatic || this.mqStatic)}\n latex={staticLatex}\n onSubFieldChange={this.subFieldChanged}\n getFieldName={this.getFieldName}\n setInput={this.setInput}\n onSubFieldFocus={this.onSubFieldFocus}\n onBlur={this.onBlur}\n />\n </div>\n );\n\n const midContent = (\n <div className={classes.main}>\n {mode === 'gather' && <h2 className={classes.srOnly}>Math Equation Response Question</h2>}\n\n {viewMode &&\n teacherInstructions &&\n hasText(teacherInstructions) &&\n (!animationsDisabled ? (\n <Collapsible\n className={classes.collapsible}\n labels={{ hidden: 'Show Teacher Instructions', visible: 'Hide Teacher Instructions' }}\n >\n <div dangerouslySetInnerHTML={{ __html: teacherInstructions }} />\n </Collapsible>\n ) : (\n <div dangerouslySetInnerHTML={{ __html: teacherInstructions }} />\n ))}\n\n {prompt && (\n <div className={classes.promptContainer}>\n <PreviewPrompt prompt={prompt} />\n </div>\n )}\n\n {studentPrintMode ? (\n printView\n ) : (\n <Readable false>\n <div className={classes.inputAndKeypadContainer} tabIndex={0}>\n {responseType === ResponseTypes.simple && (\n <SimpleQuestionBlock\n onSimpleResponseChange={this.onSimpleResponseChange}\n showCorrect={showCorrect}\n emptyResponse={emptyResponse}\n model={model}\n session={session}\n onSubFieldFocus={this.onSubFieldFocus}\n showKeypad={!!activeAnswerBlock}\n />\n )}\n\n {responseType === ResponseTypes.advanced && (\n <div\n ref={tooltipContainerRef}\n className={cx(classes.expression, {\n [classes.incorrect]: !emptyResponse && !correct && !showCorrect,\n [classes.correct]: !emptyResponse && (correct || showCorrect),\n [classes.showCorrectness]: !emptyResponse && disabled && correctness && !view,\n [classes.correctAnswerShown]: showCorrect,\n [classes.printCorrect]: printMode && alwaysShowCorrect,\n })}\n >\n <Tooltip\n ref={(ref) => this.setTooltipRef(ref)}\n enterTouchDelay={0}\n interactive\n open={!!activeAnswerBlock}\n classes={{\n tooltip: classes.keypadTooltip,\n popper: classes.keypadTooltipPopper,\n }}\n PopperProps={{\n container: tooltipContainerRef?.current || undefined,\n }}\n title={Object.keys(session.answers).map(\n (answerId) =>\n (answerId === activeAnswerBlock && !(showCorrect || disabled) && (\n <div\n data-keypad={true}\n key={answerId}\n className={classes.responseContainer}\n style={{\n // marginTop: this.mqStatic && this.mqStatic.input.offsetHeight - 20,\n width: getKeyPadWidth(additionalKeys, equationEditor),\n }}\n >\n <HorizontalKeypad\n additionalKeys={additionalKeys}\n mode={equationEditor || DEFAULT_KEYPAD_VARIANT}\n onClick={this.onClick}\n />\n </div>\n )) ||\n null,\n )}\n >\n <mq.Static\n className={classes.static}\n ref={(mqStatic) => (this.mqStatic = mqStatic || this.mqStatic)}\n latex={staticLatex}\n onSubFieldChange={this.subFieldChanged}\n getFieldName={this.getFieldName}\n setInput={this.setInput}\n onSubFieldFocus={this.onSubFieldFocus}\n onBlur={this.onBlur}\n />\n </Tooltip>\n </div>\n )}\n </div>\n </Readable>\n )}\n\n {viewMode && displayNote && (\n <div className={classes.note} dangerouslySetInnerHTML={{ __html: `<strong>Note:</strong> ${note}` }} />\n )}\n\n {viewMode &&\n rationale &&\n hasText(rationale) &&\n (!animationsDisabled ? (\n <Collapsible labels={{ hidden: 'Show Rationale', visible: 'Hide Rationale' }}>\n <div dangerouslySetInnerHTML={{ __html: rationale }} />\n </Collapsible>\n ) : (\n <div dangerouslySetInnerHTML={{ __html: rationale }} />\n ))}\n </div>\n );\n\n if (\n tooltipModeEnabled &&\n (showCorrectAnswerToggle ||\n (teacherInstructions && hasText(teacherInstructions)) ||\n (rationale && hasText(rationale)) ||\n feedback)\n ) {\n return (\n <Tooltip\n interactive\n enterTouchDelay={0}\n classes={{\n tooltip: classes.tooltip,\n popper: classes.tooltipPopper,\n }}\n title={\n <div>\n <div className={classes.main}>\n {showCorrectAnswerToggle && (\n <CorrectAnswerToggle\n language={language}\n className={classes.toggle}\n show\n toggled={showCorrect}\n onToggle={this.toggleShowCorrect}\n />\n )}\n </div>\n\n {teacherInstructions && hasText(teacherInstructions) && (\n <Collapsible\n className={classes.collapsible}\n key=\"collapsible-teacher-instructions\"\n labels={{\n hidden: 'Show Teacher Instructions',\n visible: 'Hide Teacher Instructions',\n }}\n >\n <PreviewPrompt prompt={teacherInstructions} />\n </Collapsible>\n )}\n {displayNote && hasText(note) && (\n <Collapsible\n className={classes.collapsible}\n key=\"collapsible-note\"\n labels={{\n hidden: translator.t('common:showNote', { lng: language }),\n visible: translator.t('common:hideNote', { lng: language }),\n }}\n >\n <PreviewPrompt prompt={note} />\n </Collapsible>\n )}\n\n {rationale && hasText(rationale) && (\n <Collapsible\n className={classes.collapsible}\n key=\"collapsible-rationale\"\n labels={{\n hidden: 'Show Rationale',\n visible: 'Hide Rationale',\n }}\n >\n <PreviewPrompt prompt={rationale} />\n </Collapsible>\n )}\n\n {feedback && <Feedback correctness={correctness.correctness} feedback={feedback} />}\n </div>\n }\n >\n <div className={classes.mainContainer} ref={(r) => (this.root = r || this.root)}>\n {midContent}\n </div>\n </Tooltip>\n );\n }\n\n return (\n <div className={classes.mainContainer} ref={(r) => (this.root = r || this.root)}>\n {midContent}\n </div>\n );\n }\n}\n\nconst styles = (theme) => ({\n mainContainer: {\n color: color.text(),\n backgroundColor: color.background(),\n display: 'inline-block',\n },\n tooltip: {\n background: `${color.primaryLight()} !important`,\n color: color.text(),\n padding: theme.spacing.unit * 2,\n border: `1px solid ${color.secondary()}`,\n fontSize: '16px',\n '& :not(.MathJax) > table tr': {\n '&:nth-child(2n)': {\n backgroundColor: 'unset !important',\n },\n },\n },\n tooltipPopper: {\n opacity: 1,\n },\n keypadTooltip: {\n fontSize: 'initial',\n background: 'transparent',\n width: '600px',\n marginTop: 0,\n paddingTop: 0,\n },\n keypadTooltipPopper: {\n background: 'transparent',\n width: '650px',\n opacity: 1,\n },\n promptContainer: {\n marginBottom: theme.spacing.unit * 2,\n },\n main: {\n width: '100%',\n position: 'relative',\n backgroundColor: color.background(),\n color: color.text(),\n },\n title: {\n fontSize: '1.1rem',\n display: 'block',\n marginTop: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit,\n },\n note: {\n paddingBottom: theme.spacing.unit * 2,\n },\n collapsible: {\n marginBottom: theme.spacing.unit * 2,\n },\n responseContainer: {\n zIndex: 10,\n // position: 'absolute',\n // right: 0,\n minWidth: '400px',\n marginTop: theme.spacing.unit * 2,\n },\n expression: {\n maxWidth: 'fit-content',\n '& > .mq-math-mode': {\n '& > .mq-root-block': {\n '& > .mq-editable-field': {\n minWidth: '10px',\n margin: (theme.spacing.unit * 2) / 3,\n padding: theme.spacing.unit / 4,\n },\n },\n '& sup': {\n top: 0,\n },\n },\n },\n static: {\n '& > .mq-root-block': {\n '& > .mq-editable-field': {\n borderColor: color.text(),\n },\n },\n },\n inputAndKeypadContainer: {\n position: 'relative',\n '& .mq-overarrow-inner': {\n border: 'none !important',\n padding: '0 !important',\n },\n '& .mq-overarrow-inner-right': {\n display: 'none !important',\n },\n '& .mq-overarrow-inner-left': {\n display: 'none !important',\n },\n '& .mq-overarrow.mq-arrow-both': {\n minWidth: '1.23em',\n '& *': {\n lineHeight: '1 !important',\n },\n '&:before': {\n top: '-0.4em',\n left: '-1px',\n },\n '&:after': {\n top: '-2.4em',\n right: '-1px',\n },\n '&.mq-empty:after': {\n top: '-0.45em',\n },\n },\n '& .mq-overarrow.mq-arrow-right': {\n '&:before': {\n top: '-0.4em',\n right: '-1px',\n },\n },\n '& .mq-longdiv-inner': {\n borderTop: '1px solid !important',\n paddingTop: '1.5px !important',\n },\n '& .mq-parallelogram': {\n lineHeight: 0.85,\n },\n },\n showCorrectness: {\n border: '2px solid',\n },\n correctAnswerShown: {\n padding: theme.spacing.unit,\n letterSpacing: '0.5px',\n },\n printCorrect: {\n border: `2px solid ${color.correct()} !important`,\n },\n correct: {\n borderColor: `${color.correct()} !important`,\n },\n incorrect: {\n borderColor: `${color.incorrect()} !important`,\n },\n blockContainer: {\n margin: `${theme.spacing.unit}px !important`,\n display: 'inline-flex',\n border: '2px solid grey !important',\n },\n blockResponse: {\n color: 'grey',\n background: theme.palette.grey['A100'],\n fontSize: '0.8rem !important',\n padding: `${theme.spacing.unit / 2}px !important`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRight: `2px solid ${color.disabled()} !important`,\n flexShrink: 0,\n flexGrow: 0,\n flexBasis: 'auto', // take only the space needed for content + padding\n },\n toggle: {\n color: color.text(),\n marginBottom: theme.spacing.unit * 2,\n },\n blockMath: {\n color: color.text(),\n backgroundColor: color.background(),\n padding: `${theme.spacing.unit / 2}px !important`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexGrow: 1, // take all the remaining space\n '& > .mq-math-mode': {\n '& > .mq-hasCursor': {\n '& > .mq-cursor': {\n display: 'none',\n },\n },\n },\n },\n printContainer: {\n marginBottom: theme.spacing.unit,\n pointerEvents: 'none',\n },\n srOnly: {\n position: 'absolute',\n left: '-10000px',\n top: 'auto',\n width: '1px',\n height: '1px',\n overflow: 'hidden',\n },\n});\n\nexport default withStyles(styles)(Main);\n"],"file":"main.js"}
package/module/element.js CHANGED
@@ -11888,7 +11888,8 @@ class Main extends React$1.Component {
11888
11888
  answers
11889
11889
  },
11890
11890
  activeAnswerBlock: '',
11891
- showCorrect: this.props.model.config.alwaysShowCorrect || false
11891
+ showCorrect: this.props.model.config.alwaysShowCorrect || false,
11892
+ tooltipContainerRef: React$1.createRef()
11892
11893
  };
11893
11894
  }
11894
11895
  UNSAFE_componentWillMount() {
@@ -12237,7 +12238,7 @@ class Main extends React$1.Component {
12237
12238
  }
12238
12239
  render() {
12239
12240
  const {model, classes} = this.props;
12240
- const {activeAnswerBlock, showCorrect, session} = this.state;
12241
+ const {activeAnswerBlock, showCorrect, session, tooltipContainerRef} = this.state;
12241
12242
  const {config, correctness, disabled, view, teacherInstructions, rationale, feedback, animationsDisabled, printMode, alwaysShowCorrect, language} = model || ({});
12242
12243
  if (!config) {
12243
12244
  return null;
@@ -12257,7 +12258,7 @@ class Main extends React$1.Component {
12257
12258
  __self: this,
12258
12259
  __source: {
12259
12260
  fileName: _jsxFileName,
12260
- lineNumber: 568
12261
+ lineNumber: 569
12261
12262
  }
12262
12263
  }, React$1.createElement(mq.Static, {
12263
12264
  className: classes.static,
@@ -12271,7 +12272,7 @@ class Main extends React$1.Component {
12271
12272
  __self: this,
12272
12273
  __source: {
12273
12274
  fileName: _jsxFileName,
12274
- lineNumber: 569
12275
+ lineNumber: 570
12275
12276
  }
12276
12277
  }));
12277
12278
  const midContent = React$1.createElement('div', {
@@ -12279,14 +12280,14 @@ class Main extends React$1.Component {
12279
12280
  __self: this,
12280
12281
  __source: {
12281
12282
  fileName: _jsxFileName,
12282
- lineNumber: 583
12283
+ lineNumber: 584
12283
12284
  }
12284
12285
  }, mode === 'gather' && React$1.createElement('h2', {
12285
12286
  className: classes.srOnly,
12286
12287
  __self: this,
12287
12288
  __source: {
12288
12289
  fileName: _jsxFileName,
12289
- lineNumber: 584
12290
+ lineNumber: 585
12290
12291
  }
12291
12292
  }, "Math Equation Response Question"), viewMode && teacherInstructions && hasText(teacherInstructions) && (!animationsDisabled ? React$1.createElement(Collapsible, {
12292
12293
  className: classes.collapsible,
@@ -12297,7 +12298,7 @@ class Main extends React$1.Component {
12297
12298
  __self: this,
12298
12299
  __source: {
12299
12300
  fileName: _jsxFileName,
12300
- lineNumber: 590
12301
+ lineNumber: 591
12301
12302
  }
12302
12303
  }, React$1.createElement('div', {
12303
12304
  dangerouslySetInnerHTML: {
@@ -12306,7 +12307,7 @@ class Main extends React$1.Component {
12306
12307
  __self: this,
12307
12308
  __source: {
12308
12309
  fileName: _jsxFileName,
12309
- lineNumber: 594
12310
+ lineNumber: 595
12310
12311
  }
12311
12312
  })) : React$1.createElement('div', {
12312
12313
  dangerouslySetInnerHTML: {
@@ -12315,28 +12316,28 @@ class Main extends React$1.Component {
12315
12316
  __self: this,
12316
12317
  __source: {
12317
12318
  fileName: _jsxFileName,
12318
- lineNumber: 597
12319
+ lineNumber: 598
12319
12320
  }
12320
12321
  })), prompt && React$1.createElement('div', {
12321
12322
  className: classes.promptContainer,
12322
12323
  __self: this,
12323
12324
  __source: {
12324
12325
  fileName: _jsxFileName,
12325
- lineNumber: 601
12326
+ lineNumber: 602
12326
12327
  }
12327
12328
  }, React$1.createElement(PreviewPrompt, {
12328
12329
  prompt: prompt,
12329
12330
  __self: this,
12330
12331
  __source: {
12331
12332
  fileName: _jsxFileName,
12332
- lineNumber: 602
12333
+ lineNumber: 603
12333
12334
  }
12334
12335
  })), studentPrintMode ? printView : React$1.createElement(Readable, {
12335
12336
  false: true,
12336
12337
  __self: this,
12337
12338
  __source: {
12338
12339
  fileName: _jsxFileName,
12339
- lineNumber: 609
12340
+ lineNumber: 610
12340
12341
  }
12341
12342
  }, React$1.createElement('div', {
12342
12343
  className: classes.inputAndKeypadContainer,
@@ -12344,7 +12345,7 @@ class Main extends React$1.Component {
12344
12345
  __self: this,
12345
12346
  __source: {
12346
12347
  fileName: _jsxFileName,
12347
- lineNumber: 610
12348
+ lineNumber: 611
12348
12349
  }
12349
12350
  }, responseType === ResponseTypes.simple && React$1.createElement(SimpleQuestionBlock, {
12350
12351
  onSimpleResponseChange: this.onSimpleResponseChange,
@@ -12357,9 +12358,10 @@ class Main extends React$1.Component {
12357
12358
  __self: this,
12358
12359
  __source: {
12359
12360
  fileName: _jsxFileName,
12360
- lineNumber: 612
12361
+ lineNumber: 613
12361
12362
  }
12362
12363
  }), responseType === ResponseTypes.advanced && React$1.createElement('div', {
12364
+ ref: tooltipContainerRef,
12363
12365
  className: cx(classes.expression, {
12364
12366
  [classes.incorrect]: !emptyResponse && !correct && !showCorrect,
12365
12367
  [classes.correct]: !emptyResponse && (correct || showCorrect),
@@ -12370,7 +12372,7 @@ class Main extends React$1.Component {
12370
12372
  __self: this,
12371
12373
  __source: {
12372
12374
  fileName: _jsxFileName,
12373
- lineNumber: 624
12375
+ lineNumber: 625
12374
12376
  }
12375
12377
  }, React$1.createElement(Tooltip, {
12376
12378
  ref: ref => this.setTooltipRef(ref),
@@ -12381,6 +12383,9 @@ class Main extends React$1.Component {
12381
12383
  tooltip: classes.keypadTooltip,
12382
12384
  popper: classes.keypadTooltipPopper
12383
12385
  },
12386
+ PopperProps: {
12387
+ container: _optionalChain([tooltipContainerRef, 'optionalAccess', _18 => _18.current]) || undefined
12388
+ },
12384
12389
  title: Object.keys(session.answers).map(answerId => answerId === activeAnswerBlock && !(showCorrect || disabled) && React$1.createElement('div', {
12385
12390
  'data-keypad': true,
12386
12391
  key: answerId,
@@ -12391,7 +12396,7 @@ class Main extends React$1.Component {
12391
12396
  __self: this,
12392
12397
  __source: {
12393
12398
  fileName: _jsxFileName,
12394
- lineNumber: 645
12399
+ lineNumber: 650
12395
12400
  }
12396
12401
  }, React$1.createElement(HorizontalKeypad, {
12397
12402
  additionalKeys: additionalKeys,
@@ -12400,13 +12405,13 @@ class Main extends React$1.Component {
12400
12405
  __self: this,
12401
12406
  __source: {
12402
12407
  fileName: _jsxFileName,
12403
- lineNumber: 654
12408
+ lineNumber: 659
12404
12409
  }
12405
12410
  })) || null),
12406
12411
  __self: this,
12407
12412
  __source: {
12408
12413
  fileName: _jsxFileName,
12409
- lineNumber: 633
12414
+ lineNumber: 635
12410
12415
  }
12411
12416
  }, React$1.createElement(mq.Static, {
12412
12417
  className: classes.static,
@@ -12420,7 +12425,7 @@ class Main extends React$1.Component {
12420
12425
  __self: this,
12421
12426
  __source: {
12422
12427
  fileName: _jsxFileName,
12423
- lineNumber: 664
12428
+ lineNumber: 669
12424
12429
  }
12425
12430
  }))))), viewMode && displayNote && React$1.createElement('div', {
12426
12431
  className: classes.note,
@@ -12430,7 +12435,7 @@ class Main extends React$1.Component {
12430
12435
  __self: this,
12431
12436
  __source: {
12432
12437
  fileName: _jsxFileName,
12433
- lineNumber: 682
12438
+ lineNumber: 687
12434
12439
  }
12435
12440
  }), viewMode && rationale && hasText(rationale) && (!animationsDisabled ? React$1.createElement(Collapsible, {
12436
12441
  labels: {
@@ -12440,7 +12445,7 @@ class Main extends React$1.Component {
12440
12445
  __self: this,
12441
12446
  __source: {
12442
12447
  fileName: _jsxFileName,
12443
- lineNumber: 689
12448
+ lineNumber: 694
12444
12449
  }
12445
12450
  }, React$1.createElement('div', {
12446
12451
  dangerouslySetInnerHTML: {
@@ -12449,7 +12454,7 @@ class Main extends React$1.Component {
12449
12454
  __self: this,
12450
12455
  __source: {
12451
12456
  fileName: _jsxFileName,
12452
- lineNumber: 690
12457
+ lineNumber: 695
12453
12458
  }
12454
12459
  })) : React$1.createElement('div', {
12455
12460
  dangerouslySetInnerHTML: {
@@ -12458,7 +12463,7 @@ class Main extends React$1.Component {
12458
12463
  __self: this,
12459
12464
  __source: {
12460
12465
  fileName: _jsxFileName,
12461
- lineNumber: 693
12466
+ lineNumber: 698
12462
12467
  }
12463
12468
  })));
12464
12469
  if (tooltipModeEnabled && (showCorrectAnswerToggle || teacherInstructions && hasText(teacherInstructions) || rationale && hasText(rationale) || feedback)) {
@@ -12473,14 +12478,14 @@ class Main extends React$1.Component {
12473
12478
  __self: this,
12474
12479
  __source: {
12475
12480
  fileName: _jsxFileName,
12476
- lineNumber: 714
12481
+ lineNumber: 719
12477
12482
  }
12478
12483
  }, React$1.createElement('div', {
12479
12484
  className: classes.main,
12480
12485
  __self: this,
12481
12486
  __source: {
12482
12487
  fileName: _jsxFileName,
12483
- lineNumber: 715
12488
+ lineNumber: 720
12484
12489
  }
12485
12490
  }, showCorrectAnswerToggle && React$1.createElement(CorrectAnswerToggle, {
12486
12491
  language: language,
@@ -12491,7 +12496,7 @@ class Main extends React$1.Component {
12491
12496
  __self: this,
12492
12497
  __source: {
12493
12498
  fileName: _jsxFileName,
12494
- lineNumber: 717
12499
+ lineNumber: 722
12495
12500
  }
12496
12501
  })), teacherInstructions && hasText(teacherInstructions) && React$1.createElement(Collapsible, {
12497
12502
  className: classes.collapsible,
@@ -12503,14 +12508,14 @@ class Main extends React$1.Component {
12503
12508
  __self: this,
12504
12509
  __source: {
12505
12510
  fileName: _jsxFileName,
12506
- lineNumber: 728
12511
+ lineNumber: 733
12507
12512
  }
12508
12513
  }, React$1.createElement(PreviewPrompt, {
12509
12514
  prompt: teacherInstructions,
12510
12515
  __self: this,
12511
12516
  __source: {
12512
12517
  fileName: _jsxFileName,
12513
- lineNumber: 736
12518
+ lineNumber: 741
12514
12519
  }
12515
12520
  })), displayNote && hasText(note) && React$1.createElement(Collapsible, {
12516
12521
  className: classes.collapsible,
@@ -12526,14 +12531,14 @@ class Main extends React$1.Component {
12526
12531
  __self: this,
12527
12532
  __source: {
12528
12533
  fileName: _jsxFileName,
12529
- lineNumber: 740
12534
+ lineNumber: 745
12530
12535
  }
12531
12536
  }, React$1.createElement(PreviewPrompt, {
12532
12537
  prompt: note,
12533
12538
  __self: this,
12534
12539
  __source: {
12535
12540
  fileName: _jsxFileName,
12536
- lineNumber: 748
12541
+ lineNumber: 753
12537
12542
  }
12538
12543
  })), rationale && hasText(rationale) && React$1.createElement(Collapsible, {
12539
12544
  className: classes.collapsible,
@@ -12545,14 +12550,14 @@ class Main extends React$1.Component {
12545
12550
  __self: this,
12546
12551
  __source: {
12547
12552
  fileName: _jsxFileName,
12548
- lineNumber: 753
12553
+ lineNumber: 758
12549
12554
  }
12550
12555
  }, React$1.createElement(PreviewPrompt, {
12551
12556
  prompt: rationale,
12552
12557
  __self: this,
12553
12558
  __source: {
12554
12559
  fileName: _jsxFileName,
12555
- lineNumber: 761
12560
+ lineNumber: 766
12556
12561
  }
12557
12562
  })), feedback && React$1.createElement(Feedback, {
12558
12563
  correctness: correctness.correctness,
@@ -12560,13 +12565,13 @@ class Main extends React$1.Component {
12560
12565
  __self: this,
12561
12566
  __source: {
12562
12567
  fileName: _jsxFileName,
12563
- lineNumber: 765
12568
+ lineNumber: 770
12564
12569
  }
12565
12570
  })),
12566
12571
  __self: this,
12567
12572
  __source: {
12568
12573
  fileName: _jsxFileName,
12569
- lineNumber: 706
12574
+ lineNumber: 711
12570
12575
  }
12571
12576
  }, React$1.createElement('div', {
12572
12577
  className: classes.mainContainer,
@@ -12574,7 +12579,7 @@ class Main extends React$1.Component {
12574
12579
  __self: this,
12575
12580
  __source: {
12576
12581
  fileName: _jsxFileName,
12577
- lineNumber: 769
12582
+ lineNumber: 774
12578
12583
  }
12579
12584
  }, midContent));
12580
12585
  }
@@ -12584,7 +12589,7 @@ class Main extends React$1.Component {
12584
12589
  __self: this,
12585
12590
  __source: {
12586
12591
  fileName: _jsxFileName,
12587
- lineNumber: 777
12592
+ lineNumber: 782
12588
12593
  }
12589
12594
  }, midContent);
12590
12595
  }
package/module/print.js CHANGED
@@ -11628,7 +11628,8 @@ class Main extends React$1.Component {
11628
11628
  answers
11629
11629
  },
11630
11630
  activeAnswerBlock: '',
11631
- showCorrect: this.props.model.config.alwaysShowCorrect || false
11631
+ showCorrect: this.props.model.config.alwaysShowCorrect || false,
11632
+ tooltipContainerRef: React$1.createRef()
11632
11633
  };
11633
11634
  }
11634
11635
  UNSAFE_componentWillMount() {
@@ -11977,7 +11978,7 @@ class Main extends React$1.Component {
11977
11978
  }
11978
11979
  render() {
11979
11980
  const {model, classes} = this.props;
11980
- const {activeAnswerBlock, showCorrect, session} = this.state;
11981
+ const {activeAnswerBlock, showCorrect, session, tooltipContainerRef} = this.state;
11981
11982
  const {config, correctness, disabled, view, teacherInstructions, rationale, feedback, animationsDisabled, printMode, alwaysShowCorrect, language} = model || ({});
11982
11983
  if (!config) {
11983
11984
  return null;
@@ -11997,7 +11998,7 @@ class Main extends React$1.Component {
11997
11998
  __self: this,
11998
11999
  __source: {
11999
12000
  fileName: _jsxFileName,
12000
- lineNumber: 568
12001
+ lineNumber: 569
12001
12002
  }
12002
12003
  }, React$1.createElement(mq.Static, {
12003
12004
  className: classes.static,
@@ -12011,7 +12012,7 @@ class Main extends React$1.Component {
12011
12012
  __self: this,
12012
12013
  __source: {
12013
12014
  fileName: _jsxFileName,
12014
- lineNumber: 569
12015
+ lineNumber: 570
12015
12016
  }
12016
12017
  }));
12017
12018
  const midContent = React$1.createElement('div', {
@@ -12019,14 +12020,14 @@ class Main extends React$1.Component {
12019
12020
  __self: this,
12020
12021
  __source: {
12021
12022
  fileName: _jsxFileName,
12022
- lineNumber: 583
12023
+ lineNumber: 584
12023
12024
  }
12024
12025
  }, mode === 'gather' && React$1.createElement('h2', {
12025
12026
  className: classes.srOnly,
12026
12027
  __self: this,
12027
12028
  __source: {
12028
12029
  fileName: _jsxFileName,
12029
- lineNumber: 584
12030
+ lineNumber: 585
12030
12031
  }
12031
12032
  }, "Math Equation Response Question"), viewMode && teacherInstructions && hasText(teacherInstructions) && (!animationsDisabled ? React$1.createElement(Collapsible, {
12032
12033
  className: classes.collapsible,
@@ -12037,7 +12038,7 @@ class Main extends React$1.Component {
12037
12038
  __self: this,
12038
12039
  __source: {
12039
12040
  fileName: _jsxFileName,
12040
- lineNumber: 590
12041
+ lineNumber: 591
12041
12042
  }
12042
12043
  }, React$1.createElement('div', {
12043
12044
  dangerouslySetInnerHTML: {
@@ -12046,7 +12047,7 @@ class Main extends React$1.Component {
12046
12047
  __self: this,
12047
12048
  __source: {
12048
12049
  fileName: _jsxFileName,
12049
- lineNumber: 594
12050
+ lineNumber: 595
12050
12051
  }
12051
12052
  })) : React$1.createElement('div', {
12052
12053
  dangerouslySetInnerHTML: {
@@ -12055,28 +12056,28 @@ class Main extends React$1.Component {
12055
12056
  __self: this,
12056
12057
  __source: {
12057
12058
  fileName: _jsxFileName,
12058
- lineNumber: 597
12059
+ lineNumber: 598
12059
12060
  }
12060
12061
  })), prompt && React$1.createElement('div', {
12061
12062
  className: classes.promptContainer,
12062
12063
  __self: this,
12063
12064
  __source: {
12064
12065
  fileName: _jsxFileName,
12065
- lineNumber: 601
12066
+ lineNumber: 602
12066
12067
  }
12067
12068
  }, React$1.createElement(PreviewPrompt, {
12068
12069
  prompt: prompt,
12069
12070
  __self: this,
12070
12071
  __source: {
12071
12072
  fileName: _jsxFileName,
12072
- lineNumber: 602
12073
+ lineNumber: 603
12073
12074
  }
12074
12075
  })), studentPrintMode ? printView : React$1.createElement(Readable, {
12075
12076
  false: true,
12076
12077
  __self: this,
12077
12078
  __source: {
12078
12079
  fileName: _jsxFileName,
12079
- lineNumber: 609
12080
+ lineNumber: 610
12080
12081
  }
12081
12082
  }, React$1.createElement('div', {
12082
12083
  className: classes.inputAndKeypadContainer,
@@ -12084,7 +12085,7 @@ class Main extends React$1.Component {
12084
12085
  __self: this,
12085
12086
  __source: {
12086
12087
  fileName: _jsxFileName,
12087
- lineNumber: 610
12088
+ lineNumber: 611
12088
12089
  }
12089
12090
  }, responseType === ResponseTypes.simple && React$1.createElement(SimpleQuestionBlock, {
12090
12091
  onSimpleResponseChange: this.onSimpleResponseChange,
@@ -12097,9 +12098,10 @@ class Main extends React$1.Component {
12097
12098
  __self: this,
12098
12099
  __source: {
12099
12100
  fileName: _jsxFileName,
12100
- lineNumber: 612
12101
+ lineNumber: 613
12101
12102
  }
12102
12103
  }), responseType === ResponseTypes.advanced && React$1.createElement('div', {
12104
+ ref: tooltipContainerRef,
12103
12105
  className: cx(classes.expression, {
12104
12106
  [classes.incorrect]: !emptyResponse && !correct && !showCorrect,
12105
12107
  [classes.correct]: !emptyResponse && (correct || showCorrect),
@@ -12110,7 +12112,7 @@ class Main extends React$1.Component {
12110
12112
  __self: this,
12111
12113
  __source: {
12112
12114
  fileName: _jsxFileName,
12113
- lineNumber: 624
12115
+ lineNumber: 625
12114
12116
  }
12115
12117
  }, React$1.createElement(Tooltip, {
12116
12118
  ref: ref => this.setTooltipRef(ref),
@@ -12121,6 +12123,9 @@ class Main extends React$1.Component {
12121
12123
  tooltip: classes.keypadTooltip,
12122
12124
  popper: classes.keypadTooltipPopper
12123
12125
  },
12126
+ PopperProps: {
12127
+ container: _optionalChain([tooltipContainerRef, 'optionalAccess', _18 => _18.current]) || undefined
12128
+ },
12124
12129
  title: Object.keys(session.answers).map(answerId => answerId === activeAnswerBlock && !(showCorrect || disabled) && React$1.createElement('div', {
12125
12130
  'data-keypad': true,
12126
12131
  key: answerId,
@@ -12131,7 +12136,7 @@ class Main extends React$1.Component {
12131
12136
  __self: this,
12132
12137
  __source: {
12133
12138
  fileName: _jsxFileName,
12134
- lineNumber: 645
12139
+ lineNumber: 650
12135
12140
  }
12136
12141
  }, React$1.createElement(HorizontalKeypad, {
12137
12142
  additionalKeys: additionalKeys,
@@ -12140,13 +12145,13 @@ class Main extends React$1.Component {
12140
12145
  __self: this,
12141
12146
  __source: {
12142
12147
  fileName: _jsxFileName,
12143
- lineNumber: 654
12148
+ lineNumber: 659
12144
12149
  }
12145
12150
  })) || null),
12146
12151
  __self: this,
12147
12152
  __source: {
12148
12153
  fileName: _jsxFileName,
12149
- lineNumber: 633
12154
+ lineNumber: 635
12150
12155
  }
12151
12156
  }, React$1.createElement(mq.Static, {
12152
12157
  className: classes.static,
@@ -12160,7 +12165,7 @@ class Main extends React$1.Component {
12160
12165
  __self: this,
12161
12166
  __source: {
12162
12167
  fileName: _jsxFileName,
12163
- lineNumber: 664
12168
+ lineNumber: 669
12164
12169
  }
12165
12170
  }))))), viewMode && displayNote && React$1.createElement('div', {
12166
12171
  className: classes.note,
@@ -12170,7 +12175,7 @@ class Main extends React$1.Component {
12170
12175
  __self: this,
12171
12176
  __source: {
12172
12177
  fileName: _jsxFileName,
12173
- lineNumber: 682
12178
+ lineNumber: 687
12174
12179
  }
12175
12180
  }), viewMode && rationale && hasText(rationale) && (!animationsDisabled ? React$1.createElement(Collapsible, {
12176
12181
  labels: {
@@ -12180,7 +12185,7 @@ class Main extends React$1.Component {
12180
12185
  __self: this,
12181
12186
  __source: {
12182
12187
  fileName: _jsxFileName,
12183
- lineNumber: 689
12188
+ lineNumber: 694
12184
12189
  }
12185
12190
  }, React$1.createElement('div', {
12186
12191
  dangerouslySetInnerHTML: {
@@ -12189,7 +12194,7 @@ class Main extends React$1.Component {
12189
12194
  __self: this,
12190
12195
  __source: {
12191
12196
  fileName: _jsxFileName,
12192
- lineNumber: 690
12197
+ lineNumber: 695
12193
12198
  }
12194
12199
  })) : React$1.createElement('div', {
12195
12200
  dangerouslySetInnerHTML: {
@@ -12198,7 +12203,7 @@ class Main extends React$1.Component {
12198
12203
  __self: this,
12199
12204
  __source: {
12200
12205
  fileName: _jsxFileName,
12201
- lineNumber: 693
12206
+ lineNumber: 698
12202
12207
  }
12203
12208
  })));
12204
12209
  if (tooltipModeEnabled && (showCorrectAnswerToggle || teacherInstructions && hasText(teacherInstructions) || rationale && hasText(rationale) || feedback)) {
@@ -12213,14 +12218,14 @@ class Main extends React$1.Component {
12213
12218
  __self: this,
12214
12219
  __source: {
12215
12220
  fileName: _jsxFileName,
12216
- lineNumber: 714
12221
+ lineNumber: 719
12217
12222
  }
12218
12223
  }, React$1.createElement('div', {
12219
12224
  className: classes.main,
12220
12225
  __self: this,
12221
12226
  __source: {
12222
12227
  fileName: _jsxFileName,
12223
- lineNumber: 715
12228
+ lineNumber: 720
12224
12229
  }
12225
12230
  }, showCorrectAnswerToggle && React$1.createElement(CorrectAnswerToggle, {
12226
12231
  language: language,
@@ -12231,7 +12236,7 @@ class Main extends React$1.Component {
12231
12236
  __self: this,
12232
12237
  __source: {
12233
12238
  fileName: _jsxFileName,
12234
- lineNumber: 717
12239
+ lineNumber: 722
12235
12240
  }
12236
12241
  })), teacherInstructions && hasText(teacherInstructions) && React$1.createElement(Collapsible, {
12237
12242
  className: classes.collapsible,
@@ -12243,14 +12248,14 @@ class Main extends React$1.Component {
12243
12248
  __self: this,
12244
12249
  __source: {
12245
12250
  fileName: _jsxFileName,
12246
- lineNumber: 728
12251
+ lineNumber: 733
12247
12252
  }
12248
12253
  }, React$1.createElement(PreviewPrompt, {
12249
12254
  prompt: teacherInstructions,
12250
12255
  __self: this,
12251
12256
  __source: {
12252
12257
  fileName: _jsxFileName,
12253
- lineNumber: 736
12258
+ lineNumber: 741
12254
12259
  }
12255
12260
  })), displayNote && hasText(note) && React$1.createElement(Collapsible, {
12256
12261
  className: classes.collapsible,
@@ -12266,14 +12271,14 @@ class Main extends React$1.Component {
12266
12271
  __self: this,
12267
12272
  __source: {
12268
12273
  fileName: _jsxFileName,
12269
- lineNumber: 740
12274
+ lineNumber: 745
12270
12275
  }
12271
12276
  }, React$1.createElement(PreviewPrompt, {
12272
12277
  prompt: note,
12273
12278
  __self: this,
12274
12279
  __source: {
12275
12280
  fileName: _jsxFileName,
12276
- lineNumber: 748
12281
+ lineNumber: 753
12277
12282
  }
12278
12283
  })), rationale && hasText(rationale) && React$1.createElement(Collapsible, {
12279
12284
  className: classes.collapsible,
@@ -12285,14 +12290,14 @@ class Main extends React$1.Component {
12285
12290
  __self: this,
12286
12291
  __source: {
12287
12292
  fileName: _jsxFileName,
12288
- lineNumber: 753
12293
+ lineNumber: 758
12289
12294
  }
12290
12295
  }, React$1.createElement(PreviewPrompt, {
12291
12296
  prompt: rationale,
12292
12297
  __self: this,
12293
12298
  __source: {
12294
12299
  fileName: _jsxFileName,
12295
- lineNumber: 761
12300
+ lineNumber: 766
12296
12301
  }
12297
12302
  })), feedback && React$1.createElement(Feedback, {
12298
12303
  correctness: correctness.correctness,
@@ -12300,13 +12305,13 @@ class Main extends React$1.Component {
12300
12305
  __self: this,
12301
12306
  __source: {
12302
12307
  fileName: _jsxFileName,
12303
- lineNumber: 765
12308
+ lineNumber: 770
12304
12309
  }
12305
12310
  })),
12306
12311
  __self: this,
12307
12312
  __source: {
12308
12313
  fileName: _jsxFileName,
12309
- lineNumber: 706
12314
+ lineNumber: 711
12310
12315
  }
12311
12316
  }, React$1.createElement('div', {
12312
12317
  className: classes.mainContainer,
@@ -12314,7 +12319,7 @@ class Main extends React$1.Component {
12314
12319
  __self: this,
12315
12320
  __source: {
12316
12321
  fileName: _jsxFileName,
12317
- lineNumber: 769
12322
+ lineNumber: 774
12318
12323
  }
12319
12324
  }, midContent));
12320
12325
  }
@@ -12324,7 +12329,7 @@ class Main extends React$1.Component {
12324
12329
  __self: this,
12325
12330
  __source: {
12326
12331
  fileName: _jsxFileName,
12327
- lineNumber: 777
12332
+ lineNumber: 782
12328
12333
  }
12329
12334
  }, midContent);
12330
12335
  }
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public"
5
5
  },
6
6
  "repository": "pie-framework/pie-elements",
7
- "version": "7.26.1-next.3+945172e40",
7
+ "version": "7.27.0",
8
8
  "main": "lib/index.js",
9
9
  "description": "",
10
10
  "scripts": {
@@ -24,7 +24,7 @@
24
24
  },
25
25
  "author": "",
26
26
  "license": "ISC",
27
- "gitHead": "945172e407948052eeb136653c857d8669f48fa0",
27
+ "gitHead": "82eec35cadb6905a7ec78385b92dbc7caeee3acf",
28
28
  "module": "src/index.js",
29
29
  "exports": {
30
30
  ".": "./src/index.js",