@pie-element/multiple-choice 13.2.1-next.11 → 13.2.1-next.113
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/configure/lib/index.js +1 -0
- package/configure/lib/index.js.map +1 -1
- package/configure/package.json +3 -3
- package/controller/lib/index.js +10 -0
- package/controller/lib/index.js.map +1 -1
- package/controller/package.json +1 -1
- package/lib/choice-input.js +15 -9
- package/lib/choice-input.js.map +1 -1
- package/lib/index.js +5 -2
- package/lib/index.js.map +1 -1
- package/lib/multiple-choice.js +3 -1
- package/lib/multiple-choice.js.map +1 -1
- package/lib/utils.js +14 -0
- package/lib/utils.js.map +1 -0
- package/module/configure.js +1 -1
- package/module/controller.js +12 -15
- package/module/element.js +1 -1
- package/module/manifest.json +2 -2
- package/module/print.js +1 -1
- package/package.json +5 -5
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","getPlayerAttributes","element","player","baseHeadingLevel","undefined","includeSrHeading","getRaw","camelCaseName","hyphenatedName","allLowerName","raw","getAttribute","levelRaw","level","parseInt","Number","isFinite","srRaw","resolveHeadingProps","fromPlayer","_baseHeadingLevel","_includeSrHeading","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","React","createElement","Main","options","onChoiceChanged","_onChange","onShowCorrectToggle","setAttribute","setLangAttribute","_initMathObserver","createRoot","render","keyboardEventsEnabled","enableKeyboardEvents","leading","trailing","_dispatchResponseChanged","dispatchEvent","SessionChangedEvent","tagName","toLowerCase","_dispatchModelSet","ModelSetEvent","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","_initPlayerObserver","observer","mutationsList","forEach","mutation","type","container","enableAudio","play","removeChild","removeEventListener","paused","addEventListener","handlePlaying","updateSessionMetadata","audioStartTime","Date","getTime","handleEnded","audioEndTime","_audio","_handlePlaying","_handleEnded","_enableAudio","window","_playerObserver","attributes","attributeFilter","_disconnectPlayerObserver","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\nfunction getPlayerAttributes(element) {\n const player =\n element.closest('pie-player') ||\n element.closest('pie-item-player');\n\n if (!player) {\n return { baseHeadingLevel: undefined, includeSrHeading: true };\n }\n\n const getRaw = (camelCaseName, hyphenatedName, allLowerName) => {\n let raw = player[camelCaseName];\n\n // fallback in case someone sets via HTML attribute manually\n if (raw == null) {\n raw =\n player.getAttribute(hyphenatedName) ??\n player.getAttribute(allLowerName);\n }\n\n return raw;\n };\n\n const levelRaw = getRaw('baseHeadingLevel', 'base-heading-level', 'baseheadinglevel');\n const level = parseInt(levelRaw, 10);\n const baseHeadingLevel = Number.isFinite(level) && level >= 1 && level <= 6 ? level : undefined;\n\n const srRaw = getRaw('includeSrHeading', 'include-sr-heading', 'includesrheading');\n const includeSrHeading = srRaw == null ? true : srRaw !== false && srRaw !== 'false';\n\n return { baseHeadingLevel, includeSrHeading };\n}\n\n// Resolves heading attributes for a custom element, preferring explicit instance\n// properties (set by a parent element such as EBSR) over player-level attributes.\nfunction resolveHeadingProps(element) {\n const fromPlayer = getPlayerAttributes(element);\n\n return {\n baseHeadingLevel: element._baseHeadingLevel !== undefined ? element._baseHeadingLevel : fromPlayer.baseHeadingLevel,\n includeSrHeading: element._includeSrHeading !== undefined ? element._includeSrHeading : fromPlayer.includeSrHeading,\n };\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 ...resolveHeadingProps(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 baseHeadingLevel(level) {\n this._baseHeadingLevel = level;\n this._rerender();\n }\n\n set includeSrHeading(value) {\n this._includeSrHeading = value;\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._initPlayerObserver();\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 _initPlayerObserver() {\n const player = this.closest('pie-player') || this.closest('pie-item-player');\n if (!player) return;\n\n this._playerObserver = new MutationObserver(() => {\n this._rerender();\n });\n this._playerObserver.observe(player, {\n attributes: true,\n attributeFilter: ['base-heading-level', 'baseheadinglevel', 'include-sr-heading', 'includesrheading'],\n });\n }\n\n _disconnectPlayerObserver() {\n if (this._playerObserver) {\n this._playerObserver.disconnect();\n this._playerObserver = null;\n }\n }\n\n disconnectedCallback() {\n this._disconnectMathObserver();\n this._disconnectPlayerObserver();\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","_utils","log","debug","isComplete","session","model","audioComplete","elementContext","autoplayAudioEnabled","completeAudioEnabled","audio","querySelector","isInsidePrompt","closest","value","choiceMode","minSelections","maxSelections","selections","length","exceedsMaxSelections","exports","getPlayerAttributes","element","player","baseHeadingLevel","undefined","includeSrHeading","getRaw","camelCaseName","hyphenatedName","allLowerName","raw","getAttribute","levelRaw","level","parseInt","Number","isFinite","srRaw","resolveHeadingProps","fromPlayer","_baseHeadingLevel","_includeSrHeading","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","React","createElement","Main","options","onChoiceChanged","_onChange","onShowCorrectToggle","setAttribute","setLangAttribute","_initMathObserver","createRoot","render","keyboardEventsEnabled","enableKeyboardEvents","leading","trailing","_dispatchResponseChanged","dispatchEvent","SessionChangedEvent","tagName","toLowerCase","_dispatchModelSet","ModelSetEvent","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","_initPlayerObserver","observer","mutationsList","forEach","mutation","type","container","enableAudio","play","removeChild","removeEventListener","paused","addEventListener","handlePlaying","updateSessionMetadata","audioStartTime","Date","getTime","handleEnded","audioEndTime","_audio","_handlePlaying","_handleEnded","_enableAudio","window","_playerObserver","attributes","attributeFilter","_disconnectPlayerObserver","disconnectedCallback","unmount","event","mode","keyToIndex","key","numOffset","letterOffset","test","charCodeAt","choiceIndex","choices","currentValue","choiceId","alreadySelected","includes","newValue","selected","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';\nimport { exceedsMaxSelections } from './utils';\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 || exceedsMaxSelections(selections, maxSelections)) {\n return false;\n }\n\n return true;\n};\n\nfunction getPlayerAttributes(element) {\n const player =\n element.closest('pie-player') ||\n element.closest('pie-item-player');\n\n if (!player) {\n return { baseHeadingLevel: undefined, includeSrHeading: true };\n }\n\n const getRaw = (camelCaseName, hyphenatedName, allLowerName) => {\n let raw = player[camelCaseName];\n\n // fallback in case someone sets via HTML attribute manually\n if (raw == null) {\n raw =\n player.getAttribute(hyphenatedName) ??\n player.getAttribute(allLowerName);\n }\n\n return raw;\n };\n\n const levelRaw = getRaw('baseHeadingLevel', 'base-heading-level', 'baseheadinglevel');\n const level = parseInt(levelRaw, 10);\n const baseHeadingLevel = Number.isFinite(level) && level >= 1 && level <= 6 ? level : undefined;\n\n const srRaw = getRaw('includeSrHeading', 'include-sr-heading', 'includesrheading');\n const includeSrHeading = srRaw == null ? true : srRaw !== false && srRaw !== 'false';\n\n return { baseHeadingLevel, includeSrHeading };\n}\n\n// Resolves heading attributes for a custom element, preferring explicit instance\n// properties (set by a parent element such as EBSR) over player-level attributes.\nfunction resolveHeadingProps(element) {\n const fromPlayer = getPlayerAttributes(element);\n\n return {\n baseHeadingLevel: element._baseHeadingLevel !== undefined ? element._baseHeadingLevel : fromPlayer.baseHeadingLevel,\n includeSrHeading: element._includeSrHeading !== undefined ? element._includeSrHeading : fromPlayer.includeSrHeading,\n };\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 ...resolveHeadingProps(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 baseHeadingLevel(level) {\n this._baseHeadingLevel = level;\n this._rerender();\n }\n\n set includeSrHeading(value) {\n this._includeSrHeading = value;\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._initPlayerObserver();\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 _initPlayerObserver() {\n const player = this.closest('pie-player') || this.closest('pie-item-player');\n if (!player) return;\n\n this._playerObserver = new MutationObserver(() => {\n this._rerender();\n });\n this._playerObserver.observe(player, {\n attributes: true,\n attributeFilter: ['base-heading-level', 'baseheadinglevel', 'include-sr-heading', 'includesrheading'],\n });\n }\n\n _disconnectPlayerObserver() {\n if (this._playerObserver) {\n this._playerObserver.disconnect();\n this._playerObserver = null;\n }\n }\n\n disconnectedCallback() {\n this._disconnectMathObserver();\n this._disconnectPlayerObserver();\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 this._root = null;\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 alreadySelected = currentValue.includes(choiceId);\n const newValue = {\n value: choiceId,\n selected: this._model.choiceMode === 'radio' ? true : !alreadySelected,\n selector: 'Keyboard',\n };\n\n this._onChange(newValue);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/lib/multiple-choice.js
CHANGED
|
@@ -15,6 +15,7 @@ var _Box = _interopRequireDefault(require("@mui/material/Box"));
|
|
|
15
15
|
var _renderUi = require("@pie-lib/render-ui");
|
|
16
16
|
var _translator = _interopRequireDefault(require("@pie-lib/translator"));
|
|
17
17
|
var _choice = _interopRequireDefault(require("./choice"));
|
|
18
|
+
var _utils = require("./utils");
|
|
18
19
|
const {
|
|
19
20
|
translator
|
|
20
21
|
} = _translator.default;
|
|
@@ -83,11 +84,12 @@ class MultipleChoice extends _react.default.Component {
|
|
|
83
84
|
checked
|
|
84
85
|
} = event.target;
|
|
85
86
|
const {
|
|
87
|
+
choiceMode,
|
|
86
88
|
maxSelections,
|
|
87
89
|
onChoiceChanged,
|
|
88
90
|
session
|
|
89
91
|
} = this.props;
|
|
90
|
-
if (session.value && session.value.length
|
|
92
|
+
if (choiceMode !== 'radio' && session.value && (0, _utils.reachedMaxSelections)(session.value.length, maxSelections)) {
|
|
91
93
|
// show/hide max selections error when user select/deselect an answer
|
|
92
94
|
this.setState({
|
|
93
95
|
maxSelectionsErrorState: checked
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multiple-choice.js","names":["_react","_interopRequireDefault","require","_propTypes","_correctAnswerToggle","_classnames","_styles","_Box","_renderUi","_translator","_choice","translator","Translator","MainContainer","styled","Box","color","text","backgroundColor","background","position","border","PartLabel","theme","display","fontSize","margin","fontWeight","paddingBottom","spacing","TeacherInstructions","marginBottom","HorizontalLayout","flexDirection","flexWrap","GridLayout","StyledFieldset","padding","minWidth","SrOnly","left","top","width","height","overflow","ErrorText","typography","palette","error","main","paddingTop","MultipleChoice","React","Component","constructor","props","_defineProperty2","default","event","value","checked","target","maxSelections","onChoiceChanged","session","length","setState","maxSelectionsErrorState","selected","selector","mode","showCorrect","state","onShowCorrectToggle","choice","isCorrect","correct","isChecked","isSelected","undefined","options","alwaysShowCorrect","onToggle","bind","groupName","Math","random","toString","slice","sessionValue","indexOf","UNSAFE_componentWillReceiveProps","nextProps","correctResponse","indexToSymbol","index","keyMode","String","fromCharCode","toUpperCase","getChecked","isPrintMode","isEvaluateMode","renderHeading","choiceMode","includeSrHeading","baseHeadingLevel","partLabel","shouldRenderSrHeading","clampedLevel","min","HeadingTag","withComponent","label","createElement","render","disabled","className","choices","gridColumns","prompt","responseCorrect","teacherInstructions","animationsDisabled","language","isSelectionButtonBelow","minSelections","autoplayAudioEnabled","customAudioButton","showCorrectAnswerToggle","columnsStyle","gridTemplateColumns","selections","getContentHeadingLevel","offset","contentHeadingLevel","transformPrompt","html","transformDataHeadings","teacherInstructionsDiv","PreviewPrompt","tagName","defaultClassName","getMultipleChoiceMinSelectionErrorMessage","t","lng","LayoutComponent","choicesLayout","id","classNames","as","Collapsible","labels","hidden","visible","role","show","toggled","style","map","selectedAnswerBackgroundColor","selectedAnswerStrokeColor","selectedAnswerStrokeWidth","hoverAnswerBackgroundColor","hoverAnswerStrokeColor","hoverAnswerStrokeWidth","key","choicesLength","handleChange","hideTick","correctness","getCorrectness","displayKey","exports","PropTypes","string","oneOf","array","object","bool","func","number","playImage","pauseImage","defaultProps","_default"],"sources":["../src/multiple-choice.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport CorrectAnswerToggle from '@pie-lib/correct-answer-toggle';\nimport classNames from 'classnames';\nimport { styled } from '@mui/material/styles';\nimport Box from '@mui/material/Box';\nimport { color, Collapsible, PreviewPrompt, transformDataHeadings } from '@pie-lib/render-ui';\nimport Translator from '@pie-lib/translator';\n\nimport Choice from './choice';\n\nconst { translator } = Translator;\n\nconst MainContainer = styled(Box)({\n color: color.text(),\n backgroundColor: color.background(),\n '& *': {\n '-webkit-font-smoothing': 'antialiased',\n },\n position: 'relative',\n // remove border from legend tags inside main to override the OT default styles\n '& legend': {\n border: 'none !important',\n },\n});\n\nconst PartLabel = styled('h2')(({ theme }) => ({\n display: 'block',\n fontSize: 'inherit',\n margin: '0',\n fontWeight: 'normal',\n paddingBottom: theme.spacing(2),\n}));\n\nconst TeacherInstructions = styled(Box)(({ theme }) => ({\n marginBottom: theme.spacing(2),\n}));\n\nconst HorizontalLayout = styled(Box)({\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n});\n\nconst GridLayout = styled(Box)({\n display: 'grid',\n});\n\nconst StyledFieldset = styled('fieldset')({\n border: '0px',\n padding: '0.01em 0 0 0',\n margin: '0px',\n minWidth: '0px',\n});\n\nconst SrOnly = styled('h3')({\n position: 'absolute',\n left: '-10000px',\n top: 'auto',\n width: '1px',\n height: '1px',\n overflow: 'hidden',\n});\n\nconst ErrorText = styled('div')(({ theme }) => ({\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingTop: theme.spacing(1),\n}));\n\nexport class MultipleChoice extends React.Component {\n static propTypes = {\n className: PropTypes.string,\n mode: PropTypes.oneOf(['gather', 'view', 'evaluate']),\n choiceMode: PropTypes.oneOf(['radio', 'checkbox']),\n keyMode: PropTypes.oneOf(['numbers', 'letters', 'none']),\n choices: PropTypes.array,\n partLabel: PropTypes.string,\n prompt: PropTypes.string,\n teacherInstructions: PropTypes.string,\n session: PropTypes.object,\n disabled: PropTypes.bool,\n onChoiceChanged: PropTypes.func,\n responseCorrect: PropTypes.bool,\n correctResponse: PropTypes.array,\n choicesLayout: PropTypes.oneOf(['vertical', 'grid', 'horizontal']),\n gridColumns: PropTypes.string,\n alwaysShowCorrect: PropTypes.bool,\n animationsDisabled: PropTypes.bool,\n language: PropTypes.string,\n selectedAnswerBackgroundColor: PropTypes.string,\n selectedAnswerStrokeColor: PropTypes.string,\n selectedAnswerStrokeWidth: PropTypes.string,\n hoverAnswerBackgroundColor: PropTypes.string,\n hoverAnswerStrokeColor: PropTypes.string,\n hoverAnswerStrokeWidth: PropTypes.string,\n onShowCorrectToggle: PropTypes.func,\n isSelectionButtonBelow: PropTypes.bool,\n minSelections: PropTypes.number,\n maxSelections: PropTypes.number,\n autoplayAudioEnabled: PropTypes.bool,\n customAudioButton: {\n playImage: PropTypes.string,\n pauseImage: PropTypes.string,\n },\n options: PropTypes.object,\n baseHeadingLevel: PropTypes.number,\n includeSrHeading: PropTypes.bool,\n };\n\n constructor(props) {\n super(props);\n\n this.state = {\n showCorrect: (this.props.options && this.props.alwaysShowCorrect) || false,\n maxSelectionsErrorState: false,\n };\n\n this.onToggle = this.onToggle.bind(this);\n\n // Unique radio `name` attribute per instance, so separate MultipleChoice\n // instances (e.g. Part A and Part B inside EBSR, or two EBSRs on the same\n // page) are always treated as independent radio groups by the browser,\n // regardless of any label-related model settings or bundle deduplication.\n this.groupName = `mc-group-${Math.random().toString(36).slice(2, 10)}`;\n }\n\n isSelected(value) {\n const sessionValue = this.props.session && this.props.session.value;\n\n return sessionValue && sessionValue.indexOf && sessionValue.indexOf(value) >= 0;\n }\n\n // handleChange was added for accessibility. Please see comments and videos from PD-2441.\n handleChange = (event) => {\n const { value, checked } = event.target;\n const { maxSelections, onChoiceChanged, session } = this.props;\n\n if (session.value && session.value.length >= maxSelections) {\n // show/hide max selections error when user select/deselect an answer\n this.setState({ maxSelectionsErrorState: checked });\n\n if (checked) {\n // prevent selecting more answers\n return;\n }\n }\n\n onChoiceChanged({ value, selected: checked, selector: 'Mouse' });\n };\n\n onToggle = () => {\n if (this.props.mode === 'evaluate') {\n this.setState({ showCorrect: !this.state.showCorrect }, () => {\n if (this.props.onShowCorrectToggle) {\n this.props.onShowCorrectToggle();\n }\n });\n }\n };\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (!nextProps.correctResponse && this.state.showCorrect !== false) {\n this.setState({ showCorrect: false }, () => {\n if (this.props.onShowCorrectToggle) {\n this.props.onShowCorrectToggle();\n }\n });\n }\n\n if (nextProps.options && nextProps.alwaysShowCorrect && this.state.showCorrect !== true) {\n this.setState({ showCorrect: true }, () => {\n if (this.props.onShowCorrectToggle) {\n this.props.onShowCorrectToggle();\n }\n });\n }\n }\n\n indexToSymbol(index) {\n if (this.props.keyMode === 'numbers') {\n return `${index + 1}`;\n }\n\n if (this.props.keyMode === 'letters') {\n return String.fromCharCode(97 + index).toUpperCase();\n }\n\n return '';\n }\n\n getCorrectness = (choice = {}) => {\n const isCorrect = choice.correct;\n const isChecked = this.isSelected(choice.value);\n\n if (this.state.showCorrect) {\n return isCorrect ? 'correct' : undefined;\n }\n\n if (isCorrect) {\n if (isChecked) {\n // A correct answer is selected: marked with a green checkmark\n return 'correct';\n } else {\n // A correct answer is NOT selected: marked with an orange X\n return 'incorrect';\n }\n } else {\n if (isChecked) {\n // An incorrect answer is selected: marked with an orange X\n return 'incorrect';\n } else {\n // An incorrect answer is NOT selected: not marked\n return undefined;\n }\n }\n };\n\n getChecked(choice) {\n // check for print context: options prop is passed from print.js and alwaysShowCorrect is true\n const isPrintMode = this.props.options && this.props.alwaysShowCorrect;\n\n if (isPrintMode) {\n return choice.correct || false;\n }\n\n // evaluate mode with show correct toggled\n const isEvaluateMode = this.state.showCorrect && this.props.mode === 'evaluate';\n\n if (isEvaluateMode) {\n return choice.correct || false;\n }\n\n // default behavior: show what the user has selected\n return this.isSelected(choice.value);\n }\n\n // renderHeading function was added for accessibility.\n renderHeading() {\n const { mode, choiceMode, includeSrHeading, baseHeadingLevel, partLabel } = this.props;\n\n // When a part label is present the item is an EBSR part — the SR heading\n // is provided by the EBSR element, not here.\n const shouldRenderSrHeading = !partLabel && includeSrHeading !== false;\n\n if (!shouldRenderSrHeading || mode !== 'gather') {\n return null;\n }\n\n const clampedLevel = baseHeadingLevel ? Math.min(6, baseHeadingLevel) : 2;\n const HeadingTag = SrOnly.withComponent(`h${clampedLevel}`);\n const label = choiceMode === 'radio' ? 'Multiple Choice Question' : 'Multiple Select Question';\n\n return <HeadingTag>{label}</HeadingTag>;\n }\n\n render() {\n const {\n mode,\n disabled,\n className,\n choices = [],\n choiceMode,\n gridColumns,\n partLabel,\n prompt,\n responseCorrect,\n teacherInstructions,\n alwaysShowCorrect,\n animationsDisabled,\n language,\n isSelectionButtonBelow,\n minSelections,\n maxSelections,\n autoplayAudioEnabled,\n session,\n customAudioButton,\n options,\n baseHeadingLevel,\n } = this.props;\n const { showCorrect, maxSelectionsErrorState } = this.state;\n const isEvaluateMode = mode === 'evaluate';\n const showCorrectAnswerToggle = isEvaluateMode && !responseCorrect;\n const columnsStyle = gridColumns > 1 ? { gridTemplateColumns: `repeat(${gridColumns}, 1fr)` } : undefined;\n const selections = (session.value && session.value.length) || 0;\n\n // Heading levels are optional and only applied when baseHeadingLevel is provided.\n const getContentHeadingLevel = () => {\n if (!baseHeadingLevel) return undefined;\n // SR heading (rendered or external) sits at baseHeadingLevel.\n // Content is always one below that; part label (EBSR) sits between them.\n let offset = 1; // content default: baseHeadingLevel + 1\n if (partLabel) offset += 1; // part label at base + 1, content pushed to base + 2\n return Math.min(6, baseHeadingLevel + offset);\n };\n const contentHeadingLevel = getContentHeadingLevel();\n const transformPrompt = (html) => (html && contentHeadingLevel) ? transformDataHeadings(html, contentHeadingLevel) : html;\n\n const teacherInstructionsDiv = (\n <PreviewPrompt\n tagName=\"div\"\n className=\"prompt\"\n defaultClassName=\"teacher-instructions\"\n prompt={teacherInstructions}\n />\n );\n\n const getMultipleChoiceMinSelectionErrorMessage = () => {\n if (minSelections && maxSelections) {\n return minSelections === maxSelections\n ? translator.t('translation:multipleChoice:minmaxSelections_equal', { lng: language, minSelections })\n : translator.t('translation:multipleChoice:minmaxSelections_range', {\n lng: language,\n minSelections,\n maxSelections,\n });\n }\n\n if (minSelections) {\n return translator.t('translation:multipleChoice:minSelections', { lng: language, minSelections });\n }\n\n return '';\n };\n\n const LayoutComponent = this.props.choicesLayout === 'grid'\n ? GridLayout\n : this.props.choicesLayout === 'horizontal'\n ? HorizontalLayout\n : Box;\n\n return (\n <MainContainer id={'main-container'} className={classNames(className, 'multiple-choice')}>\n {partLabel && <PartLabel as={baseHeadingLevel ? `h${Math.min(6, baseHeadingLevel + 1)}` : 'h2'}>{partLabel}</PartLabel>}\n\n {this.renderHeading()}\n\n {teacherInstructions && (\n <TeacherInstructions>\n {!animationsDisabled ? (\n <Collapsible\n labels={{\n hidden: 'Show Teacher Instructions',\n visible: 'Hide Teacher Instructions',\n }}\n >\n {teacherInstructionsDiv}\n </Collapsible>\n ) : (\n teacherInstructionsDiv\n )}\n </TeacherInstructions>\n )}\n\n <StyledFieldset role={choiceMode === 'radio' ? 'radiogroup' : 'group'}>\n <PreviewPrompt\n className=\"prompt\"\n defaultClassName=\"prompt\"\n prompt={transformPrompt(prompt)}\n tagName={'legend'}\n autoplayAudioEnabled={autoplayAudioEnabled}\n customAudioButton={customAudioButton}\n />\n\n {!(options && alwaysShowCorrect) && (\n <CorrectAnswerToggle\n show={showCorrectAnswerToggle}\n toggled={showCorrect}\n onToggle={this.onToggle.bind(this)}\n language={language}\n />\n )}\n\n <LayoutComponent style={columnsStyle}>\n {choices.map((choice, index) => (\n <Choice\n choicesLayout={this.props.choicesLayout}\n selectedAnswerBackgroundColor={this.props.selectedAnswerBackgroundColor}\n selectedAnswerStrokeColor={this.props.selectedAnswerStrokeColor}\n selectedAnswerStrokeWidth={this.props.selectedAnswerStrokeWidth}\n hoverAnswerBackgroundColor={this.props.hoverAnswerBackgroundColor}\n hoverAnswerStrokeColor={this.props.hoverAnswerStrokeColor}\n hoverAnswerStrokeWidth={this.props.hoverAnswerStrokeWidth}\n gridColumns={gridColumns}\n key={`choice-${index}`}\n choice={choice}\n index={index}\n choicesLength={choices.length}\n showCorrect={showCorrect}\n isEvaluateMode={isEvaluateMode}\n choiceMode={choiceMode}\n disabled={disabled}\n tagName={this.groupName}\n onChoiceChanged={this.handleChange}\n hideTick={choice.hideTick}\n checked={this.getChecked(choice)}\n correctness={isEvaluateMode ? this.getCorrectness(choice) : undefined}\n displayKey={this.indexToSymbol(index)}\n isSelectionButtonBelow={isSelectionButtonBelow}\n />\n ))}\n </LayoutComponent>\n </StyledFieldset>\n\n {choiceMode === 'checkbox' && selections < minSelections && (\n <ErrorText>{getMultipleChoiceMinSelectionErrorMessage()}</ErrorText>\n )}\n {choiceMode === 'checkbox' && maxSelectionsErrorState && (\n <ErrorText>\n {translator.t(`translation:multipleChoice:maxSelections_${maxSelections === 1 ? 'one' : 'other'}`, {\n lng: language,\n maxSelections,\n })}\n </ErrorText>\n )}\n </MainContainer>\n );\n }\n}\n\nMultipleChoice.defaultProps = {\n session: {\n value: [],\n },\n};\n\nexport default MultipleChoice;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"multiple-choice.js","names":["_react","_interopRequireDefault","require","_propTypes","_correctAnswerToggle","_classnames","_styles","_Box","_renderUi","_translator","_choice","_utils","translator","Translator","MainContainer","styled","Box","color","text","backgroundColor","background","position","border","PartLabel","theme","display","fontSize","margin","fontWeight","paddingBottom","spacing","TeacherInstructions","marginBottom","HorizontalLayout","flexDirection","flexWrap","GridLayout","StyledFieldset","padding","minWidth","SrOnly","left","top","width","height","overflow","ErrorText","typography","palette","error","main","paddingTop","MultipleChoice","React","Component","constructor","props","_defineProperty2","default","event","value","checked","target","choiceMode","maxSelections","onChoiceChanged","session","reachedMaxSelections","length","setState","maxSelectionsErrorState","selected","selector","mode","showCorrect","state","onShowCorrectToggle","choice","isCorrect","correct","isChecked","isSelected","undefined","options","alwaysShowCorrect","onToggle","bind","groupName","Math","random","toString","slice","sessionValue","indexOf","UNSAFE_componentWillReceiveProps","nextProps","correctResponse","indexToSymbol","index","keyMode","String","fromCharCode","toUpperCase","getChecked","isPrintMode","isEvaluateMode","renderHeading","includeSrHeading","baseHeadingLevel","partLabel","shouldRenderSrHeading","clampedLevel","min","HeadingTag","withComponent","label","createElement","render","disabled","className","choices","gridColumns","prompt","responseCorrect","teacherInstructions","animationsDisabled","language","isSelectionButtonBelow","minSelections","autoplayAudioEnabled","customAudioButton","showCorrectAnswerToggle","columnsStyle","gridTemplateColumns","selections","getContentHeadingLevel","offset","contentHeadingLevel","transformPrompt","html","transformDataHeadings","teacherInstructionsDiv","PreviewPrompt","tagName","defaultClassName","getMultipleChoiceMinSelectionErrorMessage","t","lng","LayoutComponent","choicesLayout","id","classNames","as","Collapsible","labels","hidden","visible","role","show","toggled","style","map","selectedAnswerBackgroundColor","selectedAnswerStrokeColor","selectedAnswerStrokeWidth","hoverAnswerBackgroundColor","hoverAnswerStrokeColor","hoverAnswerStrokeWidth","key","choicesLength","handleChange","hideTick","correctness","getCorrectness","displayKey","exports","PropTypes","string","oneOf","array","object","bool","func","number","playImage","pauseImage","defaultProps","_default"],"sources":["../src/multiple-choice.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport CorrectAnswerToggle from '@pie-lib/correct-answer-toggle';\nimport classNames from 'classnames';\nimport { styled } from '@mui/material/styles';\nimport Box from '@mui/material/Box';\nimport { color, Collapsible, PreviewPrompt, transformDataHeadings } from '@pie-lib/render-ui';\nimport Translator from '@pie-lib/translator';\n\nimport Choice from './choice';\nimport { reachedMaxSelections } from './utils';\n\nconst { translator } = Translator;\n\nconst MainContainer = styled(Box)({\n color: color.text(),\n backgroundColor: color.background(),\n '& *': {\n '-webkit-font-smoothing': 'antialiased',\n },\n position: 'relative',\n // remove border from legend tags inside main to override the OT default styles\n '& legend': {\n border: 'none !important',\n },\n});\n\nconst PartLabel = styled('h2')(({ theme }) => ({\n display: 'block',\n fontSize: 'inherit',\n margin: '0',\n fontWeight: 'normal',\n paddingBottom: theme.spacing(2),\n}));\n\nconst TeacherInstructions = styled(Box)(({ theme }) => ({\n marginBottom: theme.spacing(2),\n}));\n\nconst HorizontalLayout = styled(Box)({\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n});\n\nconst GridLayout = styled(Box)({\n display: 'grid',\n});\n\nconst StyledFieldset = styled('fieldset')({\n border: '0px',\n padding: '0.01em 0 0 0',\n margin: '0px',\n minWidth: '0px',\n});\n\nconst SrOnly = styled('h3')({\n position: 'absolute',\n left: '-10000px',\n top: 'auto',\n width: '1px',\n height: '1px',\n overflow: 'hidden',\n});\n\nconst ErrorText = styled('div')(({ theme }) => ({\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingTop: theme.spacing(1),\n}));\n\nexport class MultipleChoice extends React.Component {\n static propTypes = {\n className: PropTypes.string,\n mode: PropTypes.oneOf(['gather', 'view', 'evaluate']),\n choiceMode: PropTypes.oneOf(['radio', 'checkbox']),\n keyMode: PropTypes.oneOf(['numbers', 'letters', 'none']),\n choices: PropTypes.array,\n partLabel: PropTypes.string,\n prompt: PropTypes.string,\n teacherInstructions: PropTypes.string,\n session: PropTypes.object,\n disabled: PropTypes.bool,\n onChoiceChanged: PropTypes.func,\n responseCorrect: PropTypes.bool,\n correctResponse: PropTypes.array,\n choicesLayout: PropTypes.oneOf(['vertical', 'grid', 'horizontal']),\n gridColumns: PropTypes.string,\n alwaysShowCorrect: PropTypes.bool,\n animationsDisabled: PropTypes.bool,\n language: PropTypes.string,\n selectedAnswerBackgroundColor: PropTypes.string,\n selectedAnswerStrokeColor: PropTypes.string,\n selectedAnswerStrokeWidth: PropTypes.string,\n hoverAnswerBackgroundColor: PropTypes.string,\n hoverAnswerStrokeColor: PropTypes.string,\n hoverAnswerStrokeWidth: PropTypes.string,\n onShowCorrectToggle: PropTypes.func,\n isSelectionButtonBelow: PropTypes.bool,\n minSelections: PropTypes.number,\n maxSelections: PropTypes.number,\n autoplayAudioEnabled: PropTypes.bool,\n customAudioButton: {\n playImage: PropTypes.string,\n pauseImage: PropTypes.string,\n },\n options: PropTypes.object,\n baseHeadingLevel: PropTypes.number,\n includeSrHeading: PropTypes.bool,\n };\n\n constructor(props) {\n super(props);\n\n this.state = {\n showCorrect: (this.props.options && this.props.alwaysShowCorrect) || false,\n maxSelectionsErrorState: false,\n };\n\n this.onToggle = this.onToggle.bind(this);\n\n // Unique radio `name` attribute per instance, so separate MultipleChoice\n // instances (e.g. Part A and Part B inside EBSR, or two EBSRs on the same\n // page) are always treated as independent radio groups by the browser,\n // regardless of any label-related model settings or bundle deduplication.\n this.groupName = `mc-group-${Math.random().toString(36).slice(2, 10)}`;\n }\n\n isSelected(value) {\n const sessionValue = this.props.session && this.props.session.value;\n\n return sessionValue && sessionValue.indexOf && sessionValue.indexOf(value) >= 0;\n }\n\n // handleChange was added for accessibility. Please see comments and videos from PD-2441.\n handleChange = (event) => {\n const { value, checked } = event.target;\n const { choiceMode, maxSelections, onChoiceChanged, session } = this.props;\n\n if (choiceMode !== 'radio' && session.value && reachedMaxSelections(session.value.length, maxSelections)) {\n // show/hide max selections error when user select/deselect an answer\n this.setState({ maxSelectionsErrorState: checked });\n\n if (checked) {\n // prevent selecting more answers\n return;\n }\n }\n\n onChoiceChanged({ value, selected: checked, selector: 'Mouse' });\n };\n\n onToggle = () => {\n if (this.props.mode === 'evaluate') {\n this.setState({ showCorrect: !this.state.showCorrect }, () => {\n if (this.props.onShowCorrectToggle) {\n this.props.onShowCorrectToggle();\n }\n });\n }\n };\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (!nextProps.correctResponse && this.state.showCorrect !== false) {\n this.setState({ showCorrect: false }, () => {\n if (this.props.onShowCorrectToggle) {\n this.props.onShowCorrectToggle();\n }\n });\n }\n\n if (nextProps.options && nextProps.alwaysShowCorrect && this.state.showCorrect !== true) {\n this.setState({ showCorrect: true }, () => {\n if (this.props.onShowCorrectToggle) {\n this.props.onShowCorrectToggle();\n }\n });\n }\n }\n\n indexToSymbol(index) {\n if (this.props.keyMode === 'numbers') {\n return `${index + 1}`;\n }\n\n if (this.props.keyMode === 'letters') {\n return String.fromCharCode(97 + index).toUpperCase();\n }\n\n return '';\n }\n\n getCorrectness = (choice = {}) => {\n const isCorrect = choice.correct;\n const isChecked = this.isSelected(choice.value);\n\n if (this.state.showCorrect) {\n return isCorrect ? 'correct' : undefined;\n }\n\n if (isCorrect) {\n if (isChecked) {\n // A correct answer is selected: marked with a green checkmark\n return 'correct';\n } else {\n // A correct answer is NOT selected: marked with an orange X\n return 'incorrect';\n }\n } else {\n if (isChecked) {\n // An incorrect answer is selected: marked with an orange X\n return 'incorrect';\n } else {\n // An incorrect answer is NOT selected: not marked\n return undefined;\n }\n }\n };\n\n getChecked(choice) {\n // check for print context: options prop is passed from print.js and alwaysShowCorrect is true\n const isPrintMode = this.props.options && this.props.alwaysShowCorrect;\n\n if (isPrintMode) {\n return choice.correct || false;\n }\n\n // evaluate mode with show correct toggled\n const isEvaluateMode = this.state.showCorrect && this.props.mode === 'evaluate';\n\n if (isEvaluateMode) {\n return choice.correct || false;\n }\n\n // default behavior: show what the user has selected\n return this.isSelected(choice.value);\n }\n\n // renderHeading function was added for accessibility.\n renderHeading() {\n const { mode, choiceMode, includeSrHeading, baseHeadingLevel, partLabel } = this.props;\n\n // When a part label is present the item is an EBSR part — the SR heading\n // is provided by the EBSR element, not here.\n const shouldRenderSrHeading = !partLabel && includeSrHeading !== false;\n\n if (!shouldRenderSrHeading || mode !== 'gather') {\n return null;\n }\n\n const clampedLevel = baseHeadingLevel ? Math.min(6, baseHeadingLevel) : 2;\n const HeadingTag = SrOnly.withComponent(`h${clampedLevel}`);\n const label = choiceMode === 'radio' ? 'Multiple Choice Question' : 'Multiple Select Question';\n\n return <HeadingTag>{label}</HeadingTag>;\n }\n\n render() {\n const {\n mode,\n disabled,\n className,\n choices = [],\n choiceMode,\n gridColumns,\n partLabel,\n prompt,\n responseCorrect,\n teacherInstructions,\n alwaysShowCorrect,\n animationsDisabled,\n language,\n isSelectionButtonBelow,\n minSelections,\n maxSelections,\n autoplayAudioEnabled,\n session,\n customAudioButton,\n options,\n baseHeadingLevel,\n } = this.props;\n const { showCorrect, maxSelectionsErrorState } = this.state;\n const isEvaluateMode = mode === 'evaluate';\n const showCorrectAnswerToggle = isEvaluateMode && !responseCorrect;\n const columnsStyle = gridColumns > 1 ? { gridTemplateColumns: `repeat(${gridColumns}, 1fr)` } : undefined;\n const selections = (session.value && session.value.length) || 0;\n\n // Heading levels are optional and only applied when baseHeadingLevel is provided.\n const getContentHeadingLevel = () => {\n if (!baseHeadingLevel) return undefined;\n // SR heading (rendered or external) sits at baseHeadingLevel.\n // Content is always one below that; part label (EBSR) sits between them.\n let offset = 1; // content default: baseHeadingLevel + 1\n if (partLabel) offset += 1; // part label at base + 1, content pushed to base + 2\n return Math.min(6, baseHeadingLevel + offset);\n };\n const contentHeadingLevel = getContentHeadingLevel();\n const transformPrompt = (html) => (html && contentHeadingLevel) ? transformDataHeadings(html, contentHeadingLevel) : html;\n\n const teacherInstructionsDiv = (\n <PreviewPrompt\n tagName=\"div\"\n className=\"prompt\"\n defaultClassName=\"teacher-instructions\"\n prompt={teacherInstructions}\n />\n );\n\n const getMultipleChoiceMinSelectionErrorMessage = () => {\n if (minSelections && maxSelections) {\n return minSelections === maxSelections\n ? translator.t('translation:multipleChoice:minmaxSelections_equal', { lng: language, minSelections })\n : translator.t('translation:multipleChoice:minmaxSelections_range', {\n lng: language,\n minSelections,\n maxSelections,\n });\n }\n\n if (minSelections) {\n return translator.t('translation:multipleChoice:minSelections', { lng: language, minSelections });\n }\n\n return '';\n };\n\n const LayoutComponent = this.props.choicesLayout === 'grid'\n ? GridLayout\n : this.props.choicesLayout === 'horizontal'\n ? HorizontalLayout\n : Box;\n\n return (\n <MainContainer id={'main-container'} className={classNames(className, 'multiple-choice')}>\n {partLabel && <PartLabel as={baseHeadingLevel ? `h${Math.min(6, baseHeadingLevel + 1)}` : 'h2'}>{partLabel}</PartLabel>}\n\n {this.renderHeading()}\n\n {teacherInstructions && (\n <TeacherInstructions>\n {!animationsDisabled ? (\n <Collapsible\n labels={{\n hidden: 'Show Teacher Instructions',\n visible: 'Hide Teacher Instructions',\n }}\n >\n {teacherInstructionsDiv}\n </Collapsible>\n ) : (\n teacherInstructionsDiv\n )}\n </TeacherInstructions>\n )}\n\n <StyledFieldset role={choiceMode === 'radio' ? 'radiogroup' : 'group'}>\n <PreviewPrompt\n className=\"prompt\"\n defaultClassName=\"prompt\"\n prompt={transformPrompt(prompt)}\n tagName={'legend'}\n autoplayAudioEnabled={autoplayAudioEnabled}\n customAudioButton={customAudioButton}\n />\n\n {!(options && alwaysShowCorrect) && (\n <CorrectAnswerToggle\n show={showCorrectAnswerToggle}\n toggled={showCorrect}\n onToggle={this.onToggle.bind(this)}\n language={language}\n />\n )}\n\n <LayoutComponent style={columnsStyle}>\n {choices.map((choice, index) => (\n <Choice\n choicesLayout={this.props.choicesLayout}\n selectedAnswerBackgroundColor={this.props.selectedAnswerBackgroundColor}\n selectedAnswerStrokeColor={this.props.selectedAnswerStrokeColor}\n selectedAnswerStrokeWidth={this.props.selectedAnswerStrokeWidth}\n hoverAnswerBackgroundColor={this.props.hoverAnswerBackgroundColor}\n hoverAnswerStrokeColor={this.props.hoverAnswerStrokeColor}\n hoverAnswerStrokeWidth={this.props.hoverAnswerStrokeWidth}\n gridColumns={gridColumns}\n key={`choice-${index}`}\n choice={choice}\n index={index}\n choicesLength={choices.length}\n showCorrect={showCorrect}\n isEvaluateMode={isEvaluateMode}\n choiceMode={choiceMode}\n disabled={disabled}\n tagName={this.groupName}\n onChoiceChanged={this.handleChange}\n hideTick={choice.hideTick}\n checked={this.getChecked(choice)}\n correctness={isEvaluateMode ? this.getCorrectness(choice) : undefined}\n displayKey={this.indexToSymbol(index)}\n isSelectionButtonBelow={isSelectionButtonBelow}\n />\n ))}\n </LayoutComponent>\n </StyledFieldset>\n\n {choiceMode === 'checkbox' && selections < minSelections && (\n <ErrorText>{getMultipleChoiceMinSelectionErrorMessage()}</ErrorText>\n )}\n {choiceMode === 'checkbox' && maxSelectionsErrorState && (\n <ErrorText>\n {translator.t(`translation:multipleChoice:maxSelections_${maxSelections === 1 ? 'one' : 'other'}`, {\n lng: language,\n maxSelections,\n })}\n </ErrorText>\n )}\n </MainContainer>\n );\n }\n}\n\nMultipleChoice.defaultProps = {\n session: {\n value: [],\n },\n};\n\nexport default MultipleChoice;\n"],"mappings":"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","ignoreList":[]}
|
package/lib/utils.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.reachedMaxSelections = exports.exceedsMaxSelections = void 0;
|
|
7
|
+
// Returns true when count is at or above maxSelections (use to block the next selection).
|
|
8
|
+
const reachedMaxSelections = (count, maxSelections) => maxSelections != null && count >= maxSelections;
|
|
9
|
+
|
|
10
|
+
// Returns true when count strictly exceeds maxSelections (use for validation / isComplete checks).
|
|
11
|
+
exports.reachedMaxSelections = reachedMaxSelections;
|
|
12
|
+
const exceedsMaxSelections = (count, maxSelections) => maxSelections != null && count > maxSelections;
|
|
13
|
+
exports.exceedsMaxSelections = exceedsMaxSelections;
|
|
14
|
+
//# sourceMappingURL=utils.js.map
|
package/lib/utils.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","names":["reachedMaxSelections","count","maxSelections","exports","exceedsMaxSelections"],"sources":["../src/utils.js"],"sourcesContent":["// Returns true when count is at or above maxSelections (use to block the next selection).\nexport const reachedMaxSelections = (count, maxSelections) =>\n maxSelections != null && count >= maxSelections;\n\n// Returns true when count strictly exceeds maxSelections (use for validation / isComplete checks).\nexport const exceedsMaxSelections = (count, maxSelections) =>\n maxSelections != null && count > maxSelections;\n"],"mappings":";;;;;;AAAA;AACO,MAAMA,oBAAoB,GAAGA,CAACC,KAAK,EAAEC,aAAa,KACvDA,aAAa,IAAI,IAAI,IAAID,KAAK,IAAIC,aAAa;;AAEjD;AAAAC,OAAA,CAAAH,oBAAA,GAAAA,oBAAA;AACO,MAAMI,oBAAoB,GAAGA,CAACH,KAAK,EAAEC,aAAa,KACvDA,aAAa,IAAI,IAAI,IAAID,KAAK,GAAGC,aAAa;AAACC,OAAA,CAAAC,oBAAA,GAAAA,oBAAA","ignoreList":[]}
|
package/module/configure.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_dll_react as e,_dll_prop_types as t,_dll_mui__material_styles as n,_dll_pie_lib__render_ui as o,_dll_mui__material as i,_dll_mui__icons_material as r,_dll_debug as a,_dll_react_dom_client as s}from"../../../@pie-lib/shared-module@^5.2.3/module/index.js";import{_dll_pie_lib__config_ui as l}from"../../../@pie-lib/config-module@^4.0.8/module/index.js";import{_dll_pie_lib__editable_html_tip_tap as c}from"../../../@pie-lib/editable-html-module@^7.1.5/module/index.js";var u={};Object.defineProperty(u,"__esModule",{value:!0});class d extends CustomEvent{constructor(e,t=!1){super(d.TYPE,{bubbles:!0,detail:{update:e,reset:t}}),this.update=e,this.reset=t}}d.TYPE="model.updated";var h=u.ModelUpdatedEvent=d;class p extends CustomEvent{constructor(e,t){super(p.TYPE,{bubbles:!0,detail:{src:e,done:t}}),this.src=e,this.done=t}}p.TYPE="delete.image";var g=u.DeleteImageEvent=p;class f extends CustomEvent{constructor(e){super(f.TYPE,{bubbles:!0,detail:e}),this.handler=e}}f.TYPE="insert.image";var b=u.InsertImageEvent=f;class m extends CustomEvent{constructor(e,t){super(m.TYPE,{bubbles:!0,detail:{src:e,done:t}}),this.src=e,this.done=t}}m.TYPE="delete.sound";var _=u.DeleteSoundEvent=m;class y extends CustomEvent{constructor(e){super(y.TYPE,{bubbles:!0,detail:e}),this.handler=e}}y.TYPE="insert.sound";var C=u.InsertSoundEvent=y,v="object"==typeof global&&global&&global.Object===Object&&global,E="object"==typeof self&&self&&self.Object===Object&&self,j=v||E||Function("return this")(),A=j.Symbol,S=Object.prototype,x=S.hasOwnProperty,w=S.toString,O=A?A.toStringTag:void 0,P=Object.prototype.toString,I=A?A.toStringTag:void 0;function k(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":I&&I in Object(e)?function(e){var t=x.call(e,O),n=e[O];try{e[O]=void 0;var o=!0}catch(e){}var i=w.call(e);return o&&(t?e[O]=n:delete e[O]),i}(e):function(e){return P.call(e)}(e)}function M(e){return null!=e&&"object"==typeof e}var T=Array.isArray;function z(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function R(e){return e}function L(e){if(!z(e))return!1;var t=k(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}var D,q=j["__core-js_shared__"],F=(D=/[^.]+$/.exec(q&&q.keys&&q.keys.IE_PROTO||""))?"Symbol(src)_1."+D:"",U=Function.prototype.toString,$=/^\[object .+?Constructor\]$/,B=Function.prototype,W=Object.prototype,Y=B.toString,H=W.hasOwnProperty,N=RegExp("^"+Y.call(H).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function G(e,t){var n=function(e,t){return null==e?void 0:e[t]}(e,t);return function(e){return!(!z(e)||(t=e,F&&F in t))&&(L(e)?N:$).test(function(e){if(null!=e){try{return U.call(e)}catch(e){}try{return e+""}catch(e){}}return""}(e));var t}(n)?n:void 0}var V,J,K,Q=Object.create,X=function(){function e(){}return function(t){if(!z(t))return{};if(Q)return Q(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}(),Z=Date.now,ee=function(){try{var e=G(Object,"defineProperty");return e({},"",{}),e}catch(e){}}(),te=ee,ne=te?function(e,t){return te(e,"toString",{configurable:!0,enumerable:!1,value:(n=t,function(){return n}),writable:!0});var n}:R,oe=(V=ne,J=0,K=0,function(){var e=Z(),t=16-(e-K);if(K=e,t>0){if(++J>=800)return arguments[0]}else J=0;return V.apply(void 0,arguments)}),ie=/^(?:0|[1-9]\d*)$/;function re(e,t){var n=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==n||"symbol"!=n&&ie.test(e))&&e>-1&&e%1==0&&e<t}function ae(e,t,n){"__proto__"==t&&te?te(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}function se(e,t){return e===t||e!=e&&t!=t}var le=Object.prototype.hasOwnProperty;function ce(e,t,n){var o=e[t];le.call(e,t)&&se(o,n)&&(void 0!==n||t in e)||ae(e,t,n)}var ue=Math.max;function de(e,t){return oe(function(e,t,n){return t=ue(void 0===t?e.length-1:t,0),function(){for(var o=arguments,i=-1,r=ue(o.length-t,0),a=Array(r);++i<r;)a[i]=o[t+i];i=-1;for(var s=Array(t+1);++i<t;)s[i]=o[i];return s[t]=n(a),function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}(e,this,s)}}(e,t,R),e+"")}function he(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}function pe(e){return null!=e&&he(e.length)&&!L(e)}function ge(e,t,n){if(!z(n))return!1;var o=typeof t;return!!("number"==o?pe(n)&&re(t,n.length):"string"==o&&t in n)&&se(n[t],e)}var fe=Object.prototype;function be(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||fe)}function me(e){return M(e)&&"[object Arguments]"==k(e)}var _e=Object.prototype,ye=_e.hasOwnProperty,Ce=_e.propertyIsEnumerable,ve=me(function(){return arguments}())?me:function(e){return M(e)&&ye.call(e,"callee")&&!Ce.call(e,"callee")},Ee="object"==typeof exports&&exports&&!exports.nodeType&&exports,je=Ee&&"object"==typeof module&&module&&!module.nodeType&&module,Ae=je&&je.exports===Ee?j.Buffer:void 0,Se=(Ae?Ae.isBuffer:void 0)||function(){return!1},xe={};xe["[object Float32Array]"]=xe["[object Float64Array]"]=xe["[object Int8Array]"]=xe["[object Int16Array]"]=xe["[object Int32Array]"]=xe["[object Uint8Array]"]=xe["[object Uint8ClampedArray]"]=xe["[object Uint16Array]"]=xe["[object Uint32Array]"]=!0,xe["[object Arguments]"]=xe["[object Array]"]=xe["[object ArrayBuffer]"]=xe["[object Boolean]"]=xe["[object DataView]"]=xe["[object Date]"]=xe["[object Error]"]=xe["[object Function]"]=xe["[object Map]"]=xe["[object Number]"]=xe["[object Object]"]=xe["[object RegExp]"]=xe["[object Set]"]=xe["[object String]"]=xe["[object WeakMap]"]=!1;var we="object"==typeof exports&&exports&&!exports.nodeType&&exports,Oe=we&&"object"==typeof module&&module&&!module.nodeType&&module,Pe=Oe&&Oe.exports===we&&v.process,Ie=function(){try{return Oe&&Oe.require&&Oe.require("util").types||Pe&&Pe.binding&&Pe.binding("util")}catch(e){}}(),ke=Ie&&Ie.isTypedArray,Me=ke?function(e){return function(t){return e(t)}}(ke):function(e){return M(e)&&he(e.length)&&!!xe[k(e)]},Te=Me,ze=Object.prototype.hasOwnProperty;var Re=Object.prototype.hasOwnProperty;function Le(e){return pe(e)?function(e,t){var n=T(e),o=!n&&ve(e),i=!n&&!o&&Se(e),r=!n&&!o&&!i&&Te(e),a=n||o||i||r,s=a?function(e,t){for(var n=-1,o=Array(e);++n<e;)o[n]=t(n);return o}(e.length,String):[],l=s.length;for(var c in e)!t&&!ze.call(e,c)||a&&("length"==c||i&&("offset"==c||"parent"==c)||r&&("buffer"==c||"byteLength"==c||"byteOffset"==c)||re(c,l))||s.push(c);return s}(e,!0):function(e){if(!z(e))return function(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}(e);var t=be(e),n=[];for(var o in e)("constructor"!=o||!t&&Re.call(e,o))&&n.push(o);return n}(e)}var De=G(Object,"create"),qe=Object.prototype.hasOwnProperty,Fe=Object.prototype.hasOwnProperty;function Ue(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var o=e[t];this.set(o[0],o[1])}}function $e(e,t){for(var n=e.length;n--;)if(se(e[n][0],t))return n;return-1}Ue.prototype.clear=function(){this.__data__=De?De(null):{},this.size=0},Ue.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},Ue.prototype.get=function(e){var t=this.__data__;if(De){var n=t[e];return"__lodash_hash_undefined__"===n?void 0:n}return qe.call(t,e)?t[e]:void 0},Ue.prototype.has=function(e){var t=this.__data__;return De?void 0!==t[e]:Fe.call(t,e)},Ue.prototype.set=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=De&&void 0===t?"__lodash_hash_undefined__":t,this};var Be=Array.prototype.splice;function We(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var o=e[t];this.set(o[0],o[1])}}We.prototype.clear=function(){this.__data__=[],this.size=0},We.prototype.delete=function(e){var t=this.__data__,n=$e(t,e);return!(n<0||(n==t.length-1?t.pop():Be.call(t,n,1),--this.size,0))},We.prototype.get=function(e){var t=this.__data__,n=$e(t,e);return n<0?void 0:t[n][1]},We.prototype.has=function(e){return $e(this.__data__,e)>-1},We.prototype.set=function(e,t){var n=this.__data__,o=$e(n,e);return o<0?(++this.size,n.push([e,t])):n[o][1]=t,this};var Ye=G(j,"Map");function He(e,t){var n,o,i=e.__data__;return("string"==(o=typeof(n=t))||"number"==o||"symbol"==o||"boolean"==o?"__proto__"!==n:null===n)?i["string"==typeof t?"string":"hash"]:i.map}function Ne(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var o=e[t];this.set(o[0],o[1])}}Ne.prototype.clear=function(){this.size=0,this.__data__={hash:new Ue,map:new(Ye||We),string:new Ue}},Ne.prototype.delete=function(e){var t=He(this,e).delete(e);return this.size-=t?1:0,t},Ne.prototype.get=function(e){return He(this,e).get(e)},Ne.prototype.has=function(e){return He(this,e).has(e)},Ne.prototype.set=function(e,t){var n=He(this,e),o=n.size;return n.set(e,t),this.size+=n.size==o?0:1,this};var Ge=function(e,t){return function(n){return e(t(n))}}(Object.getPrototypeOf,Object),Ve=Ge,Je=Function.prototype,Ke=Object.prototype,Qe=Je.toString,Xe=Ke.hasOwnProperty,Ze=Qe.call(Object);function et(e){var t=this.__data__=new We(e);this.size=t.size}et.prototype.clear=function(){this.__data__=new We,this.size=0},et.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},et.prototype.get=function(e){return this.__data__.get(e)},et.prototype.has=function(e){return this.__data__.has(e)},et.prototype.set=function(e,t){var n=this.__data__;if(n instanceof We){var o=n.__data__;if(!Ye||o.length<199)return o.push([e,t]),this.size=++n.size,this;n=this.__data__=new Ne(o)}return n.set(e,t),this.size=n.size,this};var tt="object"==typeof exports&&exports&&!exports.nodeType&&exports,nt=tt&&"object"==typeof module&&module&&!module.nodeType&&module,ot=nt&&nt.exports===tt?j.Buffer:void 0,it=(ot&&ot.allocUnsafe,j.Uint8Array);var rt=Object.prototype,at=rt.hasOwnProperty,st=de(function(e,t){e=Object(e);var n=-1,o=t.length,i=o>2?t[2]:void 0;for(i&&ge(t[0],t[1],i)&&(o=1);++n<o;)for(var r=t[n],a=Le(r),s=-1,l=a.length;++s<l;){var c=a[s],u=e[c];(void 0===u||se(u,rt[c])&&!at.call(e,c))&&(e[c]=r[c])}return e});function lt(e,t,n){(void 0!==n&&!se(e[t],n)||void 0===n&&!(t in e))&&ae(e,t,n)}function ct(e,t){if(("constructor"!==t||"function"!=typeof e[t])&&"__proto__"!=t)return e[t]}function ut(e,t,n,o,i,r,a){var s=ct(e,n),l=ct(t,n),c=a.get(l);if(c)lt(e,n,c);else{var u,d=r?r(s,l,n+"",e,t,a):void 0,h=void 0===d;if(h){var p=T(l),g=!p&&Se(l),f=!p&&!g&&Te(l);d=l,p||g||f?T(s)?d=s:M(u=s)&&pe(u)?d=function(e,t){var n=-1,o=e.length;for(t||(t=Array(o));++n<o;)t[n]=e[n];return t}(s):g?(h=!1,d=function(e){return e.slice()}(l)):f?(h=!1,d=function(e,t){var n,o,i=t?(o=new(n=e.buffer).constructor(n.byteLength),new it(o).set(new it(n)),o):e.buffer;return new e.constructor(i,e.byteOffset,e.length)}(l,!0)):d=[]:function(e){if(!M(e)||"[object Object]"!=k(e))return!1;var t=Ve(e);if(null===t)return!0;var n=Xe.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&Qe.call(n)==Ze}(l)||ve(l)?(d=s,ve(s)?d=function(e){return function(e,t,n){var o=!n;n||(n={});for(var i=-1,r=t.length;++i<r;){var a=t[i],s=void 0;void 0===s&&(s=e[a]),o?ae(n,a,s):ce(n,a,s)}return n}(e,Le(e))}(s):z(s)&&!L(s)||(d=function(e){return"function"!=typeof e.constructor||be(e)?{}:X(Ve(e))}(l))):h=!1}h&&(a.set(l,d),i(d,l,o,r,a),a.delete(l)),lt(e,n,d)}}function dt(e,t,n,o,i){e!==t&&function(e,t,n){for(var o=-1,i=Object(e),r=n(e),a=r.length;a--;){var s=r[++o];if(!1===t(i[s],s,i))break}}(t,function(r,a){if(i||(i=new et),z(r))ut(e,t,a,n,dt,o,i);else{var s=o?o(ct(e,a),r,a+"",e,t,i):void 0;void 0===s&&(s=r),lt(e,a,s)}},Le)}var ht,pt=(ht=function(e,t,n){dt(e,t,n)},de(function(e,t){var n=-1,o=t.length,i=o>1?t[o-1]:void 0,r=o>2?t[2]:void 0;for(i=ht.length>3&&"function"==typeof i?(o--,i):void 0,r&&ge(t[0],t[1],r)&&(i=o<3?void 0:i,o=1),e=Object(e);++n<o;){var a=t[n];a&&ht(e,a,n)}return e}));const gt=e,ft=t,{styled:bt}=n,{color:mt}=o,{Button:_t}=i,{Tooltip:yt}=i,{Typography:Ct}=i,{Box:vt}=i,{Info:Et}=r,jt=c,{AlertDialog:At}=l,{InputContainer:St}=l,{ChoiceConfiguration:xt}=l,{settings:wt}=l,{layout:Ot}=l,{choiceUtils:Pt}=l;function It(e){let t,n=e[0],o=1;for(;o<e.length;){const i=e[o],r=e[o+1];if(o+=2,("optionalAccess"===i||"optionalCall"===i)&&null==n)return;"access"===i||"optionalAccess"===i?(t=n,n=r(n)):"call"!==i&&"optionalCall"!==i||(n=r((...e)=>n.call(t,...e)),t=void 0)}return n}const{Panel:kt,toggle:Mt,radio:Tt,dropdown:zt}=wt,Rt=bt(St)(({theme:e})=>({width:"100%",paddingTop:e.spacing(2),marginBottom:e.spacing(2)})),Lt=bt(St)(({theme:e})=>({flex:1,marginTop:e.spacing(1.5),paddingTop:e.spacing(2),marginLeft:e.spacing(3.5)})),Dt=bt(St)(({theme:e})=>({display:"flex",flexDirection:"column",marginBottom:e.spacing(1),width:"100%"})),qt=bt(_t)(({theme:e})=>({marginTop:e.spacing(1),float:"right"})),Ft=bt(qt)({cursor:"not-allowed",pointerEvents:"all",backgroundColor:mt.disabled(),"&:hover":{backgroundColor:mt.disabled()},"&:focus":{backgroundColor:mt.disabled()}}),Ut=bt(vt)({display:"flex",alignItems:"center"}),$t=bt(Ct)(({theme:e})=>({fontSize:e.typography.fontSize+2,marginRight:e.spacing(1)})),Bt=bt(yt)(({theme:e})=>({"& .MuiTooltip-tooltip":{fontSize:e.typography.fontSize-2,whiteSpace:"pre",maxWidth:"500px"}})),Wt=bt("div")(({theme:e})=>({fontSize:e.typography.fontSize-2,color:e.palette.error.main,paddingTop:e.spacing(1)})),Yt=e=>{const{model:t,configuration:n,onPromptChanged:o,onChoiceChanged:i,onRemoveChoice:r,onAddChoice:a,imageSupport:s,uploadSoundSupport:l,onChangeModel:c,onConfigurationChanged:u,onTeacherInstructionsChanged:d}=e,{addChoiceButton:h={},contentDimensions:p={},feedback:g={},deleteChoice:f={},choiceMode:b={},choicePrefix:m={},partialScoring:_={},lockChoiceOrder:y={},teacherInstructions:C={},studentInstructions:v={},rationale:E={},scoringType:j={},sequentialChoiceLabels:A={},settingsPanelDisabled:S,choicesLayout:x,spellCheck:w={},gridColumns:O,maxImageWidth:P={},maxImageHeight:I={},prompt:k={},withRubric:M={},mathMlOptions:T={},language:z={},languageChoices:R={}}=n||{};let{maxAnswerChoices:L}=n||{};const{limitChoicesNumber:D,teacherInstructionsEnabled:q,rationaleEnabled:F,feedbackEnabled:U,promptEnabled:$,spellCheckEnabled:B,choices:W,errors:Y,toolbarEditorPosition:H,extraCSSRules:N}=t||{},{answerChoices:G,choices:V,correctResponse:J,prompt:K,rationale:Q,teacherInstructions:X}=Y||{},Z=It([W,"optionalAccess",e=>e.length])?Array.from({length:W.length},(e,t)=>`${t+1}`):[],{baseInputConfiguration:ee={}}=n,te={position:"top"===H?"top":"bottom"};D&&(L=9);const ne=(e={})=>({...ee,...e}),oe=(e=>{const{minAnswerChoices:t,maxAnswerChoices:n}=e;return`Validation requirements:\nThere should be at least ${t} `+(n?`and at most ${n} `:"")+"answer choices defined.\nEvery answer choice should be non-blank and unique.\nA correct answer must be defined."})(n),ie=P&&P.prompt,re=I&&I.prompt,ae=L&&It([W,"optionalAccess",e=>e.length])>=L?`Only ${L} allowed maximum`:"",se={choiceMode:b.settings&&Tt(b.label,["checkbox","radio"]),"sequentialChoiceLabels.enabled":A.settings&&Mt(A.label,!0),choicePrefix:m.settings&&Tt(m.label,["numbers","letters"]),partialScoring:_.settings&&Mt(_.label),lockChoiceOrder:y.settings&&Mt(y.label),feedbackEnabled:g.settings&&Mt(g.label),choicesLayout:x.settings&&zt(x.label,["vertical","grid","horizontal"]),gridColumns:x.settings&&"grid"===t.choicesLayout&&Z.length>0&&zt(O.label,Z),"language.enabled":z.settings&&Mt(z.label,!0),language:z.settings&&z.enabled&&zt(R.label,R.options)},le={teacherInstructionsEnabled:C.settings&&Mt(C.label),studentInstructionsEnabled:v.settings&&Mt(v.label),promptEnabled:k.settings&&Mt(k.label),rationaleEnabled:E.settings&&Mt(E.label),spellCheckEnabled:w.settings&&Mt(w.label),scoringType:j.settings&&Tt(j.label,["auto","rubric"]),rubricEnabled:It([M,"optionalAccess",e=>e.settings])&&Mt(It([M,"optionalAccess",e=>e.label]))};return gt.createElement(Ot.ConfigLayout,{dimensions:p,hideSettings:S,extraCSSRules:N,classes:{},settings:gt.createElement(kt,{model:t,onChangeModel:c,configuration:n,onChangeConfiguration:u,groups:{Settings:se,Properties:le}})},q&>.createElement(Rt,{label:C.label},gt.createElement(jt,{markup:t.teacherInstructions||"",onChange:d,imageSupport:s,nonEmpty:!1,disableUnderline:!0,error:X,toolbarOpts:te,pluginProps:ne(It([n,"optionalAccess",e=>e.teacherInstructions,"optionalAccess",e=>e.inputConfiguration])),spellCheck:B,maxImageWidth:P&&P.teacherInstructions||ie,maxImageHeight:I&&I.teacherInstructions||re,uploadSoundSupport:l,languageCharactersProps:[{language:"spanish"},{language:"special"}],mathMlOptions:T}),X&>.createElement(Wt,null,X)),$&>.createElement(Rt,{label:k.label},gt.createElement(jt,{markup:t.prompt,onChange:o,imageSupport:s,nonEmpty:!1,disableUnderline:!0,error:K,toolbarOpts:te,pluginProps:ne(It([n,"optionalAccess",e=>e.prompt,"optionalAccess",e=>e.inputConfiguration])),spellCheck:B,maxImageWidth:P&&P.prompt,maxImageHeight:I&&I.prompt,uploadSoundSupport:l,languageCharactersProps:[{language:"spanish"},{language:"special"}],mathMlOptions:T}),K&>.createElement(Wt,null,K)),gt.createElement(Ut,null,gt.createElement($t,{component:"div"},"Choices"),gt.createElement(Bt,{disableFocusListener:!0,disableTouchListener:!0,placement:"right",title:oe},gt.createElement(Et,{fontSize:"small",color:"primary"}))),W.map((e,o)=>gt.createElement(Dt,{key:`choice-${o}`},gt.createElement(xt,{key:o,index:o+1,useLetterOrdering:"letters"===t.choicePrefix,mode:t.choiceMode,data:e,defaultFeedback:{},imageSupport:s,disableImageAlignmentButtons:!0,onDelete:()=>r(o),onChange:e=>i(o,e),allowFeedBack:U,allowDelete:f.settings,noLabels:!0,pluginOpts:ne(It([n,"optionalAccess",e=>e.choices,"optionalAccess",e=>e.inputConfiguration])),toolbarOpts:te,spellCheck:B,error:It([V,"optionalAccess",t=>t[e.value]])||null,noCorrectAnswerError:J,maxImageWidth:P&&P.choices||ie,maxImageHeight:I&&I.choices||re,uploadSoundSupport:l,mathMlOptions:T}),F&>.createElement(Lt,{key:`rationale-${o}`,label:E.label},gt.createElement(jt,{markup:e.rationale||"",onChange:t=>i(o,{...e,rationale:t}),imageSupport:s,error:It([Q,"optionalAccess",t=>t[e.value]])||null,toolbarOpts:te,pluginProps:ne(It([n,"optionalAccess",e=>e.rationale,"optionalAccess",e=>e.inputConfiguration])),spellCheck:B,maxImageWidth:P&&P.rationale||ie,maxImageHeight:I&&I.rationale||re,uploadSoundSupport:l,languageCharactersProps:[{language:"spanish"},{language:"special"}],mathMlOptions:T}),It([Q,"optionalAccess",t=>t[e.value]])&>.createElement(Wt,null,It([Q,"optionalAccess",t=>t[e.value]]))))),J&>.createElement(Wt,null,J),G&>.createElement(Wt,null,G),h.settings&>.createElement(Bt,{title:ae},L&&It([W,"optionalAccess",e=>e.length])>=L?gt.createElement(Ft,{variant:"contained",color:"primary",onClick:a,disabled:!0},h.label):gt.createElement(qt,{variant:"contained",color:"primary",onClick:a},h.label)))};class Ht extends gt.Component{constructor(...e){super(...e),Ht.prototype.__init.call(this),Ht.prototype.__init2.call(this),Ht.prototype.__init3.call(this),Ht.prototype.__init4.call(this),Ht.prototype.__init5.call(this),Ht.prototype.__init6.call(this),Ht.prototype.__init7.call(this)}static __initStatic(){this.propTypes={model:ft.object.isRequired,configuration:ft.object.isRequired,disableSidePanel:ft.bool,onModelChanged:ft.func.isRequired,onConfigurationChanged:ft.func.isRequired,imageSupport:ft.shape({add:ft.func.isRequired,delete:ft.func.isRequired})}}__init(){this.state={showWarning:!1}}__init2(){this.onRemoveChoice=e=>{const{model:t,configuration:n,onModelChanged:o}=this.props,{minAnswerChoices:i}=n||{};i&&t.choices.length===i?this.setState({showWarning:!0}):(t.choices.splice(e,1),o({choices:t.choices}))}}__init3(){this.onAddChoice=()=>{const{model:e,configuration:t,onModelChanged:n}=this.props;let{maxAnswerChoices:o}=t||{};const{limitChoicesNumber:i}=e||{};i&&(o=9),o&&e.choices.length>=o||(e.choices.push({label:"",value:Pt.firstAvailableIndex(e.choices.map(e=>e.value),0),feedback:{type:"none"}}),n({choices:e.choices}))}}__init4(){this.onChoiceChanged=(e,t)=>{const{model:n,onModelChanged:o}=this.props;t.correct&&"radio"===n.choiceMode&&(n.choices=n.choices.map(e=>pt({},e,{correct:!1}))),n.choices.splice(e,1,t),o({choices:n.choices})}}__init5(){this.onPromptChanged=e=>{this.props.onModelChanged({prompt:e})}}__init6(){this.onTeacherInstructionsChanged=e=>{this.props.onModelChanged({teacherInstructions:e})}}__init7(){this.onModelChanged=(e,t)=>{const{onModelChanged:n}=this.props;if("choiceMode"===t){if("radio"===e.choiceMode){let t=!1;e.choices=e.choices.map(e=>t?(e.correct=!1,e):(e.correct&&(t=!0),e))}n({choiceMode:e.choiceMode,choices:e.choices},!0)}else n(e)}}render(){const{configuration:{minAnswerChoices:e}={}}=this.props,{showWarning:t}=this.state;return gt.createElement(gt.Fragment,null,gt.createElement(At,{open:t,title:"Warning",text:`There can't be less than ${e||0} choices.`,onConfirm:()=>this.setState({showWarning:!1})}),gt.createElement(Yt,{...this.props,onChangeModel:this.onModelChanged,onRemoveChoice:this.onRemoveChoice,onChoiceChanged:this.onChoiceChanged,onAddChoice:this.onAddChoice,onPromptChanged:this.onPromptChanged,onTeacherInstructionsChanged:this.onTeacherInstructionsChanged}))}}Ht.__initStatic();var Nt={choiceMode:"checkbox",choicePrefix:"letters",choices:[],choicesLayout:"vertical",feedbackEnabled:!1,gridColumns:2,lockChoiceOrder:!0,partialScoring:!0,prompt:"",promptEnabled:!0,rationale:"",rationaleEnabled:!0,scoringType:"auto",studentInstructionsEnabled:!0,teacherInstructions:"",teacherInstructionsEnabled:!0,toolbarEditorPosition:"bottom",selectedAnswerBackgroundColor:"initial",keyboardEventsEnabled:!1},Gt={baseInputConfiguration:{h3:{disabled:!0},audio:{disabled:!1},video:{disabled:!1},image:{disabled:!1},textAlign:{disabled:!0},showParagraphs:{disabled:!1},separateParagraphs:{disabled:!0}},choices:{inputConfiguration:{audio:{disabled:!1},video:{disabled:!1},image:{disabled:!1}}},spellCheck:{label:"Spellcheck",settings:!1,enabled:!0},choicesLayout:{settings:!1,label:"Choices Layout"},gridColumns:{label:"Grid columns"},answerChoiceCount:0,addChoiceButton:{settings:!0,label:"Add a Choice"},choiceMode:{settings:!0,label:"Response Type"},choicePrefix:{settings:!0,label:"Choice Labels"},deleteChoice:{settings:!0},feedback:{settings:!0,label:"Feedback"},prompt:{settings:!0,label:"Prompt",inputConfiguration:{audio:{disabled:!1},video:{disabled:!1},image:{disabled:!1}},required:!1},lockChoiceOrder:{settings:!0,label:"Lock Choice Order"},partialScoring:{settings:!1,label:"Allow Partial Scoring"},rationale:{settings:!0,label:"Rationale",inputConfiguration:{audio:{disabled:!0},video:{disabled:!0},image:{disabled:!1}},required:!1},scoringType:{settings:!1,label:"Scoring Type"},studentInstructions:{settings:!1,label:"Student Instructions"},teacherInstructions:{settings:!0,label:"Teacher Instructions",inputConfiguration:{audio:{disabled:!1},video:{disabled:!1},image:{disabled:!1}},required:!1},toolbarEditorPosition:{settings:!1,label:"Toolbar Editor Position"},minAnswerChoices:2,maxAnswerChoices:5,maxImageWidth:{teacherInstructions:300,prompt:300,rationale:636,choices:900},maxImageHeight:{teacherInstructions:300,prompt:300,rationale:300,choices:300},withRubric:{settings:!1,label:"Add Rubric"},mathMlOptions:{mmlOutput:!1,mmlEditing:!1},language:{settings:!1,label:"Specify Language",enabled:!1},languageChoices:{label:"Language Choices",options:[]}};const Vt=e,{createRoot:Jt}=s,Kt=a,{choiceUtils:Qt}=l;function Xt(e){let t,n=e[0],o=1;for(;o<e.length;){const i=e[o],r=e[o+1];if(o+=2,("optionalAccess"===i||"optionalCall"===i)&&null==n)return;"access"===i||"optionalAccess"===i?(t=n,n=r(n)):"call"!==i&&"optionalCall"!==i||(n=r((...e)=>n.call(t,...e)),t=void 0)}return n}const Zt=Kt("multiple-choice:configure"),en=(e,t=0)=>{if(!e||0===e.length){let e=[];for(let n=0;n<t;n++)e.push({value:`${n}`,label:"",feedback:{type:"none",value:""}});return e}return e},tn=(e,t)=>{const n=st(e,Gt);return{configuration:n,model:{...t,choices:en(t&&t.choices||[],n&&n.answerChoiceCount)}}};class nn extends HTMLElement{static __initStatic(){this.createDefaultModel=(e={})=>{const t=Qt.normalizeChoices({...Nt,...e,choices:en(e&&e.choices||[])});return t.choicesLayout=e.choicesLayout||!1===e.verticalMode&&"horizontal"||Nt.choicesLayout,t}}constructor(){super(),this._root=null,this._reactContainer=null,this._model=nn.createDefaultModel(),this._configuration=Gt,this.onModelChanged=this.onModelChanged.bind(this),this.onConfigurationChanged=this.onConfigurationChanged.bind(this)}set model(e){this._model=nn.createDefaultModel(e),this._render()}set configuration(e){const t=tn(e,this._model);this.onModelChanged(t.model);const n={...Gt,...t.configuration};this._configuration=n,Xt([n,"optionalAccess",e=>e.language,"optionalAccess",e=>e.enabled])?Xt([n,"optionalAccess",e=>e.languageChoices,"optionalAccess",e=>e.options,"optionalAccess",e=>e.length])&&(this._model.language=Xt([n,"optionalAccess",e=>e.languageChoices,"access",e=>e.options,"access",e=>e[0],"access",e=>e.value])):n.language.settings&&this._model.language?(this._configuration.language.enabled=!0,this._configuration.languageChoices.options&&this._configuration.languageChoices.options.length||(this._configuration.languageChoices.options=[]),this._configuration.languageChoices.options.find(e=>e.value===this._model.language)||this._configuration.languageChoices.options.push({value:this._model.language,label:this._model.language})):delete this._model.language,this._render()}set disableSidePanel(e){this._disableSidePanel=e,this._render()}dispatchModelUpdated(e){const t=!!e;this.dispatchEvent(new h(this._model,t))}onModelChanged(e,t){this._model={...this._model,...e},this._render(),this.dispatchModelUpdated(t)}onConfigurationChanged(e){this._configuration=tn(e,this._model).configuration,this._model&&this.onModelChanged(this._model),this._render()}insertImage(e){this.dispatchEvent(new b(e))}onDeleteImage(e,t){this.dispatchEvent(new g(e,t))}insertSound(e){this.dispatchEvent(new C(e))}onDeleteSound(e,t){this.dispatchEvent(new _(e,t))}_render(){Zt("_render - Starting render"),Zt("_render - Model:",this._model?"present":"missing"),Zt("_render - Configuration:",this._configuration?"present":"missing"),Zt("_render - Root exists:",!!this._root);try{let e=Vt.createElement(Ht,{model:this._model,configuration:this._configuration,onModelChanged:this.onModelChanged,onConfigurationChanged:this.onConfigurationChanged,disableSidePanel:this._disableSidePanel,imageSupport:{add:this.insertImage.bind(this),delete:this.onDeleteImage.bind(this)},uploadSoundSupport:{add:this.insertSound.bind(this),delete:this.onDeleteSound.bind(this)}});this._root||(Zt("_render - Creating React container"),this._reactContainer=document.createElement("div"),this._reactContainer.className="pie-configure-wrapper",this.appendChild(this._reactContainer),Zt("_render - Creating new React root"),this._root=Jt(this._reactContainer),Zt("_render - React root created successfully")),Zt("_render - Calling root.render()"),this._root.render(e),Zt("_render - Render completed successfully")}catch(e){throw console.error("❌ [multiple-choice-configure] Render error:",e),console.error("Error stack:",e.stack),e}}connectedCallback(){Zt("connectedCallback - Component connected to DOM"),Zt("connectedCallback - Model:",this._model?"present":"missing"),Zt("connectedCallback - Configuration:",this._configuration?"present":"missing")}disconnectedCallback(){Zt("disconnectedCallback - Component disconnected from DOM"),this._root&&(Zt("disconnectedCallback - Unmounting React root"),this._root.unmount(),this._root=null),this._reactContainer&&(this._reactContainer=null)}}nn.__initStatic();export{nn as default};
|
|
1
|
+
import{_dll_react as e,_dll_prop_types as t,_dll_mui__material_styles as n,_dll_pie_lib__render_ui as o,_dll_mui__material as i,_dll_mui__icons_material as r,_dll_debug as a,_dll_react_dom_client as s}from"../../../@pie-lib/shared-module@^5.2.13/module/index.js";import{_dll_pie_lib__config_ui as l}from"../../../@pie-lib/config-module@^4.0.17/module/index.js";import{_dll_pie_lib__editable_html_tip_tap as c}from"../../../@pie-lib/editable-html-module@^7.1.14/module/index.js";var u={};Object.defineProperty(u,"__esModule",{value:!0});class d extends CustomEvent{constructor(e,t=!1){super(d.TYPE,{bubbles:!0,detail:{update:e,reset:t}}),this.update=e,this.reset=t}}d.TYPE="model.updated";var h=u.ModelUpdatedEvent=d;class p extends CustomEvent{constructor(e,t){super(p.TYPE,{bubbles:!0,detail:{src:e,done:t}}),this.src=e,this.done=t}}p.TYPE="delete.image";var g=u.DeleteImageEvent=p;class f extends CustomEvent{constructor(e){super(f.TYPE,{bubbles:!0,detail:e}),this.handler=e}}f.TYPE="insert.image";var b=u.InsertImageEvent=f;class m extends CustomEvent{constructor(e,t){super(m.TYPE,{bubbles:!0,detail:{src:e,done:t}}),this.src=e,this.done=t}}m.TYPE="delete.sound";var _=u.DeleteSoundEvent=m;class y extends CustomEvent{constructor(e){super(y.TYPE,{bubbles:!0,detail:e}),this.handler=e}}y.TYPE="insert.sound";var C=u.InsertSoundEvent=y,v="object"==typeof global&&global&&global.Object===Object&&global,E="object"==typeof self&&self&&self.Object===Object&&self,j=v||E||Function("return this")(),A=j.Symbol,S=Object.prototype,x=S.hasOwnProperty,w=S.toString,O=A?A.toStringTag:void 0,P=Object.prototype.toString,I=A?A.toStringTag:void 0;function k(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":I&&I in Object(e)?function(e){var t=x.call(e,O),n=e[O];try{e[O]=void 0;var o=!0}catch(e){}var i=w.call(e);return o&&(t?e[O]=n:delete e[O]),i}(e):function(e){return P.call(e)}(e)}function M(e){return null!=e&&"object"==typeof e}var T=Array.isArray;function z(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function R(e){return e}function L(e){if(!z(e))return!1;var t=k(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}var D,q=j["__core-js_shared__"],F=(D=/[^.]+$/.exec(q&&q.keys&&q.keys.IE_PROTO||""))?"Symbol(src)_1."+D:"",U=Function.prototype.toString,$=/^\[object .+?Constructor\]$/,B=Function.prototype,W=Object.prototype,Y=B.toString,H=W.hasOwnProperty,N=RegExp("^"+Y.call(H).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function G(e,t){var n=function(e,t){return null==e?void 0:e[t]}(e,t);return function(e){return!(!z(e)||(t=e,F&&F in t))&&(L(e)?N:$).test(function(e){if(null!=e){try{return U.call(e)}catch(e){}try{return e+""}catch(e){}}return""}(e));var t}(n)?n:void 0}var V,J,K,Q=Object.create,X=function(){function e(){}return function(t){if(!z(t))return{};if(Q)return Q(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}(),Z=Date.now,ee=function(){try{var e=G(Object,"defineProperty");return e({},"",{}),e}catch(e){}}(),te=ee,ne=te?function(e,t){return te(e,"toString",{configurable:!0,enumerable:!1,value:(n=t,function(){return n}),writable:!0});var n}:R,oe=(V=ne,J=0,K=0,function(){var e=Z(),t=16-(e-K);if(K=e,t>0){if(++J>=800)return arguments[0]}else J=0;return V.apply(void 0,arguments)}),ie=/^(?:0|[1-9]\d*)$/;function re(e,t){var n=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==n||"symbol"!=n&&ie.test(e))&&e>-1&&e%1==0&&e<t}function ae(e,t,n){"__proto__"==t&&te?te(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}function se(e,t){return e===t||e!=e&&t!=t}var le=Object.prototype.hasOwnProperty;function ce(e,t,n){var o=e[t];le.call(e,t)&&se(o,n)&&(void 0!==n||t in e)||ae(e,t,n)}var ue=Math.max;function de(e,t){return oe(function(e,t,n){return t=ue(void 0===t?e.length-1:t,0),function(){for(var o=arguments,i=-1,r=ue(o.length-t,0),a=Array(r);++i<r;)a[i]=o[t+i];i=-1;for(var s=Array(t+1);++i<t;)s[i]=o[i];return s[t]=n(a),function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}(e,this,s)}}(e,t,R),e+"")}function he(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}function pe(e){return null!=e&&he(e.length)&&!L(e)}function ge(e,t,n){if(!z(n))return!1;var o=typeof t;return!!("number"==o?pe(n)&&re(t,n.length):"string"==o&&t in n)&&se(n[t],e)}var fe=Object.prototype;function be(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||fe)}function me(e){return M(e)&&"[object Arguments]"==k(e)}var _e=Object.prototype,ye=_e.hasOwnProperty,Ce=_e.propertyIsEnumerable,ve=me(function(){return arguments}())?me:function(e){return M(e)&&ye.call(e,"callee")&&!Ce.call(e,"callee")},Ee="object"==typeof exports&&exports&&!exports.nodeType&&exports,je=Ee&&"object"==typeof module&&module&&!module.nodeType&&module,Ae=je&&je.exports===Ee?j.Buffer:void 0,Se=(Ae?Ae.isBuffer:void 0)||function(){return!1},xe={};xe["[object Float32Array]"]=xe["[object Float64Array]"]=xe["[object Int8Array]"]=xe["[object Int16Array]"]=xe["[object Int32Array]"]=xe["[object Uint8Array]"]=xe["[object Uint8ClampedArray]"]=xe["[object Uint16Array]"]=xe["[object Uint32Array]"]=!0,xe["[object Arguments]"]=xe["[object Array]"]=xe["[object ArrayBuffer]"]=xe["[object Boolean]"]=xe["[object DataView]"]=xe["[object Date]"]=xe["[object Error]"]=xe["[object Function]"]=xe["[object Map]"]=xe["[object Number]"]=xe["[object Object]"]=xe["[object RegExp]"]=xe["[object Set]"]=xe["[object String]"]=xe["[object WeakMap]"]=!1;var we="object"==typeof exports&&exports&&!exports.nodeType&&exports,Oe=we&&"object"==typeof module&&module&&!module.nodeType&&module,Pe=Oe&&Oe.exports===we&&v.process,Ie=function(){try{return Oe&&Oe.require&&Oe.require("util").types||Pe&&Pe.binding&&Pe.binding("util")}catch(e){}}(),ke=Ie&&Ie.isTypedArray,Me=ke?function(e){return function(t){return e(t)}}(ke):function(e){return M(e)&&he(e.length)&&!!xe[k(e)]},Te=Me,ze=Object.prototype.hasOwnProperty;var Re=Object.prototype.hasOwnProperty;function Le(e){return pe(e)?function(e,t){var n=T(e),o=!n&&ve(e),i=!n&&!o&&Se(e),r=!n&&!o&&!i&&Te(e),a=n||o||i||r,s=a?function(e,t){for(var n=-1,o=Array(e);++n<e;)o[n]=t(n);return o}(e.length,String):[],l=s.length;for(var c in e)!t&&!ze.call(e,c)||a&&("length"==c||i&&("offset"==c||"parent"==c)||r&&("buffer"==c||"byteLength"==c||"byteOffset"==c)||re(c,l))||s.push(c);return s}(e,!0):function(e){if(!z(e))return function(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}(e);var t=be(e),n=[];for(var o in e)("constructor"!=o||!t&&Re.call(e,o))&&n.push(o);return n}(e)}var De=G(Object,"create"),qe=Object.prototype.hasOwnProperty,Fe=Object.prototype.hasOwnProperty;function Ue(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var o=e[t];this.set(o[0],o[1])}}function $e(e,t){for(var n=e.length;n--;)if(se(e[n][0],t))return n;return-1}Ue.prototype.clear=function(){this.__data__=De?De(null):{},this.size=0},Ue.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},Ue.prototype.get=function(e){var t=this.__data__;if(De){var n=t[e];return"__lodash_hash_undefined__"===n?void 0:n}return qe.call(t,e)?t[e]:void 0},Ue.prototype.has=function(e){var t=this.__data__;return De?void 0!==t[e]:Fe.call(t,e)},Ue.prototype.set=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=De&&void 0===t?"__lodash_hash_undefined__":t,this};var Be=Array.prototype.splice;function We(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var o=e[t];this.set(o[0],o[1])}}We.prototype.clear=function(){this.__data__=[],this.size=0},We.prototype.delete=function(e){var t=this.__data__,n=$e(t,e);return!(n<0||(n==t.length-1?t.pop():Be.call(t,n,1),--this.size,0))},We.prototype.get=function(e){var t=this.__data__,n=$e(t,e);return n<0?void 0:t[n][1]},We.prototype.has=function(e){return $e(this.__data__,e)>-1},We.prototype.set=function(e,t){var n=this.__data__,o=$e(n,e);return o<0?(++this.size,n.push([e,t])):n[o][1]=t,this};var Ye=G(j,"Map");function He(e,t){var n,o,i=e.__data__;return("string"==(o=typeof(n=t))||"number"==o||"symbol"==o||"boolean"==o?"__proto__"!==n:null===n)?i["string"==typeof t?"string":"hash"]:i.map}function Ne(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var o=e[t];this.set(o[0],o[1])}}Ne.prototype.clear=function(){this.size=0,this.__data__={hash:new Ue,map:new(Ye||We),string:new Ue}},Ne.prototype.delete=function(e){var t=He(this,e).delete(e);return this.size-=t?1:0,t},Ne.prototype.get=function(e){return He(this,e).get(e)},Ne.prototype.has=function(e){return He(this,e).has(e)},Ne.prototype.set=function(e,t){var n=He(this,e),o=n.size;return n.set(e,t),this.size+=n.size==o?0:1,this};var Ge=function(e,t){return function(n){return e(t(n))}}(Object.getPrototypeOf,Object),Ve=Ge,Je=Function.prototype,Ke=Object.prototype,Qe=Je.toString,Xe=Ke.hasOwnProperty,Ze=Qe.call(Object);function et(e){var t=this.__data__=new We(e);this.size=t.size}et.prototype.clear=function(){this.__data__=new We,this.size=0},et.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},et.prototype.get=function(e){return this.__data__.get(e)},et.prototype.has=function(e){return this.__data__.has(e)},et.prototype.set=function(e,t){var n=this.__data__;if(n instanceof We){var o=n.__data__;if(!Ye||o.length<199)return o.push([e,t]),this.size=++n.size,this;n=this.__data__=new Ne(o)}return n.set(e,t),this.size=n.size,this};var tt="object"==typeof exports&&exports&&!exports.nodeType&&exports,nt=tt&&"object"==typeof module&&module&&!module.nodeType&&module,ot=nt&&nt.exports===tt?j.Buffer:void 0,it=(ot&&ot.allocUnsafe,j.Uint8Array);var rt=Object.prototype,at=rt.hasOwnProperty,st=de(function(e,t){e=Object(e);var n=-1,o=t.length,i=o>2?t[2]:void 0;for(i&&ge(t[0],t[1],i)&&(o=1);++n<o;)for(var r=t[n],a=Le(r),s=-1,l=a.length;++s<l;){var c=a[s],u=e[c];(void 0===u||se(u,rt[c])&&!at.call(e,c))&&(e[c]=r[c])}return e});function lt(e,t,n){(void 0!==n&&!se(e[t],n)||void 0===n&&!(t in e))&&ae(e,t,n)}function ct(e,t){if(("constructor"!==t||"function"!=typeof e[t])&&"__proto__"!=t)return e[t]}function ut(e,t,n,o,i,r,a){var s=ct(e,n),l=ct(t,n),c=a.get(l);if(c)lt(e,n,c);else{var u,d=r?r(s,l,n+"",e,t,a):void 0,h=void 0===d;if(h){var p=T(l),g=!p&&Se(l),f=!p&&!g&&Te(l);d=l,p||g||f?T(s)?d=s:M(u=s)&&pe(u)?d=function(e,t){var n=-1,o=e.length;for(t||(t=Array(o));++n<o;)t[n]=e[n];return t}(s):g?(h=!1,d=function(e){return e.slice()}(l)):f?(h=!1,d=function(e,t){var n,o,i=t?(o=new(n=e.buffer).constructor(n.byteLength),new it(o).set(new it(n)),o):e.buffer;return new e.constructor(i,e.byteOffset,e.length)}(l,!0)):d=[]:function(e){if(!M(e)||"[object Object]"!=k(e))return!1;var t=Ve(e);if(null===t)return!0;var n=Xe.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&Qe.call(n)==Ze}(l)||ve(l)?(d=s,ve(s)?d=function(e){return function(e,t,n){var o=!n;n||(n={});for(var i=-1,r=t.length;++i<r;){var a=t[i],s=void 0;void 0===s&&(s=e[a]),o?ae(n,a,s):ce(n,a,s)}return n}(e,Le(e))}(s):z(s)&&!L(s)||(d=function(e){return"function"!=typeof e.constructor||be(e)?{}:X(Ve(e))}(l))):h=!1}h&&(a.set(l,d),i(d,l,o,r,a),a.delete(l)),lt(e,n,d)}}function dt(e,t,n,o,i){e!==t&&function(e,t,n){for(var o=-1,i=Object(e),r=n(e),a=r.length;a--;){var s=r[++o];if(!1===t(i[s],s,i))break}}(t,function(r,a){if(i||(i=new et),z(r))ut(e,t,a,n,dt,o,i);else{var s=o?o(ct(e,a),r,a+"",e,t,i):void 0;void 0===s&&(s=r),lt(e,a,s)}},Le)}var ht,pt=(ht=function(e,t,n){dt(e,t,n)},de(function(e,t){var n=-1,o=t.length,i=o>1?t[o-1]:void 0,r=o>2?t[2]:void 0;for(i=ht.length>3&&"function"==typeof i?(o--,i):void 0,r&&ge(t[0],t[1],r)&&(i=o<3?void 0:i,o=1),e=Object(e);++n<o;){var a=t[n];a&&ht(e,a,n)}return e}));const gt=e,ft=t,{styled:bt}=n,{color:mt}=o,{Button:_t}=i,{Tooltip:yt}=i,{Typography:Ct}=i,{Box:vt}=i,{Info:Et}=r,jt=c,{AlertDialog:At}=l,{InputContainer:St}=l,{ChoiceConfiguration:xt}=l,{settings:wt}=l,{layout:Ot}=l,{choiceUtils:Pt}=l;function It(e){let t,n=e[0],o=1;for(;o<e.length;){const i=e[o],r=e[o+1];if(o+=2,("optionalAccess"===i||"optionalCall"===i)&&null==n)return;"access"===i||"optionalAccess"===i?(t=n,n=r(n)):"call"!==i&&"optionalCall"!==i||(n=r((...e)=>n.call(t,...e)),t=void 0)}return n}const{Panel:kt,toggle:Mt,radio:Tt,dropdown:zt}=wt,Rt=bt(St)(({theme:e})=>({width:"100%",paddingTop:e.spacing(2),marginBottom:e.spacing(2)})),Lt=bt(St)(({theme:e})=>({flex:1,marginTop:e.spacing(1.5),paddingTop:e.spacing(2),marginLeft:e.spacing(3.5)})),Dt=bt(St)(({theme:e})=>({display:"flex",flexDirection:"column",marginBottom:e.spacing(1),width:"100%"})),qt=bt(_t)(({theme:e})=>({marginTop:e.spacing(1),float:"right"})),Ft=bt(qt)({cursor:"not-allowed",pointerEvents:"all",backgroundColor:mt.disabled(),"&:hover":{backgroundColor:mt.disabled()},"&:focus":{backgroundColor:mt.disabled()}}),Ut=bt(vt)({display:"flex",alignItems:"center"}),$t=bt(Ct)(({theme:e})=>({fontSize:e.typography.fontSize+2,marginRight:e.spacing(1)})),Bt=bt(yt)(({theme:e})=>({"& .MuiTooltip-tooltip":{fontSize:e.typography.fontSize-2,whiteSpace:"pre",maxWidth:"500px"}})),Wt=bt("div")(({theme:e})=>({fontSize:e.typography.fontSize-2,color:e.palette.error.main,paddingTop:e.spacing(1)})),Yt=e=>{const{model:t,configuration:n,onPromptChanged:o,onChoiceChanged:i,onRemoveChoice:r,onAddChoice:a,imageSupport:s,uploadSoundSupport:l,onChangeModel:c,onConfigurationChanged:u,onTeacherInstructionsChanged:d}=e,{addChoiceButton:h={},contentDimensions:p={},feedback:g={},deleteChoice:f={},choiceMode:b={},choicePrefix:m={},partialScoring:_={},lockChoiceOrder:y={},teacherInstructions:C={},studentInstructions:v={},rationale:E={},scoringType:j={},sequentialChoiceLabels:A={},settingsPanelDisabled:S,choicesLayout:x,spellCheck:w={},gridColumns:O,maxImageWidth:P={},maxImageHeight:I={},prompt:k={},withRubric:M={},mathMlOptions:T={},language:z={},languageChoices:R={}}=n||{};let{maxAnswerChoices:L}=n||{};const{limitChoicesNumber:D,teacherInstructionsEnabled:q,rationaleEnabled:F,feedbackEnabled:U,promptEnabled:$,spellCheckEnabled:B,choices:W,errors:Y,toolbarEditorPosition:H,extraCSSRules:N}=t||{},{answerChoices:G,choices:V,correctResponse:J,prompt:K,rationale:Q,teacherInstructions:X}=Y||{},Z=It([W,"optionalAccess",e=>e.length])?Array.from({length:W.length},(e,t)=>`${t+1}`):[],{baseInputConfiguration:ee={}}=n,te={position:"top"===H?"top":"bottom"};D&&(L=9);const ne=(e={})=>({...ee,...e}),oe=(e=>{const{minAnswerChoices:t,maxAnswerChoices:n}=e;return`Validation requirements:\nThere should be at least ${t} `+(n?`and at most ${n} `:"")+"answer choices defined.\nEvery answer choice should be non-blank and unique.\nA correct answer must be defined."})(n),ie=P&&P.prompt,re=I&&I.prompt,ae=L&&It([W,"optionalAccess",e=>e.length])>=L?`Only ${L} allowed maximum`:"",se={choiceMode:b.settings&&Tt(b.label,["checkbox","radio"]),"sequentialChoiceLabels.enabled":A.settings&&Mt(A.label,!0),choicePrefix:m.settings&&Tt(m.label,["numbers","letters"]),partialScoring:_.settings&&Mt(_.label),lockChoiceOrder:y.settings&&Mt(y.label),feedbackEnabled:g.settings&&Mt(g.label),choicesLayout:x.settings&&zt(x.label,["vertical","grid","horizontal"]),gridColumns:x.settings&&"grid"===t.choicesLayout&&Z.length>0&&zt(O.label,Z),"language.enabled":z.settings&&Mt(z.label,!0),language:z.settings&&z.enabled&&zt(R.label,R.options)},le={teacherInstructionsEnabled:C.settings&&Mt(C.label),studentInstructionsEnabled:v.settings&&Mt(v.label),promptEnabled:k.settings&&Mt(k.label),rationaleEnabled:E.settings&&Mt(E.label),spellCheckEnabled:w.settings&&Mt(w.label),scoringType:j.settings&&Tt(j.label,["auto","rubric"]),rubricEnabled:It([M,"optionalAccess",e=>e.settings])&&Mt(It([M,"optionalAccess",e=>e.label]))};return gt.createElement(Ot.ConfigLayout,{dimensions:p,hideSettings:S,extraCSSRules:N,classes:{},settings:gt.createElement(kt,{model:t,onChangeModel:c,configuration:n,onChangeConfiguration:u,groups:{Settings:se,Properties:le}})},q&>.createElement(Rt,{label:C.label},gt.createElement(jt,{markup:t.teacherInstructions||"",onChange:d,imageSupport:s,nonEmpty:!1,disableUnderline:!0,error:X,toolbarOpts:te,pluginProps:ne(It([n,"optionalAccess",e=>e.teacherInstructions,"optionalAccess",e=>e.inputConfiguration])),spellCheck:B,maxImageWidth:P&&P.teacherInstructions||ie,maxImageHeight:I&&I.teacherInstructions||re,uploadSoundSupport:l,languageCharactersProps:[{language:"spanish"},{language:"special"}],mathMlOptions:T}),X&>.createElement(Wt,null,X)),$&>.createElement(Rt,{label:k.label},gt.createElement(jt,{markup:t.prompt,onChange:o,imageSupport:s,nonEmpty:!1,disableUnderline:!0,error:K,toolbarOpts:te,pluginProps:ne(It([n,"optionalAccess",e=>e.prompt,"optionalAccess",e=>e.inputConfiguration])),spellCheck:B,maxImageWidth:P&&P.prompt,maxImageHeight:I&&I.prompt,uploadSoundSupport:l,languageCharactersProps:[{language:"spanish"},{language:"special"}],mathMlOptions:T}),K&>.createElement(Wt,null,K)),gt.createElement(Ut,null,gt.createElement($t,{component:"div"},"Choices"),gt.createElement(Bt,{disableFocusListener:!0,disableTouchListener:!0,placement:"right",title:oe},gt.createElement(Et,{fontSize:"small",color:"primary"}))),W.map((e,o)=>gt.createElement(Dt,{key:`choice-${o}`},gt.createElement(xt,{key:o,index:o+1,useLetterOrdering:"letters"===t.choicePrefix,mode:t.choiceMode,data:e,defaultFeedback:{},imageSupport:s,disableImageAlignmentButtons:!0,onDelete:()=>r(o),onChange:e=>i(o,e),allowFeedBack:U,allowDelete:f.settings,noLabels:!0,pluginOpts:ne(It([n,"optionalAccess",e=>e.choices,"optionalAccess",e=>e.inputConfiguration])),toolbarOpts:te,spellCheck:B,error:It([V,"optionalAccess",t=>t[e.value]])||null,noCorrectAnswerError:J,maxImageWidth:P&&P.choices||ie,maxImageHeight:I&&I.choices||re,uploadSoundSupport:l,mathMlOptions:T}),F&>.createElement(Lt,{key:`rationale-${o}`,label:E.label},gt.createElement(jt,{markup:e.rationale||"",onChange:t=>i(o,{...e,rationale:t}),imageSupport:s,error:It([Q,"optionalAccess",t=>t[e.value]])||null,toolbarOpts:te,pluginProps:ne(It([n,"optionalAccess",e=>e.rationale,"optionalAccess",e=>e.inputConfiguration])),spellCheck:B,maxImageWidth:P&&P.rationale||ie,maxImageHeight:I&&I.rationale||re,uploadSoundSupport:l,languageCharactersProps:[{language:"spanish"},{language:"special"}],mathMlOptions:T}),It([Q,"optionalAccess",t=>t[e.value]])&>.createElement(Wt,null,It([Q,"optionalAccess",t=>t[e.value]]))))),J&>.createElement(Wt,null,J),G&>.createElement(Wt,null,G),h.settings&>.createElement(Bt,{title:ae},L&&It([W,"optionalAccess",e=>e.length])>=L?gt.createElement(Ft,{variant:"contained",color:"primary",onClick:a,disabled:!0},h.label):gt.createElement(qt,{variant:"contained",color:"primary",onClick:a},h.label)))};class Ht extends gt.Component{constructor(...e){super(...e),Ht.prototype.__init.call(this),Ht.prototype.__init2.call(this),Ht.prototype.__init3.call(this),Ht.prototype.__init4.call(this),Ht.prototype.__init5.call(this),Ht.prototype.__init6.call(this),Ht.prototype.__init7.call(this)}static __initStatic(){this.propTypes={model:ft.object.isRequired,configuration:ft.object.isRequired,disableSidePanel:ft.bool,onModelChanged:ft.func.isRequired,onConfigurationChanged:ft.func.isRequired,imageSupport:ft.shape({add:ft.func.isRequired,delete:ft.func.isRequired})}}__init(){this.state={showWarning:!1}}__init2(){this.onRemoveChoice=e=>{const{model:t,configuration:n,onModelChanged:o}=this.props,{minAnswerChoices:i}=n||{};i&&t.choices.length===i?this.setState({showWarning:!0}):(t.choices.splice(e,1),o({choices:t.choices}))}}__init3(){this.onAddChoice=()=>{const{model:e,configuration:t,onModelChanged:n}=this.props;let{maxAnswerChoices:o}=t||{};const{limitChoicesNumber:i}=e||{};i&&(o=9),o&&e.choices.length>=o||(e.choices.push({label:"",value:Pt.firstAvailableIndex(e.choices.map(e=>e.value),0),feedback:{type:"none"}}),n({choices:e.choices}))}}__init4(){this.onChoiceChanged=(e,t)=>{const{model:n,onModelChanged:o}=this.props;t.correct&&"radio"===n.choiceMode&&(n.choices=n.choices.map(e=>pt({},e,{correct:!1}))),n.choices.splice(e,1,t),o({choices:n.choices})}}__init5(){this.onPromptChanged=e=>{this.props.onModelChanged({prompt:e})}}__init6(){this.onTeacherInstructionsChanged=e=>{this.props.onModelChanged({teacherInstructions:e})}}__init7(){this.onModelChanged=(e,t)=>{const{onModelChanged:n}=this.props;if("choiceMode"===t){if("radio"===e.choiceMode){let t=!1;e.choices=e.choices.map(e=>t?(e.correct=!1,e):(e.correct&&(t=!0),e))}n({choiceMode:e.choiceMode,choices:e.choices},!0)}else n(e)}}render(){const{configuration:{minAnswerChoices:e}={}}=this.props,{showWarning:t}=this.state;return gt.createElement(gt.Fragment,null,gt.createElement(At,{open:t,title:"Warning",text:`There can't be less than ${e||0} choices.`,onConfirm:()=>this.setState({showWarning:!1})}),gt.createElement(Yt,{...this.props,onChangeModel:this.onModelChanged,onRemoveChoice:this.onRemoveChoice,onChoiceChanged:this.onChoiceChanged,onAddChoice:this.onAddChoice,onPromptChanged:this.onPromptChanged,onTeacherInstructionsChanged:this.onTeacherInstructionsChanged}))}}Ht.__initStatic();var Nt={choiceMode:"checkbox",choicePrefix:"letters",choices:[],choicesLayout:"vertical",feedbackEnabled:!1,gridColumns:2,lockChoiceOrder:!0,partialScoring:!0,prompt:"",promptEnabled:!0,rationale:"",rationaleEnabled:!0,scoringType:"auto",studentInstructionsEnabled:!0,teacherInstructions:"",teacherInstructionsEnabled:!0,toolbarEditorPosition:"bottom",selectedAnswerBackgroundColor:"initial",keyboardEventsEnabled:!1},Gt={baseInputConfiguration:{h3:{disabled:!0},audio:{disabled:!1},video:{disabled:!1},image:{disabled:!1},textAlign:{disabled:!0},showParagraphs:{disabled:!1},separateParagraphs:{disabled:!0}},choices:{inputConfiguration:{audio:{disabled:!1},video:{disabled:!1},image:{disabled:!1}}},spellCheck:{label:"Spellcheck",settings:!1,enabled:!0},choicesLayout:{settings:!1,label:"Choices Layout"},gridColumns:{label:"Grid columns"},answerChoiceCount:0,addChoiceButton:{settings:!0,label:"Add a Choice"},choiceMode:{settings:!0,label:"Response Type"},choicePrefix:{settings:!0,label:"Choice Labels"},deleteChoice:{settings:!0},feedback:{settings:!0,label:"Feedback"},prompt:{settings:!0,label:"Prompt",inputConfiguration:{audio:{disabled:!1},video:{disabled:!1},image:{disabled:!1}},required:!1},lockChoiceOrder:{settings:!0,label:"Lock Choice Order"},partialScoring:{settings:!1,label:"Allow Partial Scoring"},rationale:{settings:!0,label:"Rationale",inputConfiguration:{audio:{disabled:!0},video:{disabled:!0},image:{disabled:!1}},required:!1},scoringType:{settings:!1,label:"Scoring Type"},studentInstructions:{settings:!1,label:"Student Instructions"},teacherInstructions:{settings:!0,label:"Teacher Instructions",inputConfiguration:{audio:{disabled:!1},video:{disabled:!1},image:{disabled:!1}},required:!1},toolbarEditorPosition:{settings:!1,label:"Toolbar Editor Position"},minAnswerChoices:2,maxAnswerChoices:5,maxImageWidth:{teacherInstructions:300,prompt:300,rationale:636,choices:900},maxImageHeight:{teacherInstructions:300,prompt:300,rationale:300,choices:300},withRubric:{settings:!1,label:"Add Rubric"},mathMlOptions:{mmlOutput:!1,mmlEditing:!1},language:{settings:!1,label:"Specify Language",enabled:!1},languageChoices:{label:"Language Choices",options:[]}};const Vt=e,{createRoot:Jt}=s,Kt=a,{choiceUtils:Qt}=l;function Xt(e){let t,n=e[0],o=1;for(;o<e.length;){const i=e[o],r=e[o+1];if(o+=2,("optionalAccess"===i||"optionalCall"===i)&&null==n)return;"access"===i||"optionalAccess"===i?(t=n,n=r(n)):"call"!==i&&"optionalCall"!==i||(n=r((...e)=>n.call(t,...e)),t=void 0)}return n}const Zt=Kt("multiple-choice:configure"),en=(e,t=0)=>{if(!e||0===e.length){let e=[];for(let n=0;n<t;n++)e.push({value:`${n}`,label:"",feedback:{type:"none",value:""}});return e}return e},tn=(e,t)=>{const n=st(e,Gt);return{configuration:n,model:{...t,choices:en(t&&t.choices||[],n&&n.answerChoiceCount)}}};class nn extends HTMLElement{static __initStatic(){this.createDefaultModel=(e={})=>{const t=Qt.normalizeChoices({...Nt,...e,choices:en(e&&e.choices||[])});return t.choicesLayout=e.choicesLayout||!1===e.verticalMode&&"horizontal"||Nt.choicesLayout,t}}constructor(){super(),this._root=null,this._reactContainer=null,this._model=nn.createDefaultModel(),this._configuration=Gt,this.onModelChanged=this.onModelChanged.bind(this),this.onConfigurationChanged=this.onConfigurationChanged.bind(this)}set model(e){this._model=nn.createDefaultModel(e),this._render()}set configuration(e){const t=tn(e,this._model);this.onModelChanged(t.model);const n={...Gt,...t.configuration};this._configuration=n,Xt([n,"optionalAccess",e=>e.language,"optionalAccess",e=>e.enabled])?Xt([n,"optionalAccess",e=>e.languageChoices,"optionalAccess",e=>e.options,"optionalAccess",e=>e.length])&&(this._model.language=Xt([n,"optionalAccess",e=>e.languageChoices,"access",e=>e.options,"access",e=>e[0],"access",e=>e.value])):n.language.settings&&this._model.language?(this._configuration.language.enabled=!0,this._configuration.languageChoices.options&&this._configuration.languageChoices.options.length||(this._configuration.languageChoices.options=[]),this._configuration.languageChoices.options.find(e=>e.value===this._model.language)||this._configuration.languageChoices.options.push({value:this._model.language,label:this._model.language})):delete this._model.language,this._render()}set disableSidePanel(e){this._disableSidePanel=e,this._render()}dispatchModelUpdated(e){const t=!!e;this.dispatchEvent(new h(this._model,t))}onModelChanged(e,t){this._model={...this._model,...e},this._render(),this.dispatchModelUpdated(t)}onConfigurationChanged(e){this._configuration=tn(e,this._model).configuration,this._model&&this.onModelChanged(this._model),this._render()}insertImage(e){this.dispatchEvent(new b(e))}onDeleteImage(e,t){this.dispatchEvent(new g(e,t))}insertSound(e){this.dispatchEvent(new C(e))}onDeleteSound(e,t){this.dispatchEvent(new _(e,t))}_render(){Zt("_render - Starting render"),Zt("_render - Model:",this._model?"present":"missing"),Zt("_render - Configuration:",this._configuration?"present":"missing"),Zt("_render - Root exists:",!!this._root);try{let e=Vt.createElement(Ht,{model:this._model,configuration:this._configuration,onModelChanged:this.onModelChanged,onConfigurationChanged:this.onConfigurationChanged,disableSidePanel:this._disableSidePanel,imageSupport:{add:this.insertImage.bind(this),delete:this.onDeleteImage.bind(this)},uploadSoundSupport:{add:this.insertSound.bind(this),delete:this.onDeleteSound.bind(this)}});this._root||(Zt("_render - Creating React container"),this._reactContainer=document.createElement("div"),this._reactContainer.className="pie-configure-wrapper",this.appendChild(this._reactContainer),Zt("_render - Creating new React root"),this._root=Jt(this._reactContainer),Zt("_render - React root created successfully")),Zt("_render - Calling root.render()"),this._root.render(e),Zt("_render - Render completed successfully")}catch(e){throw console.error("❌ [multiple-choice-configure] Render error:",e),console.error("Error stack:",e.stack),e}}connectedCallback(){Zt("connectedCallback - Component connected to DOM"),Zt("connectedCallback - Model:",this._model?"present":"missing"),Zt("connectedCallback - Configuration:",this._configuration?"present":"missing"),this._render()}disconnectedCallback(){Zt("disconnectedCallback - Component disconnected from DOM"),this._root&&(Zt("disconnectedCallback - Unmounting React root"),this._root.unmount(),this._root=null),this._reactContainer&&(this._reactContainer=null)}}nn.__initStatic();export{nn as default};
|
package/module/controller.js
CHANGED
|
@@ -2722,6 +2722,10 @@ const getShuffledChoices = (choices, session, updateSession, choiceKey) =>
|
|
|
2722
2722
|
* - true - that means that the order of the choices will be ordinal (as is created in the configure item)
|
|
2723
2723
|
* - false - that means the getShuffledChoices above will be called and that in turn means that we either
|
|
2724
2724
|
* return the shuffled values on the session (if any exists) or we shuffle the choices
|
|
2725
|
+
*
|
|
2726
|
+
* Note: the role (student/instructor) is intentionally not considered here — instructor mode
|
|
2727
|
+
* will respect the same `lockChoiceOrder` value as students, instead of forcing the order to be locked.
|
|
2728
|
+
*
|
|
2725
2729
|
* @param model - model to check if we should lock order
|
|
2726
2730
|
* @param session - session to check if we should lock order
|
|
2727
2731
|
* @param env - env to check if we should lock order
|
|
@@ -2738,21 +2742,6 @@ const lockChoices = (model, session, env) => {
|
|
|
2738
2742
|
return true;
|
|
2739
2743
|
}
|
|
2740
2744
|
|
|
2741
|
-
const role = get(env, 'role', 'student');
|
|
2742
|
-
|
|
2743
|
-
if (role === 'instructor') {
|
|
2744
|
-
// TODO: .. in the future the instructor can toggle between ordinal and shuffled here, so keeping this code until then
|
|
2745
|
-
/*const alreadyShuffled = hasShuffledValues(session);
|
|
2746
|
-
|
|
2747
|
-
if (alreadyShuffled) {
|
|
2748
|
-
return false;
|
|
2749
|
-
}
|
|
2750
|
-
|
|
2751
|
-
return true;*/
|
|
2752
|
-
return true;
|
|
2753
|
-
}
|
|
2754
|
-
|
|
2755
|
-
// here it's a student, so don't lock and it will shuffle if needs be
|
|
2756
2745
|
return false;
|
|
2757
2746
|
};
|
|
2758
2747
|
|
|
@@ -2996,12 +2985,14 @@ const validate = (model = {}, config = {}) => {
|
|
|
2996
2985
|
});
|
|
2997
2986
|
|
|
2998
2987
|
let hasCorrectResponse = false;
|
|
2988
|
+
let correctCount = 0;
|
|
2999
2989
|
|
|
3000
2990
|
reversedChoices.forEach((choice, index) => {
|
|
3001
2991
|
const { correct, value, label, rationale } = choice;
|
|
3002
2992
|
|
|
3003
2993
|
if (correct) {
|
|
3004
2994
|
hasCorrectResponse = true;
|
|
2995
|
+
correctCount++;
|
|
3005
2996
|
}
|
|
3006
2997
|
|
|
3007
2998
|
if (!getContent(label)) {
|
|
@@ -3029,6 +3020,12 @@ const validate = (model = {}, config = {}) => {
|
|
|
3029
3020
|
|
|
3030
3021
|
if (!hasCorrectResponse) {
|
|
3031
3022
|
errors.correctResponse = 'No correct response defined.';
|
|
3023
|
+
} else {
|
|
3024
|
+
const { maxSelections, choiceMode } = model;
|
|
3025
|
+
|
|
3026
|
+
if (choiceMode !== 'radio' && maxSelections != null && correctCount > maxSelections) {
|
|
3027
|
+
errors.correctResponse = `The number of correct answers (${correctCount}) exceeds max selections (${maxSelections}). Students won't be able to select all correct answers.`;
|
|
3028
|
+
}
|
|
3032
3029
|
}
|
|
3033
3030
|
|
|
3034
3031
|
if (!isEmpty(choicesErrors)) {
|