@pie-element/multiple-choice 12.1.2-next.2 → 12.1.2-next.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,13 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [12.1.2-next.3](https://github.com/pie-framework/pie-elements/compare/@pie-element/multiple-choice@12.1.2-next.2...@pie-element/multiple-choice@12.1.2-next.3) (2026-03-05)
7
+
8
+ ### Bug Fixes
9
+
10
+ - **multiple-choice, placement-ordering:** use observer to render math content PD-5638 ([4c2a662](https://github.com/pie-framework/pie-elements/commit/4c2a662a56b20550168929faeaf9c1eb5b9a8ca1))
11
+ - **multiple-choice:** remove explicit aria-checked from radio and checkbox, Material UI 7 handles aria-checked automatically based on the checked prop ([31c917c](https://github.com/pie-framework/pie-elements/commit/31c917ca669504bb79aa60537a40e89147d236a8))
12
+
6
13
  ## [12.1.2-next.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/multiple-choice@12.1.2-next.1...@pie-element/multiple-choice@12.1.2-next.2) (2026-03-03)
7
14
 
8
15
  ### Bug Fixes
@@ -3,6 +3,10 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [9.1.1-next.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/multiple-choice-configure@9.1.1-next.1...@pie-element/multiple-choice-configure@9.1.1-next.2) (2026-03-05)
7
+
8
+ **Note:** Version bump only for package @pie-element/multiple-choice-configure
9
+
6
10
  ## [9.1.1-next.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/multiple-choice-configure@9.1.0-next.2...@pie-element/multiple-choice-configure@9.1.1-next.1) (2026-02-26)
7
11
 
8
12
  **Note:** Version bump only for package @pie-element/multiple-choice-configure
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pie-element/multiple-choice-configure",
3
- "version": "9.1.1-next.1",
3
+ "version": "9.1.1-next.2",
4
4
  "private": true,
5
5
  "main": "lib/index.js",
6
6
  "module": "src/index.js",
@@ -10,8 +10,8 @@
10
10
  "@mui/icons-material": "^7.3.4",
11
11
  "@mui/material": "^7.3.4",
12
12
  "@pie-framework/pie-configure-events": "^1.3.0",
13
- "@pie-lib/config-ui": "12.2.0-next.11",
14
- "@pie-lib/editable-html-tip-tap": "1.2.0-next.11",
13
+ "@pie-lib/config-ui": "12.2.0-next.12",
14
+ "@pie-lib/editable-html-tip-tap": "1.2.0-next.12",
15
15
  "@pie-lib/render-ui": "5.2.0-next.4",
16
16
  "debug": "^4.1.1",
17
17
  "lodash-es": "^4.17.23",
@@ -147,7 +147,6 @@ const StyledCheckbox = props => {
147
147
  ref: inputRef
148
148
  }
149
149
  },
150
- "aria-checked": checked,
151
150
  onKeyDown: onKeyDown,
152
151
  disableRipple: true
153
152
  }, miniProps, {
@@ -199,7 +198,6 @@ const StyledRadio = props => {
199
198
  ref: inputRef
200
199
  }
201
200
  },
202
- "aria-checked": checked,
203
201
  disableRipple: true
204
202
  }, miniProps, {
205
203
  correctness: correctness,
@@ -1 +1 @@
1
- {"version":3,"file":"choice-input.js","names":["_FormControlLabel","_interopRequireDefault","require","_react","_propTypes","_styles","_Box","_Checkbox","_renderUi","_Radio","_classnames","_feedbackTick","CLASS_NAME","Row","styled","Box","display","alignItems","backgroundColor","color","background","CheckboxHolder","flex","text","fontSize","BelowSelectionComponent","theme","marginLeft","spacing","SrOnly","position","left","top","width","height","overflow","StyledFormControlLabel","exports","FormControlLabel","letterSpacing","cursor","colorStyle","varName","fallback","getInputStyles","correctness","key","k","primaryLight","incorrect","correct","primary","disabled","opacity","pointerEvents","focusVisibleUnchecked","outline","focusUncheckedBorder","focusUnchecked","focusVisibleChecked","focusCheckedBorder","focusChecked","StyledCheckboxBase","Checkbox","shouldForwardProp","prop","styles","StyledCheckbox","props","checked","onChange","value","id","onKeyDown","inputRef","miniProps","default","createElement","_extends2","slotProps","input","ref","disableRipple","className","StyledRadioBase","Radio","StyledRadio","tagName","name","ChoiceInput","React","Component","constructor","_defineProperty2","event","choiceMode","isArrowDown","isArrowUp","preventDefault","currentEl","document","getElementById","choiceId","fieldset","closest","groupCheckboxes","Array","from","querySelectorAll","currentIndex","findIndex","el","nextIndex","nextEl","focus","onToggleChoice","bind","generateChoiceId","descId","Math","random","toFixed","render","displayKey","feedback","label","rationale","hideTick","isEvaluateMode","choicesLayout","isSelectionButtonBelow","Tag","classSuffix","holderSx","padding","margin","justifyContent","choicelabel","Fragment","component","PreviewPrompt","prompt","screenReaderLabel","tagProps","handleKeyDown","hasMathOrImage","includes","control","style","autoFocusRef","classNames","sx","htmlFor","labelPlacement","undefined","defaultClassName","Feedback","PropTypes","oneOf","string","bool","isRequired","func","_default"],"sources":["../src/choice-input.jsx"],"sourcesContent":["import FormControlLabel from '@mui/material/FormControlLabel';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { styled } from '@mui/material/styles';\nimport Box from '@mui/material/Box';\nimport Checkbox from '@mui/material/Checkbox';\nimport { Feedback, color, PreviewPrompt } from '@pie-lib/render-ui';\nimport Radio from '@mui/material/Radio';\nimport classNames from 'classnames';\n\nimport FeedbackTick from './feedback-tick';\n\nconst CLASS_NAME = 'multiple-choice-component';\n\nconst Row = styled(Box)({\n display: 'flex',\n alignItems: 'center',\n backgroundColor: color.background(),\n});\n\nconst CheckboxHolder = styled(Box)({\n display: 'flex',\n alignItems: 'center',\n backgroundColor: color.background(),\n flex: 1,\n '& label': {\n color: color.text(),\n '& > span': {\n fontSize: 'inherit',\n },\n },\n});\n\nconst BelowSelectionComponent = styled('span')(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n '& > span': {\n // visually reduce right padding, but maintain accessibility padding for checkbox indicators to be circles\n marginLeft: `-${theme.spacing(1)}px`,\n },\n}));\n\nconst SrOnly = styled('span')({\n position: 'absolute',\n left: '-10000px',\n top: 'auto',\n width: '1px',\n height: '1px',\n overflow: 'hidden',\n});\n\nexport const StyledFormControlLabel = styled(FormControlLabel)({\n '& .MuiFormControlLabel-label': {\n color: `${color.text()} !important`,\n backgroundColor: color.background(),\n letterSpacing: 'normal',\n },\n '&.Mui-disabled *': {\n cursor: 'not-allowed !important',\n },\n});\n\nconst colorStyle = (varName, fallback) => ({\n [`&.${CLASS_NAME}`]: {\n color: `var(--choice-input-${varName}, ${fallback}) !important`,\n },\n});\n\nconst getInputStyles = (correctness) => {\n const key = (k) => (correctness ? `${correctness}-${k}` : k);\n \n return {\n [key('root')]: {\n ...colorStyle('color', color.text()),\n ...(correctness ? {} : {\n '&:hover': { color: `${color.primaryLight()} !important` },\n }),\n ...(correctness === 'correct' ? colorStyle('correct-color', color.text()) : {}),\n ...(correctness === 'incorrect' ? colorStyle('incorrect-color', color.incorrect()) : {}),\n },\n [key('checked')]: {\n ...(correctness === 'correct' ? colorStyle('correct-selected-color', color.correct()) : {}),\n ...(correctness === 'incorrect' ? colorStyle('incorrect-checked', color.incorrect()) : {}),\n ...(!correctness ? colorStyle('selected-color', color.primary()) : {}),\n },\n [key('disabled')]: {\n ...colorStyle('disabled-color', color.text()),\n ...(correctness === 'correct' ? colorStyle('correct-disabled-color', color.disabled()) : {}),\n ...(correctness === 'incorrect' ? colorStyle('incorrect-disabled-color', color.disabled()) : {}),\n opacity: 0.6,\n cursor: 'not-allowed !important',\n pointerEvents: 'initial !important',\n },\n focusVisibleUnchecked: {\n outline: `2px solid ${color.focusUncheckedBorder()}`,\n backgroundColor: color.focusUnchecked(),\n },\n focusVisibleChecked: {\n outline: `2px solid ${color.focusCheckedBorder()}`,\n backgroundColor: color.focusChecked(),\n },\n };\n};\n\nconst StyledCheckboxBase = styled(Checkbox, {\n shouldForwardProp: (prop) => prop !== 'correctness',\n})(({ correctness }) => {\n const styles = getInputStyles(correctness);\n const key = (k) => (correctness ? `${correctness}-${k}` : k);\n \n return {\n [`&.${CLASS_NAME}`]: {\n ...styles[key('root')],\n '&.Mui-checked': styles[key('checked')],\n '&.Mui-disabled': correctness ? {} : styles[key('disabled')],\n },\n '&.Mui-focusVisible': {\n '&:not(.Mui-checked)': styles.focusVisibleUnchecked,\n '&.Mui-checked': styles.focusVisibleChecked,\n },\n };\n});\n\nexport const StyledCheckbox = (props) => {\n const { correctness, checked, onChange, disabled, value, id, onKeyDown, inputRef } = props;\n\n const miniProps = { checked, onChange, disabled, value };\n\n return (\n <StyledCheckboxBase\n id={id}\n slotProps={{ input: { ref: inputRef } }}\n aria-checked={checked}\n onKeyDown={onKeyDown}\n disableRipple\n {...miniProps}\n correctness={correctness}\n className={CLASS_NAME}\n />\n );\n};\n\nconst StyledRadioBase = styled(Radio, {\n shouldForwardProp: (prop) => prop !== 'correctness',\n})(({ correctness }) => {\n const styles = getInputStyles(correctness);\n const key = (k) => (correctness ? `${correctness}-${k}` : k);\n \n return {\n [`&.${CLASS_NAME}`]: {\n ...styles[key('root')],\n '&.Mui-checked': styles[key('checked')],\n '&.Mui-disabled': correctness ? {} : styles[key('disabled')],\n },\n '&.Mui-focusVisible': {\n '&:not(.Mui-checked)': styles.focusVisibleUnchecked,\n '&.Mui-checked': styles.focusVisibleChecked,\n },\n };\n});\n\nexport const StyledRadio = (props) => {\n const { correctness, checked, onChange, disabled, value, id, tagName, inputRef } = props;\n\n const miniProps = { checked, onChange, disabled, value };\n\n return (\n <StyledRadioBase\n id={id}\n slotProps={{ input: { ref: inputRef } }}\n aria-checked={checked}\n disableRipple\n {...miniProps}\n correctness={correctness}\n className={CLASS_NAME}\n name={tagName}\n />\n );\n};\n\nexport class ChoiceInput extends React.Component {\n static propTypes = {\n choiceMode: PropTypes.oneOf(['radio', 'checkbox']),\n displayKey: PropTypes.string,\n checked: PropTypes.bool.isRequired,\n correctness: PropTypes.string,\n disabled: PropTypes.bool.isRequired,\n feedback: PropTypes.string,\n label: PropTypes.string.isRequired,\n rationale: PropTypes.string,\n onChange: PropTypes.func.isRequired,\n value: PropTypes.string.isRequired,\n className: PropTypes.string,\n tagName: PropTypes.string,\n hideTick: PropTypes.bool,\n isEvaluateMode: PropTypes.bool,\n choicesLayout: PropTypes.oneOf(['vertical', 'grid', 'horizontal']),\n isSelectionButtonBelow: PropTypes.bool,\n };\n\n static defaultProps = {\n rationale: null,\n checked: false,\n isEvaluateMode: false,\n };\n\n constructor(props) {\n super(props);\n this.onToggleChoice = this.onToggleChoice.bind(this);\n this.choiceId = this.generateChoiceId();\n this.descId = `${this.choiceId}-desc`;\n }\n\n onToggleChoice(event) {\n this.props.onChange(event);\n }\n\n generateChoiceId() {\n return 'choice-' + (Math.random() * 10000).toFixed();\n }\n\n handleKeyDown = (event) => {\n const { choiceMode } = this.props;\n\n if (choiceMode !== 'checkbox') return;\n\n const isArrowDown = event.key === 'ArrowDown';\n const isArrowUp = event.key === 'ArrowUp';\n\n if (!isArrowDown && !isArrowUp) return;\n\n event.preventDefault();\n\n const currentEl = document.getElementById(this.choiceId);\n if (!currentEl) return;\n\n const fieldset = currentEl.closest('fieldset');\n if (!fieldset) return;\n\n const groupCheckboxes = Array.from(fieldset.querySelectorAll('input[type=\"checkbox\"]'));\n\n const currentIndex = groupCheckboxes.findIndex((el) => el === currentEl);\n if (currentIndex === -1) return;\n\n const nextIndex = isArrowDown ? currentIndex + 1 : currentIndex - 1;\n const nextEl = groupCheckboxes[nextIndex];\n\n if (nextEl) {\n nextEl.focus();\n }\n };\n\n render() {\n const {\n choiceMode,\n disabled,\n displayKey,\n feedback,\n label,\n correctness,\n className,\n rationale,\n hideTick,\n isEvaluateMode,\n choicesLayout,\n value,\n checked,\n tagName,\n isSelectionButtonBelow,\n } = this.props;\n\n const Tag = choiceMode === 'checkbox' ? StyledCheckbox : StyledRadio;\n const classSuffix = choiceMode === 'checkbox' ? 'checkbox' : 'radio-button';\n\n const holderSx = {\n ...(choicesLayout === 'horizontal' && {\n [`& .${CLASS_NAME}`]: {\n padding: '8px',\n margin: '4px 0 4px 4px',\n },\n }),\n ...(isSelectionButtonBelow && choicesLayout !== 'grid' && {\n '& > label': {\n alignItems: 'flex-start',\n },\n }),\n ...(isSelectionButtonBelow && choicesLayout === 'grid' && {\n justifyContent: 'center',\n '& > label': {\n alignItems: 'center',\n },\n }),\n };\n\n const choicelabel = (\n <>\n {displayKey && !isSelectionButtonBelow ? (\n <Row component=\"span\">\n {displayKey}.{'\\u00A0'}\n <PreviewPrompt className=\"prompt-label\" prompt={label} tagName=\"span\" />\n </Row>\n ) : (\n <PreviewPrompt className=\"prompt-label\" prompt={label} tagName=\"span\" />\n )}\n </>\n );\n\n const screenReaderLabel = (\n <SrOnly id={this.descId}>\n {choiceMode === 'checkbox' ? 'Checkbox to select the answer below' : 'Radio button to select the answer below'}\n </SrOnly>\n );\n\n const tagProps = {\n disabled,\n checked,\n correctness,\n tagName,\n value,\n id: this.choiceId,\n onChange: this.onToggleChoice,\n onKeyDown: this.handleKeyDown,\n 'aria-describedby': this.descId,\n };\n\n const hasMathOrImage =\n typeof label === 'string' &&\n (label.includes('<math') ||\n label.includes('\\\\(') ||\n label.includes('\\\\[') ||\n label.includes('<img') ||\n label.includes('data-latex') ||\n label.includes('data-raw') ||\n label.includes('<mjx-container'));\n\n const control = isSelectionButtonBelow ? (\n <BelowSelectionComponent>\n {hasMathOrImage && screenReaderLabel}\n <Tag {...tagProps} style={{ padding: 0 }} />\n {displayKey ? `${displayKey}.` : ''}\n </BelowSelectionComponent>\n ) : (\n <>\n {hasMathOrImage && screenReaderLabel}\n <Tag {...tagProps} slotProps={{ input: { ref: this.props.autoFocusRef } }} />\n </>\n );\n\n return (\n <div className={classNames(className, 'corespring-' + classSuffix, 'choice-input')}>\n <Row>\n {!hideTick && isEvaluateMode && <FeedbackTick correctness={correctness} />}\n <CheckboxHolder className=\"checkbox-holder\" sx={holderSx}>\n <StyledFormControlLabel\n label={choicelabel}\n value={value}\n htmlFor={this.choiceId}\n labelPlacement={isSelectionButtonBelow ? 'top' : undefined}\n control={control}\n />\n </CheckboxHolder>\n </Row>\n {rationale && <PreviewPrompt className=\"rationale\" defaultClassName=\"rationale\" prompt={rationale} />}\n <Feedback feedback={feedback} correctness={correctness} />\n </div>\n );\n }\n}\n\nexport default ChoiceInput;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"choice-input.js","names":["_FormControlLabel","_interopRequireDefault","require","_react","_propTypes","_styles","_Box","_Checkbox","_renderUi","_Radio","_classnames","_feedbackTick","CLASS_NAME","Row","styled","Box","display","alignItems","backgroundColor","color","background","CheckboxHolder","flex","text","fontSize","BelowSelectionComponent","theme","marginLeft","spacing","SrOnly","position","left","top","width","height","overflow","StyledFormControlLabel","exports","FormControlLabel","letterSpacing","cursor","colorStyle","varName","fallback","getInputStyles","correctness","key","k","primaryLight","incorrect","correct","primary","disabled","opacity","pointerEvents","focusVisibleUnchecked","outline","focusUncheckedBorder","focusUnchecked","focusVisibleChecked","focusCheckedBorder","focusChecked","StyledCheckboxBase","Checkbox","shouldForwardProp","prop","styles","StyledCheckbox","props","checked","onChange","value","id","onKeyDown","inputRef","miniProps","default","createElement","_extends2","slotProps","input","ref","disableRipple","className","StyledRadioBase","Radio","StyledRadio","tagName","name","ChoiceInput","React","Component","constructor","_defineProperty2","event","choiceMode","isArrowDown","isArrowUp","preventDefault","currentEl","document","getElementById","choiceId","fieldset","closest","groupCheckboxes","Array","from","querySelectorAll","currentIndex","findIndex","el","nextIndex","nextEl","focus","onToggleChoice","bind","generateChoiceId","descId","Math","random","toFixed","render","displayKey","feedback","label","rationale","hideTick","isEvaluateMode","choicesLayout","isSelectionButtonBelow","Tag","classSuffix","holderSx","padding","margin","justifyContent","choicelabel","Fragment","component","PreviewPrompt","prompt","screenReaderLabel","tagProps","handleKeyDown","hasMathOrImage","includes","control","style","autoFocusRef","classNames","sx","htmlFor","labelPlacement","undefined","defaultClassName","Feedback","PropTypes","oneOf","string","bool","isRequired","func","_default"],"sources":["../src/choice-input.jsx"],"sourcesContent":["import FormControlLabel from '@mui/material/FormControlLabel';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { styled } from '@mui/material/styles';\nimport Box from '@mui/material/Box';\nimport Checkbox from '@mui/material/Checkbox';\nimport { Feedback, color, PreviewPrompt } from '@pie-lib/render-ui';\nimport Radio from '@mui/material/Radio';\nimport classNames from 'classnames';\n\nimport FeedbackTick from './feedback-tick';\n\nconst CLASS_NAME = 'multiple-choice-component';\n\nconst Row = styled(Box)({\n display: 'flex',\n alignItems: 'center',\n backgroundColor: color.background(),\n});\n\nconst CheckboxHolder = styled(Box)({\n display: 'flex',\n alignItems: 'center',\n backgroundColor: color.background(),\n flex: 1,\n '& label': {\n color: color.text(),\n '& > span': {\n fontSize: 'inherit',\n },\n },\n});\n\nconst BelowSelectionComponent = styled('span')(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n '& > span': {\n // visually reduce right padding, but maintain accessibility padding for checkbox indicators to be circles\n marginLeft: `-${theme.spacing(1)}px`,\n },\n}));\n\nconst SrOnly = styled('span')({\n position: 'absolute',\n left: '-10000px',\n top: 'auto',\n width: '1px',\n height: '1px',\n overflow: 'hidden',\n});\n\nexport const StyledFormControlLabel = styled(FormControlLabel)({\n '& .MuiFormControlLabel-label': {\n color: `${color.text()} !important`,\n backgroundColor: color.background(),\n letterSpacing: 'normal',\n },\n '&.Mui-disabled *': {\n cursor: 'not-allowed !important',\n },\n});\n\nconst colorStyle = (varName, fallback) => ({\n [`&.${CLASS_NAME}`]: {\n color: `var(--choice-input-${varName}, ${fallback}) !important`,\n },\n});\n\nconst getInputStyles = (correctness) => {\n const key = (k) => (correctness ? `${correctness}-${k}` : k);\n \n return {\n [key('root')]: {\n ...colorStyle('color', color.text()),\n ...(correctness ? {} : {\n '&:hover': { color: `${color.primaryLight()} !important` },\n }),\n ...(correctness === 'correct' ? colorStyle('correct-color', color.text()) : {}),\n ...(correctness === 'incorrect' ? colorStyle('incorrect-color', color.incorrect()) : {}),\n },\n [key('checked')]: {\n ...(correctness === 'correct' ? colorStyle('correct-selected-color', color.correct()) : {}),\n ...(correctness === 'incorrect' ? colorStyle('incorrect-checked', color.incorrect()) : {}),\n ...(!correctness ? colorStyle('selected-color', color.primary()) : {}),\n },\n [key('disabled')]: {\n ...colorStyle('disabled-color', color.text()),\n ...(correctness === 'correct' ? colorStyle('correct-disabled-color', color.disabled()) : {}),\n ...(correctness === 'incorrect' ? colorStyle('incorrect-disabled-color', color.disabled()) : {}),\n opacity: 0.6,\n cursor: 'not-allowed !important',\n pointerEvents: 'initial !important',\n },\n focusVisibleUnchecked: {\n outline: `2px solid ${color.focusUncheckedBorder()}`,\n backgroundColor: color.focusUnchecked(),\n },\n focusVisibleChecked: {\n outline: `2px solid ${color.focusCheckedBorder()}`,\n backgroundColor: color.focusChecked(),\n },\n };\n};\n\nconst StyledCheckboxBase = styled(Checkbox, {\n shouldForwardProp: (prop) => prop !== 'correctness',\n})(({ correctness }) => {\n const styles = getInputStyles(correctness);\n const key = (k) => (correctness ? `${correctness}-${k}` : k);\n \n return {\n [`&.${CLASS_NAME}`]: {\n ...styles[key('root')],\n '&.Mui-checked': styles[key('checked')],\n '&.Mui-disabled': correctness ? {} : styles[key('disabled')],\n },\n '&.Mui-focusVisible': {\n '&:not(.Mui-checked)': styles.focusVisibleUnchecked,\n '&.Mui-checked': styles.focusVisibleChecked,\n },\n };\n});\n\nexport const StyledCheckbox = (props) => {\n const { correctness, checked, onChange, disabled, value, id, onKeyDown, inputRef } = props;\n\n const miniProps = { checked, onChange, disabled, value };\n\n return (\n <StyledCheckboxBase\n id={id}\n slotProps={{ input: { ref: inputRef } }}\n onKeyDown={onKeyDown}\n disableRipple\n {...miniProps}\n correctness={correctness}\n className={CLASS_NAME}\n />\n );\n};\n\nconst StyledRadioBase = styled(Radio, {\n shouldForwardProp: (prop) => prop !== 'correctness',\n})(({ correctness }) => {\n const styles = getInputStyles(correctness);\n const key = (k) => (correctness ? `${correctness}-${k}` : k);\n \n return {\n [`&.${CLASS_NAME}`]: {\n ...styles[key('root')],\n '&.Mui-checked': styles[key('checked')],\n '&.Mui-disabled': correctness ? {} : styles[key('disabled')],\n },\n '&.Mui-focusVisible': {\n '&:not(.Mui-checked)': styles.focusVisibleUnchecked,\n '&.Mui-checked': styles.focusVisibleChecked,\n },\n };\n});\n\nexport const StyledRadio = (props) => {\n const { correctness, checked, onChange, disabled, value, id, tagName, inputRef } = props;\n\n const miniProps = { checked, onChange, disabled, value };\n\n return (\n <StyledRadioBase\n id={id}\n slotProps={{ input: { ref: inputRef } }}\n disableRipple\n {...miniProps}\n correctness={correctness}\n className={CLASS_NAME}\n name={tagName}\n />\n );\n};\n\nexport class ChoiceInput extends React.Component {\n static propTypes = {\n choiceMode: PropTypes.oneOf(['radio', 'checkbox']),\n displayKey: PropTypes.string,\n checked: PropTypes.bool.isRequired,\n correctness: PropTypes.string,\n disabled: PropTypes.bool.isRequired,\n feedback: PropTypes.string,\n label: PropTypes.string.isRequired,\n rationale: PropTypes.string,\n onChange: PropTypes.func.isRequired,\n value: PropTypes.string.isRequired,\n className: PropTypes.string,\n tagName: PropTypes.string,\n hideTick: PropTypes.bool,\n isEvaluateMode: PropTypes.bool,\n choicesLayout: PropTypes.oneOf(['vertical', 'grid', 'horizontal']),\n isSelectionButtonBelow: PropTypes.bool,\n };\n\n static defaultProps = {\n rationale: null,\n checked: false,\n isEvaluateMode: false,\n };\n\n constructor(props) {\n super(props);\n this.onToggleChoice = this.onToggleChoice.bind(this);\n this.choiceId = this.generateChoiceId();\n this.descId = `${this.choiceId}-desc`;\n }\n\n onToggleChoice(event) {\n this.props.onChange(event);\n }\n\n generateChoiceId() {\n return 'choice-' + (Math.random() * 10000).toFixed();\n }\n\n handleKeyDown = (event) => {\n const { choiceMode } = this.props;\n\n if (choiceMode !== 'checkbox') return;\n\n const isArrowDown = event.key === 'ArrowDown';\n const isArrowUp = event.key === 'ArrowUp';\n\n if (!isArrowDown && !isArrowUp) return;\n\n event.preventDefault();\n\n const currentEl = document.getElementById(this.choiceId);\n if (!currentEl) return;\n\n const fieldset = currentEl.closest('fieldset');\n if (!fieldset) return;\n\n const groupCheckboxes = Array.from(fieldset.querySelectorAll('input[type=\"checkbox\"]'));\n\n const currentIndex = groupCheckboxes.findIndex((el) => el === currentEl);\n if (currentIndex === -1) return;\n\n const nextIndex = isArrowDown ? currentIndex + 1 : currentIndex - 1;\n const nextEl = groupCheckboxes[nextIndex];\n\n if (nextEl) {\n nextEl.focus();\n }\n };\n\n render() {\n const {\n choiceMode,\n disabled,\n displayKey,\n feedback,\n label,\n correctness,\n className,\n rationale,\n hideTick,\n isEvaluateMode,\n choicesLayout,\n value,\n checked,\n tagName,\n isSelectionButtonBelow,\n } = this.props;\n\n const Tag = choiceMode === 'checkbox' ? StyledCheckbox : StyledRadio;\n const classSuffix = choiceMode === 'checkbox' ? 'checkbox' : 'radio-button';\n\n const holderSx = {\n ...(choicesLayout === 'horizontal' && {\n [`& .${CLASS_NAME}`]: {\n padding: '8px',\n margin: '4px 0 4px 4px',\n },\n }),\n ...(isSelectionButtonBelow && choicesLayout !== 'grid' && {\n '& > label': {\n alignItems: 'flex-start',\n },\n }),\n ...(isSelectionButtonBelow && choicesLayout === 'grid' && {\n justifyContent: 'center',\n '& > label': {\n alignItems: 'center',\n },\n }),\n };\n\n const choicelabel = (\n <>\n {displayKey && !isSelectionButtonBelow ? (\n <Row component=\"span\">\n {displayKey}.{'\\u00A0'}\n <PreviewPrompt className=\"prompt-label\" prompt={label} tagName=\"span\" />\n </Row>\n ) : (\n <PreviewPrompt className=\"prompt-label\" prompt={label} tagName=\"span\" />\n )}\n </>\n );\n\n const screenReaderLabel = (\n <SrOnly id={this.descId}>\n {choiceMode === 'checkbox' ? 'Checkbox to select the answer below' : 'Radio button to select the answer below'}\n </SrOnly>\n );\n\n const tagProps = {\n disabled,\n checked,\n correctness,\n tagName,\n value,\n id: this.choiceId,\n onChange: this.onToggleChoice,\n onKeyDown: this.handleKeyDown,\n 'aria-describedby': this.descId,\n };\n\n const hasMathOrImage =\n typeof label === 'string' &&\n (label.includes('<math') ||\n label.includes('\\\\(') ||\n label.includes('\\\\[') ||\n label.includes('<img') ||\n label.includes('data-latex') ||\n label.includes('data-raw') ||\n label.includes('<mjx-container'));\n\n const control = isSelectionButtonBelow ? (\n <BelowSelectionComponent>\n {hasMathOrImage && screenReaderLabel}\n <Tag {...tagProps} style={{ padding: 0 }} />\n {displayKey ? `${displayKey}.` : ''}\n </BelowSelectionComponent>\n ) : (\n <>\n {hasMathOrImage && screenReaderLabel}\n <Tag {...tagProps} slotProps={{ input: { ref: this.props.autoFocusRef } }} />\n </>\n );\n\n return (\n <div className={classNames(className, 'corespring-' + classSuffix, 'choice-input')}>\n <Row>\n {!hideTick && isEvaluateMode && <FeedbackTick correctness={correctness} />}\n <CheckboxHolder className=\"checkbox-holder\" sx={holderSx}>\n <StyledFormControlLabel\n label={choicelabel}\n value={value}\n htmlFor={this.choiceId}\n labelPlacement={isSelectionButtonBelow ? 'top' : undefined}\n control={control}\n />\n </CheckboxHolder>\n </Row>\n {rationale && <PreviewPrompt className=\"rationale\" defaultClassName=\"rationale\" prompt={rationale} />}\n <Feedback feedback={feedback} correctness={correctness} />\n </div>\n );\n }\n}\n\nexport default ChoiceInput;\n"],"mappings":";;;;;;;;;AAAA,IAAAA,iBAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,UAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AACA,IAAAI,IAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,SAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,SAAA,GAAAN,OAAA;AACA,IAAAO,MAAA,GAAAR,sBAAA,CAAAC,OAAA;AACA,IAAAQ,WAAA,GAAAT,sBAAA,CAAAC,OAAA;AAEA,IAAAS,aAAA,GAAAV,sBAAA,CAAAC,OAAA;AAEA,MAAMU,UAAU,GAAG,2BAA2B;AAE9C,MAAMC,GAAG,GAAG,IAAAC,cAAM,EAACC,YAAG,CAAC,CAAC;EACtBC,OAAO,EAAE,MAAM;EACfC,UAAU,EAAE,QAAQ;EACpBC,eAAe,EAAEC,eAAK,CAACC,UAAU,CAAC;AACpC,CAAC,CAAC;AAEF,MAAMC,cAAc,GAAG,IAAAP,cAAM,EAACC,YAAG,CAAC,CAAC;EACjCC,OAAO,EAAE,MAAM;EACfC,UAAU,EAAE,QAAQ;EACpBC,eAAe,EAAEC,eAAK,CAACC,UAAU,CAAC,CAAC;EACnCE,IAAI,EAAE,CAAC;EACP,SAAS,EAAE;IACTH,KAAK,EAAEA,eAAK,CAACI,IAAI,CAAC,CAAC;IACnB,UAAU,EAAE;MACVC,QAAQ,EAAE;IACZ;EACF;AACF,CAAC,CAAC;AAEF,MAAMC,uBAAuB,GAAG,IAAAX,cAAM,EAAC,MAAM,CAAC,CAAC,CAAC;EAAEY;AAAM,CAAC,MAAM;EAC7DV,OAAO,EAAE,MAAM;EACfC,UAAU,EAAE,QAAQ;EACpB,UAAU,EAAE;IACV;IACAU,UAAU,EAAE,IAAID,KAAK,CAACE,OAAO,CAAC,CAAC,CAAC;EAClC;AACF,CAAC,CAAC,CAAC;AAEH,MAAMC,MAAM,GAAG,IAAAf,cAAM,EAAC,MAAM,CAAC,CAAC;EAC5BgB,QAAQ,EAAE,UAAU;EACpBC,IAAI,EAAE,UAAU;EAChBC,GAAG,EAAE,MAAM;EACXC,KAAK,EAAE,KAAK;EACZC,MAAM,EAAE,KAAK;EACbC,QAAQ,EAAE;AACZ,CAAC,CAAC;AAEK,MAAMC,sBAAsB,GAAAC,OAAA,CAAAD,sBAAA,GAAG,IAAAtB,cAAM,EAACwB,yBAAgB,CAAC,CAAC;EAC7D,8BAA8B,EAAE;IAC9BnB,KAAK,EAAE,GAAGA,eAAK,CAACI,IAAI,CAAC,CAAC,aAAa;IACnCL,eAAe,EAAEC,eAAK,CAACC,UAAU,CAAC,CAAC;IACnCmB,aAAa,EAAE;EACjB,CAAC;EACD,kBAAkB,EAAE;IAClBC,MAAM,EAAE;EACV;AACF,CAAC,CAAC;AAEF,MAAMC,UAAU,GAAGA,CAACC,OAAO,EAAEC,QAAQ,MAAM;EACzC,CAAC,KAAK/B,UAAU,EAAE,GAAG;IACnBO,KAAK,EAAE,sBAAsBuB,OAAO,KAAKC,QAAQ;EACnD;AACF,CAAC,CAAC;AAEF,MAAMC,cAAc,GAAIC,WAAW,IAAK;EACtC,MAAMC,GAAG,GAAIC,CAAC,IAAMF,WAAW,GAAG,GAAGA,WAAW,IAAIE,CAAC,EAAE,GAAGA,CAAE;EAE5D,OAAO;IACL,CAACD,GAAG,CAAC,MAAM,CAAC,GAAG;MACb,GAAGL,UAAU,CAAC,OAAO,EAAEtB,eAAK,CAACI,IAAI,CAAC,CAAC,CAAC;MACpC,IAAIsB,WAAW,GAAG,CAAC,CAAC,GAAG;QACrB,SAAS,EAAE;UAAE1B,KAAK,EAAE,GAAGA,eAAK,CAAC6B,YAAY,CAAC,CAAC;QAAc;MAC3D,CAAC,CAAC;MACF,IAAIH,WAAW,KAAK,SAAS,GAAGJ,UAAU,CAAC,eAAe,EAAEtB,eAAK,CAACI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;MAC/E,IAAIsB,WAAW,KAAK,WAAW,GAAGJ,UAAU,CAAC,iBAAiB,EAAEtB,eAAK,CAAC8B,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACzF,CAAC;IACD,CAACH,GAAG,CAAC,SAAS,CAAC,GAAG;MAChB,IAAID,WAAW,KAAK,SAAS,GAAGJ,UAAU,CAAC,wBAAwB,EAAEtB,eAAK,CAAC+B,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;MAC3F,IAAIL,WAAW,KAAK,WAAW,GAAGJ,UAAU,CAAC,mBAAmB,EAAEtB,eAAK,CAAC8B,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;MAC1F,IAAI,CAACJ,WAAW,GAAGJ,UAAU,CAAC,gBAAgB,EAAEtB,eAAK,CAACgC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACvE,CAAC;IACD,CAACL,GAAG,CAAC,UAAU,CAAC,GAAG;MACjB,GAAGL,UAAU,CAAC,gBAAgB,EAAEtB,eAAK,CAACI,IAAI,CAAC,CAAC,CAAC;MAC7C,IAAIsB,WAAW,KAAK,SAAS,GAAGJ,UAAU,CAAC,wBAAwB,EAAEtB,eAAK,CAACiC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;MAC5F,IAAIP,WAAW,KAAK,WAAW,GAAGJ,UAAU,CAAC,0BAA0B,EAAEtB,eAAK,CAACiC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;MAChGC,OAAO,EAAE,GAAG;MACZb,MAAM,EAAE,wBAAwB;MAChCc,aAAa,EAAE;IACjB,CAAC;IACDC,qBAAqB,EAAE;MACrBC,OAAO,EAAE,aAAarC,eAAK,CAACsC,oBAAoB,CAAC,CAAC,EAAE;MACpDvC,eAAe,EAAEC,eAAK,CAACuC,cAAc,CAAC;IACxC,CAAC;IACDC,mBAAmB,EAAE;MACnBH,OAAO,EAAE,aAAarC,eAAK,CAACyC,kBAAkB,CAAC,CAAC,EAAE;MAClD1C,eAAe,EAAEC,eAAK,CAAC0C,YAAY,CAAC;IACtC;EACF,CAAC;AACH,CAAC;AAED,MAAMC,kBAAkB,GAAG,IAAAhD,cAAM,EAACiD,iBAAQ,EAAE;EAC1CC,iBAAiB,EAAGC,IAAI,IAAKA,IAAI,KAAK;AACxC,CAAC,CAAC,CAAC,CAAC;EAAEpB;AAAY,CAAC,KAAK;EACtB,MAAMqB,MAAM,GAAGtB,cAAc,CAACC,WAAW,CAAC;EAC1C,MAAMC,GAAG,GAAIC,CAAC,IAAMF,WAAW,GAAG,GAAGA,WAAW,IAAIE,CAAC,EAAE,GAAGA,CAAE;EAE5D,OAAO;IACL,CAAC,KAAKnC,UAAU,EAAE,GAAG;MACnB,GAAGsD,MAAM,CAACpB,GAAG,CAAC,MAAM,CAAC,CAAC;MACtB,eAAe,EAAEoB,MAAM,CAACpB,GAAG,CAAC,SAAS,CAAC,CAAC;MACvC,gBAAgB,EAAED,WAAW,GAAG,CAAC,CAAC,GAAGqB,MAAM,CAACpB,GAAG,CAAC,UAAU,CAAC;IAC7D,CAAC;IACD,oBAAoB,EAAE;MACpB,qBAAqB,EAAEoB,MAAM,CAACX,qBAAqB;MACnD,eAAe,EAAEW,MAAM,CAACP;IAC1B;EACF,CAAC;AACH,CAAC,CAAC;AAEK,MAAMQ,cAAc,GAAIC,KAAK,IAAK;EACvC,MAAM;IAAEvB,WAAW;IAAEwB,OAAO;IAAEC,QAAQ;IAAElB,QAAQ;IAAEmB,KAAK;IAAEC,EAAE;IAAEC,SAAS;IAAEC;EAAS,CAAC,GAAGN,KAAK;EAE1F,MAAMO,SAAS,GAAG;IAAEN,OAAO;IAAEC,QAAQ;IAAElB,QAAQ;IAAEmB;EAAM,CAAC;EAExD,oBACEpE,MAAA,CAAAyE,OAAA,CAAAC,aAAA,CAACf,kBAAkB,MAAAgB,SAAA,CAAAF,OAAA;IACjBJ,EAAE,EAAEA,EAAG;IACPO,SAAS,EAAE;MAAEC,KAAK,EAAE;QAAEC,GAAG,EAAEP;MAAS;IAAE,CAAE;IACxCD,SAAS,EAAEA,SAAU;IACrBS,aAAa;EAAA,GACTP,SAAS;IACb9B,WAAW,EAAEA,WAAY;IACzBsC,SAAS,EAAEvE;EAAW,EACvB,CAAC;AAEN,CAAC;AAACyB,OAAA,CAAA8B,cAAA,GAAAA,cAAA;AAEF,MAAMiB,eAAe,GAAG,IAAAtE,cAAM,EAACuE,cAAK,EAAE;EACpCrB,iBAAiB,EAAGC,IAAI,IAAKA,IAAI,KAAK;AACxC,CAAC,CAAC,CAAC,CAAC;EAAEpB;AAAY,CAAC,KAAK;EACtB,MAAMqB,MAAM,GAAGtB,cAAc,CAACC,WAAW,CAAC;EAC1C,MAAMC,GAAG,GAAIC,CAAC,IAAMF,WAAW,GAAG,GAAGA,WAAW,IAAIE,CAAC,EAAE,GAAGA,CAAE;EAE5D,OAAO;IACL,CAAC,KAAKnC,UAAU,EAAE,GAAG;MACnB,GAAGsD,MAAM,CAACpB,GAAG,CAAC,MAAM,CAAC,CAAC;MACtB,eAAe,EAAEoB,MAAM,CAACpB,GAAG,CAAC,SAAS,CAAC,CAAC;MACvC,gBAAgB,EAAED,WAAW,GAAG,CAAC,CAAC,GAAGqB,MAAM,CAACpB,GAAG,CAAC,UAAU,CAAC;IAC7D,CAAC;IACD,oBAAoB,EAAE;MACpB,qBAAqB,EAAEoB,MAAM,CAACX,qBAAqB;MACnD,eAAe,EAAEW,MAAM,CAACP;IAC1B;EACF,CAAC;AACH,CAAC,CAAC;AAEK,MAAM2B,WAAW,GAAIlB,KAAK,IAAK;EACpC,MAAM;IAAEvB,WAAW;IAAEwB,OAAO;IAAEC,QAAQ;IAAElB,QAAQ;IAAEmB,KAAK;IAAEC,EAAE;IAAEe,OAAO;IAAEb;EAAS,CAAC,GAAGN,KAAK;EAExF,MAAMO,SAAS,GAAG;IAAEN,OAAO;IAAEC,QAAQ;IAAElB,QAAQ;IAAEmB;EAAM,CAAC;EAExD,oBACEpE,MAAA,CAAAyE,OAAA,CAAAC,aAAA,CAACO,eAAe,MAAAN,SAAA,CAAAF,OAAA;IACdJ,EAAE,EAAEA,EAAG;IACPO,SAAS,EAAE;MAAEC,KAAK,EAAE;QAAEC,GAAG,EAAEP;MAAS;IAAE,CAAE;IACxCQ,aAAa;EAAA,GACTP,SAAS;IACb9B,WAAW,EAAEA,WAAY;IACzBsC,SAAS,EAAEvE,UAAW;IACtB4E,IAAI,EAAED;EAAQ,EACf,CAAC;AAEN,CAAC;AAAClD,OAAA,CAAAiD,WAAA,GAAAA,WAAA;AAEK,MAAMG,WAAW,SAASC,cAAK,CAACC,SAAS,CAAC;EA0B/CC,WAAWA,CAACxB,KAAK,EAAE;IACjB,KAAK,CAACA,KAAK,CAAC;IAAC,IAAAyB,gBAAA,CAAAjB,OAAA,yBAcEkB,KAAK,IAAK;MACzB,MAAM;QAAEC;MAAW,CAAC,GAAG,IAAI,CAAC3B,KAAK;MAEjC,IAAI2B,UAAU,KAAK,UAAU,EAAE;MAE/B,MAAMC,WAAW,GAAGF,KAAK,CAAChD,GAAG,KAAK,WAAW;MAC7C,MAAMmD,SAAS,GAAGH,KAAK,CAAChD,GAAG,KAAK,SAAS;MAEzC,IAAI,CAACkD,WAAW,IAAI,CAACC,SAAS,EAAE;MAEhCH,KAAK,CAACI,cAAc,CAAC,CAAC;MAEtB,MAAMC,SAAS,GAAGC,QAAQ,CAACC,cAAc,CAAC,IAAI,CAACC,QAAQ,CAAC;MACxD,IAAI,CAACH,SAAS,EAAE;MAEhB,MAAMI,QAAQ,GAAGJ,SAAS,CAACK,OAAO,CAAC,UAAU,CAAC;MAC9C,IAAI,CAACD,QAAQ,EAAE;MAEf,MAAME,eAAe,GAAGC,KAAK,CAACC,IAAI,CAACJ,QAAQ,CAACK,gBAAgB,CAAC,wBAAwB,CAAC,CAAC;MAEvF,MAAMC,YAAY,GAAGJ,eAAe,CAACK,SAAS,CAAEC,EAAE,IAAKA,EAAE,KAAKZ,SAAS,CAAC;MACxE,IAAIU,YAAY,KAAK,CAAC,CAAC,EAAE;MAEzB,MAAMG,SAAS,GAAGhB,WAAW,GAAGa,YAAY,GAAG,CAAC,GAAGA,YAAY,GAAG,CAAC;MACnE,MAAMI,MAAM,GAAGR,eAAe,CAACO,SAAS,CAAC;MAEzC,IAAIC,MAAM,EAAE;QACVA,MAAM,CAACC,KAAK,CAAC,CAAC;MAChB;IACF,CAAC;IA1CC,IAAI,CAACC,cAAc,GAAG,IAAI,CAACA,cAAc,CAACC,IAAI,CAAC,IAAI,CAAC;IACpD,IAAI,CAACd,QAAQ,GAAG,IAAI,CAACe,gBAAgB,CAAC,CAAC;IACvC,IAAI,CAACC,MAAM,GAAG,GAAG,IAAI,CAAChB,QAAQ,OAAO;EACvC;EAEAa,cAAcA,CAACrB,KAAK,EAAE;IACpB,IAAI,CAAC1B,KAAK,CAACE,QAAQ,CAACwB,KAAK,CAAC;EAC5B;EAEAuB,gBAAgBA,CAAA,EAAG;IACjB,OAAO,SAAS,GAAG,CAACE,IAAI,CAACC,MAAM,CAAC,CAAC,GAAG,KAAK,EAAEC,OAAO,CAAC,CAAC;EACtD;EAiCAC,MAAMA,CAAA,EAAG;IACP,MAAM;MACJ3B,UAAU;MACV3C,QAAQ;MACRuE,UAAU;MACVC,QAAQ;MACRC,KAAK;MACLhF,WAAW;MACXsC,SAAS;MACT2C,SAAS;MACTC,QAAQ;MACRC,cAAc;MACdC,aAAa;MACb1D,KAAK;MACLF,OAAO;MACPkB,OAAO;MACP2C;IACF,CAAC,GAAG,IAAI,CAAC9D,KAAK;IAEd,MAAM+D,GAAG,GAAGpC,UAAU,KAAK,UAAU,GAAG5B,cAAc,GAAGmB,WAAW;IACpE,MAAM8C,WAAW,GAAGrC,UAAU,KAAK,UAAU,GAAG,UAAU,GAAG,cAAc;IAE3E,MAAMsC,QAAQ,GAAG;MACf,IAAIJ,aAAa,KAAK,YAAY,IAAI;QACpC,CAAC,MAAMrH,UAAU,EAAE,GAAG;UACpB0H,OAAO,EAAE,KAAK;UACdC,MAAM,EAAE;QACV;MACF,CAAC,CAAC;MACF,IAAIL,sBAAsB,IAAID,aAAa,KAAK,MAAM,IAAI;QACxD,WAAW,EAAE;UACXhH,UAAU,EAAE;QACd;MACF,CAAC,CAAC;MACF,IAAIiH,sBAAsB,IAAID,aAAa,KAAK,MAAM,IAAI;QACxDO,cAAc,EAAE,QAAQ;QACxB,WAAW,EAAE;UACXvH,UAAU,EAAE;QACd;MACF,CAAC;IACH,CAAC;IAED,MAAMwH,WAAW,gBACftI,MAAA,CAAAyE,OAAA,CAAAC,aAAA,CAAA1E,MAAA,CAAAyE,OAAA,CAAA8D,QAAA,QACGf,UAAU,IAAI,CAACO,sBAAsB,gBACpC/H,MAAA,CAAAyE,OAAA,CAAAC,aAAA,CAAChE,GAAG;MAAC8H,SAAS,EAAC;IAAM,GAClBhB,UAAU,EAAC,GAAC,EAAC,QAAQ,eACtBxH,MAAA,CAAAyE,OAAA,CAAAC,aAAA,CAACrE,SAAA,CAAAoI,aAAa;MAACzD,SAAS,EAAC,cAAc;MAAC0D,MAAM,EAAEhB,KAAM;MAACtC,OAAO,EAAC;IAAM,CAAE,CACpE,CAAC,gBAENpF,MAAA,CAAAyE,OAAA,CAAAC,aAAA,CAACrE,SAAA,CAAAoI,aAAa;MAACzD,SAAS,EAAC,cAAc;MAAC0D,MAAM,EAAEhB,KAAM;MAACtC,OAAO,EAAC;IAAM,CAAE,CAEzE,CACH;IAED,MAAMuD,iBAAiB,gBACrB3I,MAAA,CAAAyE,OAAA,CAAAC,aAAA,CAAChD,MAAM;MAAC2C,EAAE,EAAE,IAAI,CAAC8C;IAAO,GACrBvB,UAAU,KAAK,UAAU,GAAG,qCAAqC,GAAG,yCAC/D,CACT;IAED,MAAMgD,QAAQ,GAAG;MACf3F,QAAQ;MACRiB,OAAO;MACPxB,WAAW;MACX0C,OAAO;MACPhB,KAAK;MACLC,EAAE,EAAE,IAAI,CAAC8B,QAAQ;MACjBhC,QAAQ,EAAE,IAAI,CAAC6C,cAAc;MAC7B1C,SAAS,EAAE,IAAI,CAACuE,aAAa;MAC7B,kBAAkB,EAAE,IAAI,CAAC1B;IAC3B,CAAC;IAED,MAAM2B,cAAc,GAClB,OAAOpB,KAAK,KAAK,QAAQ,KACxBA,KAAK,CAACqB,QAAQ,CAAC,OAAO,CAAC,IACtBrB,KAAK,CAACqB,QAAQ,CAAC,KAAK,CAAC,IACrBrB,KAAK,CAACqB,QAAQ,CAAC,KAAK,CAAC,IACrBrB,KAAK,CAACqB,QAAQ,CAAC,MAAM,CAAC,IACtBrB,KAAK,CAACqB,QAAQ,CAAC,YAAY,CAAC,IAC5BrB,KAAK,CAACqB,QAAQ,CAAC,UAAU,CAAC,IAC1BrB,KAAK,CAACqB,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAErC,MAAMC,OAAO,GAAGjB,sBAAsB,gBACpC/H,MAAA,CAAAyE,OAAA,CAAAC,aAAA,CAACpD,uBAAuB,QACrBwH,cAAc,IAAIH,iBAAiB,eACpC3I,MAAA,CAAAyE,OAAA,CAAAC,aAAA,CAACsD,GAAG,MAAArD,SAAA,CAAAF,OAAA,MAAKmE,QAAQ;MAAEK,KAAK,EAAE;QAAEd,OAAO,EAAE;MAAE;IAAE,EAAE,CAAC,EAC3CX,UAAU,GAAG,GAAGA,UAAU,GAAG,GAAG,EACV,CAAC,gBAE1BxH,MAAA,CAAAyE,OAAA,CAAAC,aAAA,CAAA1E,MAAA,CAAAyE,OAAA,CAAA8D,QAAA,QACGO,cAAc,IAAIH,iBAAiB,eACpC3I,MAAA,CAAAyE,OAAA,CAAAC,aAAA,CAACsD,GAAG,MAAArD,SAAA,CAAAF,OAAA,MAAKmE,QAAQ;MAAEhE,SAAS,EAAE;QAAEC,KAAK,EAAE;UAAEC,GAAG,EAAE,IAAI,CAACb,KAAK,CAACiF;QAAa;MAAE;IAAE,EAAE,CAC5E,CACH;IAED,oBACElJ,MAAA,CAAAyE,OAAA,CAAAC,aAAA;MAAKM,SAAS,EAAE,IAAAmE,mBAAU,EAACnE,SAAS,EAAE,aAAa,GAAGiD,WAAW,EAAE,cAAc;IAAE,gBACjFjI,MAAA,CAAAyE,OAAA,CAAAC,aAAA,CAAChE,GAAG,QACD,CAACkH,QAAQ,IAAIC,cAAc,iBAAI7H,MAAA,CAAAyE,OAAA,CAAAC,aAAA,CAAClE,aAAA,CAAAiE,OAAY;MAAC/B,WAAW,EAAEA;IAAY,CAAE,CAAC,eAC1E1C,MAAA,CAAAyE,OAAA,CAAAC,aAAA,CAACxD,cAAc;MAAC8D,SAAS,EAAC,iBAAiB;MAACoE,EAAE,EAAElB;IAAS,gBACvDlI,MAAA,CAAAyE,OAAA,CAAAC,aAAA,CAACzC,sBAAsB;MACrByF,KAAK,EAAEY,WAAY;MACnBlE,KAAK,EAAEA,KAAM;MACbiF,OAAO,EAAE,IAAI,CAAClD,QAAS;MACvBmD,cAAc,EAAEvB,sBAAsB,GAAG,KAAK,GAAGwB,SAAU;MAC3DP,OAAO,EAAEA;IAAQ,CAClB,CACa,CACb,CAAC,EACLrB,SAAS,iBAAI3H,MAAA,CAAAyE,OAAA,CAAAC,aAAA,CAACrE,SAAA,CAAAoI,aAAa;MAACzD,SAAS,EAAC,WAAW;MAACwE,gBAAgB,EAAC,WAAW;MAACd,MAAM,EAAEf;IAAU,CAAE,CAAC,eACrG3H,MAAA,CAAAyE,OAAA,CAAAC,aAAA,CAACrE,SAAA,CAAAoJ,QAAQ;MAAChC,QAAQ,EAAEA,QAAS;MAAC/E,WAAW,EAAEA;IAAY,CAAE,CACtD,CAAC;EAEV;AACF;AAACR,OAAA,CAAAoD,WAAA,GAAAA,WAAA;AAAA,IAAAI,gBAAA,CAAAjB,OAAA,EA3LYa,WAAW,eACH;EACjBM,UAAU,EAAE8D,kBAAS,CAACC,KAAK,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;EAClDnC,UAAU,EAAEkC,kBAAS,CAACE,MAAM;EAC5B1F,OAAO,EAAEwF,kBAAS,CAACG,IAAI,CAACC,UAAU;EAClCpH,WAAW,EAAEgH,kBAAS,CAACE,MAAM;EAC7B3G,QAAQ,EAAEyG,kBAAS,CAACG,IAAI,CAACC,UAAU;EACnCrC,QAAQ,EAAEiC,kBAAS,CAACE,MAAM;EAC1BlC,KAAK,EAAEgC,kBAAS,CAACE,MAAM,CAACE,UAAU;EAClCnC,SAAS,EAAE+B,kBAAS,CAACE,MAAM;EAC3BzF,QAAQ,EAAEuF,kBAAS,CAACK,IAAI,CAACD,UAAU;EACnC1F,KAAK,EAAEsF,kBAAS,CAACE,MAAM,CAACE,UAAU;EAClC9E,SAAS,EAAE0E,kBAAS,CAACE,MAAM;EAC3BxE,OAAO,EAAEsE,kBAAS,CAACE,MAAM;EACzBhC,QAAQ,EAAE8B,kBAAS,CAACG,IAAI;EACxBhC,cAAc,EAAE6B,kBAAS,CAACG,IAAI;EAC9B/B,aAAa,EAAE4B,kBAAS,CAACC,KAAK,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;EAClE5B,sBAAsB,EAAE2B,kBAAS,CAACG;AACpC,CAAC;AAAA,IAAAnE,gBAAA,CAAAjB,OAAA,EAlBUa,WAAW,kBAoBA;EACpBqC,SAAS,EAAE,IAAI;EACfzD,OAAO,EAAE,KAAK;EACd2D,cAAc,EAAE;AAClB,CAAC;AAAA,IAAAmC,QAAA,GAAA9H,OAAA,CAAAuC,OAAA,GAqKYa,WAAW","ignoreList":[]}
package/lib/index.js CHANGED
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.isComplete = exports.default = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
8
9
  var _main = _interopRequireDefault(require("./main"));
9
10
  var _react = _interopRequireDefault(require("react"));
10
11
  var _client = require("react-dom/client");
@@ -54,6 +55,26 @@ exports.isComplete = isComplete;
54
55
  class MultipleChoice extends HTMLElement {
55
56
  constructor() {
56
57
  super();
58
+ (0, _defineProperty2.default)(this, "_scheduleMathRender", () => {
59
+ if (this._mathRenderPending) return;
60
+ this._mathRenderPending = true;
61
+ requestAnimationFrame(() => {
62
+ if (this._mathObserver) {
63
+ this._mathObserver.disconnect();
64
+ }
65
+ log('render complete - render math');
66
+ (0, _mathRendering.renderMath)(this);
67
+ this._mathRenderPending = false;
68
+ setTimeout(() => {
69
+ if (this._mathObserver) {
70
+ this._mathObserver.observe(this, {
71
+ childList: true,
72
+ subtree: true
73
+ });
74
+ }
75
+ }, 50);
76
+ });
77
+ });
57
78
  this._model = null;
58
79
  this._session = null;
59
80
  this._options = null; // added for ebsr print mode detection
@@ -62,6 +83,8 @@ class MultipleChoice extends HTMLElement {
62
83
  this._keyboardEventsEnabled = false;
63
84
  this._audioInitialized = false;
64
85
  this._root = null;
86
+ this._mathObserver = null;
87
+ this._mathRenderPending = false;
65
88
  this._rerender = (0, _lodashEs.debounce)(() => {
66
89
  if (this._model && this._session) {
67
90
  var element = /*#__PURE__*/_react.default.createElement(_main.default, {
@@ -76,15 +99,11 @@ class MultipleChoice extends HTMLElement {
76
99
  this.setAttribute('aria-label', this._model.choiceMode === 'radio' ? 'Multiple Choice Question' : 'Multiple Correct Answer Question');
77
100
  this.setAttribute('role', 'region');
78
101
  this.setLangAttribute();
102
+ this._initMathObserver();
79
103
  if (!this._root) {
80
104
  this._root = (0, _client.createRoot)(this);
81
105
  }
82
106
  this._root.render(element);
83
- // Use requestAnimationFrame to ensure DOM is fully painted before rendering math
84
- requestAnimationFrame(() => {
85
- log('render complete - render math');
86
- (0, _mathRendering.renderMath)(this);
87
- });
88
107
  if (this._model.keyboardEventsEnabled === true && !this._keyboardEventsEnabled) {
89
108
  this.enableKeyboardEvents();
90
109
  }
@@ -105,6 +124,20 @@ class MultipleChoice extends HTMLElement {
105
124
  trailing: true
106
125
  });
107
126
  }
127
+ _initMathObserver() {
128
+ if (this._mathObserver) return;
129
+ this._mathObserver = new MutationObserver(this._scheduleMathRender);
130
+ this._mathObserver.observe(this, {
131
+ childList: true,
132
+ subtree: true
133
+ });
134
+ }
135
+ _disconnectMathObserver() {
136
+ if (this._mathObserver) {
137
+ this._mathObserver.disconnect();
138
+ this._mathObserver = null;
139
+ }
140
+ }
108
141
  onShowCorrectToggle() {
109
142
  (0, _mathRendering.renderMath)(this);
110
143
  }
@@ -165,6 +198,7 @@ class MultipleChoice extends HTMLElement {
165
198
  return info;
166
199
  }
167
200
  connectedCallback() {
201
+ this._initMathObserver();
168
202
  this._rerender();
169
203
 
170
204
  // Observation: audio in Chrome will have the autoplay attribute,
@@ -249,6 +283,7 @@ class MultipleChoice extends HTMLElement {
249
283
  }
250
284
  }
251
285
  disconnectedCallback() {
286
+ this._disconnectMathObserver();
252
287
  if (this._keyboardEventsEnabled) {
253
288
  window.removeEventListener('keydown', this._boundHandleKeyDown);
254
289
  this._keyboardEventsEnabled = false;
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_main","_interopRequireDefault","require","_react","_client","_lodashEs","_debug","_piePlayerEvents","_mathRendering","_renderUi","_sessionUpdater","log","debug","isComplete","session","model","audioComplete","elementContext","autoplayAudioEnabled","completeAudioEnabled","audio","querySelector","isInsidePrompt","closest","value","choiceMode","minSelections","maxSelections","selections","length","exports","MultipleChoice","HTMLElement","constructor","_model","_session","_options","_boundHandleKeyDown","handleKeyDown","bind","_keyboardEventsEnabled","_audioInitialized","_root","_rerender","debounce","element","React","createElement","Main","options","onChoiceChanged","_onChange","onShowCorrectToggle","setAttribute","setLangAttribute","createRoot","render","requestAnimationFrame","renderMath","keyboardEventsEnabled","enableKeyboardEvents","leading","trailing","_dispatchResponseChanged","dispatchEvent","SessionChangedEvent","tagName","toLowerCase","_dispatchModelSet","ModelSetEvent","undefined","language","lang","slice","s","o","data","updateSessionValue","_createAudioInfoToast","info","document","id","Object","assign","style","position","top","width","height","display","justifyContent","alignItems","background","zIndex","cursor","img","src","EnableAudioAutoplayImage","alt","appendChild","connectedCallback","observer","MutationObserver","mutationsList","forEach","mutation","type","container","enableAudio","play","removeChild","removeEventListener","setTimeout","paused","addEventListener","handlePlaying","updateSessionMetadata","audioStartTime","Date","getTime","handleEnded","audioEndTime","_audio","_handlePlaying","_handleEnded","_enableAudio","disconnect","observe","childList","subtree","window","disconnectedCallback","unmount","event","mode","keyToIndex","key","numOffset","letterOffset","test","charCodeAt","choiceIndex","choices","currentValue","choiceId","newValue","selected","includes","selector","default"],"sources":["../src/index.js"],"sourcesContent":["import Main from './main';\nimport React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { debounce } from 'lodash-es';\nimport debug from 'debug';\nimport { ModelSetEvent, SessionChangedEvent } from '@pie-framework/pie-player-events';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport { EnableAudioAutoplayImage } from '@pie-lib/render-ui';\nimport { updateSessionValue, updateSessionMetadata } from './session-updater';\n\nconst log = debug('pie-ui:multiple-choice');\n\nexport const isComplete = (session, model, audioComplete, elementContext) => {\n const { autoplayAudioEnabled, completeAudioEnabled } = model || {};\n\n // check audio completion if audio settings are enabled and audio actually exists\n if (autoplayAudioEnabled && completeAudioEnabled && !audioComplete) {\n if (elementContext) {\n const audio = elementContext.querySelector('audio');\n const isInsidePrompt = audio && audio.closest('#preview-prompt');\n\n // only require audio completion if audio exists and is inside the prompt\n if (audio && isInsidePrompt) {\n return false;\n }\n }\n }\n\n if (!session || !session.value) {\n return false;\n }\n\n const { choiceMode, minSelections = 1, maxSelections } = model || {};\n const selections = session.value.length || 0;\n\n if (choiceMode === 'radio') {\n return !!selections;\n }\n\n if (selections < minSelections || selections > maxSelections) {\n return false;\n }\n\n return true;\n};\n\nexport default class MultipleChoice extends HTMLElement {\n constructor() {\n super();\n this._model = null;\n this._session = null;\n this._options = null; // added for ebsr print mode detection\n this.audioComplete = false;\n this._boundHandleKeyDown = this.handleKeyDown.bind(this);\n this._keyboardEventsEnabled = false;\n this._audioInitialized = false;\n this._root = null;\n\n this._rerender = debounce(\n () => {\n if (this._model && this._session) {\n var element = React.createElement(Main, {\n model: this._model,\n session: this._session,\n options: this._options,\n onChoiceChanged: this._onChange.bind(this),\n onShowCorrectToggle: this.onShowCorrectToggle.bind(this),\n });\n\n //TODO: aria-label is set in the _rerender because we need to change it when the model.choiceMode is updated. Consider revisiting the placement of the aria-label setting in the _rerender\n this.setAttribute(\n 'aria-label',\n this._model.choiceMode === 'radio' ? 'Multiple Choice Question' : 'Multiple Correct Answer Question',\n );\n this.setAttribute('role', 'region');\n this.setLangAttribute();\n\n if (!this._root) {\n this._root = createRoot(this);\n }\n this._root.render(element);\n // Use requestAnimationFrame to ensure DOM is fully painted before rendering math\n requestAnimationFrame(() => {\n log('render complete - render math');\n renderMath(this);\n });\n\n if (this._model.keyboardEventsEnabled === true && !this._keyboardEventsEnabled) {\n this.enableKeyboardEvents();\n }\n } else {\n log('skip');\n }\n },\n 50,\n { leading: false, trailing: true },\n );\n\n this._dispatchResponseChanged = debounce(() => {\n this.dispatchEvent(\n new SessionChangedEvent(\n this.tagName.toLowerCase(),\n isComplete(this._session, this._model, this.audioComplete, this),\n ),\n );\n });\n\n this._dispatchModelSet = debounce(\n () => {\n this.dispatchEvent(\n new ModelSetEvent(\n this.tagName.toLowerCase(),\n isComplete(this._session, this._model, this.audioComplete, this),\n this._model !== undefined,\n ),\n );\n },\n 50,\n { leading: false, trailing: true },\n );\n }\n\n onShowCorrectToggle() {\n renderMath(this);\n }\n\n setLangAttribute() {\n const language = this._model && typeof this._model.language ? this._model.language : '';\n const lang = language ? language.slice(0, 2) : 'en';\n this.setAttribute('lang', lang);\n }\n\n set model(s) {\n this._model = s;\n this._rerender();\n // reset the audioInitialized to false since the model changed, and we might need to reinitialize the audio\n this._audioInitialized = false;\n this._dispatchModelSet();\n }\n\n get session() {\n return this._session;\n }\n\n get options() {\n return this._options;\n }\n\n set options(o) {\n this._options = o;\n this._rerender();\n }\n\n set session(s) {\n this._session = s;\n this._rerender();\n //TODO: remove this session-changed should only be emit on user change\n this._dispatchResponseChanged();\n }\n\n _onChange(data) {\n updateSessionValue(this._session, this._model.choiceMode, data);\n this._dispatchResponseChanged();\n this._rerender();\n }\n\n _createAudioInfoToast() {\n const info = document.createElement('div');\n info.id = 'play-audio-info';\n\n Object.assign(info.style, {\n position: 'absolute',\n top: 0,\n width: '100%',\n height: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n background: 'white',\n zIndex: '1000',\n cursor: 'pointer',\n });\n\n const img = document.createElement('img');\n img.src = EnableAudioAutoplayImage;\n img.alt = 'Click anywhere to enable audio autoplay';\n img.width = 500;\n img.height = 300;\n\n info.appendChild(img);\n return info;\n }\n\n connectedCallback() {\n this._rerender();\n\n // Observation: audio in Chrome will have the autoplay attribute,\n // while other browsers will not have the autoplay attribute and will need a user interaction to play the audio\n // This workaround fixes the issue of audio being cached and played on any user interaction in Safari and Firefox\n const observer = new MutationObserver((mutationsList, observer) => {\n mutationsList.forEach((mutation) => {\n if (mutation.type === 'childList') {\n if (this._audioInitialized) return;\n\n const audio = this.querySelector('audio');\n const isInsidePrompt = audio && audio.closest('#preview-prompt');\n\n if (!this._model) return;\n if (!this._model.autoplayAudioEnabled) return;\n if (audio && !isInsidePrompt) return;\n if (!audio) return;\n\n const info = this._createAudioInfoToast();\n const container = this.querySelector('#main-container');\n const enableAudio = () => {\n if (this.querySelector('#play-audio-info')) {\n audio.play();\n container.removeChild(info);\n }\n\n document.removeEventListener('click', enableAudio);\n };\n\n // if the audio is paused, it means the user has not interacted with the page yet and the audio will not play\n // FIX FOR SAFARI: play with a slight delay to check if autoplay was blocked\n setTimeout(() => {\n if (audio.paused && !this.querySelector('#play-audio-info')) {\n // add info message as a toast to enable audio playback\n container.appendChild(info);\n document.addEventListener('click', enableAudio);\n } else {\n document.removeEventListener('click', enableAudio);\n }\n }, 500);\n\n // we need to listen for the playing event to remove the toast in case the audio plays because of re-rendering\n const handlePlaying = () => {\n updateSessionMetadata(this._session, { audioStartTime: new Date().getTime() });\n\n const info = this.querySelector('#play-audio-info');\n if (info) {\n container.removeChild(info);\n }\n\n audio.removeEventListener('playing', handlePlaying);\n };\n\n audio.addEventListener('playing', handlePlaying);\n\n // we need to listen for the ended event to update the isComplete state\n const handleEnded = () => {\n updateSessionMetadata(this._session, { audioEndTime: new Date().getTime() });\n this.audioComplete = true;\n this._dispatchResponseChanged();\n audio.removeEventListener('ended', handleEnded);\n };\n\n audio.addEventListener('ended', handleEnded);\n\n // store references to remove later\n this._audio = audio;\n this._handlePlaying = handlePlaying;\n this._handleEnded = handleEnded;\n this._enableAudio = enableAudio;\n // set to true to prevent multiple initializations\n this._audioInitialized = true;\n\n observer.disconnect();\n }\n });\n });\n\n observer.observe(this, { childList: true, subtree: true });\n }\n\n enableKeyboardEvents() {\n if (!this._keyboardEventsEnabled) {\n window.addEventListener('keydown', this._boundHandleKeyDown);\n this._keyboardEventsEnabled = true;\n }\n }\n\n disconnectedCallback() {\n if (this._keyboardEventsEnabled) {\n window.removeEventListener('keydown', this._boundHandleKeyDown);\n this._keyboardEventsEnabled = false;\n }\n\n document.removeEventListener('click', this._enableAudio);\n\n if (this._audio) {\n this._audio.removeEventListener('playing', this._handlePlaying);\n this._audio.removeEventListener('ended', this._handleEnded);\n this._audio = null;\n }\n\n if (this._root) {\n this._root.unmount();\n }\n }\n\n /**\n * Handles global keyboard events for selecting or toggling multiple-choice answers.\n * Maps keys (1-9, 0, a-j, A-J) to choices and updates the session state accordingly.\n * Ensures valid key presses toggle or select the appropriate choice based on the model.\n */\n handleKeyDown(event) {\n if (!this._model || !this._session) {\n return;\n }\n\n const { mode } = this._model;\n if (mode !== 'gather') {\n return;\n }\n\n const keyToIndex = (key) => {\n const numOffset = key >= '1' && key <= '9' ? key - '1' : key === '0' ? 9 : -1;\n const letterOffset = /^[a-jA-J]$/.test(key) ? key.toLowerCase().charCodeAt(0) - 'a'.charCodeAt(0) : -1;\n return numOffset >= 0 ? numOffset : letterOffset;\n };\n\n const choiceIndex = keyToIndex(event.key);\n\n if (choiceIndex === undefined || choiceIndex <= -1 || choiceIndex >= this._model.choices?.length) {\n return;\n }\n\n const currentValue = this._session.value || [];\n const choiceId = this._model.choices[choiceIndex].value;\n\n const newValue = {\n value: choiceId,\n selected: !currentValue.includes(choiceId),\n selector: 'Keyboard',\n };\n\n this._onChange(newValue);\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_main","_interopRequireDefault","require","_react","_client","_lodashEs","_debug","_piePlayerEvents","_mathRendering","_renderUi","_sessionUpdater","log","debug","isComplete","session","model","audioComplete","elementContext","autoplayAudioEnabled","completeAudioEnabled","audio","querySelector","isInsidePrompt","closest","value","choiceMode","minSelections","maxSelections","selections","length","exports","MultipleChoice","HTMLElement","constructor","_defineProperty2","default","_mathRenderPending","requestAnimationFrame","_mathObserver","disconnect","renderMath","setTimeout","observe","childList","subtree","_model","_session","_options","_boundHandleKeyDown","handleKeyDown","bind","_keyboardEventsEnabled","_audioInitialized","_root","_rerender","debounce","element","React","createElement","Main","options","onChoiceChanged","_onChange","onShowCorrectToggle","setAttribute","setLangAttribute","_initMathObserver","createRoot","render","keyboardEventsEnabled","enableKeyboardEvents","leading","trailing","_dispatchResponseChanged","dispatchEvent","SessionChangedEvent","tagName","toLowerCase","_dispatchModelSet","ModelSetEvent","undefined","MutationObserver","_scheduleMathRender","_disconnectMathObserver","language","lang","slice","s","o","data","updateSessionValue","_createAudioInfoToast","info","document","id","Object","assign","style","position","top","width","height","display","justifyContent","alignItems","background","zIndex","cursor","img","src","EnableAudioAutoplayImage","alt","appendChild","connectedCallback","observer","mutationsList","forEach","mutation","type","container","enableAudio","play","removeChild","removeEventListener","paused","addEventListener","handlePlaying","updateSessionMetadata","audioStartTime","Date","getTime","handleEnded","audioEndTime","_audio","_handlePlaying","_handleEnded","_enableAudio","window","disconnectedCallback","unmount","event","mode","keyToIndex","key","numOffset","letterOffset","test","charCodeAt","choiceIndex","choices","currentValue","choiceId","newValue","selected","includes","selector"],"sources":["../src/index.js"],"sourcesContent":["import Main from './main';\nimport React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { debounce } from 'lodash-es';\nimport debug from 'debug';\nimport { ModelSetEvent, SessionChangedEvent } from '@pie-framework/pie-player-events';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport { EnableAudioAutoplayImage } from '@pie-lib/render-ui';\nimport { updateSessionValue, updateSessionMetadata } from './session-updater';\n\nconst log = debug('pie-ui:multiple-choice');\n\nexport const isComplete = (session, model, audioComplete, elementContext) => {\n const { autoplayAudioEnabled, completeAudioEnabled } = model || {};\n\n // check audio completion if audio settings are enabled and audio actually exists\n if (autoplayAudioEnabled && completeAudioEnabled && !audioComplete) {\n if (elementContext) {\n const audio = elementContext.querySelector('audio');\n const isInsidePrompt = audio && audio.closest('#preview-prompt');\n\n // only require audio completion if audio exists and is inside the prompt\n if (audio && isInsidePrompt) {\n return false;\n }\n }\n }\n\n if (!session || !session.value) {\n return false;\n }\n\n const { choiceMode, minSelections = 1, maxSelections } = model || {};\n const selections = session.value.length || 0;\n\n if (choiceMode === 'radio') {\n return !!selections;\n }\n\n if (selections < minSelections || selections > maxSelections) {\n return false;\n }\n\n return true;\n};\n\nexport default class MultipleChoice extends HTMLElement {\n constructor() {\n super();\n this._model = null;\n this._session = null;\n this._options = null; // added for ebsr print mode detection\n this.audioComplete = false;\n this._boundHandleKeyDown = this.handleKeyDown.bind(this);\n this._keyboardEventsEnabled = false;\n this._audioInitialized = false;\n this._root = null;\n this._mathObserver = null;\n this._mathRenderPending = false;\n\n this._rerender = debounce(\n () => {\n if (this._model && this._session) {\n var element = React.createElement(Main, {\n model: this._model,\n session: this._session,\n options: this._options,\n onChoiceChanged: this._onChange.bind(this),\n onShowCorrectToggle: this.onShowCorrectToggle.bind(this),\n });\n\n //TODO: aria-label is set in the _rerender because we need to change it when the model.choiceMode is updated. Consider revisiting the placement of the aria-label setting in the _rerender\n this.setAttribute(\n 'aria-label',\n this._model.choiceMode === 'radio' ? 'Multiple Choice Question' : 'Multiple Correct Answer Question',\n );\n this.setAttribute('role', 'region');\n this.setLangAttribute();\n\n this._initMathObserver();\n\n if (!this._root) {\n this._root = createRoot(this);\n }\n this._root.render(element);\n\n if (this._model.keyboardEventsEnabled === true && !this._keyboardEventsEnabled) {\n this.enableKeyboardEvents();\n }\n } else {\n log('skip');\n }\n },\n 50,\n { leading: false, trailing: true },\n );\n\n this._dispatchResponseChanged = debounce(() => {\n this.dispatchEvent(\n new SessionChangedEvent(\n this.tagName.toLowerCase(),\n isComplete(this._session, this._model, this.audioComplete, this),\n ),\n );\n });\n\n this._dispatchModelSet = debounce(\n () => {\n this.dispatchEvent(\n new ModelSetEvent(\n this.tagName.toLowerCase(),\n isComplete(this._session, this._model, this.audioComplete, this),\n this._model !== undefined,\n ),\n );\n },\n 50,\n { leading: false, trailing: true },\n );\n }\n\n _scheduleMathRender = () => {\n if (this._mathRenderPending) return;\n this._mathRenderPending = true;\n\n requestAnimationFrame(() => {\n if (this._mathObserver) {\n this._mathObserver.disconnect();\n }\n log('render complete - render math');\n renderMath(this);\n this._mathRenderPending = false;\n setTimeout(() => {\n if (this._mathObserver) {\n this._mathObserver.observe(this, { childList: true, subtree: true });\n }\n }, 50);\n });\n };\n\n _initMathObserver() {\n if (this._mathObserver) return;\n this._mathObserver = new MutationObserver(this._scheduleMathRender);\n this._mathObserver.observe(this, { childList: true, subtree: true });\n }\n\n _disconnectMathObserver() {\n if (this._mathObserver) {\n this._mathObserver.disconnect();\n this._mathObserver = null;\n }\n }\n\n onShowCorrectToggle() {\n renderMath(this);\n }\n\n setLangAttribute() {\n const language = this._model && typeof this._model.language ? this._model.language : '';\n const lang = language ? language.slice(0, 2) : 'en';\n this.setAttribute('lang', lang);\n }\n\n set model(s) {\n this._model = s;\n this._rerender();\n // reset the audioInitialized to false since the model changed, and we might need to reinitialize the audio\n this._audioInitialized = false;\n this._dispatchModelSet();\n }\n\n get session() {\n return this._session;\n }\n\n get options() {\n return this._options;\n }\n\n set options(o) {\n this._options = o;\n this._rerender();\n }\n\n set session(s) {\n this._session = s;\n this._rerender();\n //TODO: remove this session-changed should only be emit on user change\n this._dispatchResponseChanged();\n }\n\n _onChange(data) {\n updateSessionValue(this._session, this._model.choiceMode, data);\n this._dispatchResponseChanged();\n this._rerender();\n }\n\n _createAudioInfoToast() {\n const info = document.createElement('div');\n info.id = 'play-audio-info';\n\n Object.assign(info.style, {\n position: 'absolute',\n top: 0,\n width: '100%',\n height: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n background: 'white',\n zIndex: '1000',\n cursor: 'pointer',\n });\n\n const img = document.createElement('img');\n img.src = EnableAudioAutoplayImage;\n img.alt = 'Click anywhere to enable audio autoplay';\n img.width = 500;\n img.height = 300;\n\n info.appendChild(img);\n return info;\n }\n\n connectedCallback() {\n this._initMathObserver();\n this._rerender();\n\n // Observation: audio in Chrome will have the autoplay attribute,\n // while other browsers will not have the autoplay attribute and will need a user interaction to play the audio\n // This workaround fixes the issue of audio being cached and played on any user interaction in Safari and Firefox\n const observer = new MutationObserver((mutationsList, observer) => {\n mutationsList.forEach((mutation) => {\n if (mutation.type === 'childList') {\n if (this._audioInitialized) return;\n\n const audio = this.querySelector('audio');\n const isInsidePrompt = audio && audio.closest('#preview-prompt');\n\n if (!this._model) return;\n if (!this._model.autoplayAudioEnabled) return;\n if (audio && !isInsidePrompt) return;\n if (!audio) return;\n\n const info = this._createAudioInfoToast();\n const container = this.querySelector('#main-container');\n const enableAudio = () => {\n if (this.querySelector('#play-audio-info')) {\n audio.play();\n container.removeChild(info);\n }\n\n document.removeEventListener('click', enableAudio);\n };\n\n // if the audio is paused, it means the user has not interacted with the page yet and the audio will not play\n // FIX FOR SAFARI: play with a slight delay to check if autoplay was blocked\n setTimeout(() => {\n if (audio.paused && !this.querySelector('#play-audio-info')) {\n // add info message as a toast to enable audio playback\n container.appendChild(info);\n document.addEventListener('click', enableAudio);\n } else {\n document.removeEventListener('click', enableAudio);\n }\n }, 500);\n\n // we need to listen for the playing event to remove the toast in case the audio plays because of re-rendering\n const handlePlaying = () => {\n updateSessionMetadata(this._session, { audioStartTime: new Date().getTime() });\n\n const info = this.querySelector('#play-audio-info');\n if (info) {\n container.removeChild(info);\n }\n\n audio.removeEventListener('playing', handlePlaying);\n };\n\n audio.addEventListener('playing', handlePlaying);\n\n // we need to listen for the ended event to update the isComplete state\n const handleEnded = () => {\n updateSessionMetadata(this._session, { audioEndTime: new Date().getTime() });\n this.audioComplete = true;\n this._dispatchResponseChanged();\n audio.removeEventListener('ended', handleEnded);\n };\n\n audio.addEventListener('ended', handleEnded);\n\n // store references to remove later\n this._audio = audio;\n this._handlePlaying = handlePlaying;\n this._handleEnded = handleEnded;\n this._enableAudio = enableAudio;\n // set to true to prevent multiple initializations\n this._audioInitialized = true;\n\n observer.disconnect();\n }\n });\n });\n\n observer.observe(this, { childList: true, subtree: true });\n }\n\n enableKeyboardEvents() {\n if (!this._keyboardEventsEnabled) {\n window.addEventListener('keydown', this._boundHandleKeyDown);\n this._keyboardEventsEnabled = true;\n }\n }\n\n disconnectedCallback() {\n this._disconnectMathObserver();\n if (this._keyboardEventsEnabled) {\n window.removeEventListener('keydown', this._boundHandleKeyDown);\n this._keyboardEventsEnabled = false;\n }\n\n document.removeEventListener('click', this._enableAudio);\n\n if (this._audio) {\n this._audio.removeEventListener('playing', this._handlePlaying);\n this._audio.removeEventListener('ended', this._handleEnded);\n this._audio = null;\n }\n\n if (this._root) {\n this._root.unmount();\n }\n }\n\n /**\n * Handles global keyboard events for selecting or toggling multiple-choice answers.\n * Maps keys (1-9, 0, a-j, A-J) to choices and updates the session state accordingly.\n * Ensures valid key presses toggle or select the appropriate choice based on the model.\n */\n handleKeyDown(event) {\n if (!this._model || !this._session) {\n return;\n }\n\n const { mode } = this._model;\n if (mode !== 'gather') {\n return;\n }\n\n const keyToIndex = (key) => {\n const numOffset = key >= '1' && key <= '9' ? key - '1' : key === '0' ? 9 : -1;\n const letterOffset = /^[a-jA-J]$/.test(key) ? key.toLowerCase().charCodeAt(0) - 'a'.charCodeAt(0) : -1;\n return numOffset >= 0 ? numOffset : letterOffset;\n };\n\n const choiceIndex = keyToIndex(event.key);\n\n if (choiceIndex === undefined || choiceIndex <= -1 || choiceIndex >= this._model.choices?.length) {\n return;\n }\n\n const currentValue = this._session.value || [];\n const choiceId = this._model.choices[choiceIndex].value;\n\n const newValue = {\n value: choiceId,\n selected: !currentValue.includes(choiceId),\n selector: 'Keyboard',\n };\n\n this._onChange(newValue);\n }\n}\n"],"mappings":"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","ignoreList":[]}
package/lib/print.js CHANGED
@@ -61,11 +61,12 @@ class MultipleChoicePrint extends HTMLElement {
61
61
  this._root = (0, _client.createRoot)(this);
62
62
  }
63
63
  this._root.render(element);
64
- // Use requestAnimationFrame to ensure DOM is fully painted before rendering math
65
- // This is especially important for nested components like PreviewPrompt (rationale, choice labels)
64
+ // Use double requestAnimationFrame so React has committed to the DOM before we render math
66
65
  requestAnimationFrame(() => {
67
- log('render complete - render math');
68
- (0, _mathRendering.renderMath)(this);
66
+ requestAnimationFrame(() => {
67
+ log('render complete - render math');
68
+ (0, _mathRendering.renderMath)(this);
69
+ });
69
70
  });
70
71
  } else {
71
72
  log('skip');
package/lib/print.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"print.js","names":["_react","_interopRequireDefault","require","_client","_lodashEs","_main","_mathRendering","_debug","log","debug","preparePrintModel","model","opts","instr","role","prompt","promptEnabled","undefined","teacherInstructions","teacherInstructionsEnabled","showTeacherInstructions","alwaysShowCorrect","mode","disabled","animationsDisabled","lockChoiceOrder","choicesLayout","choices","cloneDeep","map","c","rationale","rationaleEnabled","hideTick","feedback","keyMode","choicePrefix","MultipleChoicePrint","HTMLElement","constructor","_options","_model","_session","_root","_rerender","debounce","printModel","element","React","createElement","Main","session","options","createRoot","render","requestAnimationFrame","renderMath","leading","trailing","o","s","connectedCallback","disconnectedCallback","unmount","exports","default"],"sources":["../src/print.js"],"sourcesContent":["import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { cloneDeep, debounce } from 'lodash-es';\nimport Main from './main';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport debug from 'debug';\n\nconst log = debug('pie-element:multiple-choice:print');\n\n/**\n * Live in same package as main element - so we can access some of the shared comps!\n *\n * - update pslb to build print if src/print.js is there\n * - update demo el\n * - get configure/controller building\n */\n\nconst preparePrintModel = (model, opts) => {\n const instr = opts.role === 'instructor';\n\n model.prompt = model.promptEnabled !== false ? model.prompt : undefined;\n model.teacherInstructions =\n instr && model.teacherInstructionsEnabled !== false ? model.teacherInstructions : undefined;\n model.showTeacherInstructions = instr;\n model.alwaysShowCorrect = instr;\n model.mode = instr ? 'evaluate' : model.mode;\n\n model.disabled = true;\n model.animationsDisabled = true;\n model.lockChoiceOrder = true;\n model.choicesLayout = model.choicesLayout || 'vertical';\n\n const choices = cloneDeep(model.choices);\n\n model.choices = choices.map((c) => {\n c.rationale = instr && model.rationaleEnabled !== false ? c.rationale : undefined;\n c.hideTick = instr;\n c.feedback = undefined;\n return c;\n });\n\n model.keyMode = model.choicePrefix || 'letters';\n\n return model;\n};\n\nexport default class MultipleChoicePrint extends HTMLElement {\n constructor() {\n super();\n this._options = null;\n this._model = null;\n this._session = [];\n this._root = null;\n this._rerender = debounce(\n () => {\n if (this._model && this._session) {\n const printModel = preparePrintModel(this._model, this._options);\n\n const element =\n this._options &&\n React.createElement(Main, {\n model: printModel,\n session: {},\n options: this._options,\n });\n\n if (!this._root) {\n this._root = createRoot(this);\n }\n this._root.render(element);\n // Use requestAnimationFrame to ensure DOM is fully painted before rendering math\n // This is especially important for nested components like PreviewPrompt (rationale, choice labels)\n requestAnimationFrame(() => {\n log('render complete - render math');\n renderMath(this);\n });\n } else {\n log('skip');\n }\n },\n 50,\n { leading: false, trailing: true },\n );\n }\n set options(o) {\n this._options = o;\n }\n\n set model(s) {\n this._model = s;\n this._rerender();\n }\n\n connectedCallback() {}\n\n disconnectedCallback() {\n if (this._root) {\n this._root.unmount();\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"print.js","names":["_react","_interopRequireDefault","require","_client","_lodashEs","_main","_mathRendering","_debug","log","debug","preparePrintModel","model","opts","instr","role","prompt","promptEnabled","undefined","teacherInstructions","teacherInstructionsEnabled","showTeacherInstructions","alwaysShowCorrect","mode","disabled","animationsDisabled","lockChoiceOrder","choicesLayout","choices","cloneDeep","map","c","rationale","rationaleEnabled","hideTick","feedback","keyMode","choicePrefix","MultipleChoicePrint","HTMLElement","constructor","_options","_model","_session","_root","_rerender","debounce","printModel","element","React","createElement","Main","session","options","createRoot","render","requestAnimationFrame","renderMath","leading","trailing","o","s","connectedCallback","disconnectedCallback","unmount","exports","default"],"sources":["../src/print.js"],"sourcesContent":["import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { cloneDeep, debounce } from 'lodash-es';\nimport Main from './main';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport debug from 'debug';\n\nconst log = debug('pie-element:multiple-choice:print');\n\n/**\n * Live in same package as main element - so we can access some of the shared comps!\n *\n * - update pslb to build print if src/print.js is there\n * - update demo el\n * - get configure/controller building\n */\n\nconst preparePrintModel = (model, opts) => {\n const instr = opts.role === 'instructor';\n\n model.prompt = model.promptEnabled !== false ? model.prompt : undefined;\n model.teacherInstructions =\n instr && model.teacherInstructionsEnabled !== false ? model.teacherInstructions : undefined;\n model.showTeacherInstructions = instr;\n model.alwaysShowCorrect = instr;\n model.mode = instr ? 'evaluate' : model.mode;\n\n model.disabled = true;\n model.animationsDisabled = true;\n model.lockChoiceOrder = true;\n model.choicesLayout = model.choicesLayout || 'vertical';\n\n const choices = cloneDeep(model.choices);\n\n model.choices = choices.map((c) => {\n c.rationale = instr && model.rationaleEnabled !== false ? c.rationale : undefined;\n c.hideTick = instr;\n c.feedback = undefined;\n return c;\n });\n\n model.keyMode = model.choicePrefix || 'letters';\n\n return model;\n};\n\nexport default class MultipleChoicePrint extends HTMLElement {\n constructor() {\n super();\n this._options = null;\n this._model = null;\n this._session = [];\n this._root = null;\n this._rerender = debounce(\n () => {\n if (this._model && this._session) {\n const printModel = preparePrintModel(this._model, this._options);\n\n const element =\n this._options &&\n React.createElement(Main, {\n model: printModel,\n session: {},\n options: this._options,\n });\n\n if (!this._root) {\n this._root = createRoot(this);\n }\n this._root.render(element);\n // Use double requestAnimationFrame so React has committed to the DOM before we render math\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n log('render complete - render math');\n renderMath(this);\n });\n });\n } else {\n log('skip');\n }\n },\n 50,\n { leading: false, trailing: true },\n );\n }\n set options(o) {\n this._options = o;\n }\n\n set model(s) {\n this._model = s;\n this._rerender();\n }\n\n connectedCallback() {}\n\n disconnectedCallback() {\n if (this._root) {\n this._root.unmount();\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pie-element/multiple-choice",
3
3
  "repository": "pie-framework/pie-elements",
4
- "version": "12.1.2-next.2",
4
+ "version": "12.1.2-next.3",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -23,7 +23,7 @@
23
23
  "react-dom": "18.3.1",
24
24
  "react-transition-group": "^4.4.5"
25
25
  },
26
- "gitHead": "dec64abbc528e9aa8dff3bed3c55133c3318b96d",
26
+ "gitHead": "a29aff6c2f994c4e4b4847f67a5e9f2928e703af",
27
27
  "scripts": {
28
28
  "postpublish": "../../scripts/postpublish"
29
29
  },