@pie-element/math-inline 8.4.1-next.2 → 8.4.1-next.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/main.js CHANGED
@@ -86,6 +86,20 @@ function generateAdditionalKeys() {
86
86
  });
87
87
  }
88
88
 
89
+ function isChildOfCurrentPieElement(child, parent) {
90
+ var node = child;
91
+
92
+ while (node !== null) {
93
+ if (node === parent) {
94
+ return true;
95
+ }
96
+
97
+ node = node.parentNode;
98
+ }
99
+
100
+ return false;
101
+ }
102
+
89
103
  function getKeyPadWidth() {
90
104
  var additionalKeys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
91
105
  var equationEditor = arguments.length > 1 ? arguments[1] : undefined;
@@ -234,11 +248,17 @@ var Main = /*#__PURE__*/function (_React$Component) {
234
248
  }, 0);
235
249
  });
236
250
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleKeyDown", function (event, id) {
251
+ // main layout has as id the actual pie-element id
252
+ // needed this to know if the event was triggered from the actual pie-element
253
+ var config = _this.props.model.config;
254
+ var myElement = document.getElementById(config.id);
255
+ var isTrigerredFromActualPieElement = true;
256
+ isTrigerredFromActualPieElement = isChildOfCurrentPieElement(event.target, myElement);
237
257
  var isAnswerInputFocused = document.activeElement.getAttribute('aria-label') === 'Enter answer.';
238
258
  var isClickOrTouchEvent = event.type === 'click' || event.type === 'touchstart';
239
259
 
240
260
  if (isAnswerInputFocused && (event.key === 'ArrowDown' || isClickOrTouchEvent)) {
241
- if (_this.state.activeAnswerBlock !== id) {
261
+ if (_this.state.activeAnswerBlock !== id && isTrigerredFromActualPieElement) {
242
262
  _this.cleanupKeyDownListener();
243
263
 
244
264
  _this.setState({
@@ -376,7 +396,11 @@ var Main = /*#__PURE__*/function (_React$Component) {
376
396
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onBlur", function (e) {
377
397
  var _ref3 = e || {},
378
398
  relatedTarget = _ref3.relatedTarget,
379
- currentTarget = _ref3.currentTarget;
399
+ currentTarget = _ref3.currentTarget; // our keypad is in tooltip
400
+ // in this way we see if event was triggered from the keypad
401
+
402
+
403
+ var isKeypadOpen = currentTarget && currentTarget.closest('[role=tooltip]');
380
404
 
381
405
  function getParentWithRoleTooltip(element) {
382
406
  var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
@@ -412,9 +436,12 @@ var Main = /*#__PURE__*/function (_React$Component) {
412
436
  var childWithDataKeypad = parentWithTooltipRole ? getDeepChildDataKeypad(parentWithTooltipRole) : null;
413
437
 
414
438
  if (!relatedTarget || !currentTarget || !(childWithDataKeypad !== null && childWithDataKeypad !== void 0 && childWithDataKeypad.attributes['data-keypad'])) {
415
- _this.setState({
416
- activeAnswerBlock: ''
417
- });
439
+ // if event was trigered from the keypad, avoid closing the keypad
440
+ if (!isKeypadOpen) {
441
+ _this.setState({
442
+ activeAnswerBlock: ''
443
+ });
444
+ }
418
445
  } // else {
419
446
  // // Just for debugging purpose:
420
447
  // console.log('\n\nNew childWithDataKeypad', childWithDataKeypad);
@@ -641,6 +668,7 @@ var Main = /*#__PURE__*/function (_React$Component) {
641
668
  responseType = _ref6.responseType,
642
669
  equationEditor = _ref6.equationEditor,
643
670
  customKeys = _ref6.customKeys,
671
+ id = _ref6.id,
644
672
  _ref6$env = _ref6.env;
645
673
 
646
674
  _ref6$env = _ref6$env === void 0 ? {} : _ref6$env;
@@ -781,7 +809,8 @@ var Main = /*#__PURE__*/function (_React$Component) {
781
809
 
782
810
  if (tooltipModeEnabled && (showCorrectAnswerToggle || teacherInstructions && (0, _renderUi.hasText)(teacherInstructions) || rationale && (0, _renderUi.hasText)(rationale) || feedback)) {
783
811
  return /*#__PURE__*/_react["default"].createElement(_renderUi.UiLayout, {
784
- extraCSSRules: extraCSSRules
812
+ extraCSSRules: extraCSSRules,
813
+ id: id
785
814
  }, /*#__PURE__*/_react["default"].createElement(_Tooltip["default"], {
786
815
  interactive: true,
787
816
  enterTouchDelay: 0,
@@ -841,6 +870,7 @@ var Main = /*#__PURE__*/function (_React$Component) {
841
870
  }
842
871
 
843
872
  return /*#__PURE__*/_react["default"].createElement(_renderUi.UiLayout, {
873
+ id: id,
844
874
  extraCSSRules: extraCSSRules,
845
875
  className: classes.mainContainer,
846
876
  ref: function ref(r) {
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","activeAnswerBlock","cleanupKeyDownListener","setState","onSubFieldFocus","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","ref","div","firstChild","correctness","extraCSSRules","teacherInstructions","rationale","feedback","animationsDisabled","showNote","prompt","customKeys","role","displayNote","emptyResponse","showCorrectAnswerToggle","tooltipModeEnabled","staticLatex","viewMode","studentPrintMode","printView","printContainer","subFieldChanged","getFieldName","setInput","onBlur","midContent","main","collapsible","hidden","visible","__html","promptContainer","inputAndKeypadContainer","ResponseTypes","simple","onSimpleResponseChange","advanced","showCorrectness","correctAnswerShown","printCorrect","setTooltipRef","tooltip","keypadTooltip","popper","keypadTooltipPopper","container","current","undefined","placement","modifiers","preventOverflow","enabled","boundariesElement","flip","responseContainer","width","onClick","tooltipPopper","toggle","toggleShowCorrect","mainContainer","r","domNode","ReactDOM","findDOMNode","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, UiLayout } from '@pie-lib/pie-toolbox/render-ui';\nimport { renderMath } from '@pie-lib/pie-toolbox/math-rendering';\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';\nimport ReactDOM from 'react-dom';\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 if (this.state.activeAnswerBlock !== id) {\n this.cleanupKeyDownListener();\n this.setState({ activeAnswerBlock: id });\n this.onSubFieldFocus(id)\n }\n\n if (event.key === 'ArrowDown') {\n this.focusFirstKeypadElement();\n }\n } else if ( 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 this.handleEvent = handleEvent;\n\n document.addEventListener('keydown', handleEvent);\n document.addEventListener('click', handleEvent);\n document.addEventListener('touchstart', handleEvent);\n };\n\n cleanupKeyDownListener = () => {\n if (this.handleEvent) {\n document.removeEventListener('keydown', this.handleEvent);\n document.removeEventListener('click', this.handleEvent);\n document.removeEventListener('touchstart', this.handleEvent);\n this.handleEvent = null;\n }\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 extraCSSRules,\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 placement: 'bottom-start',\n modifiers: {\n preventOverflow: {\n enabled: true,\n boundariesElement: 'body',\n },\n flip: {\n enabled: false,\n },\n },\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 <UiLayout extraCSSRules={extraCSSRules}>\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 </UiLayout>\n );\n }\n\n return (\n <UiLayout extraCSSRules={extraCSSRules} className={classes.mainContainer} ref={(r) => {\n // eslint-disable-next-line react/no-find-dom-node\n const domNode = ReactDOM.findDOMNode(r);\n\n this.root = domNode || this.root;\n }}>\n {midContent}\n </UiLayout>\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","isChildOfCurrentPieElement","child","parent","node","parentNode","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","closest","instructionsElement","document","createElement","id","className","srOnly","insertBefore","setTimeout","keypadElement","firstButton","focus","event","myElement","getElementById","isTrigerredFromActualPieElement","target","isAnswerInputFocused","activeElement","getAttribute","isClickOrTouchEvent","type","activeAnswerBlock","cleanupKeyDownListener","setState","onSubFieldFocus","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","isKeypadOpen","getParentWithRoleTooltip","element","depth","offsetParent","getDeepChildDataKeypad","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","ref","div","firstChild","correctness","extraCSSRules","teacherInstructions","rationale","feedback","animationsDisabled","showNote","prompt","customKeys","role","displayNote","emptyResponse","showCorrectAnswerToggle","tooltipModeEnabled","staticLatex","viewMode","studentPrintMode","printView","printContainer","subFieldChanged","getFieldName","setInput","onBlur","midContent","main","collapsible","hidden","visible","__html","promptContainer","inputAndKeypadContainer","ResponseTypes","simple","onSimpleResponseChange","advanced","showCorrectness","correctAnswerShown","printCorrect","setTooltipRef","tooltip","keypadTooltip","popper","keypadTooltipPopper","container","current","undefined","placement","modifiers","preventOverflow","enabled","boundariesElement","flip","responseContainer","width","onClick","tooltipPopper","toggle","toggleShowCorrect","mainContainer","r","domNode","ReactDOM","findDOMNode","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, UiLayout } from '@pie-lib/pie-toolbox/render-ui';\nimport { renderMath } from '@pie-lib/pie-toolbox/math-rendering';\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';\nimport ReactDOM from 'react-dom';\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 isChildOfCurrentPieElement(child, parent) {\n let node = child;\n while (node !== null) {\n if (node === parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\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 // main layout has as id the actual pie-element id\n // needed this to know if the event was triggered from the actual pie-element\n const { config } = this.props.model;\n const myElement = document.getElementById(config.id);\n let isTrigerredFromActualPieElement = true;\n isTrigerredFromActualPieElement = isChildOfCurrentPieElement(event.target, myElement);\n\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 if (this.state.activeAnswerBlock !== id && isTrigerredFromActualPieElement) {\n this.cleanupKeyDownListener();\n this.setState({ activeAnswerBlock: id });\n this.onSubFieldFocus(id);\n }\n\n if (event.key === 'ArrowDown') {\n this.focusFirstKeypadElement();\n }\n } else if (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 this.handleEvent = handleEvent;\n\n document.addEventListener('keydown', handleEvent);\n document.addEventListener('click', handleEvent);\n document.addEventListener('touchstart', handleEvent);\n };\n\n cleanupKeyDownListener = () => {\n if (this.handleEvent) {\n document.removeEventListener('keydown', this.handleEvent);\n document.removeEventListener('click', this.handleEvent);\n document.removeEventListener('touchstart', this.handleEvent);\n this.handleEvent = null;\n }\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 // our keypad is in tooltip\n // in this way we see if event was triggered from the keypad\n const isKeypadOpen = currentTarget && currentTarget.closest('[role=tooltip]');\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 // if event was trigered from the keypad, avoid closing the keypad\n if (!isKeypadOpen) {\n this.setState({ activeAnswerBlock: '' });\n }\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 extraCSSRules,\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 id,\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 placement: 'bottom-start',\n modifiers: {\n preventOverflow: {\n enabled: true,\n boundariesElement: 'body',\n },\n flip: {\n enabled: false,\n },\n },\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 <UiLayout extraCSSRules={extraCSSRules} id={id}>\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 </UiLayout>\n );\n }\n\n return (\n <UiLayout\n id={id}\n extraCSSRules={extraCSSRules}\n className={classes.mainContainer}\n ref={(r) => {\n // eslint-disable-next-line react/no-find-dom-node\n const domNode = ReactDOM.findDOMNode(r);\n\n this.root = domNode || this.root;\n }}\n >\n {midContent}\n </UiLayout>\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,4 +1,4 @@
1
- import {_dll_react, _dll_prop_types, _dll_classnames, _dll_react_dom, _dll_lodash, _dll_pie_framework__mathquill, _dll_debug} from "../../../@pie-lib/pie-toolbox-math-rendering-module@3.1.1/module/index.js";
1
+ import {_dll_react, _dll_prop_types, _dll_classnames, _dll_react_dom, _dll_lodash, _dll_pie_framework__mathquill, _dll_debug} from "../../../@pie-lib/pie-toolbox-math-rendering-module@3.2.0/module/index.js";
2
2
  import {_dll_pie_lib__pie_toolbox_config_ui, _dll_pie_lib__pie_toolbox_math_toolbar, _dll_pie_lib__pie_toolbox_render_ui, _dll_pie_lib__pie_toolbox_editable_html} from "../../../@pie-lib/pie-toolbox-module@5.8.1/module/index.js";
3
3
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
4
4
  function getDefaultExportFromCjs(x) {
package/module/element.js CHANGED
@@ -1,4 +1,4 @@
1
- import {_dll_react, _dll_prop_types, _dll_classnames, _dll_react_dom, _dll_pie_lib__pie_toolbox_math_rendering, _dll_lodash, _dll_pie_framework__mathquill, _dll_debug} from "../../../@pie-lib/pie-toolbox-math-rendering-module@3.1.1/module/index.js";
1
+ import {_dll_react, _dll_prop_types, _dll_classnames, _dll_react_dom, _dll_pie_lib__pie_toolbox_math_rendering, _dll_lodash, _dll_pie_framework__mathquill, _dll_debug} from "../../../@pie-lib/pie-toolbox-math-rendering-module@3.2.0/module/index.js";
2
2
  import {_dll_pie_lib__pie_toolbox_math_toolbar, _dll_pie_lib__pie_toolbox_math_input, _dll_pie_lib__pie_toolbox_render_ui, _dll_pie_lib__pie_toolbox_correct_answer_toggle} from "../../../@pie-lib/pie-toolbox-module@5.8.1/module/index.js";
3
3
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
4
4
  function getDefaultExportFromCjs(x) {
@@ -11837,6 +11837,16 @@ function generateAdditionalKeys(keyData = []) {
11837
11837
  label: key
11838
11838
  }));
11839
11839
  }
11840
+ function isChildOfCurrentPieElement(child, parent) {
11841
+ let node = child;
11842
+ while (node !== null) {
11843
+ if (node === parent) {
11844
+ return true;
11845
+ }
11846
+ node = node.parentNode;
11847
+ }
11848
+ return false;
11849
+ }
11840
11850
  function getKeyPadWidth(additionalKeys = [], equationEditor) {
11841
11851
  return Math.floor(additionalKeys.length / 5) * 30 + (equationEditor === 'miscellaneous' ? 600 : 500);
11842
11852
  }
@@ -12062,10 +12072,14 @@ class Main extends React$1.Component {
12062
12072
  }
12063
12073
  __init4() {
12064
12074
  this.handleKeyDown = (event, id) => {
12075
+ const {config} = this.props.model;
12076
+ const myElement = document.getElementById(config.id);
12077
+ let isTrigerredFromActualPieElement = true;
12078
+ isTrigerredFromActualPieElement = isChildOfCurrentPieElement(event.target, myElement);
12065
12079
  const isAnswerInputFocused = document.activeElement.getAttribute('aria-label') === 'Enter answer.';
12066
12080
  const isClickOrTouchEvent = event.type === 'click' || event.type === 'touchstart';
12067
12081
  if (isAnswerInputFocused && (event.key === 'ArrowDown' || isClickOrTouchEvent)) {
12068
- if (this.state.activeAnswerBlock !== id) {
12082
+ if (this.state.activeAnswerBlock !== id && isTrigerredFromActualPieElement) {
12069
12083
  this.cleanupKeyDownListener();
12070
12084
  this.setState({
12071
12085
  activeAnswerBlock: id
@@ -12221,6 +12235,7 @@ class Main extends React$1.Component {
12221
12235
  __init16() {
12222
12236
  this.onBlur = e => {
12223
12237
  const {relatedTarget, currentTarget} = e || ({});
12238
+ const isKeypadOpen = currentTarget && currentTarget.closest('[role=tooltip]');
12224
12239
  function getParentWithRoleTooltip(element, depth = 0) {
12225
12240
  if (!element || depth >= 16) return null;
12226
12241
  const parent = element.offsetParent;
@@ -12242,9 +12257,11 @@ class Main extends React$1.Component {
12242
12257
  const parentWithTooltipRole = getParentWithRoleTooltip(relatedTarget);
12243
12258
  const childWithDataKeypad = parentWithTooltipRole ? getDeepChildDataKeypad(parentWithTooltipRole) : null;
12244
12259
  if (!relatedTarget || !currentTarget || !_optionalChain([childWithDataKeypad, 'optionalAccess', _16 => _16.attributes, 'access', _17 => _17['data-keypad']])) {
12245
- this.setState({
12246
- activeAnswerBlock: ''
12247
- });
12260
+ if (!isKeypadOpen) {
12261
+ this.setState({
12262
+ activeAnswerBlock: ''
12263
+ });
12264
+ }
12248
12265
  }
12249
12266
  };
12250
12267
  }
@@ -12266,7 +12283,7 @@ class Main extends React$1.Component {
12266
12283
  if (!config) {
12267
12284
  return null;
12268
12285
  }
12269
- const {showNote, note, prompt, responses, responseType, equationEditor, customKeys, env: {mode, role} = {}} = config || ({});
12286
+ const {showNote, note, prompt, responses, responseType, equationEditor, customKeys, id, env: {mode, role} = {}} = config || ({});
12270
12287
  const displayNote = (showCorrect || mode === 'view' && role === 'instructor') && showNote && note;
12271
12288
  const emptyResponse = isEmpty(responses);
12272
12289
  const showCorrectAnswerToggle = !emptyResponse && correctness && correctness.correctness !== 'correct';
@@ -12281,7 +12298,7 @@ class Main extends React$1.Component {
12281
12298
  __self: this,
12282
12299
  __source: {
12283
12300
  fileName: _jsxFileName,
12284
- lineNumber: 578
12301
+ lineNumber: 604
12285
12302
  }
12286
12303
  }, React$1.createElement(mq.Static, {
12287
12304
  className: classes.static,
@@ -12295,7 +12312,7 @@ class Main extends React$1.Component {
12295
12312
  __self: this,
12296
12313
  __source: {
12297
12314
  fileName: _jsxFileName,
12298
- lineNumber: 579
12315
+ lineNumber: 605
12299
12316
  }
12300
12317
  }));
12301
12318
  const midContent = React$1.createElement('div', {
@@ -12303,14 +12320,14 @@ class Main extends React$1.Component {
12303
12320
  __self: this,
12304
12321
  __source: {
12305
12322
  fileName: _jsxFileName,
12306
- lineNumber: 593
12323
+ lineNumber: 619
12307
12324
  }
12308
12325
  }, mode === 'gather' && React$1.createElement('h2', {
12309
12326
  className: classes.srOnly,
12310
12327
  __self: this,
12311
12328
  __source: {
12312
12329
  fileName: _jsxFileName,
12313
- lineNumber: 594
12330
+ lineNumber: 620
12314
12331
  }
12315
12332
  }, "Math Equation Response Question"), viewMode && teacherInstructions && hasText(teacherInstructions) && (!animationsDisabled ? React$1.createElement(Collapsible, {
12316
12333
  className: classes.collapsible,
@@ -12321,7 +12338,7 @@ class Main extends React$1.Component {
12321
12338
  __self: this,
12322
12339
  __source: {
12323
12340
  fileName: _jsxFileName,
12324
- lineNumber: 600
12341
+ lineNumber: 626
12325
12342
  }
12326
12343
  }, React$1.createElement('div', {
12327
12344
  dangerouslySetInnerHTML: {
@@ -12330,7 +12347,7 @@ class Main extends React$1.Component {
12330
12347
  __self: this,
12331
12348
  __source: {
12332
12349
  fileName: _jsxFileName,
12333
- lineNumber: 604
12350
+ lineNumber: 630
12334
12351
  }
12335
12352
  })) : React$1.createElement('div', {
12336
12353
  dangerouslySetInnerHTML: {
@@ -12339,28 +12356,28 @@ class Main extends React$1.Component {
12339
12356
  __self: this,
12340
12357
  __source: {
12341
12358
  fileName: _jsxFileName,
12342
- lineNumber: 607
12359
+ lineNumber: 633
12343
12360
  }
12344
12361
  })), prompt && React$1.createElement('div', {
12345
12362
  className: classes.promptContainer,
12346
12363
  __self: this,
12347
12364
  __source: {
12348
12365
  fileName: _jsxFileName,
12349
- lineNumber: 611
12366
+ lineNumber: 637
12350
12367
  }
12351
12368
  }, React$1.createElement(PreviewPrompt, {
12352
12369
  prompt: prompt,
12353
12370
  __self: this,
12354
12371
  __source: {
12355
12372
  fileName: _jsxFileName,
12356
- lineNumber: 612
12373
+ lineNumber: 638
12357
12374
  }
12358
12375
  })), studentPrintMode ? printView : React$1.createElement(Readable, {
12359
12376
  false: true,
12360
12377
  __self: this,
12361
12378
  __source: {
12362
12379
  fileName: _jsxFileName,
12363
- lineNumber: 619
12380
+ lineNumber: 645
12364
12381
  }
12365
12382
  }, React$1.createElement('div', {
12366
12383
  className: classes.inputAndKeypadContainer,
@@ -12368,7 +12385,7 @@ class Main extends React$1.Component {
12368
12385
  __self: this,
12369
12386
  __source: {
12370
12387
  fileName: _jsxFileName,
12371
- lineNumber: 620
12388
+ lineNumber: 646
12372
12389
  }
12373
12390
  }, responseType === ResponseTypes.simple && React$1.createElement(SimpleQuestionBlock, {
12374
12391
  onSimpleResponseChange: this.onSimpleResponseChange,
@@ -12381,7 +12398,7 @@ class Main extends React$1.Component {
12381
12398
  __self: this,
12382
12399
  __source: {
12383
12400
  fileName: _jsxFileName,
12384
- lineNumber: 622
12401
+ lineNumber: 648
12385
12402
  }
12386
12403
  }), responseType === ResponseTypes.advanced && React$1.createElement('div', {
12387
12404
  ref: tooltipContainerRef,
@@ -12395,7 +12412,7 @@ class Main extends React$1.Component {
12395
12412
  __self: this,
12396
12413
  __source: {
12397
12414
  fileName: _jsxFileName,
12398
- lineNumber: 634
12415
+ lineNumber: 660
12399
12416
  }
12400
12417
  }, React$1.createElement(Tooltip, {
12401
12418
  ref: ref => this.setTooltipRef(ref),
@@ -12429,7 +12446,7 @@ class Main extends React$1.Component {
12429
12446
  __self: this,
12430
12447
  __source: {
12431
12448
  fileName: _jsxFileName,
12432
- lineNumber: 669
12449
+ lineNumber: 695
12433
12450
  }
12434
12451
  }, React$1.createElement(HorizontalKeypad, {
12435
12452
  additionalKeys: additionalKeys,
@@ -12438,13 +12455,13 @@ class Main extends React$1.Component {
12438
12455
  __self: this,
12439
12456
  __source: {
12440
12457
  fileName: _jsxFileName,
12441
- lineNumber: 678
12458
+ lineNumber: 704
12442
12459
  }
12443
12460
  })) || null),
12444
12461
  __self: this,
12445
12462
  __source: {
12446
12463
  fileName: _jsxFileName,
12447
- lineNumber: 644
12464
+ lineNumber: 670
12448
12465
  }
12449
12466
  }, React$1.createElement(mq.Static, {
12450
12467
  className: classes.static,
@@ -12458,7 +12475,7 @@ class Main extends React$1.Component {
12458
12475
  __self: this,
12459
12476
  __source: {
12460
12477
  fileName: _jsxFileName,
12461
- lineNumber: 688
12478
+ lineNumber: 714
12462
12479
  }
12463
12480
  }))))), viewMode && displayNote && React$1.createElement('div', {
12464
12481
  className: classes.note,
@@ -12468,7 +12485,7 @@ class Main extends React$1.Component {
12468
12485
  __self: this,
12469
12486
  __source: {
12470
12487
  fileName: _jsxFileName,
12471
- lineNumber: 706
12488
+ lineNumber: 732
12472
12489
  }
12473
12490
  }), viewMode && rationale && hasText(rationale) && (!animationsDisabled ? React$1.createElement(Collapsible, {
12474
12491
  labels: {
@@ -12478,7 +12495,7 @@ class Main extends React$1.Component {
12478
12495
  __self: this,
12479
12496
  __source: {
12480
12497
  fileName: _jsxFileName,
12481
- lineNumber: 713
12498
+ lineNumber: 739
12482
12499
  }
12483
12500
  }, React$1.createElement('div', {
12484
12501
  dangerouslySetInnerHTML: {
@@ -12487,7 +12504,7 @@ class Main extends React$1.Component {
12487
12504
  __self: this,
12488
12505
  __source: {
12489
12506
  fileName: _jsxFileName,
12490
- lineNumber: 714
12507
+ lineNumber: 740
12491
12508
  }
12492
12509
  })) : React$1.createElement('div', {
12493
12510
  dangerouslySetInnerHTML: {
@@ -12496,16 +12513,17 @@ class Main extends React$1.Component {
12496
12513
  __self: this,
12497
12514
  __source: {
12498
12515
  fileName: _jsxFileName,
12499
- lineNumber: 717
12516
+ lineNumber: 743
12500
12517
  }
12501
12518
  })));
12502
12519
  if (tooltipModeEnabled && (showCorrectAnswerToggle || teacherInstructions && hasText(teacherInstructions) || rationale && hasText(rationale) || feedback)) {
12503
12520
  return React$1.createElement(UiLayout, {
12504
12521
  extraCSSRules: extraCSSRules,
12522
+ id: id,
12505
12523
  __self: this,
12506
12524
  __source: {
12507
12525
  fileName: _jsxFileName,
12508
- lineNumber: 730
12526
+ lineNumber: 756
12509
12527
  }
12510
12528
  }, React$1.createElement(Tooltip, {
12511
12529
  interactive: true,
@@ -12518,14 +12536,14 @@ class Main extends React$1.Component {
12518
12536
  __self: this,
12519
12537
  __source: {
12520
12538
  fileName: _jsxFileName,
12521
- lineNumber: 739
12539
+ lineNumber: 765
12522
12540
  }
12523
12541
  }, React$1.createElement('div', {
12524
12542
  className: classes.main,
12525
12543
  __self: this,
12526
12544
  __source: {
12527
12545
  fileName: _jsxFileName,
12528
- lineNumber: 740
12546
+ lineNumber: 766
12529
12547
  }
12530
12548
  }, showCorrectAnswerToggle && React$1.createElement(CorrectAnswerToggle, {
12531
12549
  language: language,
@@ -12536,7 +12554,7 @@ class Main extends React$1.Component {
12536
12554
  __self: this,
12537
12555
  __source: {
12538
12556
  fileName: _jsxFileName,
12539
- lineNumber: 742
12557
+ lineNumber: 768
12540
12558
  }
12541
12559
  })), teacherInstructions && hasText(teacherInstructions) && React$1.createElement(Collapsible, {
12542
12560
  className: classes.collapsible,
@@ -12548,14 +12566,14 @@ class Main extends React$1.Component {
12548
12566
  __self: this,
12549
12567
  __source: {
12550
12568
  fileName: _jsxFileName,
12551
- lineNumber: 753
12569
+ lineNumber: 779
12552
12570
  }
12553
12571
  }, React$1.createElement(PreviewPrompt, {
12554
12572
  prompt: teacherInstructions,
12555
12573
  __self: this,
12556
12574
  __source: {
12557
12575
  fileName: _jsxFileName,
12558
- lineNumber: 761
12576
+ lineNumber: 787
12559
12577
  }
12560
12578
  })), displayNote && hasText(note) && React$1.createElement(Collapsible, {
12561
12579
  className: classes.collapsible,
@@ -12571,14 +12589,14 @@ class Main extends React$1.Component {
12571
12589
  __self: this,
12572
12590
  __source: {
12573
12591
  fileName: _jsxFileName,
12574
- lineNumber: 765
12592
+ lineNumber: 791
12575
12593
  }
12576
12594
  }, React$1.createElement(PreviewPrompt, {
12577
12595
  prompt: note,
12578
12596
  __self: this,
12579
12597
  __source: {
12580
12598
  fileName: _jsxFileName,
12581
- lineNumber: 773
12599
+ lineNumber: 799
12582
12600
  }
12583
12601
  })), rationale && hasText(rationale) && React$1.createElement(Collapsible, {
12584
12602
  className: classes.collapsible,
@@ -12590,14 +12608,14 @@ class Main extends React$1.Component {
12590
12608
  __self: this,
12591
12609
  __source: {
12592
12610
  fileName: _jsxFileName,
12593
- lineNumber: 778
12611
+ lineNumber: 804
12594
12612
  }
12595
12613
  }, React$1.createElement(PreviewPrompt, {
12596
12614
  prompt: rationale,
12597
12615
  __self: this,
12598
12616
  __source: {
12599
12617
  fileName: _jsxFileName,
12600
- lineNumber: 786
12618
+ lineNumber: 812
12601
12619
  }
12602
12620
  })), feedback && React$1.createElement(Feedback, {
12603
12621
  correctness: correctness.correctness,
@@ -12605,13 +12623,13 @@ class Main extends React$1.Component {
12605
12623
  __self: this,
12606
12624
  __source: {
12607
12625
  fileName: _jsxFileName,
12608
- lineNumber: 790
12626
+ lineNumber: 816
12609
12627
  }
12610
12628
  })),
12611
12629
  __self: this,
12612
12630
  __source: {
12613
12631
  fileName: _jsxFileName,
12614
- lineNumber: 731
12632
+ lineNumber: 757
12615
12633
  }
12616
12634
  }, React$1.createElement('div', {
12617
12635
  className: classes.mainContainer,
@@ -12619,11 +12637,12 @@ class Main extends React$1.Component {
12619
12637
  __self: this,
12620
12638
  __source: {
12621
12639
  fileName: _jsxFileName,
12622
- lineNumber: 794
12640
+ lineNumber: 820
12623
12641
  }
12624
12642
  }, midContent)));
12625
12643
  }
12626
12644
  return React$1.createElement(UiLayout, {
12645
+ id: id,
12627
12646
  extraCSSRules: extraCSSRules,
12628
12647
  className: classes.mainContainer,
12629
12648
  ref: r => {
@@ -12633,7 +12652,7 @@ class Main extends React$1.Component {
12633
12652
  __self: this,
12634
12653
  __source: {
12635
12654
  fileName: _jsxFileName,
12636
- lineNumber: 803
12655
+ lineNumber: 829
12637
12656
  }
12638
12657
  }, midContent);
12639
12658
  }
@@ -4,7 +4,7 @@
4
4
  "modules": [
5
5
  {
6
6
  "name": "@pie-lib/pie-toolbox-math-rendering-module",
7
- "version": "3.1.1"
7
+ "version": "3.2.0"
8
8
  },
9
9
  {
10
10
  "name": "@pie-lib/pie-toolbox-module",
package/module/print.js CHANGED
@@ -1,4 +1,4 @@
1
- import {_dll_react, _dll_prop_types, _dll_classnames, _dll_react_dom, _dll_pie_lib__pie_toolbox_math_rendering, _dll_lodash, _dll_pie_framework__mathquill, _dll_debug} from "../../../@pie-lib/pie-toolbox-math-rendering-module@3.1.1/module/index.js";
1
+ import {_dll_react, _dll_prop_types, _dll_classnames, _dll_react_dom, _dll_pie_lib__pie_toolbox_math_rendering, _dll_lodash, _dll_pie_framework__mathquill, _dll_debug} from "../../../@pie-lib/pie-toolbox-math-rendering-module@3.2.0/module/index.js";
2
2
  import {_dll_pie_lib__pie_toolbox_math_toolbar, _dll_pie_lib__pie_toolbox_math_input, _dll_pie_lib__pie_toolbox_render_ui, _dll_pie_lib__pie_toolbox_correct_answer_toggle} from "../../../@pie-lib/pie-toolbox-module@5.8.1/module/index.js";
3
3
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
4
4
  function getDefaultExportFromCjs(x) {
@@ -11574,6 +11574,16 @@ function generateAdditionalKeys(keyData = []) {
11574
11574
  label: key
11575
11575
  }));
11576
11576
  }
11577
+ function isChildOfCurrentPieElement(child, parent) {
11578
+ let node = child;
11579
+ while (node !== null) {
11580
+ if (node === parent) {
11581
+ return true;
11582
+ }
11583
+ node = node.parentNode;
11584
+ }
11585
+ return false;
11586
+ }
11577
11587
  function getKeyPadWidth(additionalKeys = [], equationEditor) {
11578
11588
  return Math.floor(additionalKeys.length / 5) * 30 + (equationEditor === 'miscellaneous' ? 600 : 500);
11579
11589
  }
@@ -11799,10 +11809,14 @@ class Main extends React$1.Component {
11799
11809
  }
11800
11810
  __init4() {
11801
11811
  this.handleKeyDown = (event, id) => {
11812
+ const {config} = this.props.model;
11813
+ const myElement = document.getElementById(config.id);
11814
+ let isTrigerredFromActualPieElement = true;
11815
+ isTrigerredFromActualPieElement = isChildOfCurrentPieElement(event.target, myElement);
11802
11816
  const isAnswerInputFocused = document.activeElement.getAttribute('aria-label') === 'Enter answer.';
11803
11817
  const isClickOrTouchEvent = event.type === 'click' || event.type === 'touchstart';
11804
11818
  if (isAnswerInputFocused && (event.key === 'ArrowDown' || isClickOrTouchEvent)) {
11805
- if (this.state.activeAnswerBlock !== id) {
11819
+ if (this.state.activeAnswerBlock !== id && isTrigerredFromActualPieElement) {
11806
11820
  this.cleanupKeyDownListener();
11807
11821
  this.setState({
11808
11822
  activeAnswerBlock: id
@@ -11958,6 +11972,7 @@ class Main extends React$1.Component {
11958
11972
  __init16() {
11959
11973
  this.onBlur = e => {
11960
11974
  const {relatedTarget, currentTarget} = e || ({});
11975
+ const isKeypadOpen = currentTarget && currentTarget.closest('[role=tooltip]');
11961
11976
  function getParentWithRoleTooltip(element, depth = 0) {
11962
11977
  if (!element || depth >= 16) return null;
11963
11978
  const parent = element.offsetParent;
@@ -11979,9 +11994,11 @@ class Main extends React$1.Component {
11979
11994
  const parentWithTooltipRole = getParentWithRoleTooltip(relatedTarget);
11980
11995
  const childWithDataKeypad = parentWithTooltipRole ? getDeepChildDataKeypad(parentWithTooltipRole) : null;
11981
11996
  if (!relatedTarget || !currentTarget || !_optionalChain([childWithDataKeypad, 'optionalAccess', _16 => _16.attributes, 'access', _17 => _17['data-keypad']])) {
11982
- this.setState({
11983
- activeAnswerBlock: ''
11984
- });
11997
+ if (!isKeypadOpen) {
11998
+ this.setState({
11999
+ activeAnswerBlock: ''
12000
+ });
12001
+ }
11985
12002
  }
11986
12003
  };
11987
12004
  }
@@ -12003,7 +12020,7 @@ class Main extends React$1.Component {
12003
12020
  if (!config) {
12004
12021
  return null;
12005
12022
  }
12006
- const {showNote, note, prompt, responses, responseType, equationEditor, customKeys, env: {mode, role} = {}} = config || ({});
12023
+ const {showNote, note, prompt, responses, responseType, equationEditor, customKeys, id, env: {mode, role} = {}} = config || ({});
12007
12024
  const displayNote = (showCorrect || mode === 'view' && role === 'instructor') && showNote && note;
12008
12025
  const emptyResponse = isEmpty(responses);
12009
12026
  const showCorrectAnswerToggle = !emptyResponse && correctness && correctness.correctness !== 'correct';
@@ -12018,7 +12035,7 @@ class Main extends React$1.Component {
12018
12035
  __self: this,
12019
12036
  __source: {
12020
12037
  fileName: _jsxFileName,
12021
- lineNumber: 578
12038
+ lineNumber: 604
12022
12039
  }
12023
12040
  }, React$1.createElement(mq.Static, {
12024
12041
  className: classes.static,
@@ -12032,7 +12049,7 @@ class Main extends React$1.Component {
12032
12049
  __self: this,
12033
12050
  __source: {
12034
12051
  fileName: _jsxFileName,
12035
- lineNumber: 579
12052
+ lineNumber: 605
12036
12053
  }
12037
12054
  }));
12038
12055
  const midContent = React$1.createElement('div', {
@@ -12040,14 +12057,14 @@ class Main extends React$1.Component {
12040
12057
  __self: this,
12041
12058
  __source: {
12042
12059
  fileName: _jsxFileName,
12043
- lineNumber: 593
12060
+ lineNumber: 619
12044
12061
  }
12045
12062
  }, mode === 'gather' && React$1.createElement('h2', {
12046
12063
  className: classes.srOnly,
12047
12064
  __self: this,
12048
12065
  __source: {
12049
12066
  fileName: _jsxFileName,
12050
- lineNumber: 594
12067
+ lineNumber: 620
12051
12068
  }
12052
12069
  }, "Math Equation Response Question"), viewMode && teacherInstructions && hasText(teacherInstructions) && (!animationsDisabled ? React$1.createElement(Collapsible, {
12053
12070
  className: classes.collapsible,
@@ -12058,7 +12075,7 @@ class Main extends React$1.Component {
12058
12075
  __self: this,
12059
12076
  __source: {
12060
12077
  fileName: _jsxFileName,
12061
- lineNumber: 600
12078
+ lineNumber: 626
12062
12079
  }
12063
12080
  }, React$1.createElement('div', {
12064
12081
  dangerouslySetInnerHTML: {
@@ -12067,7 +12084,7 @@ class Main extends React$1.Component {
12067
12084
  __self: this,
12068
12085
  __source: {
12069
12086
  fileName: _jsxFileName,
12070
- lineNumber: 604
12087
+ lineNumber: 630
12071
12088
  }
12072
12089
  })) : React$1.createElement('div', {
12073
12090
  dangerouslySetInnerHTML: {
@@ -12076,28 +12093,28 @@ class Main extends React$1.Component {
12076
12093
  __self: this,
12077
12094
  __source: {
12078
12095
  fileName: _jsxFileName,
12079
- lineNumber: 607
12096
+ lineNumber: 633
12080
12097
  }
12081
12098
  })), prompt && React$1.createElement('div', {
12082
12099
  className: classes.promptContainer,
12083
12100
  __self: this,
12084
12101
  __source: {
12085
12102
  fileName: _jsxFileName,
12086
- lineNumber: 611
12103
+ lineNumber: 637
12087
12104
  }
12088
12105
  }, React$1.createElement(PreviewPrompt, {
12089
12106
  prompt: prompt,
12090
12107
  __self: this,
12091
12108
  __source: {
12092
12109
  fileName: _jsxFileName,
12093
- lineNumber: 612
12110
+ lineNumber: 638
12094
12111
  }
12095
12112
  })), studentPrintMode ? printView : React$1.createElement(Readable, {
12096
12113
  false: true,
12097
12114
  __self: this,
12098
12115
  __source: {
12099
12116
  fileName: _jsxFileName,
12100
- lineNumber: 619
12117
+ lineNumber: 645
12101
12118
  }
12102
12119
  }, React$1.createElement('div', {
12103
12120
  className: classes.inputAndKeypadContainer,
@@ -12105,7 +12122,7 @@ class Main extends React$1.Component {
12105
12122
  __self: this,
12106
12123
  __source: {
12107
12124
  fileName: _jsxFileName,
12108
- lineNumber: 620
12125
+ lineNumber: 646
12109
12126
  }
12110
12127
  }, responseType === ResponseTypes.simple && React$1.createElement(SimpleQuestionBlock, {
12111
12128
  onSimpleResponseChange: this.onSimpleResponseChange,
@@ -12118,7 +12135,7 @@ class Main extends React$1.Component {
12118
12135
  __self: this,
12119
12136
  __source: {
12120
12137
  fileName: _jsxFileName,
12121
- lineNumber: 622
12138
+ lineNumber: 648
12122
12139
  }
12123
12140
  }), responseType === ResponseTypes.advanced && React$1.createElement('div', {
12124
12141
  ref: tooltipContainerRef,
@@ -12132,7 +12149,7 @@ class Main extends React$1.Component {
12132
12149
  __self: this,
12133
12150
  __source: {
12134
12151
  fileName: _jsxFileName,
12135
- lineNumber: 634
12152
+ lineNumber: 660
12136
12153
  }
12137
12154
  }, React$1.createElement(Tooltip, {
12138
12155
  ref: ref => this.setTooltipRef(ref),
@@ -12166,7 +12183,7 @@ class Main extends React$1.Component {
12166
12183
  __self: this,
12167
12184
  __source: {
12168
12185
  fileName: _jsxFileName,
12169
- lineNumber: 669
12186
+ lineNumber: 695
12170
12187
  }
12171
12188
  }, React$1.createElement(HorizontalKeypad, {
12172
12189
  additionalKeys: additionalKeys,
@@ -12175,13 +12192,13 @@ class Main extends React$1.Component {
12175
12192
  __self: this,
12176
12193
  __source: {
12177
12194
  fileName: _jsxFileName,
12178
- lineNumber: 678
12195
+ lineNumber: 704
12179
12196
  }
12180
12197
  })) || null),
12181
12198
  __self: this,
12182
12199
  __source: {
12183
12200
  fileName: _jsxFileName,
12184
- lineNumber: 644
12201
+ lineNumber: 670
12185
12202
  }
12186
12203
  }, React$1.createElement(mq.Static, {
12187
12204
  className: classes.static,
@@ -12195,7 +12212,7 @@ class Main extends React$1.Component {
12195
12212
  __self: this,
12196
12213
  __source: {
12197
12214
  fileName: _jsxFileName,
12198
- lineNumber: 688
12215
+ lineNumber: 714
12199
12216
  }
12200
12217
  }))))), viewMode && displayNote && React$1.createElement('div', {
12201
12218
  className: classes.note,
@@ -12205,7 +12222,7 @@ class Main extends React$1.Component {
12205
12222
  __self: this,
12206
12223
  __source: {
12207
12224
  fileName: _jsxFileName,
12208
- lineNumber: 706
12225
+ lineNumber: 732
12209
12226
  }
12210
12227
  }), viewMode && rationale && hasText(rationale) && (!animationsDisabled ? React$1.createElement(Collapsible, {
12211
12228
  labels: {
@@ -12215,7 +12232,7 @@ class Main extends React$1.Component {
12215
12232
  __self: this,
12216
12233
  __source: {
12217
12234
  fileName: _jsxFileName,
12218
- lineNumber: 713
12235
+ lineNumber: 739
12219
12236
  }
12220
12237
  }, React$1.createElement('div', {
12221
12238
  dangerouslySetInnerHTML: {
@@ -12224,7 +12241,7 @@ class Main extends React$1.Component {
12224
12241
  __self: this,
12225
12242
  __source: {
12226
12243
  fileName: _jsxFileName,
12227
- lineNumber: 714
12244
+ lineNumber: 740
12228
12245
  }
12229
12246
  })) : React$1.createElement('div', {
12230
12247
  dangerouslySetInnerHTML: {
@@ -12233,16 +12250,17 @@ class Main extends React$1.Component {
12233
12250
  __self: this,
12234
12251
  __source: {
12235
12252
  fileName: _jsxFileName,
12236
- lineNumber: 717
12253
+ lineNumber: 743
12237
12254
  }
12238
12255
  })));
12239
12256
  if (tooltipModeEnabled && (showCorrectAnswerToggle || teacherInstructions && hasText(teacherInstructions) || rationale && hasText(rationale) || feedback)) {
12240
12257
  return React$1.createElement(UiLayout, {
12241
12258
  extraCSSRules: extraCSSRules,
12259
+ id: id,
12242
12260
  __self: this,
12243
12261
  __source: {
12244
12262
  fileName: _jsxFileName,
12245
- lineNumber: 730
12263
+ lineNumber: 756
12246
12264
  }
12247
12265
  }, React$1.createElement(Tooltip, {
12248
12266
  interactive: true,
@@ -12255,14 +12273,14 @@ class Main extends React$1.Component {
12255
12273
  __self: this,
12256
12274
  __source: {
12257
12275
  fileName: _jsxFileName,
12258
- lineNumber: 739
12276
+ lineNumber: 765
12259
12277
  }
12260
12278
  }, React$1.createElement('div', {
12261
12279
  className: classes.main,
12262
12280
  __self: this,
12263
12281
  __source: {
12264
12282
  fileName: _jsxFileName,
12265
- lineNumber: 740
12283
+ lineNumber: 766
12266
12284
  }
12267
12285
  }, showCorrectAnswerToggle && React$1.createElement(CorrectAnswerToggle, {
12268
12286
  language: language,
@@ -12273,7 +12291,7 @@ class Main extends React$1.Component {
12273
12291
  __self: this,
12274
12292
  __source: {
12275
12293
  fileName: _jsxFileName,
12276
- lineNumber: 742
12294
+ lineNumber: 768
12277
12295
  }
12278
12296
  })), teacherInstructions && hasText(teacherInstructions) && React$1.createElement(Collapsible, {
12279
12297
  className: classes.collapsible,
@@ -12285,14 +12303,14 @@ class Main extends React$1.Component {
12285
12303
  __self: this,
12286
12304
  __source: {
12287
12305
  fileName: _jsxFileName,
12288
- lineNumber: 753
12306
+ lineNumber: 779
12289
12307
  }
12290
12308
  }, React$1.createElement(PreviewPrompt, {
12291
12309
  prompt: teacherInstructions,
12292
12310
  __self: this,
12293
12311
  __source: {
12294
12312
  fileName: _jsxFileName,
12295
- lineNumber: 761
12313
+ lineNumber: 787
12296
12314
  }
12297
12315
  })), displayNote && hasText(note) && React$1.createElement(Collapsible, {
12298
12316
  className: classes.collapsible,
@@ -12308,14 +12326,14 @@ class Main extends React$1.Component {
12308
12326
  __self: this,
12309
12327
  __source: {
12310
12328
  fileName: _jsxFileName,
12311
- lineNumber: 765
12329
+ lineNumber: 791
12312
12330
  }
12313
12331
  }, React$1.createElement(PreviewPrompt, {
12314
12332
  prompt: note,
12315
12333
  __self: this,
12316
12334
  __source: {
12317
12335
  fileName: _jsxFileName,
12318
- lineNumber: 773
12336
+ lineNumber: 799
12319
12337
  }
12320
12338
  })), rationale && hasText(rationale) && React$1.createElement(Collapsible, {
12321
12339
  className: classes.collapsible,
@@ -12327,14 +12345,14 @@ class Main extends React$1.Component {
12327
12345
  __self: this,
12328
12346
  __source: {
12329
12347
  fileName: _jsxFileName,
12330
- lineNumber: 778
12348
+ lineNumber: 804
12331
12349
  }
12332
12350
  }, React$1.createElement(PreviewPrompt, {
12333
12351
  prompt: rationale,
12334
12352
  __self: this,
12335
12353
  __source: {
12336
12354
  fileName: _jsxFileName,
12337
- lineNumber: 786
12355
+ lineNumber: 812
12338
12356
  }
12339
12357
  })), feedback && React$1.createElement(Feedback, {
12340
12358
  correctness: correctness.correctness,
@@ -12342,13 +12360,13 @@ class Main extends React$1.Component {
12342
12360
  __self: this,
12343
12361
  __source: {
12344
12362
  fileName: _jsxFileName,
12345
- lineNumber: 790
12363
+ lineNumber: 816
12346
12364
  }
12347
12365
  })),
12348
12366
  __self: this,
12349
12367
  __source: {
12350
12368
  fileName: _jsxFileName,
12351
- lineNumber: 731
12369
+ lineNumber: 757
12352
12370
  }
12353
12371
  }, React$1.createElement('div', {
12354
12372
  className: classes.mainContainer,
@@ -12356,11 +12374,12 @@ class Main extends React$1.Component {
12356
12374
  __self: this,
12357
12375
  __source: {
12358
12376
  fileName: _jsxFileName,
12359
- lineNumber: 794
12377
+ lineNumber: 820
12360
12378
  }
12361
12379
  }, midContent)));
12362
12380
  }
12363
12381
  return React$1.createElement(UiLayout, {
12382
+ id: id,
12364
12383
  extraCSSRules: extraCSSRules,
12365
12384
  className: classes.mainContainer,
12366
12385
  ref: r => {
@@ -12370,7 +12389,7 @@ class Main extends React$1.Component {
12370
12389
  __self: this,
12371
12390
  __source: {
12372
12391
  fileName: _jsxFileName,
12373
- lineNumber: 803
12392
+ lineNumber: 829
12374
12393
  }
12375
12394
  }, midContent);
12376
12395
  }
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public"
5
5
  },
6
6
  "repository": "pie-framework/pie-elements",
7
- "version": "8.4.1-next.2+38f4e6996",
7
+ "version": "8.4.1-next.20+94407182a",
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": "38f4e69968e175252514fcb86f923eeb8d68d45b",
27
+ "gitHead": "94407182a972d67e212e1fe33570a73ff00d14c6",
28
28
  "module": "src/index.js",
29
29
  "exports": {
30
30
  ".": "./src/index.js",