@pie-element/match 11.0.5-esm.1 → 11.1.2-next.1

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.
Files changed (40) hide show
  1. package/CHANGELOG.md +1083 -2579
  2. package/configure/CHANGELOG.md +928 -2260
  3. package/configure/lib/add-row.js +27 -73
  4. package/configure/lib/add-row.js.map +1 -1
  5. package/configure/lib/answer-config-block.js +262 -335
  6. package/configure/lib/answer-config-block.js.map +1 -1
  7. package/configure/lib/common.js +18 -33
  8. package/configure/lib/common.js.map +1 -1
  9. package/configure/lib/configure.js +330 -420
  10. package/configure/lib/configure.js.map +1 -1
  11. package/configure/lib/defaults.js +5 -4
  12. package/configure/lib/defaults.js.map +1 -1
  13. package/configure/lib/general-config-block.js +123 -190
  14. package/configure/lib/general-config-block.js.map +1 -1
  15. package/configure/lib/index.js +117 -190
  16. package/configure/lib/index.js.map +1 -1
  17. package/configure/lib/row.js +283 -373
  18. package/configure/lib/row.js.map +1 -1
  19. package/configure/lib/utils.js +4 -15
  20. package/configure/lib/utils.js.map +1 -1
  21. package/configure/package.json +15 -14
  22. package/controller/CHANGELOG.md +630 -1541
  23. package/controller/lib/defaults.js +2 -3
  24. package/controller/lib/defaults.js.map +1 -1
  25. package/controller/lib/index.js +173 -301
  26. package/controller/lib/index.js.map +1 -1
  27. package/controller/package.json +6 -6
  28. package/lib/answer-grid.js +145 -242
  29. package/lib/answer-grid.js.map +1 -1
  30. package/lib/index.js +59 -108
  31. package/lib/index.js.map +1 -1
  32. package/lib/main.js +123 -191
  33. package/lib/main.js.map +1 -1
  34. package/package.json +15 -29
  35. package/esm/configure.js +0 -3936
  36. package/esm/configure.js.map +0 -1
  37. package/esm/controller.js +0 -428
  38. package/esm/controller.js.map +0 -1
  39. package/esm/element.js +0 -472
  40. package/esm/element.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.js"],"names":["log","getResponseCorrectness","model","answers","env","isPartialScoring","partialScoring","enabled","rows","checkboxMode","choiceMode","Object","keys","length","totalCorrectAnswers","getTotalCorrectAnswers","getTotalCorrect","correctAnswers","incorrectAnswers","checkboxes","getCheckboxes","getCorrectRadios","getCorrectness","question","mode","forEach","row","answer","id","values","v","i","matchingTable","layout","noOfTotalCorrectAnswers","value","getPartialScore","totalCorrect","total","extraAnswers","score","parseFloat","toFixed","getOutComeScore","correctness","outcome","session","Promise","resolve","undefined","completed","empty","out","createDefaultModel","defaults","normalize","updateSession","normalizedQuestion","correctResponse","correctInfo","lockChoiceOrder","fb","feedbackEnabled","feedback","then","extraCSSRules","promptEnabled","prompt","essentials","allowFeedback","shuffled","disabled","view","role","teacherInstructions","teacherInstructionsEnabled","rationale","rationaleEnabled","assign","createCorrectResponseSession","r","getInnerText","html","replaceAll","getContent","replace","validate","config","headers","minQuestions","maxQuestions","maxLengthQuestionsHeading","maxAnswers","maxLengthAnswers","maxLengthFirstColumnHeading","rowsErrors","columnsErrors","errors","field","required","noOfRowsError","index","title","identicalAnswer","slice","some","hasCorrectResponse","columnsLengthError","headersContent","map","heading","shift","headerIndex","head","hasRowErrors","error","noCorrectAnswer","includes","correctResponseError","hasColumnErrors"],"mappings":"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","sourcesContent":["import isEqual from 'lodash/isEqual';\nimport isEmpty from 'lodash/isEmpty';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { getFeedbackForCorrectness } from '@pie-lib/feedback';\nimport { lockChoices, getShuffledChoices, partialScoring } from '@pie-lib/controller-utils';\nimport debug from 'debug';\n\nconst log = debug('@pie-element:match:controller');\n\nimport defaults from './defaults';\n\nconst getResponseCorrectness = (model, answers, env = {}) => {\n const isPartialScoring = partialScoring.enabled(model, env);\n const rows = model.rows;\n const checkboxMode = model.choiceMode === 'checkbox';\n\n if (!answers || Object.keys(answers).length === 0) {\n return 'unanswered';\n }\n\n const totalCorrectAnswers = checkboxMode ? getTotalCorrectAnswers(model) : getTotalCorrect(model);\n let correctAnswers;\n let incorrectAnswers = 0;\n\n if (checkboxMode) {\n const checkboxes = getCheckboxes(rows, answers);\n\n correctAnswers = checkboxes.correctAnswers;\n incorrectAnswers = checkboxes.incorrectAnswers;\n } else {\n correctAnswers = getCorrectRadios(rows, answers);\n }\n\n if (totalCorrectAnswers === correctAnswers && !incorrectAnswers) {\n return 'correct';\n } else if (correctAnswers === 0) {\n return 'incorrect';\n } else if (isPartialScoring) {\n return 'partial';\n }\n\n return 'incorrect';\n};\n\nconst getCorrectness = (question, env, answers = {}) => {\n if (env.mode === 'evaluate') {\n return getResponseCorrectness(question, answers, env);\n }\n};\n\nconst getCheckboxes = (rows, answers) => {\n let correctAnswers = 0;\n let incorrectAnswers = 0;\n\n rows.forEach((row) => {\n const answer = answers[row.id];\n\n if (answer) {\n row.values.forEach((v, i) => {\n if (answer[i] && answer[i] === v) {\n correctAnswers += 1;\n } else if (answer[i] && answer[i] !== v) {\n incorrectAnswers += 1;\n }\n });\n }\n });\n\n return { correctAnswers, incorrectAnswers };\n};\n\nconst getCorrectRadios = (rows, answers) => {\n let correctAnswers = 0;\n\n rows.forEach((row) => {\n if (isEqual(row.values, answers[row.id])) {\n correctAnswers += 1;\n }\n });\n\n return correctAnswers;\n};\n\nconst getTotalCorrect = (question) => {\n const checkboxMode = question.choiceMode === 'checkbox';\n const matchingTable = checkboxMode ? question.layout - 1 : 1;\n return (question.rows.length || 0) * matchingTable;\n};\n\nconst getTotalCorrectAnswers = (question) => {\n let noOfTotalCorrectAnswers = 0;\n\n question.rows.forEach((row) => {\n row.values.forEach((value) => {\n if (value) {\n noOfTotalCorrectAnswers += 1;\n }\n });\n });\n\n return noOfTotalCorrectAnswers;\n};\n\nconst getPartialScore = (question, answers) => {\n const checkboxMode = question.choiceMode === 'checkbox';\n\n if (checkboxMode) {\n const { correctAnswers, incorrectAnswers } = getCheckboxes(question.rows, answers);\n const totalCorrect = getTotalCorrectAnswers(question);\n\n const total = totalCorrect === 0 ? 1 : totalCorrect;\n\n if (correctAnswers + incorrectAnswers > totalCorrect) {\n const extraAnswers = correctAnswers + incorrectAnswers - totalCorrect;\n const score = parseFloat(((correctAnswers - extraAnswers) / total).toFixed(2));\n\n return score < 0 ? 0 : score;\n } else {\n return parseFloat((correctAnswers / total).toFixed(2));\n }\n } else {\n const correctAnswers = getCorrectRadios(question.rows, answers);\n const totalCorrect = getTotalCorrect(question) === 0 ? 1 : getTotalCorrect(question);\n\n return parseFloat((correctAnswers / totalCorrect).toFixed(2));\n }\n};\n\nconst getOutComeScore = (question, env, answers = {}) => {\n const correctness = getCorrectness(question, env, answers);\n const isPartialScoring = partialScoring.enabled(question, env);\n\n return correctness === 'correct'\n ? 1\n : correctness === 'partial' && isPartialScoring\n ? getPartialScore(question, answers)\n : 0;\n};\n\nexport const outcome = (question, session, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate') {\n resolve({ score: undefined, completed: undefined });\n } else {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n\n const out = {\n score: getOutComeScore(question, env, session.answers),\n };\n\n resolve(out);\n }\n });\n};\n\nexport function createDefaultModel(model = {}) {\n return new Promise((resolve) => {\n resolve({\n ...defaults,\n ...model,\n });\n });\n}\n\nexport const normalize = (question) => ({ ...defaults, ...question });\n\n/**\n *\n * @param {*} question\n * @param {*} session\n * @param {*} env\n * @param {*} updateSession - optional - a function that will set the properties passed into it on the session.\n */\nexport function model(question, session, env, updateSession) {\n return new Promise(async (resolve) => {\n const normalizedQuestion = cloneDeep(normalize(question));\n let correctness, score;\n\n if ((!session || isEmpty(session)) && env.mode === 'evaluate') {\n correctness = 'unanswered';\n score = '0%';\n } else {\n correctness = getCorrectness(normalizedQuestion, env, session && session.answers);\n score = `${getOutComeScore(normalizedQuestion, env, session && session.answers) * 100}%`;\n }\n\n const correctResponse = {};\n const correctInfo = {\n score,\n correctness,\n };\n\n const lockChoiceOrder = lockChoices(normalizedQuestion, session, env);\n\n if (!lockChoiceOrder) {\n normalizedQuestion.rows = await getShuffledChoices(normalizedQuestion.rows, session, updateSession, 'id');\n }\n\n normalizedQuestion.rows.forEach((row) => {\n correctResponse[row.id] = row.values;\n\n if (env.mode !== 'evaluate') {\n delete row.values;\n }\n });\n\n const fb =\n env.mode === 'evaluate' && normalizedQuestion.feedbackEnabled\n ? getFeedbackForCorrectness(correctInfo.correctness, normalizedQuestion.feedback)\n : Promise.resolve(undefined);\n\n fb.then((feedback) => {\n const { extraCSSRules, feedbackEnabled, promptEnabled, prompt, lockChoiceOrder, ...essentials } =\n normalizedQuestion;\n const out = {\n ...essentials,\n extraCSSRules,\n allowFeedback: feedbackEnabled,\n prompt: promptEnabled ? prompt : null,\n shuffled: !lockChoiceOrder,\n feedback,\n disabled: env.mode !== 'gather',\n view: env.mode === 'view',\n };\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n }\n\n if (env.mode === 'evaluate') {\n Object.assign(out, {\n correctResponse,\n correctness: correctInfo,\n });\n }\n\n log('out: ', out);\n resolve(out);\n });\n });\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { rows } = question;\n const answers = {};\n\n rows.forEach((r) => {\n answers[r.id] = r.values;\n });\n\n resolve({\n answers,\n id: '1',\n });\n } else {\n resolve(null);\n }\n });\n};\n\n// remove all html tags\nconst getInnerText = (html) => (html || '').replaceAll(/<[^>]*>/g, '');\n\n// remove all html tags except img, iframe and source tag for audio\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');\n\nexport const validate = (model = {}, config = {}) => {\n const { rows, choiceMode, headers } = model;\n const {\n minQuestions,\n maxQuestions,\n maxLengthQuestionsHeading,\n maxAnswers,\n maxLengthAnswers,\n maxLengthFirstColumnHeading,\n } = config;\n const rowsErrors = {};\n const columnsErrors = {};\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 if (rows.length < minQuestions) {\n errors.noOfRowsError = `There should be at least ${minQuestions} question rows.`;\n } else if (rows.length > maxQuestions) {\n errors.noOfRowsError = `No more than ${maxQuestions} question rows should be defined.`;\n }\n\n (rows || []).forEach((row, index) => {\n const { id, values = [], title } = row;\n rowsErrors[id] = '';\n\n if (maxLengthQuestionsHeading && getInnerText(title).length > maxLengthQuestionsHeading) {\n rowsErrors[id] += `Content length should be maximum ${maxLengthQuestionsHeading} characters. `;\n }\n\n if (!getContent(title)) {\n rowsErrors[id] += 'Content should not be empty. ';\n } else {\n // check for identical content with the previous answers\n const identicalAnswer = rows.slice(0, index).some((r) => getContent(r.title) === getContent(title));\n\n if (identicalAnswer) {\n rowsErrors[id] += 'Content should be unique. ';\n }\n }\n\n const hasCorrectResponse = values.some((value) => !!value);\n\n if (!hasCorrectResponse) {\n rowsErrors[id] += 'No correct response defined.';\n }\n });\n\n if (maxAnswers && headers.length - 1 > maxAnswers) {\n errors.columnsLengthError = `There should be maximum ${maxAnswers} answers.`;\n }\n\n if (maxLengthFirstColumnHeading && headers[0].length > maxLengthFirstColumnHeading) {\n columnsErrors[0] = `Content length should be maximum ${maxLengthFirstColumnHeading} characters.`;\n }\n\n const headersContent = (headers || []).map((heading) => getContent(heading));\n headersContent.shift(); // remove first column since it does not require validation\n\n headersContent.forEach((heading, index) => {\n const headerIndex = index + 1; // we need to add 1 because we removed first header from validation\n columnsErrors[headerIndex] = '';\n\n if (maxLengthAnswers && getInnerText(heading).length > maxLengthAnswers) {\n columnsErrors[headerIndex] += `Content length should be maximum ${maxLengthAnswers} characters. `;\n }\n\n if (!heading) {\n columnsErrors[headerIndex] += 'Content should not be empty.';\n } else {\n // check for identical content with the previous headers\n const identicalAnswer = headersContent.slice(0, index).some((head) => head === heading);\n\n if (identicalAnswer) {\n columnsErrors[index + 1] += 'Content should be unique.';\n }\n }\n });\n\n const hasRowErrors = Object.values(rowsErrors).some((error) => (error || '').length);\n\n if (hasRowErrors) {\n errors.rowsErrors = rowsErrors;\n\n const noCorrectAnswer = Object.values(rowsErrors).some((error) =>\n (error || '').includes('No correct response defined.'),\n );\n\n if (noCorrectAnswer) {\n errors.correctResponseError =\n choiceMode === 'radio'\n ? 'There should be a correct response defined for every row.'\n : 'There should be at least one correct response defined for every row.';\n }\n }\n\n const hasColumnErrors = Object.values(columnsErrors).some((error) => (error || '').length);\n\n if (hasColumnErrors) {\n errors.columnsErrors = columnsErrors;\n }\n\n return errors;\n};\n"],"file":"index.js"}
1
+ {"version":3,"file":"index.js","names":["_lodashEs","require","_feedback","_controllerUtils","_debug","_interopRequireDefault","_defaults","log","debug","getResponseCorrectness","model","answers","env","isPartialScoring","partialScoring","enabled","rows","checkboxMode","choiceMode","Object","keys","length","totalCorrectAnswers","getTotalCorrectAnswers","getTotalCorrect","correctAnswers","incorrectAnswers","checkboxes","getCheckboxes","getCorrectRadios","getCorrectness","question","mode","forEach","row","answer","id","values","v","i","isEqual","matchingTable","layout","noOfTotalCorrectAnswers","value","getPartialScore","totalCorrect","total","extraAnswers","score","parseFloat","toFixed","getOutComeScore","correctness","outcome","session","Promise","resolve","undefined","completed","isEmpty","empty","out","exports","createDefaultModel","defaults","normalize","updateSession","normalizedQuestion","cloneDeep","correctResponse","correctInfo","lockChoiceOrder","lockChoices","getShuffledChoices","feedback","feedbackEnabled","getFeedbackForCorrectness","extraCSSRules","promptEnabled","prompt","_","essentials","allowFeedback","shuffled","disabled","view","role","teacherInstructions","teacherInstructionsEnabled","rationale","rationaleEnabled","assign","createCorrectResponseSession","r","getInnerText","html","replaceAll","getContent","replace","validate","config","headers","minQuestions","maxQuestions","maxLengthQuestionsHeading","maxAnswers","maxLengthAnswers","maxLengthFirstColumnHeading","rowsErrors","columnsErrors","errors","field","required","noOfRowsError","index","title","identicalAnswer","slice","some","hasCorrectResponse","columnsLengthError","headersContent","map","heading","shift","headerIndex","head","hasRowErrors","error","noCorrectAnswer","includes","correctResponseError","hasColumnErrors"],"sources":["../src/index.js"],"sourcesContent":["import { cloneDeep, isEmpty, isEqual } from 'lodash-es';\nimport { getFeedbackForCorrectness } from '@pie-lib/feedback';\nimport { lockChoices, getShuffledChoices, partialScoring } from '@pie-lib/controller-utils';\nimport debug from 'debug';\n\nconst log = debug('@pie-element:match:controller');\n\nimport defaults from './defaults';\n\nconst getResponseCorrectness = (model, answers, env = {}) => {\n const isPartialScoring = partialScoring.enabled(model, env);\n const rows = model.rows;\n const checkboxMode = model.choiceMode === 'checkbox';\n\n if (!answers || Object.keys(answers).length === 0) {\n return 'unanswered';\n }\n\n const totalCorrectAnswers = checkboxMode ? getTotalCorrectAnswers(model) : getTotalCorrect(model);\n let correctAnswers;\n let incorrectAnswers = 0;\n\n if (checkboxMode) {\n const checkboxes = getCheckboxes(rows, answers);\n\n correctAnswers = checkboxes.correctAnswers;\n incorrectAnswers = checkboxes.incorrectAnswers;\n } else {\n correctAnswers = getCorrectRadios(rows, answers);\n }\n\n if (totalCorrectAnswers === correctAnswers && !incorrectAnswers) {\n return 'correct';\n } else if (correctAnswers === 0) {\n return 'incorrect';\n } else if (isPartialScoring) {\n return 'partial';\n }\n\n return 'incorrect';\n};\n\nconst getCorrectness = (question, env, answers = {}) => {\n if (env.mode === 'evaluate') {\n return getResponseCorrectness(question, answers, env);\n }\n};\n\nconst getCheckboxes = (rows, answers) => {\n let correctAnswers = 0;\n let incorrectAnswers = 0;\n\n rows.forEach((row) => {\n const answer = answers[row.id];\n\n if (answer) {\n row.values.forEach((v, i) => {\n if (answer[i] && answer[i] === v) {\n correctAnswers += 1;\n } else if (answer[i] && answer[i] !== v) {\n incorrectAnswers += 1;\n }\n });\n }\n });\n\n return { correctAnswers, incorrectAnswers };\n};\n\nconst getCorrectRadios = (rows, answers) => {\n let correctAnswers = 0;\n\n rows.forEach((row) => {\n if (isEqual(row.values, answers[row.id])) {\n correctAnswers += 1;\n }\n });\n\n return correctAnswers;\n};\n\nconst getTotalCorrect = (question) => {\n const checkboxMode = question.choiceMode === 'checkbox';\n const matchingTable = checkboxMode ? question.layout - 1 : 1;\n return (question.rows.length || 0) * matchingTable;\n};\n\nconst getTotalCorrectAnswers = (question) => {\n let noOfTotalCorrectAnswers = 0;\n\n question.rows.forEach((row) => {\n row.values.forEach((value) => {\n if (value) {\n noOfTotalCorrectAnswers += 1;\n }\n });\n });\n\n return noOfTotalCorrectAnswers;\n};\n\nconst getPartialScore = (question, answers) => {\n const checkboxMode = question.choiceMode === 'checkbox';\n\n if (checkboxMode) {\n const { correctAnswers, incorrectAnswers } = getCheckboxes(question.rows, answers);\n const totalCorrect = getTotalCorrectAnswers(question);\n\n const total = totalCorrect === 0 ? 1 : totalCorrect;\n\n if (correctAnswers + incorrectAnswers > totalCorrect) {\n const extraAnswers = correctAnswers + incorrectAnswers - totalCorrect;\n const score = parseFloat(((correctAnswers - extraAnswers) / total).toFixed(2));\n\n return score < 0 ? 0 : score;\n } else {\n return parseFloat((correctAnswers / total).toFixed(2));\n }\n } else {\n const correctAnswers = getCorrectRadios(question.rows, answers);\n const totalCorrect = getTotalCorrect(question) === 0 ? 1 : getTotalCorrect(question);\n\n return parseFloat((correctAnswers / totalCorrect).toFixed(2));\n }\n};\n\nconst getOutComeScore = (question, env, answers = {}) => {\n const correctness = getCorrectness(question, env, answers);\n const isPartialScoring = partialScoring.enabled(question, env);\n\n return correctness === 'correct'\n ? 1\n : correctness === 'partial' && isPartialScoring\n ? getPartialScore(question, answers)\n : 0;\n};\n\nexport const outcome = (question, session, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate') {\n resolve({ score: undefined, completed: undefined });\n } else {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n\n const out = {\n score: getOutComeScore(question, env, session.answers),\n };\n\n resolve(out);\n }\n });\n};\n\nexport function createDefaultModel(model = {}) {\n return new Promise((resolve) => {\n resolve({\n ...defaults,\n ...model,\n });\n });\n}\n\nexport const normalize = (question) => ({ ...defaults, ...question });\n\n/**\n *\n * @param {*} question\n * @param {*} session\n * @param {*} env\n * @param {*} updateSession - optional - a function that will set the properties passed into it on the session.\n */\nexport async function model(question, session, env, updateSession) {\n const normalizedQuestion = cloneDeep(normalize(question));\n let correctness, score;\n\n if ((!session || isEmpty(session)) && env.mode === 'evaluate') {\n correctness = 'unanswered';\n score = '0%';\n } else {\n correctness = getCorrectness(normalizedQuestion, env, session && session.answers);\n score = `${getOutComeScore(normalizedQuestion, env, session && session.answers) * 100}%`;\n }\n\n const correctResponse = {};\n const correctInfo = {\n score,\n correctness,\n };\n\n const lockChoiceOrder = lockChoices(normalizedQuestion, session, env);\n\n if (!lockChoiceOrder) {\n normalizedQuestion.rows = await getShuffledChoices(normalizedQuestion.rows, session, updateSession, 'id');\n }\n\n normalizedQuestion.rows.forEach((row) => {\n correctResponse[row.id] = row.values;\n\n if (env.mode !== 'evaluate') {\n delete row.values;\n }\n });\n\n const feedback =\n env.mode === 'evaluate' && normalizedQuestion.feedbackEnabled\n ? await getFeedbackForCorrectness(correctInfo.correctness, normalizedQuestion.feedback)\n : undefined;\n\n const {\n extraCSSRules,\n feedbackEnabled,\n promptEnabled,\n prompt,\n lockChoiceOrder: _,\n ...essentials\n } = normalizedQuestion;\n const out = {\n ...essentials,\n extraCSSRules,\n allowFeedback: feedbackEnabled,\n prompt: promptEnabled ? prompt : null,\n shuffled: !lockChoiceOrder,\n feedback,\n disabled: env.mode !== 'gather',\n view: env.mode === 'view',\n };\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n }\n\n if (env.mode === 'evaluate') {\n Object.assign(out, {\n correctResponse,\n correctness: correctInfo,\n });\n }\n\n log('out: ', out);\n return out;\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { rows } = question;\n const answers = {};\n\n rows.forEach((r) => {\n answers[r.id] = r.values;\n });\n\n resolve({\n answers,\n id: '1',\n });\n } else {\n resolve(null);\n }\n });\n};\n\n// remove all html tags\nconst getInnerText = (html) => (html || '').replaceAll(/<[^>]*>/g, '');\n\n// remove all html tags except img, iframe and source tag for audio\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');\n\nexport const validate = (model = {}, config = {}) => {\n const { rows, choiceMode, headers } = model;\n const {\n minQuestions,\n maxQuestions,\n maxLengthQuestionsHeading,\n maxAnswers,\n maxLengthAnswers,\n maxLengthFirstColumnHeading,\n } = config;\n const rowsErrors = {};\n const columnsErrors = {};\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 if (rows.length < minQuestions) {\n errors.noOfRowsError = `There should be at least ${minQuestions} question rows.`;\n } else if (rows.length > maxQuestions) {\n errors.noOfRowsError = `No more than ${maxQuestions} question rows should be defined.`;\n }\n\n (rows || []).forEach((row, index) => {\n const { id, values = [], title } = row;\n rowsErrors[id] = '';\n\n if (maxLengthQuestionsHeading && getInnerText(title).length > maxLengthQuestionsHeading) {\n rowsErrors[id] += `Content length should be maximum ${maxLengthQuestionsHeading} characters. `;\n }\n\n if (!getContent(title)) {\n rowsErrors[id] += 'Content should not be empty. ';\n } else {\n // check for identical content with the previous answers\n const identicalAnswer = rows.slice(0, index).some((r) => getContent(r.title) === getContent(title));\n\n if (identicalAnswer) {\n rowsErrors[id] += 'Content should be unique. ';\n }\n }\n\n const hasCorrectResponse = values.some((value) => !!value);\n\n if (!hasCorrectResponse) {\n rowsErrors[id] += 'No correct response defined.';\n }\n });\n\n if (maxAnswers && headers.length - 1 > maxAnswers) {\n errors.columnsLengthError = `There should be maximum ${maxAnswers} answers.`;\n }\n\n if (maxLengthFirstColumnHeading && headers[0].length > maxLengthFirstColumnHeading) {\n columnsErrors[0] = `Content length should be maximum ${maxLengthFirstColumnHeading} characters.`;\n }\n\n const headersContent = (headers || []).map((heading) => getContent(heading));\n headersContent.shift(); // remove first column since it does not require validation\n\n headersContent.forEach((heading, index) => {\n const headerIndex = index + 1; // we need to add 1 because we removed first header from validation\n columnsErrors[headerIndex] = '';\n\n if (maxLengthAnswers && getInnerText(heading).length > maxLengthAnswers) {\n columnsErrors[headerIndex] += `Content length should be maximum ${maxLengthAnswers} characters. `;\n }\n\n if (!heading) {\n columnsErrors[headerIndex] += 'Content should not be empty.';\n } else {\n // check for identical content with the previous headers\n const identicalAnswer = headersContent.slice(0, index).some((head) => head === heading);\n\n if (identicalAnswer) {\n columnsErrors[index + 1] += 'Content should be unique.';\n }\n }\n });\n\n const hasRowErrors = Object.values(rowsErrors).some((error) => (error || '').length);\n\n if (hasRowErrors) {\n errors.rowsErrors = rowsErrors;\n\n const noCorrectAnswer = Object.values(rowsErrors).some((error) =>\n (error || '').includes('No correct response defined.'),\n );\n\n if (noCorrectAnswer) {\n errors.correctResponseError =\n choiceMode === 'radio'\n ? 'There should be a correct response defined for every row.'\n : 'There should be at least one correct response defined for every row.';\n }\n }\n\n const hasColumnErrors = Object.values(columnsErrors).some((error) => (error || '').length);\n\n if (hasColumnErrors) {\n errors.columnsErrors = columnsErrors;\n }\n\n return errors;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pie-element/match-controller",
3
3
  "private": true,
4
- "version": "11.0.5-esm.1",
4
+ "version": "9.1.1-next.1",
5
5
  "description": "",
6
6
  "main": "lib/index.js",
7
7
  "module": "src/index.js",
@@ -9,15 +9,15 @@
9
9
  "test": "./node_modules/.bin/jest"
10
10
  },
11
11
  "dependencies": {
12
- "@pie-lib/controller-utils": "^0.19.2",
13
- "@pie-lib/feedback": "^0.21.2",
14
- "debug": "^3.1.0"
12
+ "@pie-lib/controller-utils": "1.2.0-next.3",
13
+ "@pie-lib/feedback": "1.2.0-next.3",
14
+ "debug": "^4.1.1"
15
15
  },
16
16
  "devDependencies": {
17
- "babel-jest": "^22.4.0",
17
+ "babel-jest": "^29.7.0",
18
18
  "babel-preset-env": "^1.6.1",
19
19
  "babel-preset-stage-0": "^6.24.1",
20
- "jest": "^22.4.0"
20
+ "jest": "^29.7.0"
21
21
  },
22
22
  "author": "",
23
23
  "license": "ISC"
@@ -1,263 +1,166 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
- exports["default"] = exports.AnswerGrid = void 0;
9
-
10
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
-
12
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
-
14
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
15
-
16
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
17
-
18
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
19
-
20
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
21
-
7
+ exports.default = exports.AnswerGrid = void 0;
22
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
23
-
24
9
  var _react = _interopRequireDefault(require("react"));
25
-
26
10
  var _propTypes = _interopRequireDefault(require("prop-types"));
27
-
28
- var _classnames = _interopRequireDefault(require("classnames"));
29
-
30
- var _Radio = _interopRequireDefault(require("@material-ui/core/Radio"));
31
-
32
- var _Checkbox = _interopRequireDefault(require("@material-ui/core/Checkbox"));
33
-
34
- var _Typography = _interopRequireDefault(require("@material-ui/core/Typography"));
35
-
36
- var _styles = require("@material-ui/core/styles");
37
-
11
+ var _Radio = _interopRequireDefault(require("@mui/material/Radio"));
12
+ var _Checkbox = _interopRequireDefault(require("@mui/material/Checkbox"));
13
+ var _Typography = _interopRequireDefault(require("@mui/material/Typography"));
14
+ var _styles = require("@mui/material/styles");
38
15
  var _renderUi = require("@pie-lib/render-ui");
39
-
40
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
41
-
42
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
43
-
44
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
45
-
46
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
47
-
48
- var AnswerGrid = /*#__PURE__*/function (_React$Component) {
49
- (0, _inherits2["default"])(AnswerGrid, _React$Component);
50
-
51
- var _super = _createSuper(AnswerGrid);
52
-
53
- function AnswerGrid() {
54
- var _this;
55
-
56
- (0, _classCallCheck2["default"])(this, AnswerGrid);
57
-
58
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
59
- args[_key] = arguments[_key];
60
- }
61
-
62
- _this = _super.call.apply(_super, [this].concat(args));
63
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onRowValueChange", function (rowId, answerIndex) {
64
- return function (event) {
65
- var _this$props = _this.props,
66
- onAnswerChange = _this$props.onAnswerChange,
67
- choiceMode = _this$props.choiceMode,
68
- answers = _this$props.answers;
69
-
70
- var newAnswers = _objectSpread({}, answers);
71
-
72
- if (choiceMode === 'radio') {
73
- for (var i = 0; i < newAnswers[rowId].length; i++) {
74
- newAnswers[rowId][i] = false;
75
- }
76
- }
77
-
78
- newAnswers[rowId][answerIndex] = event.target.checked;
79
- onAnswerChange(newAnswers);
16
+ const ControlsContainer = (0, _styles.styled)('div')(({
17
+ theme
18
+ }) => ({
19
+ marginLeft: 'auto',
20
+ marginRight: 'auto',
21
+ marginTop: theme.spacing(1),
22
+ marginBottom: theme.spacing(1)
23
+ }));
24
+ const Column = (0, _styles.styled)('td')({
25
+ padding: '5px 0'
26
+ });
27
+ const EmptyTypography = (0, _styles.styled)(_Typography.default)(({
28
+ theme
29
+ }) => ({
30
+ margin: theme.spacing(2)
31
+ }));
32
+ const RowHeader = (0, _styles.styled)('th')({
33
+ padding: 0
34
+ });
35
+ const RowItem = (0, _styles.styled)('div')(({
36
+ theme,
37
+ isQuestionText
38
+ }) => ({
39
+ padding: theme.spacing(1.5),
40
+ textAlign: isQuestionText ? 'left' : 'center'
41
+ }));
42
+ const Separator = (0, _styles.styled)('tr')({
43
+ border: 0,
44
+ borderTop: `2.5px solid ${_renderUi.color.primaryLight()}`,
45
+ width: '100%'
46
+ });
47
+ const Table = (0, _styles.styled)('table')({
48
+ color: _renderUi.color.text(),
49
+ backgroundColor: _renderUi.color.background(),
50
+ borderCollapse: 'collapse',
51
+ borderSpacing: 0,
52
+ marginBottom: 0
53
+ });
54
+ class AnswerGrid extends _react.default.Component {
55
+ constructor(...args) {
56
+ super(...args);
57
+ (0, _defineProperty2.default)(this, "onRowValueChange", (rowId, answerIndex) => event => {
58
+ const {
59
+ onAnswerChange,
60
+ choiceMode,
61
+ answers
62
+ } = this.props;
63
+ const newAnswers = {
64
+ ...answers
80
65
  };
66
+ if (choiceMode === 'radio') {
67
+ for (let i = 0; i < newAnswers[rowId].length; i++) {
68
+ newAnswers[rowId][i] = false;
69
+ }
70
+ }
71
+ newAnswers[rowId][answerIndex] = event.target.checked;
72
+ onAnswerChange(newAnswers);
81
73
  });
82
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "answerIsCorrect", function (rowId, rowValue, rowValueIndex) {
83
- var correctAnswers = _this.props.correctAnswers;
74
+ (0, _defineProperty2.default)(this, "answerIsCorrect", (rowId, rowValue, rowValueIndex) => {
75
+ const {
76
+ correctAnswers
77
+ } = this.props;
84
78
  return correctAnswers[rowId][rowValueIndex] === rowValue && rowValue === true;
85
79
  });
86
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "answerIsIncorrect", function (rowId, rowValue, rowValueIndex) {
87
- var correctAnswers = _this.props.correctAnswers;
80
+ // needs a separate method because what isn't correct isn't necessarily incorrect
81
+ (0, _defineProperty2.default)(this, "answerIsIncorrect", (rowId, rowValue, rowValueIndex) => {
82
+ const {
83
+ correctAnswers
84
+ } = this.props;
88
85
  return correctAnswers[rowId][rowValueIndex] === true && rowValue === false || correctAnswers[rowId][rowValueIndex] === false && rowValue === true;
89
86
  });
90
- return _this;
91
87
  }
92
-
93
- (0, _createClass2["default"])(AnswerGrid, [{
94
- key: "render",
95
- value: function render() {
96
- var _this2 = this;
97
-
98
- var _this$props2 = this.props,
99
- classes = _this$props2.classes,
100
- showCorrect = _this$props2.showCorrect,
101
- headers = _this$props2.headers,
102
- rows = _this$props2.rows,
103
- choiceMode = _this$props2.choiceMode,
104
- answers = _this$props2.answers,
105
- disabled = _this$props2.disabled,
106
- view = _this$props2.view;
107
- var Tag = choiceMode === 'radio' ? _Radio["default"] : _Checkbox["default"];
108
- var evaluate = disabled && !view;
109
-
110
- if (!rows || rows.length === 0) {
111
- return /*#__PURE__*/_react["default"].createElement("div", {
112
- className: classes.controlsContainer
113
- }, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
114
- className: classes.empty,
115
- component: "div"
116
- }, "There are currently no questions to show."));
117
- }
118
-
119
- return /*#__PURE__*/_react["default"].createElement("div", {
120
- className: classes.controlsContainer
121
- }, /*#__PURE__*/_react["default"].createElement("table", {
122
- className: classes.table
123
- }, /*#__PURE__*/_react["default"].createElement("colgroup", null, (headers || []).map(function (header, idx) {
124
- return /*#__PURE__*/_react["default"].createElement("col", {
125
- key: "col-".concat(idx)
126
- });
127
- })), /*#__PURE__*/_react["default"].createElement("thead", null, /*#__PURE__*/_react["default"].createElement("tr", null, (headers || []).map(function (header, idx) {
128
- return /*#__PURE__*/_react["default"].createElement("th", {
129
- className: classes.rowHeader,
130
- key: "th-".concat(idx),
131
- "data-colno": "".concat(idx),
132
- scope: "row"
133
- }, /*#__PURE__*/_react["default"].createElement("div", {
134
- className: (0, _classnames["default"])(classes.rowItem, (0, _defineProperty2["default"])({}, classes.questionText, idx === 0)),
135
- dangerouslySetInnerHTML: {
136
- __html: header
137
- }
138
- }));
139
- }))), (rows || []).map(function (row, idx) {
140
- return /*#__PURE__*/_react["default"].createElement("tbody", {
141
- key: "row-".concat(idx),
142
- role: "group"
143
- }, /*#__PURE__*/_react["default"].createElement("tr", {
144
- className: classes.separator
145
- }, /*#__PURE__*/_react["default"].createElement("td", {
146
- key: "td-title-".concat(idx),
147
- "data-colno": '0'
148
- }, /*#__PURE__*/_react["default"].createElement("div", {
149
- className: (0, _classnames["default"])(classes.rowItem, classes.questionText),
150
- dangerouslySetInnerHTML: {
151
- __html: row.title
152
- }
153
- })), (answers[row.id] || []).map(function (rowItem, answerIndex) {
154
- var _cx2;
155
-
156
- return /*#__PURE__*/_react["default"].createElement("td", {
157
- key: "td-".concat(idx, "-").concat(answerIndex),
158
- className: classes.column,
159
- "data-colno": "".concat(answerIndex + 1)
160
- }, /*#__PURE__*/_react["default"].createElement("div", {
161
- className: classes.rowItem
162
- }, /*#__PURE__*/_react["default"].createElement(Tag, {
163
- className: (0, _classnames["default"])(classes.tag, (_cx2 = {}, (0, _defineProperty2["default"])(_cx2, classes.correct, showCorrect && rowItem === true || evaluate && _this2.answerIsCorrect(row.id, rowItem, answerIndex)), (0, _defineProperty2["default"])(_cx2, classes.checked, rowItem === true && !evaluate), (0, _defineProperty2["default"])(_cx2, classes.tagDisabled, disabled), (0, _defineProperty2["default"])(_cx2, classes.incorrect, evaluate && _this2.answerIsIncorrect(row.id, rowItem, answerIndex)), _cx2)),
164
- disabled: disabled,
165
- onChange: _this2.onRowValueChange(row.id, answerIndex),
166
- checked: rowItem === true
167
- })));
168
- })));
169
- })));
88
+ render() {
89
+ const {
90
+ showCorrect,
91
+ headers,
92
+ rows,
93
+ choiceMode,
94
+ answers,
95
+ disabled,
96
+ view
97
+ } = this.props;
98
+ const Tag = choiceMode === 'radio' ? _Radio.default : _Checkbox.default;
99
+ const evaluate = disabled && !view;
100
+ if (!rows || rows.length === 0) {
101
+ return /*#__PURE__*/_react.default.createElement(ControlsContainer, null, /*#__PURE__*/_react.default.createElement(EmptyTypography, {
102
+ component: "div"
103
+ }, "There are currently no questions to show."));
170
104
  }
171
- }]);
172
- return AnswerGrid;
173
- }(_react["default"].Component);
174
-
175
- exports.AnswerGrid = AnswerGrid;
176
- (0, _defineProperty2["default"])(AnswerGrid, "propTypes", {
177
- classes: _propTypes["default"].object.isRequired,
178
- correctAnswers: _propTypes["default"].object,
179
- view: _propTypes["default"].bool.isRequired,
180
- showCorrect: _propTypes["default"].bool.isRequired,
181
- disabled: _propTypes["default"].bool.isRequired,
182
- onAnswerChange: _propTypes["default"].func.isRequired,
183
- choiceMode: _propTypes["default"].string.isRequired,
184
- rows: _propTypes["default"].array.isRequired,
185
- headers: _propTypes["default"].array.isRequired,
186
- answers: _propTypes["default"].object.isRequired
187
- });
188
-
189
- var styles = function styles(theme) {
190
- return {
191
- controlsContainer: {
192
- marginLeft: 'auto',
193
- marginRight: 'auto',
194
- marginTop: theme.spacing.unit,
195
- marginBottom: theme.spacing.unit
196
- },
197
- column: {
198
- padding: '5px 0'
199
- },
200
- correct: {
201
- color: "".concat(_renderUi.color.correct(), " !important")
202
- },
203
- incorrect: {
204
- color: "".concat(_renderUi.color.incorrect(), " !important")
205
- },
206
- empty: {
207
- margin: theme.spacing.unit * 2
208
- },
209
- rowContainer: {
210
- display: 'flex',
211
- alignItems: 'center'
212
- },
213
- rowHeader: {
214
- padding: 0
215
- },
216
- rowItem: {
217
- padding: theme.spacing.unit * 1.5,
218
- textAlign: 'center'
219
- },
220
- separator: {
221
- border: 0,
222
- borderTop: "2.5px solid ".concat(_renderUi.color.primaryLight()),
223
- width: '100%'
224
- },
225
- tag: {
226
- padding: '6px',
227
- color: _renderUi.color.text(),
228
- '&:hover': {
229
- color: _renderUi.color.primaryLight()
230
- },
231
- '& input': {
232
- width: '100% !important'
105
+ return /*#__PURE__*/_react.default.createElement(ControlsContainer, null, /*#__PURE__*/_react.default.createElement(Table, null, /*#__PURE__*/_react.default.createElement("colgroup", null, (headers || []).map((header, idx) => /*#__PURE__*/_react.default.createElement("col", {
106
+ key: `col-${idx}`
107
+ }))), /*#__PURE__*/_react.default.createElement("thead", null, /*#__PURE__*/_react.default.createElement("tr", null, (headers || []).map((header, idx) => /*#__PURE__*/_react.default.createElement(RowHeader, {
108
+ key: `th-${idx}`,
109
+ "data-colno": `${idx}`,
110
+ scope: "row"
111
+ }, /*#__PURE__*/_react.default.createElement(RowItem, {
112
+ isQuestionText: idx === 0,
113
+ dangerouslySetInnerHTML: {
114
+ __html: header
233
115
  }
234
- },
235
- checked: {
236
- color: "".concat(_renderUi.color.primary(), " !important")
237
- },
238
- tagDisabled: {
239
- color: _renderUi.color.disabled(),
240
- cursor: 'not-allowed !important',
241
- pointerEvents: 'initial !important',
242
- opacity: 0.7,
243
- '&:hover': {
244
- color: _renderUi.color.disabled()
116
+ }))))), (rows || []).map((row, idx) => /*#__PURE__*/_react.default.createElement("tbody", {
117
+ key: `row-${idx}`,
118
+ role: "group"
119
+ }, /*#__PURE__*/_react.default.createElement(Separator, null, /*#__PURE__*/_react.default.createElement("td", {
120
+ key: `td-title-${idx}`,
121
+ "data-colno": '0'
122
+ }, /*#__PURE__*/_react.default.createElement(RowItem, {
123
+ isQuestionText: true,
124
+ dangerouslySetInnerHTML: {
125
+ __html: row.title
245
126
  }
246
- },
247
- table: {
248
- color: _renderUi.color.text(),
249
- backgroundColor: _renderUi.color.background(),
250
- borderCollapse: 'collapse',
251
- borderSpacing: 0,
252
- marginBottom: 0
253
- },
254
- questionText: {
255
- textAlign: 'left'
256
- }
257
- };
258
- };
259
-
260
- var _default = (0, _styles.withStyles)(styles)(AnswerGrid);
261
-
262
- exports["default"] = _default;
127
+ })), (answers[row.id] || []).map((rowItem, answerIndex) => /*#__PURE__*/_react.default.createElement(Column, {
128
+ key: `td-${idx}-${answerIndex}`,
129
+ "data-colno": `${answerIndex + 1}`
130
+ }, /*#__PURE__*/_react.default.createElement(RowItem, null, /*#__PURE__*/_react.default.createElement(Tag, {
131
+ sx: {
132
+ padding: '6px',
133
+ color: showCorrect && rowItem === true || evaluate && this.answerIsCorrect(row.id, rowItem, answerIndex) ? _renderUi.color.correct() : evaluate && this.answerIsIncorrect(row.id, rowItem, answerIndex) ? _renderUi.color.incorrect() : rowItem === true && !evaluate ? _renderUi.color.primary() : disabled ? _renderUi.color.disabled() : _renderUi.color.text(),
134
+ cursor: disabled ? 'not-allowed' : 'pointer',
135
+ pointerEvents: disabled ? 'initial' : 'auto',
136
+ opacity: disabled ? 0.7 : 1,
137
+ '& input': {
138
+ width: '100% !important'
139
+ },
140
+ '&:hover': {
141
+ color: disabled ? _renderUi.color.disabled() : _renderUi.color.primaryLight()
142
+ },
143
+ '&.Mui-disabled': {
144
+ color: `${showCorrect && rowItem === true || evaluate && this.answerIsCorrect(row.id, rowItem, answerIndex) ? _renderUi.color.correct() : evaluate && this.answerIsIncorrect(row.id, rowItem, answerIndex) ? _renderUi.color.incorrect() : rowItem === true && !evaluate ? _renderUi.color.primary() : _renderUi.color.disabled()}`
145
+ }
146
+ },
147
+ disabled: disabled,
148
+ onChange: this.onRowValueChange(row.id, answerIndex),
149
+ checked: rowItem === true
150
+ })))))))));
151
+ }
152
+ }
153
+ exports.AnswerGrid = AnswerGrid;
154
+ (0, _defineProperty2.default)(AnswerGrid, "propTypes", {
155
+ correctAnswers: _propTypes.default.object,
156
+ view: _propTypes.default.bool.isRequired,
157
+ showCorrect: _propTypes.default.bool.isRequired,
158
+ disabled: _propTypes.default.bool.isRequired,
159
+ onAnswerChange: _propTypes.default.func.isRequired,
160
+ choiceMode: _propTypes.default.string.isRequired,
161
+ rows: _propTypes.default.array.isRequired,
162
+ headers: _propTypes.default.array.isRequired,
163
+ answers: _propTypes.default.object.isRequired
164
+ });
165
+ var _default = exports.default = AnswerGrid;
263
166
  //# sourceMappingURL=answer-grid.js.map