@pie-element/math-templated 5.1.0 → 5.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,23 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [5.2.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/math-templated@5.0.0...@pie-element/math-templated@5.2.0) (2025-10-10)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * tests - update score values to be numeric instead of strings ([affaf5b](https://github.com/pie-framework/pie-elements/commit/affaf5b86c2f4f2496fef79ce3f764f4a91fba55))
12
+ * **math-templated:** ensure score is a number for correct response correctness PD-5235 ([97633e5](https://github.com/pie-framework/pie-elements/commit/97633e5a33103f57fdbf06cb2bff405706de7a15))
13
+
14
+
15
+ ### Features
16
+
17
+ * update libs PD-5208, PD-5211, PD-5199, PD-5218, PD-5217 ([da327fa](https://github.com/pie-framework/pie-elements/commit/da327fa501f6e9eff1c0b30b5ef092426a91f78b))
18
+
19
+
20
+
21
+
22
+
6
23
  # [5.1.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/math-templated@4.0.0...@pie-element/math-templated@5.1.0) (2025-10-07)
7
24
 
8
25
  **Note:** Version bump only for package @pie-element/math-templated
@@ -3,6 +3,17 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [3.2.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/math-templated-configure@3.0.1...@pie-element/math-templated-configure@3.2.0) (2025-10-10)
7
+
8
+
9
+ ### Features
10
+
11
+ * update libs PD-5208, PD-5211, PD-5199, PD-5218, PD-5217 ([da327fa](https://github.com/pie-framework/pie-elements/commit/da327fa501f6e9eff1c0b30b5ef092426a91f78b))
12
+
13
+
14
+
15
+
16
+
6
17
  # [3.1.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/math-templated-configure@3.0.0...@pie-element/math-templated-configure@3.1.0) (2025-10-07)
7
18
 
8
19
  **Note:** Version bump only for package @pie-element/math-templated-configure
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "@pie-element/math-templated-configure",
3
3
  "private": true,
4
- "version": "3.1.0",
4
+ "version": "3.2.0",
5
5
  "description": "",
6
6
  "main": "lib/index.js",
7
7
  "module": "src/index.js",
8
8
  "dependencies": {
9
9
  "@material-ui/core": "^3.9.2",
10
10
  "@pie-framework/pie-configure-events": "^1.3.0",
11
- "@pie-lib/config-ui": "^11.25.0",
12
- "@pie-lib/editable-html": "^11.17.0",
13
- "@pie-lib/math-toolbar": "^1.27.0",
14
- "@pie-lib/render-ui": "^4.31.0",
11
+ "@pie-lib/config-ui": "^11.25.1",
12
+ "@pie-lib/editable-html": "^11.17.1",
13
+ "@pie-lib/math-toolbar": "^1.27.1",
14
+ "@pie-lib/render-ui": "^4.31.1",
15
15
  "debug": "^3.1.0",
16
16
  "lodash": "^4.17.15",
17
17
  "prop-types": "^15.6.2",
@@ -3,6 +3,23 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [4.2.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/math-templated-controller@4.0.1...@pie-element/math-templated-controller@4.2.0) (2025-10-10)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * tests - update score values to be numeric instead of strings ([affaf5b](https://github.com/pie-framework/pie-elements/commit/affaf5b86c2f4f2496fef79ce3f764f4a91fba55))
12
+ * **math-templated:** ensure score is a number for correct response correctness PD-5235 ([97633e5](https://github.com/pie-framework/pie-elements/commit/97633e5a33103f57fdbf06cb2bff405706de7a15))
13
+
14
+
15
+ ### Features
16
+
17
+ * update libs PD-5208, PD-5211, PD-5199, PD-5218, PD-5217 ([da327fa](https://github.com/pie-framework/pie-elements/commit/da327fa501f6e9eff1c0b30b5ef092426a91f78b))
18
+
19
+
20
+
21
+
22
+
6
23
  # [4.1.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/math-templated-controller@4.0.0...@pie-element/math-templated-controller@4.1.0) (2025-10-07)
7
24
 
8
25
  **Note:** Version bump only for package @pie-element/math-templated-controller
@@ -116,7 +116,7 @@ var getResponseCorrectness = function getResponseCorrectness(question, sessionRe
116
116
  var fullyCorrect = correctAnswers === correctResponsesCount; // partial credit scoring: each correct answer is worth 1 / total answers point
117
117
  // dichotomous scoring: for credit to be awarded, a correct answer must be entered for every response area
118
118
 
119
- score = (correctAnswers / Object.keys(correctResponses).length).toFixed(2);
119
+ score = Number((correctAnswers / Object.keys(correctResponses).length).toFixed(2));
120
120
  return {
121
121
  correctness: getFeedback(fullyCorrect),
122
122
  score: correctAnswers > 0 ? score : 0,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.js"],"names":["translator","Translator","log","getFeedback","value","getContent","html","replace","getIsAnswerCorrect","correctResponse","answerItem","answerCorrect","opts","mode","validation","defaults","validationDefault","literal","allowTrailingZeros","ignoreOrder","acceptedValues","answer","Object","values","alternates","mv","latexEqual","e","getResponseCorrectness","question","sessionResponse","correctResponses","responses","correctness","score","correct","correctAnswers","correctResponsesCount","keys","length","forEach","responseId","fullyCorrect","toFixed","getCorrectness","env","session","answers","getPartialScore","outcome","Promise","resolve","empty","partialScoringEnabled","partialScoring","enabled","normalizeSession","undefined","completed","createDefaultModel","model","allowTrailingZerosDefault","ignoreOrderDefault","updatedResponses","reduce","acc","s","getTextFromHTML","prepareVal","trim","normalizedQuestion","language","note","showNote","t","lng","out","prompt","promptEnabled","markup","equationEditor","customKeys","disabled","view","extraCSSRules","feedback","role","rationale","rationaleEnabled","teacherInstructions","teacherInstructionsEnabled","createCorrectResponseSession","id","validate","config","maxResponseAreas","responsesErrors","errors","field","required","entries","index","key","response","reversedAlternates","reverse","alternatesErrors","responseError","identicalAnswer","slice","some","val","nbOfResponseAreas","match","responseAreas"],"mappings":"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","sourcesContent":["import debug from 'debug';\nimport isEmpty from 'lodash/isEmpty';\nimport Translator from '@pie-lib/translator';\nimport * as mv from '@pie-framework/math-validation';\n\nimport defaults from './defaults';\nimport { partialScoring } from '@pie-lib/controller-utils';\n\nconst { translator } = Translator;\nconst log = debug('@pie-element:math-templated:controller');\n\nconst getFeedback = (value) => (value ? 'correct' : 'incorrect');\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');\n\nconst getIsAnswerCorrect = (correctResponse, answerItem) => {\n let answerCorrect = false;\n\n const opts = {\n mode: correctResponse.validation || defaults.validationDefault,\n ...(correctResponse.validation === 'literal' && {\n literal: {\n allowTrailingZeros: correctResponse.allowTrailingZeros || false,\n ignoreOrder: correctResponse.ignoreOrder || false,\n },\n }),\n };\n\n if (!answerCorrect) {\n const acceptedValues = [correctResponse.answer, ...Object.values(correctResponse.alternates || {})];\n\n try {\n for (const value of acceptedValues) {\n answerCorrect = mv.latexEqual(answerItem.value, value, opts);\n if (answerCorrect) break;\n }\n } catch (e) {\n log('Parse failure when evaluating math', e, correctResponse, answerItem);\n answerCorrect = false;\n }\n }\n\n return answerCorrect;\n};\n\nconst getResponseCorrectness = (question, sessionResponse) => {\n const correctResponses = question.responses;\n\n if (!sessionResponse) {\n return {\n correctness: 'unanswered',\n score: 0,\n correct: false,\n };\n } else {\n let correctAnswers = 0;\n let score = 0;\n const correctResponsesCount = Object.keys(correctResponses || {}).length;\n\n Object.keys(correctResponses).forEach((responseId) => {\n const answerItem = sessionResponse['r' + responseId];\n const correctResponse = correctResponses[responseId] || {};\n\n const answerCorrect = getIsAnswerCorrect(correctResponse, answerItem);\n if (answerCorrect) {\n correctAnswers++;\n }\n });\n\n const fullyCorrect = correctAnswers === correctResponsesCount;\n\n // partial credit scoring: each correct answer is worth 1 / total answers point\n // dichotomous scoring: for credit to be awarded, a correct answer must be entered for every response area\n score = (correctAnswers / Object.keys(correctResponses).length).toFixed(2);\n\n return {\n correctness: getFeedback(fullyCorrect),\n score: correctAnswers > 0 ? score : 0,\n correct: fullyCorrect,\n };\n }\n};\n\nexport const getCorrectness = (question, env, session) => {\n if (env.mode === 'evaluate') {\n return getResponseCorrectness(question, session && session.answers);\n }\n};\n\nexport const getPartialScore = (question, session) => {\n if (!session || isEmpty(session)) {\n return 0;\n }\n\n return 1;\n};\n\nexport const outcome = (question, session, env) =>\n new Promise((resolve) => {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n const partialScoringEnabled = partialScoring.enabled(question, env);\n session = normalizeSession(session);\n\n if (env.mode !== 'evaluate') {\n resolve({ score: undefined, completed: undefined });\n } else {\n const correctness = getCorrectness(question, env, session, true);\n const score = correctness.score;\n\n resolve({ score: partialScoringEnabled ? score : score === 1 ? 1 : 0 });\n }\n });\n\nexport const createDefaultModel = (model = {}) => {\n const { validationDefault, allowTrailingZerosDefault, ignoreOrderDefault, responses = {} } = model;\n\n const updatedResponses = Object.keys(responses).reduce((acc, responseId) => {\n const correctResponse = responses[responseId];\n\n acc[responseId] = {\n ...correctResponse,\n validation: correctResponse.validation || validationDefault,\n allowTrailingZeros: correctResponse.allowTrailingZeros || allowTrailingZerosDefault,\n ignoreOrder: correctResponse.ignoreOrder || ignoreOrderDefault,\n };\n\n return acc;\n }, {});\n\n return {\n ...defaults.model,\n ...model,\n responses: updatedResponses,\n };\n};\n\nexport const normalizeSession = (s) => ({ ...s });\n\nconst getTextFromHTML = (html) => (html || '').replace(/<\\/?[^>]+(>|$)/g, '');\n\nexport const prepareVal = (html) => getTextFromHTML(html).trim();\n\nexport const model = (question, session, env) => {\n return new Promise((resolve) => {\n session = session || {};\n const normalizedQuestion = createDefaultModel(question);\n const correctness = getCorrectness(normalizedQuestion, env, session);\n const { responses, language } = normalizedQuestion;\n let { note } = normalizedQuestion;\n let showNote = false;\n\n // check if there is at least one alternate response or if the validation for at least one response is not literal\n Object.keys(responses).forEach((responseId) => {\n const correctResponse = responses[responseId] || {};\n if (correctResponse.alternates && Object.keys(correctResponse.alternates).length > 0) {\n showNote = true;\n } else if (correctResponse.validation !== 'literal') {\n showNote = true;\n }\n });\n\n if (!note) {\n note = translator.t('mathInline.primaryCorrectWithAlternates', { lng: language });\n }\n\n const out = {\n prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,\n markup: normalizedQuestion.markup,\n responses: env.mode === 'gather' ? null : normalizedQuestion.responses,\n language: normalizedQuestion.language,\n equationEditor: normalizedQuestion.equationEditor,\n customKeys: normalizedQuestion.customKeys,\n disabled: env.mode !== 'gather',\n view: env.mode === 'view',\n correctness,\n env,\n extraCSSRules: normalizedQuestion.extraCSSRules,\n };\n\n const { answers = {} } = session || {};\n let feedback = {};\n\n if (env.mode === 'evaluate') {\n Object.keys(responses).forEach((responseId) => {\n const answerItem = answers['r' + responseId];\n const correctResponse = responses[responseId];\n feedback[responseId] = getIsAnswerCorrect(correctResponse, answerItem);\n });\n }\n\n if (env.mode === 'evaluate') {\n out.correctResponse = {};\n out.showNote = showNote;\n out.note = note;\n out.feedback = feedback;\n } else {\n out.responses = {};\n out.showNote = false;\n }\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n }\n\n log('out: ', out);\n resolve(out);\n });\n};\n\nexport const createCorrectResponseSession = (question, env) =>\n new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const correctResponse = Object.keys(question.responses).reduce((acc, responseId) => {\n acc['r' + responseId] = { value: question.responses[responseId].answer };\n return acc;\n }, {});\n\n resolve({ id: '1', answers: correctResponse });\n } else {\n resolve(null);\n }\n });\n\nexport const validate = (model = {}, config = {}) => {\n const { responses, markup } = model;\n const { maxResponseAreas } = config;\n const responsesErrors = {};\n const errors = {};\n\n ['teacherInstructions', 'prompt', 'rationale'].forEach((field) => {\n if (config[field]?.required && !getContent(model[field])) {\n errors[field] = 'This field is required.';\n }\n });\n\n Object.entries(responses || {}).forEach(([key, response], index) => {\n const { answer } = response;\n const reversedAlternates = [...Object.entries(response.alternates || {})].reverse();\n const alternatesErrors = {};\n const responseError = {};\n\n if (answer === '') {\n responseError.answer = 'Content should not be empty.';\n }\n\n reversedAlternates.forEach(([key, value], index) => {\n if (value === '') {\n alternatesErrors[key] = 'Content should not be empty.';\n } else {\n const identicalAnswer =\n answer === value || reversedAlternates.slice(index + 1).some(([, val]) => val === value);\n\n if (identicalAnswer) {\n alternatesErrors[key] = 'Content should be unique.';\n }\n }\n });\n\n if (!isEmpty(responseError) || !isEmpty(alternatesErrors)) {\n responsesErrors[index] = { ...responseError, ...alternatesErrors };\n }\n });\n\n const nbOfResponseAreas = (markup.match(/\\{\\{(\\d+)\\}\\}/g) || []).length;\n\n if (nbOfResponseAreas > maxResponseAreas) {\n errors.responseAreas = `No more than ${maxResponseAreas} response areas should be defined.`;\n } else if (nbOfResponseAreas < 1) {\n errors.responseAreas = 'There should be at least 1 response area defined.';\n }\n\n if (!isEmpty(responsesErrors)) {\n errors.responses = responsesErrors;\n }\n\n return errors;\n};\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../src/index.js"],"names":["translator","Translator","log","getFeedback","value","getContent","html","replace","getIsAnswerCorrect","correctResponse","answerItem","answerCorrect","opts","mode","validation","defaults","validationDefault","literal","allowTrailingZeros","ignoreOrder","acceptedValues","answer","Object","values","alternates","mv","latexEqual","e","getResponseCorrectness","question","sessionResponse","correctResponses","responses","correctness","score","correct","correctAnswers","correctResponsesCount","keys","length","forEach","responseId","fullyCorrect","Number","toFixed","getCorrectness","env","session","answers","getPartialScore","outcome","Promise","resolve","empty","partialScoringEnabled","partialScoring","enabled","normalizeSession","undefined","completed","createDefaultModel","model","allowTrailingZerosDefault","ignoreOrderDefault","updatedResponses","reduce","acc","s","getTextFromHTML","prepareVal","trim","normalizedQuestion","language","note","showNote","t","lng","out","prompt","promptEnabled","markup","equationEditor","customKeys","disabled","view","extraCSSRules","feedback","role","rationale","rationaleEnabled","teacherInstructions","teacherInstructionsEnabled","createCorrectResponseSession","id","validate","config","maxResponseAreas","responsesErrors","errors","field","required","entries","index","key","response","reversedAlternates","reverse","alternatesErrors","responseError","identicalAnswer","slice","some","val","nbOfResponseAreas","match","responseAreas"],"mappings":"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","sourcesContent":["import debug from 'debug';\nimport isEmpty from 'lodash/isEmpty';\nimport Translator from '@pie-lib/translator';\nimport * as mv from '@pie-framework/math-validation';\n\nimport defaults from './defaults';\nimport { partialScoring } from '@pie-lib/controller-utils';\n\nconst { translator } = Translator;\nconst log = debug('@pie-element:math-templated:controller');\n\nconst getFeedback = (value) => (value ? 'correct' : 'incorrect');\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');\n\nconst getIsAnswerCorrect = (correctResponse, answerItem) => {\n let answerCorrect = false;\n\n const opts = {\n mode: correctResponse.validation || defaults.validationDefault,\n ...(correctResponse.validation === 'literal' && {\n literal: {\n allowTrailingZeros: correctResponse.allowTrailingZeros || false,\n ignoreOrder: correctResponse.ignoreOrder || false,\n },\n }),\n };\n\n if (!answerCorrect) {\n const acceptedValues = [correctResponse.answer, ...Object.values(correctResponse.alternates || {})];\n\n try {\n for (const value of acceptedValues) {\n answerCorrect = mv.latexEqual(answerItem.value, value, opts);\n if (answerCorrect) break;\n }\n } catch (e) {\n log('Parse failure when evaluating math', e, correctResponse, answerItem);\n answerCorrect = false;\n }\n }\n\n return answerCorrect;\n};\n\nconst getResponseCorrectness = (question, sessionResponse) => {\n const correctResponses = question.responses;\n\n if (!sessionResponse) {\n return {\n correctness: 'unanswered',\n score: 0,\n correct: false,\n };\n } else {\n let correctAnswers = 0;\n let score = 0;\n const correctResponsesCount = Object.keys(correctResponses || {}).length;\n\n Object.keys(correctResponses).forEach((responseId) => {\n const answerItem = sessionResponse['r' + responseId];\n const correctResponse = correctResponses[responseId] || {};\n\n const answerCorrect = getIsAnswerCorrect(correctResponse, answerItem);\n if (answerCorrect) {\n correctAnswers++;\n }\n });\n\n const fullyCorrect = correctAnswers === correctResponsesCount;\n\n // partial credit scoring: each correct answer is worth 1 / total answers point\n // dichotomous scoring: for credit to be awarded, a correct answer must be entered for every response area\n score = Number((correctAnswers / Object.keys(correctResponses).length).toFixed(2));\n\n return {\n correctness: getFeedback(fullyCorrect),\n score: correctAnswers > 0 ? score : 0,\n correct: fullyCorrect,\n };\n }\n};\n\nexport const getCorrectness = (question, env, session) => {\n if (env.mode === 'evaluate') {\n return getResponseCorrectness(question, session && session.answers);\n }\n};\n\nexport const getPartialScore = (question, session) => {\n if (!session || isEmpty(session)) {\n return 0;\n }\n\n return 1;\n};\n\nexport const outcome = (question, session, env) =>\n new Promise((resolve) => {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n const partialScoringEnabled = partialScoring.enabled(question, env);\n session = normalizeSession(session);\n\n if (env.mode !== 'evaluate') {\n resolve({ score: undefined, completed: undefined });\n } else {\n const correctness = getCorrectness(question, env, session, true);\n const score = correctness.score;\n\n resolve({ score: partialScoringEnabled ? score : score === 1 ? 1 : 0 });\n }\n });\n\nexport const createDefaultModel = (model = {}) => {\n const { validationDefault, allowTrailingZerosDefault, ignoreOrderDefault, responses = {} } = model;\n\n const updatedResponses = Object.keys(responses).reduce((acc, responseId) => {\n const correctResponse = responses[responseId];\n\n acc[responseId] = {\n ...correctResponse,\n validation: correctResponse.validation || validationDefault,\n allowTrailingZeros: correctResponse.allowTrailingZeros || allowTrailingZerosDefault,\n ignoreOrder: correctResponse.ignoreOrder || ignoreOrderDefault,\n };\n\n return acc;\n }, {});\n\n return {\n ...defaults.model,\n ...model,\n responses: updatedResponses,\n };\n};\n\nexport const normalizeSession = (s) => ({ ...s });\n\nconst getTextFromHTML = (html) => (html || '').replace(/<\\/?[^>]+(>|$)/g, '');\n\nexport const prepareVal = (html) => getTextFromHTML(html).trim();\n\nexport const model = (question, session, env) => {\n return new Promise((resolve) => {\n session = session || {};\n const normalizedQuestion = createDefaultModel(question);\n const correctness = getCorrectness(normalizedQuestion, env, session);\n const { responses, language } = normalizedQuestion;\n let { note } = normalizedQuestion;\n let showNote = false;\n\n // check if there is at least one alternate response or if the validation for at least one response is not literal\n Object.keys(responses).forEach((responseId) => {\n const correctResponse = responses[responseId] || {};\n if (correctResponse.alternates && Object.keys(correctResponse.alternates).length > 0) {\n showNote = true;\n } else if (correctResponse.validation !== 'literal') {\n showNote = true;\n }\n });\n\n if (!note) {\n note = translator.t('mathInline.primaryCorrectWithAlternates', { lng: language });\n }\n\n const out = {\n prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,\n markup: normalizedQuestion.markup,\n responses: env.mode === 'gather' ? null : normalizedQuestion.responses,\n language: normalizedQuestion.language,\n equationEditor: normalizedQuestion.equationEditor,\n customKeys: normalizedQuestion.customKeys,\n disabled: env.mode !== 'gather',\n view: env.mode === 'view',\n correctness,\n env,\n extraCSSRules: normalizedQuestion.extraCSSRules,\n };\n\n const { answers = {} } = session || {};\n let feedback = {};\n\n if (env.mode === 'evaluate') {\n Object.keys(responses).forEach((responseId) => {\n const answerItem = answers['r' + responseId];\n const correctResponse = responses[responseId];\n feedback[responseId] = getIsAnswerCorrect(correctResponse, answerItem);\n });\n }\n\n if (env.mode === 'evaluate') {\n out.correctResponse = {};\n out.showNote = showNote;\n out.note = note;\n out.feedback = feedback;\n } else {\n out.responses = {};\n out.showNote = false;\n }\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n }\n\n log('out: ', out);\n resolve(out);\n });\n};\n\nexport const createCorrectResponseSession = (question, env) =>\n new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const correctResponse = Object.keys(question.responses).reduce((acc, responseId) => {\n acc['r' + responseId] = { value: question.responses[responseId].answer };\n return acc;\n }, {});\n\n resolve({ id: '1', answers: correctResponse });\n } else {\n resolve(null);\n }\n });\n\nexport const validate = (model = {}, config = {}) => {\n const { responses, markup } = model;\n const { maxResponseAreas } = config;\n const responsesErrors = {};\n const errors = {};\n\n ['teacherInstructions', 'prompt', 'rationale'].forEach((field) => {\n if (config[field]?.required && !getContent(model[field])) {\n errors[field] = 'This field is required.';\n }\n });\n\n Object.entries(responses || {}).forEach(([key, response], index) => {\n const { answer } = response;\n const reversedAlternates = [...Object.entries(response.alternates || {})].reverse();\n const alternatesErrors = {};\n const responseError = {};\n\n if (answer === '') {\n responseError.answer = 'Content should not be empty.';\n }\n\n reversedAlternates.forEach(([key, value], index) => {\n if (value === '') {\n alternatesErrors[key] = 'Content should not be empty.';\n } else {\n const identicalAnswer =\n answer === value || reversedAlternates.slice(index + 1).some(([, val]) => val === value);\n\n if (identicalAnswer) {\n alternatesErrors[key] = 'Content should be unique.';\n }\n }\n });\n\n if (!isEmpty(responseError) || !isEmpty(alternatesErrors)) {\n responsesErrors[index] = { ...responseError, ...alternatesErrors };\n }\n });\n\n const nbOfResponseAreas = (markup.match(/\\{\\{(\\d+)\\}\\}/g) || []).length;\n\n if (nbOfResponseAreas > maxResponseAreas) {\n errors.responseAreas = `No more than ${maxResponseAreas} response areas should be defined.`;\n } else if (nbOfResponseAreas < 1) {\n errors.responseAreas = 'There should be at least 1 response area defined.';\n }\n\n if (!isEmpty(responsesErrors)) {\n errors.responses = responsesErrors;\n }\n\n return errors;\n};\n"],"file":"index.js"}
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@pie-element/math-templated-controller",
3
3
  "private": true,
4
- "version": "4.1.0",
4
+ "version": "4.2.0",
5
5
  "description": "",
6
6
  "main": "lib/index.js",
7
7
  "module": "src/index.js",
8
8
  "dependencies": {
9
9
  "@pie-framework/math-validation": "^1.4.2",
10
- "@pie-lib/controller-utils": "^0.18.0",
11
- "@pie-lib/translator": "^2.19.0",
10
+ "@pie-lib/controller-utils": "^0.19.4",
11
+ "@pie-lib/translator": "^2.20.4",
12
12
  "debug": "^3.1.0",
13
13
  "lodash": "^4.17.15"
14
14
  },
@@ -0,0 +1 @@
1
+ import{_dll_react as e,_dll_prop_types as t,_dll_material_ui__core as n,_dll_material_ui__core_styles as a,_dll_material_ui__icons as o,_dll_pie_lib__render_ui as s,_dll_lodash as i,_dll_debug as l,_dll_react_dom as r}from"../../../@pie-lib/shared-module@^1.14.5/module/index.js";import{_dll_pie_lib__config_ui as p}from"../../../@pie-lib/config-module@^2.19.5/module/index.js";import{_dll_pie_lib__editable_html as d}from"../../../@pie-lib/editable-html-module@^5.6.5/module/index.js";import{_dll_pie_lib__math_toolbar as c}from"../../../@pie-lib/math-edit-module@^2.4.5/module/index.js";var h={};Object.defineProperty(h,"__esModule",{value:!0});class u extends CustomEvent{constructor(e,t=!1){super(u.TYPE,{bubbles:!0,detail:{update:e,reset:t}}),this.update=e,this.reset=t}}u.TYPE="model.updated";var g=h.ModelUpdatedEvent=u;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.image";var b=h.DeleteImageEvent=m;class _ extends CustomEvent{constructor(e){super(_.TYPE,{bubbles:!0,detail:e}),this.handler=e}}_.TYPE="insert.image";var C=h.InsertImageEvent=_;class y extends CustomEvent{constructor(e,t){super(y.TYPE,{bubbles:!0,detail:{src:e,done:t}}),this.src=e,this.done=t}}y.TYPE="delete.sound";var E=h.DeleteSoundEvent=y;class f extends CustomEvent{constructor(e){super(f.TYPE,{bubbles:!0,detail:e}),this.handler=e}}f.TYPE="insert.sound";var S=h.InsertSoundEvent=f;const v=e,w=t,{Card:x}=n,{CardContent:A}=n,{Button:T}=n,{FormControlLabel:I}=n,{Typography:k}=n,{InputLabel:R}=n,{Checkbox:M}=n,{Select:N}=n,{MenuItem:O}=n,{IconButton:P}=n,{withStyles:K}=a,{Delete:D}=o,{color:q}=s,{InputContainer:j}=p,{MathToolbar:B}=c;class L extends v.Component{static __initStatic(){this.propTypes={classes:w.object.isRequired,defaultResponse:w.bool,error:w.object,mode:w.oneOfType([w.string,w.number]),onResponseChange:w.func.isRequired,onResponseDone:w.func.isRequired,response:w.object.isRequired,cIgnoreOrder:w.object.isRequired,cAllowTrailingZeros:w.object.isRequired,responseKey:w.number.isRequired}}static __initStatic2(){this.defaultProps={defaultResponse:!1,mode:"8"}}constructor(e){super(e),L.prototype.__init.call(this),L.prototype.__init2.call(this),L.prototype.__init3.call(this),L.prototype.__init4.call(this),L.prototype.__init5.call(this),L.prototype.__init6.call(this),L.prototype.__init7.call(this),L.prototype.__init8.call(this),L.prototype.__init9.call(this),L.prototype.__init10.call(this),L.prototype.__init11.call(this);const{response:{alternates:t}={}}=e||{},n=Object.keys(t||{}).length;this.state={alternateIdCounter:n+1,showKeypad:{openCount:0,main:!1}}}__init(){this.onChange=e=>t=>{const{response:n,onResponseChange:a,responseKey:o}=this.props,s={...n};s[e]=t.target.value,a(s,o)}}__init2(){this.onConfigChanged=e=>t=>{const{response:n,onResponseChange:a,responseKey:o}=this.props,s={...n};s[e]=t.target.checked,a(s,o)}}__init3(){this.onLiteralOptionsChange=e=>()=>{const{response:t,onResponseChange:n,responseKey:a}=this.props,o={...t};o[e]=!t[e],n(o,a)}}__init4(){this.onAnswerChange=e=>{const{response:t,onResponseChange:n,responseKey:a}=this.props,o={...t};o.answer=e,n(o,a)}}__init5(){this.onAlternateAnswerChange=e=>t=>{const{response:n,onResponseChange:a,responseKey:o}=this.props,s={...n};s.alternates[e]=t,a(s,o)}}__init6(){this.onAddAlternate=()=>{const{response:e,onResponseChange:t,responseKey:n}=this.props,{alternateIdCounter:a}=this.state,o={...e};o.alternates||(o.alternates={}),o.alternates[a]="",t(o,n),this.setState({alternateIdCounter:a+1})}}__init7(){this.onRemoveAlternate=e=>()=>{const{response:t,onResponseChange:n,responseKey:a}=this.props,o={...t};delete o.alternates[e],n(o,a),this.setState((t=>({showKeypad:{...t.showKeypad,openCount:t.showKeypad[e]?t.showKeypad.openCount-1:t.showKeypad.openCount}})))}}__init8(){this.onDone=()=>{const{onResponseDone:e}=this.props;this.setState((e=>({showKeypad:{...e.showKeypad,openCount:e.showKeypad.openCount-1,main:!1}}))),e()}}__init9(){this.onFocus=()=>{this.setState((e=>({showKeypad:{...e.showKeypad,openCount:e.showKeypad.main?e.showKeypad.openCount:e.showKeypad.openCount+1,main:!0}})))}}__init10(){this.onAlternateFocus=e=>()=>{this.setState((t=>({showKeypad:{...t.showKeypad,openCount:t.showKeypad[e]?t.showKeypad.openCount:t.showKeypad.openCount+1,[e]:!0}})))}}__init11(){this.onAlternateDone=e=>()=>{this.setState((t=>({showKeypad:{...t.showKeypad,openCount:t.showKeypad.openCount-1,[e]:!1}})))}}render(){const{classes:e,mode:t,responseKey:n,response:a,cAllowTrailingZeros:o,cIgnoreOrder:s,error:i}=this.props,{showKeypad:l}=this.state,{validation:r,answer:p,alternates:d,ignoreOrder:c,allowTrailingZeros:h}=a,u=Object.keys(d||{}).length>0,g={editor:e.responseEditor,mathToolbar:e.mathToolbar},m={minHeight:(l.openCount>0?430:230)+"px"},b=`R ${parseInt(n)+1}`;return v.createElement(x,{className:e.responseContainer,style:m},v.createElement(A,{className:e.cardContent},v.createElement("div",{className:e.titleBar},v.createElement(k,{className:e.title,component:"div"},"Response for ",v.createElement("div",{className:e.responseBox},b)),v.createElement(j,{label:"Validation",className:e.selectContainer},v.createElement(N,{className:e.select,onChange:this.onChange("validation"),value:r||"literal"},v.createElement(O,{value:"literal"},"Literal Validation"),v.createElement(O,{value:"symbolic"},"Symbolic Validation")))),"literal"===r&&v.createElement("div",{className:e.flexContainer},o.enabled&&v.createElement(I,{label:o.label,control:v.createElement(M,{className:e.customColor,checked:h,onChange:this.onLiteralOptionsChange("allowTrailingZeros")})}),s.enabled&&v.createElement(I,{label:s.label,control:v.createElement(M,{className:e.customColor,checked:c,onChange:this.onLiteralOptionsChange("ignoreOrder")})})),v.createElement("div",{className:e.inputContainer},v.createElement(R,null,"Correct Answer"),v.createElement(B,{keypadMode:t,classNames:g,controlledKeypad:!0,showKeypad:l.main,latex:p||"",onChange:this.onAnswerChange,onFocus:this.onFocus,onDone:this.onDone,error:i&&i.answer}),i&&i.answer?v.createElement("div",{className:e.errorText},i.answer):null),u&&Object.keys(d).map(((n,a)=>v.createElement("div",{className:e.inputContainer,key:n},v.createElement(R,null,"Alternate",Object.keys(d).length>1?` ${a+1}`:""),v.createElement("div",{className:e.alternateBar},v.createElement(B,{classNames:g,controlledKeypad:!0,keypadMode:t,showKeypad:l[n]||!1,latex:d[n]||"",onChange:this.onAlternateAnswerChange(n),onFocus:this.onAlternateFocus(n),onDone:this.onAlternateDone(n),error:i&&i[n]}),v.createElement(P,{className:e.removeAlternateButton,onClick:this.onRemoveAlternate(n)},v.createElement(D,null))),i&&i[n]?v.createElement("div",{className:e.errorText},i[n]):null))),v.createElement(T,{className:e.alternateButton,type:"primary",onClick:this.onAddAlternate},"ADD ALTERNATE")))}}L.__initStatic(),L.__initStatic2();var H=K((e=>({responseContainer:{marginBottom:2.5*e.spacing.unit,width:"100%",minWidth:"548px",border:`1px solid ${e.palette.grey[700]}`,display:"flex",flexDirection:"column",justifyContent:"space-between"},cardContent:{paddingBottom:2*e.spacing.unit+"px !important"},title:{fontWeight:700,fontSize:"1.2rem",flex:3},selectContainer:{flex:2},inputContainer:{marginBottom:2*e.spacing.unit},titleBar:{display:"flex",alignItems:"center",justifyContent:"space-between"},responseEditor:{display:"flex",alignItems:"center",justifyContent:"center",width:"100%",minWidth:"500px",maxWidth:"900px",height:"auto",minHeight:"40px"},mathToolbar:{width:"100%"},alternateButton:{border:`1px solid ${e.palette.grey.A100}`},removeAlternateButton:{marginLeft:e.spacing.unit},errorText:{fontSize:e.typography.fontSize-2,color:e.palette.error.main,paddingTop:e.spacing.unit},responseBox:{background:e.palette.grey.A100,color:e.palette.grey.A700,display:"inline",minWidth:"50px",padding:"8px",border:"1px solid #C0C3CF"},alternateBar:{display:"flex",justifyContent:"space-between",alignItems:"center"},customColor:{color:`${q.tertiary()} !important`}})))(L);const Z="imes|riangle|an|heta|herefore",$="throot|parallel|cong|approx|eq|e|sim",W=new RegExp(`(\\t(?!${Z}))|(\\n(?!${$}))|(\\\\t(?!${Z}))|(\\\\n(?!${$}))`,"g"),z=e=>e.replace(W,"").replace(/\\"/g,'"').replace(/\\\//g,"/"),F=e=>{const t=((e="")=>{const t=document.createElement("div");return t.innerHTML=e.trim(),t})(z(e||"")||"");return t.querySelectorAll('[data-type="math_templated"]').forEach((e=>e.replaceWith(`{{${e.dataset.index}}}`))),t.innerHTML},Y=/\{\{(\d+)\}\}/g,G=(e,t)=>e?z(e).replace(Y,((e,n)=>{const a=function(e){let t,n=e[0],a=1;for(;a<e.length;){const o=e[a],s=e[a+1];if(a+=2,("optionalAccess"===o||"optionalCall"===o)&&null==n)return;"access"===o||"optionalAccess"===o?(t=n,n=s(n)):"call"!==o&&"optionalCall"!==o||(n=s(((...e)=>n.call(t,...e))),t=void 0)}return n}([t,"access",e=>e[n],"optionalAccess",e=>e.answer])||"";return`<span data-type="math_templated" data-index="${n}" data-value="${a}"></span>`})):"",U=e,V=t,{withStyles:J}=a,{Typography:Q}=n,{Select:X}=n,{MenuItem:ee}=n,{Tooltip:te}=n,{Info:ne}=o,{cloneDeep:ae}=i,{pick:oe}=i,{throttle:se}=i,{InputContainer:ie}=p,{settings:le}=p,{layout:re}=p,{dropdown:pe}=p,de=d,{ALL_PLUGINS:ce}=d;function he(e){let t,n=e[0],a=1;for(;a<e.length;){const o=e[a],s=e[a+1];if(a+=2,("optionalAccess"===o||"optionalCall"===o)&&null==n)return;"access"===o||"optionalAccess"===o?(t=n,n=s(n)):"call"!==o&&"optionalCall"!==o||(n=s(((...e)=>n.call(t,...e))),t=void 0)}return n}const{Panel:ue,toggle:ge}=le;class me extends U.Component{constructor(...e){super(...e),me.prototype.__init.call(this),me.prototype.__init2.call(this),me.prototype.__init3.call(this),me.prototype.__init4.call(this),me.prototype.__init5.call(this),me.prototype.__init6.call(this),me.prototype.__init7.call(this),me.prototype.__init8.call(this),me.prototype.__init9.call(this)}static __initStatic(){this.propTypes={model:V.object.isRequired,configuration:V.object.isRequired,classes:V.object.isRequired,onModelChanged:V.func.isRequired,onConfigurationChanged:V.func.isRequired,imageSupport:V.shape({add:V.func.isRequired,delete:V.func.isRequired}),uploadSoundSupport:V.object}}__init(){this.state={}}componentDidMount(){const{model:{slateMarkup:e}}=this.props;this.setState({markup:e})}__init2(){this.handleChange=(e,t)=>{const{onModelChanged:n,model:a}=this.props,o=ae(a);o[e]=t,n(o)}}__init3(){this.onResponseChange=(e,t)=>{const{model:n,onModelChanged:a}=this.props,o={...n};o.responses[t]=e,a(o)}}__init4(){this.onResponseDone=()=>{const{model:e,onModelChanged:t}=this.props;t({...e,slateMarkup:G(e.markup,e.responses)})}}__init5(){this.onChangeResponse=(e,t)=>{const{model:n,onModelChanged:a}=this.props,{responses:o}=n;o[e]?o[e][0].answer=t||"":o[e]=[{answer:t||"",id:"response"+e,allowSpaces:!0}],a({...n,responses:o})}}__init6(){this.onResponsesChanged=e=>{this.props.onModelChanged({...this.props.model,responses:e})}}__init7(){this.onChange=e=>{const{model:{responses:t,validationDefault:n,allowTrailingZerosDefault:a,ignoreOrderDefault:o},onModelChanged:s}=this.props,i={},l=(e=>{const t=document.createElement("div");return t.innerHTML=e.trim(),t})(e);l.querySelectorAll('[data-type="math_templated"]').forEach(((e,s)=>{const{value:l,index:r}=e.dataset;l||(e.dataset.value=""),i[s]=t[r]||{allowSpaces:!0,validation:n||"symbolic",allowTrailingZeros:a||!1,ignoreOrder:o||!1,answer:"",alternates:{}},e.dataset.index=s.toString()})),console.log("newResponses",i);const r=F(e);this.setState({cachedResponses:void 0},(()=>s({...this.props.model,slateMarkup:l.innerHTML,responses:i,markup:r})))}}__init8(){this.onHandleAreaChange=se((e=>{const{model:{responses:t},onModelChanged:n}=this.props,{cachedResponses:a}=this.state;if(!e)return;const o=t?ae(t):{},s=a?ae(a):{};e.forEach((e=>{const t=e.data.get("index");!o[t]&&s[t]?(Object.assign(o,oe(s,t)),s.hasOwnProperty(t)&&delete s[t]):(Object.assign(s,oe(o,t)),o.hasOwnProperty(t)&&delete o[t])})),this.setState({cachedResponses:s},(()=>n({...this.props.model,responses:o})))}),500,{trailing:!1,leading:!0})}__init9(){this.onBlur=e=>{const{relatedTarget:t,currentTarget:n}=e||{},a=function e(t,n=0){if(!t||n>=16)return null;const a=t.offsetParent;return a?"tooltip"===a.getAttribute("role")?a:e(a,n+1):null}(t),o=a?function e(t,n=0){if(!t||n>=4)return null;const a=he([t,"optionalAccess",e=>e.children,"optionalAccess",e=>e[0]]);return a?a.attributes&&a.attributes["data-keypad"]?a:e(a,n+1):null}(a):null;t&&n&&he([o,"optionalAccess",e=>e.attributes,"access",e=>e["data-keypad"]])||this.setState({activeAnswerBlock:""})}}render(){const{classes:e,configuration:t,imageSupport:n,model:a,onConfigurationChanged:o,onModelChanged:s,uploadSoundSupport:i}=this.props,{baseInputConfiguration:l={},contentDimensions:r={},prompt:p={},rationale:d={},settingsPanelDisabled:c,teacherInstructions:h={},language:u={},languageChoices:g={},spellCheck:m={},playerSpellCheck:b={},maxImageWidth:_={},maxImageHeight:C={},mathMlOptions:y={},template:E={},editSource:f={},ignoreOrder:S={},allowTrailingZeros:v={},partialScoring:w={},maxResponseAreas:x}=t||{},{errors:A,extraCSSRules:T,promptEnabled:I,rationaleEnabled:k,spellCheckEnabled:R,teacherInstructionsEnabled:M,toolbarEditorPosition:N,responses:O,equationEditor:P}=a||{},{prompt:K,rationale:D,responseAreas:q,teacherInstructions:j,responses:B={}}=A||{},L=(e=>{const{maxResponseAreas:t}=e;return"Validation requirements:\nCorrect answers should not be blank.\nEach answer defined for a response area should be unique.\nThere should be at least 1 "+(t?`and at most ${t} `:"")+"response area"+(t?"s":"")+" defined."})(t),Z={"language.enabled":u.settings&&ge(u.label,!0),language:u.settings&&u.enabled&&pe(g.label,g.options)},$={teacherInstructionsEnabled:h.settings&&ge(h.label),rationaleEnabled:d.settings&&ge(d.label),promptEnabled:p.settings&&ge(p.label),spellCheckEnabled:m.settings&&ge(m.label),playerSpellCheckEnabled:b.settings&&ge(b.label),"editSource.enabled":he([f,"optionalAccess",e=>e.settings])&&ge(f.label,!0),partialScoring:w.settings&&ge(w.label)},W=_&&_.prompt,z=C&&C.prompt,F={position:"top"===N?"top":"bottom"},Y=(e={},t={})=>({...t,...e});return U.createElement(re.ConfigLayout,{extraCSSRules:T,dimensions:r,hideSettings:c,settings:U.createElement(ue,{model:a,configuration:t,onChangeModel:e=>s(e),onChangeConfiguration:o,groups:{Settings:Z,Properties:$}})},M&&U.createElement(ie,{label:h.label,className:e.promptHolder},U.createElement(de,{className:e.prompt,markup:a.teacherInstructions||"",onChange:e=>this.handleChange("teacherInstructions",e),imageSupport:n,nonEmpty:!1,error:j,toolbarOpts:F,pluginProps:Y(he([h,"optionalAccess",e=>e.inputConfiguration]),l),spellCheck:R,maxImageWidth:_&&_.teacherInstructions||W,maxImageHeight:C&&C.teacherInstructions||z,uploadSoundSupport:i,languageCharactersProps:[{language:"spanish"},{language:"special"}],mathMlOptions:y}),j&&U.createElement("div",{className:e.errorText},j)),I&&U.createElement(ie,{label:p.label,className:e.promptHolder},U.createElement(de,{className:e.prompt,markup:a.prompt,onChange:e=>this.handleChange("prompt",e),imageSupport:n,nonEmpty:!1,disableUnderline:!0,error:K,toolbarOpts:F,pluginProps:Y(he([h,"optionalAccess",e=>e.inputConfiguration]),l),spellCheck:R,maxImageWidth:W,maxImageHeight:z,uploadSoundSupport:i,languageCharactersProps:[{language:"spanish"},{language:"special"}],mathMlOptions:y}),K&&U.createElement("div",{className:e.errorText},K)),U.createElement("div",{className:e.tooltipContainer},U.createElement(Q,{className:e.title,component:"div"},"Response Template"),U.createElement(te,{classes:{tooltip:e.tooltip},disableFocusListener:!0,disableTouchListener:!0,placement:"right",title:L},U.createElement(ne,{fontSize:"small",color:"primary"}))),U.createElement(de,{activePlugins:ce,toolbarOpts:{position:"top"},spellCheck:R,pluginProps:Y(he([E,"optionalAccess",e=>e.inputConfiguration]),l),responseAreaProps:{type:"math-templated",respAreaToolbar:null,error:()=>B,onHandleAreaChange:this.onHandleAreaChange,maxResponseAreas:x},className:e.markup,markup:a.slateMarkup,onChange:this.onChange,imageSupport:n,disableImageAlignmentButtons:!0,onBlur:this.onBlur,disabled:!1,highlightShape:!1,error:q,uploadSoundSupport:i,languageCharactersProps:[{language:"spanish"},{language:"special"}],mathMlOptions:y}),q&&U.createElement("div",{className:e.responseAreaError},q),U.createElement(Q,{className:e.title},"Define Response"),U.createElement(ie,{label:"Response Template Equation Editor",className:e.selectContainer},U.createElement(X,{className:e.select,onChange:e=>this.handleChange("equationEditor",e.target.value),value:P},U.createElement(ee,{value:"non-negative-integers"},"Numeric - Non-Negative Integers"),U.createElement(ee,{value:"integers"},"Numeric - Integers"),U.createElement(ee,{value:"decimals"},"Numeric - Decimals"),U.createElement(ee,{value:"fractions"},"Numeric - Fractions"),U.createElement(ee,{value:1},"Grade 1 - 2"),U.createElement(ee,{value:3},"Grade 3 - 5"),U.createElement(ee,{value:6},"Grade 6 - 7"),U.createElement(ee,{value:8},"Grade 8 - HS"),U.createElement(ee,{value:"geometry"},"Geometry"),U.createElement(ee,{value:"advanced-algebra"},"Advanced Algebra"),U.createElement(ee,{value:"statistics"},"Statistics"),U.createElement(ee,{value:"item-authoring"},"Item Authoring"))),Object.keys(O||{}).map(((e,t)=>{const n=O[t];return n?U.createElement(H,{key:t,responseKey:t,mode:P,response:n,onResponseChange:this.onResponseChange,onResponseDone:this.onResponseDone,index:t,cIgnoreOrder:S,cAllowTrailingZeros:v,error:B&&B[t]}):null})),k&&U.createElement(ie,{label:d.label,className:e.promptHolder},U.createElement(de,{className:e.prompt,markup:a.rationale||"",onChange:e=>this.handleChange("rationale",e),imageSupport:n,nonEmpty:!1,error:D,toolbarOpts:F,pluginProps:Y(he([d,"optionalAccess",e=>e.inputConfiguration]),{...l,math:{controlledKeypadMode:!1}}),spellCheck:R,maxImageWidth:_&&_.rationale||W,maxImageHeight:C&&C.rationale||z,uploadSoundSupport:i,languageCharactersProps:[{language:"spanish"},{language:"special"}],mathMlOptions:y}),D&&U.createElement("div",{className:e.errorText},D)))}}me.__initStatic();var be=J((e=>({promptHolder:{width:"100%",paddingTop:2*e.spacing.unit,marginBottom:2*e.spacing.unit},prompt:{width:"100%"},errorText:{color:e.palette.error.main,fontSize:"0.75rem",marginTop:e.spacing.unit},responseAreaError:{color:e.palette.error.main,fontSize:"0.75rem",marginBottom:e.spacing.unit},markup:{width:"100%",marginTop:2*e.spacing.unit,marginBottom:3*e.spacing.unit},selectContainer:{width:"100%",marginTop:2*e.spacing.unit},select:{width:"100%"},title:{fontSize:1.25*e.typography.fontSize,fontWeight:"bold"},tooltipContainer:{display:"flex",alignItems:"center",gap:"8px"},tooltip:{fontSize:e.typography.fontSize-2,whiteSpace:"pre",maxWidth:"500px"}})))(me),_e={allowTrailingZerosDefault:!1,equationEditor:"8",ignoreOrderDefault:!1,markup:"",playerSpellCheckEnabled:!0,prompt:"",promptEnabled:!0,rationale:"",rationaleEnabled:!0,responses:{},spellCheckEnabled:!0,teacherInstructions:"",teacherInstructionsEnabled:!0,toolbarEditorPosition:"bottom",validationDefault:"literal"},Ce={ignoreOrder:{settings:!1,label:"Ignore Order",enabled:!0},allowTrailingZeros:{settings:!1,label:"Allow Trailing Zeros",enabled:!0},partialScoring:{settings:!0,label:"Allow Partial Scoring"},baseInputConfiguration:{html:{disabled:!0},audio:{disabled:!1},video:{disabled:!1},image:{disabled:!1},h3:{disabled:!0},blockquote:{disabled:!0},textAlign:{disabled:!0},showParagraphs:{disabled:!1},separateParagraphs:{disabled:!0}},prompt:{label:"Prompt",settings:!0,inputConfiguration:{audio:{disabled:!1},video:{disabled:!1},image:{disabled:!1}},required:!1},spellCheck:{label:"Spellcheck",settings:!1,enabled:!0},editSource:{label:"Edit Source",settings:!1,enabled:!1},playerSpellCheck:{label:"Student Spellcheck",settings:!0,enabled:!0},teacherInstructions:{settings:!0,label:"Teacher Instructions",inputConfiguration:{audio:{disabled:!1},video:{disabled:!1},image:{disabled:!1}},required:!1},rationale:{settings:!0,label:"Rationale",inputConfiguration:{audio:{disabled:!1},video:{disabled:!1},image:{disabled:!1}},required:!1},template:{inputConfiguration:{audio:{disabled:!1},video:{disabled:!1},image:{disabled:!1}}},maxImageWidth:{teacherInstructions:300,prompt:300,rationale:300},maxImageHeight:{teacherInstructions:300,prompt:300,rationale:300},mathMlOptions:{mmlOutput:!1,mmlEditing:!1},language:{settings:!1,label:"Specify Language",enabled:!1},languageChoices:{label:"Language Choices",options:[]},maxResponseAreas:10};const ye=e,Ee=r,fe=l,{defaults:Se}=i,{isArray:ve}=i;function we(e){let t,n=e[0],a=1;for(;a<e.length;){const o=e[a],s=e[a+1];if(a+=2,("optionalAccess"===o||"optionalCall"===o)&&null==n)return;"access"===o||"optionalAccess"===o?(t=n,n=s(n)):"call"!==o&&"optionalCall"!==o||(n=s(((...e)=>n.call(t,...e))),t=void 0)}return n}const xe=fe("math-templated:configure");class Ae extends HTMLElement{static __initStatic(){this.prepareModel=(e={})=>{const{validationDefault:t,allowTrailingZerosDefault:n,ignoreOrderDefault:a,responses:o={}}=e,s=Object.keys(o).reduce(((e,s)=>{const i=o[s];return e[s]={...i,validation:i.validation||t,allowTrailingZeros:i.allowTrailingZeros||n,ignoreOrder:i.ignoreOrder||a},e}),{}),i={..._e,...e,responses:s},l=i.slateMarkup||G(i.markup,i.responses),r=F(l);return i.responses&&Object.keys(i.responses).forEach((e=>{ve(i.responses[e])&&(i.responses[e]=(i.responses[e]||[]).map(((e,t)=>e.answer?e:(xe('Choice does not contain "answer" property, which is required.',e),{answer:`${t}`,...e}))))})),{...i,slateMarkup:l,markup:r}}}constructor(){super(),this._model=Ae.prepareModel(),this._configuration=Ce,this.onModelChanged=this.onModelChanged.bind(this),this.onConfigurationChanged=this.onConfigurationChanged.bind(this)}set model(e){this._model=Ae.prepareModel(e),this._render()}set configuration(e){this._configuration=Se(e,Ce),we([e,"access",e=>e.language,"optionalAccess",e=>e.enabled])?we([e,"access",e=>e.languageChoices,"optionalAccess",e=>e.options,"optionalAccess",e=>e.length])&&(this._model.language=e.languageChoices.options[0].value):e.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 g(this._model,t))}onModelChanged(e,t){this._model=Ae.prepareModel(e),this._render(),this.dispatchModelUpdated(t)}onConfigurationChanged(e){this._configuration=e,this._render()}insertImage(e){this.dispatchEvent(new C(e))}onDeleteImage(e,t){this.dispatchEvent(new b(e,t))}insertSound(e){this.dispatchEvent(new S(e))}onDeleteSound(e,t){this.dispatchEvent(new E(e,t))}_render(){xe("_render");let e=ye.createElement(be,{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)}});Ee.render(e,this)}}Ae.__initStatic();export{Ae as default};