@pie-element/math-inline 11.0.0-beta.0 → 11.0.0-next.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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_debug","_interopRequireDefault","require","_isEmpty","_feedback","_utils","_translator","_defaults","mv","_interopRequireWildcard","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","translator","Translator","log","debug","getResponseCorrectness","model","answerItem","isOutcome","correctResponses","responses","isAdvanced","responseType","ResponseTypes","advanced","correctness","score","correct","isAnswerCorrect","getIsAnswerCorrect","slice","correctnessObject","correctResponseItems","answerCorrect","forEach","correctResponse","opts","mode","validation","defaults","validationDefault","literal","allowTrailingZeros","ignoreOrder","acceptedValues","answer","concat","keys","alternates","map","alternateId","length","latexEqual","getCorrectness","question","env","session","completeAnswer","response","undefined","createDefaultModel","Promise","resolve","config","outcome","completed","isEmpty","empty","exports","normalize","allowTrailingZerosDefault","ignoreOrderDefault","normalizedQuestion","extraCSSRules","language","simple","feedback","feedbackEnabled","getActualFeedbackForCorrectness","out","disabled","view","note","lng","showNote","some","role","rationale","rationaleEnabled","teacherInstructions","teacherInstructionsEnabled","prompt","promptEnabled","escape","string","replace","simpleSessionResponse","id","removeTrailingEscape","str","endsWith","advancedSessionResponse","answers","expression","RESPONSE_TOKEN","split","to","tt","join","m","match","RegExp","count","console","shift","value","trim","error","toString","createCorrectResponseSession","toLowerCase","getInnerText","html","replaceAll","getContent","validate","maxResponseAreas","responsesErrors","errors","field","required","index","reversedAlternates","entries","reverse","alternatesErrors","responseError","key","identicalAnswer","val","nbOfResponseAreas","responseAreasError"],"sources":["../src/index.js"],"sourcesContent":["import debug from 'debug';\nimport isEmpty from 'lodash/isEmpty';\nimport { getActualFeedbackForCorrectness } from '@pie-lib/feedback';\n\nimport { ResponseTypes } from './utils';\nimport Translator from '@pie-lib/translator';\n\nconst { translator } = Translator;\nimport defaults from './defaults';\n\nimport * as mv from '@pie-framework/math-validation';\n\nconst log = debug('@pie-element:math-inline:controller');\n\nconst getResponseCorrectness = (model, answerItem, isOutcome) => {\n const correctResponses = model.responses;\n const isAdvanced = model.responseType === ResponseTypes.advanced;\n\n if (!answerItem) {\n return {\n correctness: 'unanswered',\n score: isOutcome ? 0 : '0%',\n correct: false,\n };\n }\n\n const isAnswerCorrect = getIsAnswerCorrect(isAdvanced ? correctResponses : correctResponses.slice(0, 1), answerItem);\n\n const correctnessObject = {\n correctness: 'incorrect',\n score: isOutcome ? 0 : '0%',\n correct: false,\n };\n\n if (isAnswerCorrect) {\n correctnessObject.correctness = 'correct';\n correctnessObject.score = isOutcome ? 1 : '100%';\n correctnessObject.correct = true;\n }\n\n return correctnessObject;\n};\n\nfunction getIsAnswerCorrect(correctResponseItems, answerItem) {\n let answerCorrect = false;\n\n (correctResponseItems || []).forEach((correctResponse) => {\n if (answerCorrect) return;\n\n const opts = {\n mode: correctResponse.validation || defaults.validationDefault,\n };\n\n if (opts.mode === 'literal') {\n opts.literal = {\n allowTrailingZeros: correctResponse.allowTrailingZeros || false,\n ignoreOrder: correctResponse.ignoreOrder || false,\n };\n }\n\n const acceptedValues = [correctResponse.answer].concat(\n Object.keys(correctResponse.alternates || {}).map((alternateId) => correctResponse.alternates[alternateId]),\n );\n\n for (let i = 0; i < acceptedValues.length; i++) {\n try {\n if (mv.latexEqual(answerItem, acceptedValues[i], opts)) {\n answerCorrect = true;\n break;\n }\n } catch (e) {\n log('Parse failure when evaluating math', acceptedValues[i], answerItem, e);\n continue;\n }\n }\n });\n\n return answerCorrect;\n}\n\nconst getCorrectness = (question, env, session, isOutcome) => {\n if (env.mode === 'evaluate') {\n return getResponseCorrectness(\n question,\n question.responseType === ResponseTypes.advanced\n ? (session && session.completeAnswer) || ''\n : session && session.response,\n isOutcome,\n );\n }\n\n return undefined;\n};\n\nexport function createDefaultModel(model = {}) {\n return new Promise((resolve) => {\n resolve({\n config: {\n ...defaults,\n ...model,\n },\n });\n });\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 } else {\n const correctness = getCorrectness(question, env, session, true);\n\n resolve({ score: correctness.score });\n }\n }\n });\n};\n\nexport const normalize = (question) => {\n // making sure that defaults are set\n if (!isEmpty(question.responses)) {\n question.responses = question.responses.map((correctResponse) => ({\n ...correctResponse,\n validation: correctResponse.validation || question.validationDefault,\n allowTrailingZeros: correctResponse.allowTrailingZeros || question.allowTrailingZerosDefault,\n ignoreOrder: correctResponse.ignoreOrder || question.ignoreOrderDefault,\n }));\n }\n\n return { ...defaults, ...question };\n};\n\nexport const model = (question, session, env) =>\n new Promise((resolve) => {\n const normalizedQuestion = normalize(question);\n const correctness = getCorrectness(normalizedQuestion, env, session);\n const { extraCSSRules, responses, language, ...config } = normalizedQuestion;\n\n config.responses = config.responseType === ResponseTypes.simple ? responses.slice(0, 1) : responses;\n\n const feedback =\n env.mode === 'evaluate' && normalizedQuestion.feedbackEnabled\n ? getActualFeedbackForCorrectness(correctness?.correctness, normalizedQuestion.feedback)\n : undefined;\n\n const out = {\n extraCSSRules,\n config,\n correctness,\n feedback,\n disabled: env.mode !== 'gather',\n view: env.mode === 'view',\n };\n\n const note = normalizedQuestion.note || translator.t('mathInline.primaryCorrectWithAlternates', { lng: language });\n const showNote =\n config?.responses?.length > 1 ||\n (config?.responses || []).some(\n (response) => response.validation === 'symbolic' || Object.keys(response.alternates || {}).length > 0,\n );\n\n if (env.mode === 'evaluate') {\n out.correctResponse = {};\n out.config.showNote = showNote;\n out.config.note = note;\n } else {\n out.config.responses = [];\n out.config.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 out.config.rationale = null;\n out.config.teacherInstructions = null;\n }\n\n out.config.env = env;\n out.config.prompt = normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null;\n out.language = language;\n\n log('out: ', out);\n resolve(out);\n });\n\nconst escape = (string) => string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'); // $& means the whole matched string\n\nconst simpleSessionResponse = (question) =>\n new Promise((resolve) => {\n const { responses, id } = question;\n const { answer } = responses && responses.length ? responses[0] : {};\n\n resolve({\n id,\n response: answer || '',\n completeAnswer: answer || '',\n });\n });\n\n// use this for items like E672793\nconst removeTrailingEscape = (str) => (str.endsWith('\\\\') ? str.slice(0, -1) : str);\n\nconst advancedSessionResponse = (question) =>\n new Promise((resolve) => {\n const { responses, id } = question;\n const { answer } = responses && responses.length ? responses[0] : {};\n\n if (!answer) {\n resolve({\n id,\n answers: {},\n completeAnswer: '',\n });\n\n return;\n }\n\n try {\n const e = question.expression;\n const RESPONSE_TOKEN = /\\\\{\\\\{\\s*response\\s*\\\\}\\\\}/g;\n\n const o = escape(e).split(RESPONSE_TOKEN);\n const to = o.map((t) => (t === '' ? t : t.replace(/\\s+/g, () => '\\\\s*')));\n const tt = to.join('(.*)');\n\n const m = answer.match(new RegExp(tt));\n\n const count = o.length - 1;\n\n if (!m) {\n resolve({\n id,\n answers: {},\n completeAnswer: answer,\n });\n\n // eslint-disable-next-line no-console\n console.log(`can not find match: ${o} in ${answer}`);\n\n return;\n }\n\n m.shift();\n\n const answers = {};\n\n for (var i = 0; i < count; i++) {\n answers[`r${i + 1}`] = { value: removeTrailingEscape(m[i].trim()) };\n }\n\n resolve({\n id,\n answers,\n completeAnswer: answer,\n });\n } catch (e) {\n resolve({\n id,\n answers: {},\n completeAnswer: answer,\n });\n // eslint-disable-next-line no-console\n console.error(e.toString());\n }\n });\n\nexport const createCorrectResponseSession = (question, env) => {\n if (env.mode === 'evaluate' || env.role !== 'instructor') {\n // eslint-disable-next-line no-console\n console.error('can not create correct response session if mode is evaluate or role is not instructor');\n\n return Promise.resolve(null);\n }\n\n if ((question.responseType || '').toLowerCase() === 'simple') {\n return simpleSessionResponse(question, env);\n } else {\n return advancedSessionResponse(question, env);\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 { expression = '', responses, responseType } = 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 (responses || []).forEach((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 if (responseType === 'Advanced Multi') {\n const nbOfResponseAreas = (expression.match(/\\{\\{response\\}\\}/g) || []).length;\n\n if (nbOfResponseAreas > maxResponseAreas) {\n errors.responseAreasError = `No more than ${maxResponseAreas} response areas should be defined.`;\n } else if (nbOfResponseAreas < 1) {\n errors.responseAreasError = 'There should be at least 1 response area defined.';\n }\n }\n\n if (!isEmpty(responsesErrors)) {\n errors.responsesErrors = responsesErrors;\n }\n\n return errors;\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_debug","_interopRequireDefault","require","_lodashEs","_feedback","_utils","_translator","_defaults","mv","_interopRequireWildcard","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","translator","Translator","log","debug","getResponseCorrectness","model","answerItem","isOutcome","correctResponses","responses","isAdvanced","responseType","ResponseTypes","advanced","correctness","score","correct","isAnswerCorrect","getIsAnswerCorrect","slice","correctnessObject","correctResponseItems","answerCorrect","forEach","correctResponse","opts","mode","validation","defaults","validationDefault","literal","allowTrailingZeros","ignoreOrder","acceptedValues","answer","concat","keys","alternates","map","alternateId","length","latexEqual","getCorrectness","question","env","session","completeAnswer","response","undefined","createDefaultModel","Promise","resolve","config","outcome","completed","isEmpty","empty","exports","normalize","allowTrailingZerosDefault","ignoreOrderDefault","normalizedQuestion","extraCSSRules","language","simple","feedback","feedbackEnabled","getActualFeedbackForCorrectness","out","disabled","view","note","lng","showNote","some","role","rationale","rationaleEnabled","teacherInstructions","teacherInstructionsEnabled","prompt","promptEnabled","escape","string","replace","simpleSessionResponse","id","removeTrailingEscape","str","endsWith","advancedSessionResponse","answers","expression","RESPONSE_TOKEN","split","to","tt","join","m","match","RegExp","count","console","shift","value","trim","error","toString","createCorrectResponseSession","toLowerCase","getInnerText","html","replaceAll","getContent","validate","maxResponseAreas","responsesErrors","errors","field","required","index","reversedAlternates","entries","reverse","alternatesErrors","responseError","key","identicalAnswer","val","nbOfResponseAreas","responseAreasError"],"sources":["../src/index.js"],"sourcesContent":["import debug from 'debug';\nimport { isEmpty } from 'lodash-es';\nimport { getActualFeedbackForCorrectness } from '@pie-lib/feedback';\n\nimport { ResponseTypes } from './utils';\nimport Translator from '@pie-lib/translator';\n\nconst { translator } = Translator;\nimport defaults from './defaults';\n\nimport * as mv from '@pie-framework/math-validation';\n\nconst log = debug('@pie-element:math-inline:controller');\n\nconst getResponseCorrectness = (model, answerItem, isOutcome) => {\n const correctResponses = model.responses;\n const isAdvanced = model.responseType === ResponseTypes.advanced;\n\n if (!answerItem) {\n return {\n correctness: 'unanswered',\n score: isOutcome ? 0 : '0%',\n correct: false,\n };\n }\n\n const isAnswerCorrect = getIsAnswerCorrect(isAdvanced ? correctResponses : correctResponses.slice(0, 1), answerItem);\n\n const correctnessObject = {\n correctness: 'incorrect',\n score: isOutcome ? 0 : '0%',\n correct: false,\n };\n\n if (isAnswerCorrect) {\n correctnessObject.correctness = 'correct';\n correctnessObject.score = isOutcome ? 1 : '100%';\n correctnessObject.correct = true;\n }\n\n return correctnessObject;\n};\n\nfunction getIsAnswerCorrect(correctResponseItems, answerItem) {\n let answerCorrect = false;\n\n (correctResponseItems || []).forEach((correctResponse) => {\n if (answerCorrect) return;\n\n const opts = {\n mode: correctResponse.validation || defaults.validationDefault,\n };\n\n if (opts.mode === 'literal') {\n opts.literal = {\n allowTrailingZeros: correctResponse.allowTrailingZeros || false,\n ignoreOrder: correctResponse.ignoreOrder || false,\n };\n }\n\n const acceptedValues = [correctResponse.answer].concat(\n Object.keys(correctResponse.alternates || {}).map((alternateId) => correctResponse.alternates[alternateId]),\n );\n\n for (let i = 0; i < acceptedValues.length; i++) {\n try {\n if (mv.latexEqual(answerItem, acceptedValues[i], opts)) {\n answerCorrect = true;\n break;\n }\n } catch (e) {\n log('Parse failure when evaluating math', acceptedValues[i], answerItem, e);\n continue;\n }\n }\n });\n\n return answerCorrect;\n}\n\nconst getCorrectness = (question, env, session, isOutcome) => {\n if (env.mode === 'evaluate') {\n return getResponseCorrectness(\n question,\n question.responseType === ResponseTypes.advanced\n ? (session && session.completeAnswer) || ''\n : session && session.response,\n isOutcome,\n );\n }\n\n return undefined;\n};\n\nexport function createDefaultModel(model = {}) {\n return new Promise((resolve) => {\n resolve({\n config: {\n ...defaults,\n ...model,\n },\n });\n });\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 } else {\n const correctness = getCorrectness(question, env, session, true);\n\n resolve({ score: correctness.score });\n }\n }\n });\n};\n\nexport const normalize = (question) => {\n // making sure that defaults are set\n if (!isEmpty(question.responses)) {\n question.responses = question.responses.map((correctResponse) => ({\n ...correctResponse,\n validation: correctResponse.validation || question.validationDefault,\n allowTrailingZeros: correctResponse.allowTrailingZeros || question.allowTrailingZerosDefault,\n ignoreOrder: correctResponse.ignoreOrder || question.ignoreOrderDefault,\n }));\n }\n\n return { ...defaults, ...question };\n};\n\nexport const model = (question, session, env) =>\n new Promise((resolve) => {\n const normalizedQuestion = normalize(question);\n const correctness = getCorrectness(normalizedQuestion, env, session);\n const { extraCSSRules, responses, language, ...config } = normalizedQuestion;\n\n config.responses = config.responseType === ResponseTypes.simple ? responses.slice(0, 1) : responses;\n\n const feedback =\n env.mode === 'evaluate' && normalizedQuestion.feedbackEnabled\n ? getActualFeedbackForCorrectness(correctness?.correctness, normalizedQuestion.feedback)\n : undefined;\n\n const out = {\n extraCSSRules,\n config,\n correctness,\n feedback,\n disabled: env.mode !== 'gather',\n view: env.mode === 'view',\n };\n\n const note = normalizedQuestion.note || translator.t('mathInline.primaryCorrectWithAlternates', { lng: language });\n const showNote =\n config?.responses?.length > 1 ||\n (config?.responses || []).some(\n (response) => response.validation === 'symbolic' || Object.keys(response.alternates || {}).length > 0,\n );\n\n if (env.mode === 'evaluate') {\n out.correctResponse = {};\n out.config.showNote = showNote;\n out.config.note = note;\n } else {\n out.config.responses = [];\n out.config.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 out.config.rationale = null;\n out.config.teacherInstructions = null;\n }\n\n out.config.env = env;\n out.config.prompt = normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null;\n out.language = language;\n\n log('out: ', out);\n resolve(out);\n });\n\nconst escape = (string) => string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'); // $& means the whole matched string\n\nconst simpleSessionResponse = (question) =>\n new Promise((resolve) => {\n const { responses, id } = question;\n const { answer } = responses && responses.length ? responses[0] : {};\n\n resolve({\n id,\n response: answer || '',\n completeAnswer: answer || '',\n });\n });\n\n// use this for items like E672793\nconst removeTrailingEscape = (str) => (str.endsWith('\\\\') ? str.slice(0, -1) : str);\n\nconst advancedSessionResponse = (question) =>\n new Promise((resolve) => {\n const { responses, id } = question;\n const { answer } = responses && responses.length ? responses[0] : {};\n\n if (!answer) {\n resolve({\n id,\n answers: {},\n completeAnswer: '',\n });\n\n return;\n }\n\n try {\n const e = question.expression;\n const RESPONSE_TOKEN = /\\\\{\\\\{\\s*response\\s*\\\\}\\\\}/g;\n\n const o = escape(e).split(RESPONSE_TOKEN);\n const to = o.map((t) => (t === '' ? t : t.replace(/\\s+/g, () => '\\\\s*')));\n const tt = to.join('(.*)');\n\n const m = answer.match(new RegExp(tt));\n\n const count = o.length - 1;\n\n if (!m) {\n resolve({\n id,\n answers: {},\n completeAnswer: answer,\n });\n\n // eslint-disable-next-line no-console\n console.log(`can not find match: ${o} in ${answer}`);\n\n return;\n }\n\n m.shift();\n\n const answers = {};\n\n for (var i = 0; i < count; i++) {\n answers[`r${i + 1}`] = { value: removeTrailingEscape(m[i].trim()) };\n }\n\n resolve({\n id,\n answers,\n completeAnswer: answer,\n });\n } catch (e) {\n resolve({\n id,\n answers: {},\n completeAnswer: answer,\n });\n // eslint-disable-next-line no-console\n console.error(e.toString());\n }\n });\n\nexport const createCorrectResponseSession = (question, env) => {\n if (env.mode === 'evaluate' || env.role !== 'instructor') {\n // eslint-disable-next-line no-console\n console.error('can not create correct response session if mode is evaluate or role is not instructor');\n\n return Promise.resolve(null);\n }\n\n if ((question.responseType || '').toLowerCase() === 'simple') {\n return simpleSessionResponse(question, env);\n } else {\n return advancedSessionResponse(question, env);\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 { expression = '', responses, responseType } = 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 (responses || []).forEach((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 if (responseType === 'Advanced Multi') {\n const nbOfResponseAreas = (expression.match(/\\{\\{response\\}\\}/g) || []).length;\n\n if (nbOfResponseAreas > maxResponseAreas) {\n errors.responseAreasError = `No more than ${maxResponseAreas} response areas should be defined.`;\n } else if (nbOfResponseAreas < 1) {\n errors.responseAreasError = 'There should be at least 1 response area defined.';\n }\n }\n\n if (!isEmpty(responsesErrors)) {\n errors.responsesErrors = responsesErrors;\n }\n\n return errors;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pie-element/math-inline-controller",
3
3
  "private": true,
4
- "version": "9.0.0-beta.0",
4
+ "version": "9.0.0-beta.1",
5
5
  "description": "",
6
6
  "main": "lib/index.js",
7
7
  "module": "src/index.js",
@@ -10,10 +10,10 @@
10
10
  },
11
11
  "dependencies": {
12
12
  "@pie-framework/math-validation": "^1.4.2",
13
- "@pie-lib/feedback": "0.24.3-next.0",
14
- "@pie-lib/translator": "2.23.3-next.0",
15
- "debug": "^3.1.0",
16
- "lodash": "^4.17.15"
13
+ "@pie-lib/feedback": "1.1.1-next.1",
14
+ "@pie-lib/translator": "3.1.1-next.1",
15
+ "debug": "^4.1.1",
16
+ "lodash-es": "^4.17.23"
17
17
  },
18
18
  "devDependencies": {
19
19
  "babel-jest": "^29.7.0",
package/lib/index.js CHANGED
@@ -14,7 +14,7 @@ exports.default = void 0;
14
14
  var _react = _interopRequireDefault(require("react"));
15
15
  var _client = require("react-dom/client");
16
16
  var _debug = _interopRequireDefault(require("debug"));
17
- var _lodash = _interopRequireDefault(require("lodash"));
17
+ var _lodashEs = require("lodash-es");
18
18
  var _piePlayerEvents = require("@pie-framework/pie-player-events");
19
19
  var _defaults = _interopRequireDefault(require("../configure/lib/defaults"));
20
20
  var _main = _interopRequireDefault(require("./main"));
@@ -24,7 +24,7 @@ class MathInline extends HTMLElement {
24
24
  super();
25
25
  this._root = null;
26
26
  this._configuration = _defaults.default.configuration;
27
- this.sessionChangedEventCaller = _lodash.default.debounce(() => {
27
+ this.sessionChangedEventCaller = (0, _lodashEs.debounce)(() => {
28
28
  this.dispatchEvent(new _piePlayerEvents.SessionChangedEvent(this.tagName.toLowerCase(), true));
29
29
  }, 1000);
30
30
  }
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_client","_debug","_lodash","_piePlayerEvents","_defaults","_main","log","debug","MathInline","HTMLElement","constructor","_root","_configuration","defaults","configuration","sessionChangedEventCaller","_","debounce","dispatchEvent","SessionChangedEvent","tagName","toLowerCase","setLangAttribute","language","_model","lang","slice","setAttribute","playerContainer","closest","model","m","ModelSetEvent","_render","session","s","_session","c","sessionChanged","Object","keys","map","key","connectedCallback","el","React","createElement","Main","onSessionChange","bind","createRoot","render","disconnectedCallback","unmount","exports","default"],"sources":["../src/index.js"],"sourcesContent":["import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport debug from 'debug';\nimport _ from 'lodash';\nimport { ModelSetEvent, SessionChangedEvent } from '@pie-framework/pie-player-events';\n\nimport defaults from '../configure/lib/defaults';\nimport Main from './main';\n\nconst log = debug('pie-ui:math-inline');\n\nexport { Main as Component };\n\nexport default class MathInline extends HTMLElement {\n constructor() {\n super();\n this._root = null;\n this._configuration = defaults.configuration;\n this.sessionChangedEventCaller = _.debounce(() => {\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), true));\n }, 1000);\n }\n\n setLangAttribute() {\n const language = this._model && typeof this._model.language ? this._model.language : '';\n const lang = language ? language.slice(0, 2) : 'en';\n this.setAttribute('lang', lang);\n\n // set the lang attribute for the nearest parent div with class 'player-container' for MPI items as per PD-2483\n const playerContainer = this.closest('.player-container');\n if (playerContainer) {\n playerContainer.setAttribute('lang', lang);\n }\n }\n\n set model(m) {\n this._model = m;\n this.dispatchEvent(new ModelSetEvent(this._model, true, !!this._model));\n this.setLangAttribute();\n this._render();\n }\n\n set session(s) {\n this._session = s;\n this._render();\n }\n\n get session() {\n return this._session;\n }\n\n set configuration(c) {\n this._configuration = c;\n this._render();\n }\n\n sessionChanged(s) {\n Object.keys(s).map((key) => {\n this._session[key] = s[key];\n });\n\n this.sessionChangedEventCaller();\n log('session: ', this._session);\n }\n\n connectedCallback() {\n this.setAttribute('aria-label', 'Math Response Question');\n this.setAttribute('role', 'region');\n\n this._render();\n }\n\n _render() {\n if (!this._model || !this._session) {\n return;\n }\n\n const el = React.createElement(Main, {\n model: this._model,\n session: this._session,\n configuration: this._configuration,\n onSessionChange: this.sessionChanged.bind(this),\n });\n\n if (!this._root) {\n this._root = createRoot(this);\n }\n this._root.render(el);\n }\n\n disconnectedCallback() {\n if (this._root) {\n this._root.unmount();\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_client","_debug","_lodashEs","_piePlayerEvents","_defaults","_main","log","debug","MathInline","HTMLElement","constructor","_root","_configuration","defaults","configuration","sessionChangedEventCaller","debounce","dispatchEvent","SessionChangedEvent","tagName","toLowerCase","setLangAttribute","language","_model","lang","slice","setAttribute","playerContainer","closest","model","m","ModelSetEvent","_render","session","s","_session","c","sessionChanged","Object","keys","map","key","connectedCallback","el","React","createElement","Main","onSessionChange","bind","createRoot","render","disconnectedCallback","unmount","exports","default"],"sources":["../src/index.js"],"sourcesContent":["import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport debug from 'debug';\nimport { debounce } from 'lodash-es';\nimport { ModelSetEvent, SessionChangedEvent } from '@pie-framework/pie-player-events';\n\nimport defaults from '../configure/lib/defaults';\nimport Main from './main';\n\nconst log = debug('pie-ui:math-inline');\n\nexport { Main as Component };\n\nexport default class MathInline extends HTMLElement {\n constructor() {\n super();\n this._root = null;\n this._configuration = defaults.configuration;\n this.sessionChangedEventCaller = debounce(() => {\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), true));\n }, 1000);\n }\n\n setLangAttribute() {\n const language = this._model && typeof this._model.language ? this._model.language : '';\n const lang = language ? language.slice(0, 2) : 'en';\n this.setAttribute('lang', lang);\n\n // set the lang attribute for the nearest parent div with class 'player-container' for MPI items as per PD-2483\n const playerContainer = this.closest('.player-container');\n if (playerContainer) {\n playerContainer.setAttribute('lang', lang);\n }\n }\n\n set model(m) {\n this._model = m;\n this.dispatchEvent(new ModelSetEvent(this._model, true, !!this._model));\n this.setLangAttribute();\n this._render();\n }\n\n set session(s) {\n this._session = s;\n this._render();\n }\n\n get session() {\n return this._session;\n }\n\n set configuration(c) {\n this._configuration = c;\n this._render();\n }\n\n sessionChanged(s) {\n Object.keys(s).map((key) => {\n this._session[key] = s[key];\n });\n\n this.sessionChangedEventCaller();\n log('session: ', this._session);\n }\n\n connectedCallback() {\n this.setAttribute('aria-label', 'Math Response Question');\n this.setAttribute('role', 'region');\n\n this._render();\n }\n\n _render() {\n if (!this._model || !this._session) {\n return;\n }\n\n const el = React.createElement(Main, {\n model: this._model,\n session: this._session,\n configuration: this._configuration,\n onSessionChange: this.sessionChanged.bind(this),\n });\n\n if (!this._root) {\n this._root = createRoot(this);\n }\n this._root.render(el);\n }\n\n disconnectedCallback() {\n if (this._root) {\n this._root.unmount();\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
package/lib/main.js CHANGED
@@ -15,10 +15,9 @@ var _mathRendering = require("@pie-lib/math-rendering");
15
15
  var _styles = require("@mui/material/styles");
16
16
  var _Tooltip = _interopRequireDefault(require("@mui/material/Tooltip"));
17
17
  var _utils = require("./utils");
18
- var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
18
+ var _lodashEs = require("lodash-es");
19
19
  var _simpleQuestionBlock = _interopRequireDefault(require("./simple-question-block"));
20
20
  var _mathquill = _interopRequireDefault(require("@pie-framework/mathquill"));
21
- var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
22
21
  var _translator = _interopRequireDefault(require("@pie-lib/translator"));
23
22
  var _reactDom = _interopRequireDefault(require("react-dom"));
24
23
  const {
@@ -441,7 +440,7 @@ class Main extends _react.default.Component {
441
440
 
442
441
  // in case session props changed in parent, we need to catch this and update local state
443
442
  // example: when env is changing in pieoneer
444
- if (session && nextSession && !(0, _isEqual.default)(session.answers, nextSession.answers)) {
443
+ if (session && nextSession && !(0, _lodashEs.isEqual)(session.answers, nextSession.answers)) {
445
444
  this.setState({
446
445
  session: {
447
446
  ...nextSession,
@@ -496,8 +495,8 @@ class Main extends _react.default.Component {
496
495
  }
497
496
  }
498
497
  shouldComponentUpdate(nextProps, nextState) {
499
- const sameModel = (0, _isEqual.default)(this.props.model, nextProps.model);
500
- const sameState = (0, _isEqual.default)(this.state, nextState);
498
+ const sameModel = (0, _lodashEs.isEqual)(this.props.model, nextProps.model);
499
+ const sameState = (0, _lodashEs.isEqual)(this.state, nextState);
501
500
  return !sameModel || !sameState;
502
501
  }
503
502
  componentDidMount() {
@@ -572,7 +571,7 @@ class Main extends _react.default.Component {
572
571
  } = {}
573
572
  } = config || {};
574
573
  const displayNote = (showCorrect || mode === 'view' && role === 'instructor') && showNote && note;
575
- const emptyResponse = (0, _isEmpty.default)(responses);
574
+ const emptyResponse = (0, _lodashEs.isEmpty)(responses);
576
575
  const showCorrectAnswerToggle = !emptyResponse && correctness && correctness.correctness !== 'correct';
577
576
  const tooltipModeEnabled = disabled && correctness;
578
577
  const additionalKeys = generateAdditionalKeys(customKeys);
@@ -721,8 +720,13 @@ class Main extends _react.default.Component {
721
720
  }
722
721
  })));
723
722
  if (tooltipModeEnabled && (showCorrectAnswerToggle || showTeacherInstructions || showRationale || feedback)) {
724
- return /*#__PURE__*/_react.default.createElement(_renderUi.UiLayout, {
725
- extraCSSRules: extraCSSRules
723
+ return /*#__PURE__*/_react.default.createElement(StyledUiLayout, {
724
+ extraCSSRules: extraCSSRules,
725
+ ref: r => {
726
+ // eslint-disable-next-line react/no-find-dom-node
727
+ const domNode = _reactDom.default.findDOMNode(r);
728
+ this.root = domNode || this.root;
729
+ }
726
730
  }, /*#__PURE__*/_react.default.createElement(StyledTooltip, {
727
731
  interactive: true,
728
732
  enterTouchDelay: 0,
@@ -791,11 +795,9 @@ class Main extends _react.default.Component {
791
795
  correctness: correctness.correctness,
792
796
  feedback: feedback
793
797
  }))
794
- }, /*#__PURE__*/_react.default.createElement(MainContainer, {
795
- ref: r => this.root = r || this.root
796
- }, midContent)));
798
+ }, midContent));
797
799
  }
798
- return /*#__PURE__*/_react.default.createElement(_renderUi.UiLayout, {
800
+ return /*#__PURE__*/_react.default.createElement(StyledUiLayout, {
799
801
  id: id,
800
802
  extraCSSRules: extraCSSRules,
801
803
  ref: r => {
@@ -803,7 +805,7 @@ class Main extends _react.default.Component {
803
805
  const domNode = _reactDom.default.findDOMNode(r);
804
806
  this.root = domNode || this.root;
805
807
  }
806
- }, /*#__PURE__*/_react.default.createElement(MainContainer, null, midContent));
808
+ }, midContent);
807
809
  }
808
810
  }
809
811
 
@@ -874,11 +876,11 @@ if (typeof document !== 'undefined') {
874
876
  document.head.appendChild(style);
875
877
  }
876
878
  }
877
- const MainContainer = (0, _styles.styled)('div')({
879
+ const StyledUiLayout = (0, _styles.styled)(_renderUi.UiLayout)(() => ({
878
880
  color: _renderUi.color.text(),
879
881
  backgroundColor: _renderUi.color.background(),
880
882
  display: 'inline-block'
881
- });
883
+ }));
882
884
  const StyledTooltip = (0, _styles.styled)(_Tooltip.default)({
883
885
  // Styles applied via slotProps.sx below
884
886
  });