@pie-element/number-line 11.3.4-next.3 → 12.0.0-beta.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.
Files changed (86) hide show
  1. package/configure/lib/arrows.js +68 -103
  2. package/configure/lib/arrows.js.map +1 -1
  3. package/configure/lib/card-bar.js +41 -62
  4. package/configure/lib/card-bar.js.map +1 -1
  5. package/configure/lib/defaults.js +5 -7
  6. package/configure/lib/defaults.js.map +1 -1
  7. package/configure/lib/domain.js +60 -116
  8. package/configure/lib/domain.js.map +1 -1
  9. package/configure/lib/index.js +124 -194
  10. package/configure/lib/index.js.map +1 -1
  11. package/configure/lib/main.js +585 -721
  12. package/configure/lib/main.js.map +1 -1
  13. package/configure/lib/number-text-field.js +15 -86
  14. package/configure/lib/number-text-field.js.map +1 -1
  15. package/configure/lib/point-config.js +69 -129
  16. package/configure/lib/point-config.js.map +1 -1
  17. package/configure/lib/size.js +43 -77
  18. package/configure/lib/size.js.map +1 -1
  19. package/configure/lib/ticks.js +89 -151
  20. package/configure/lib/ticks.js.map +1 -1
  21. package/configure/lib/utils.js +2 -4
  22. package/configure/lib/utils.js.map +1 -1
  23. package/configure/package.json +10 -7
  24. package/controller/lib/defaults.js +5 -6
  25. package/controller/lib/defaults.js.map +1 -1
  26. package/controller/lib/index.js +171 -286
  27. package/controller/lib/index.js.map +1 -1
  28. package/controller/lib/tickUtils.js +96 -169
  29. package/controller/lib/tickUtils.js.map +1 -1
  30. package/controller/lib/utils.js +55 -88
  31. package/controller/lib/utils.js.map +1 -1
  32. package/controller/package.json +3 -3
  33. package/lib/data-converter.js +19 -23
  34. package/lib/data-converter.js.map +1 -1
  35. package/lib/draggable/index.js +104 -43
  36. package/lib/draggable/index.js.map +1 -1
  37. package/lib/index.js +118 -205
  38. package/lib/index.js.map +1 -1
  39. package/lib/number-line/colors.js +3 -13
  40. package/lib/number-line/colors.js.map +1 -1
  41. package/lib/number-line/feedback.js +53 -69
  42. package/lib/number-line/feedback.js.map +1 -1
  43. package/lib/number-line/graph/arrow.js +19 -38
  44. package/lib/number-line/graph/arrow.js.map +1 -1
  45. package/lib/number-line/graph/elements/base.js +7 -13
  46. package/lib/number-line/graph/elements/base.js.map +1 -1
  47. package/lib/number-line/graph/elements/builder.js +6 -7
  48. package/lib/number-line/graph/elements/builder.js.map +1 -1
  49. package/lib/number-line/graph/elements/line.js +209 -265
  50. package/lib/number-line/graph/elements/line.js.map +1 -1
  51. package/lib/number-line/graph/elements/point.js +170 -201
  52. package/lib/number-line/graph/elements/point.js.map +1 -1
  53. package/lib/number-line/graph/elements/ray.js +147 -185
  54. package/lib/number-line/graph/elements/ray.js.map +1 -1
  55. package/lib/number-line/graph/index.js +217 -283
  56. package/lib/number-line/graph/index.js.map +1 -1
  57. package/lib/number-line/graph/line.js +12 -22
  58. package/lib/number-line/graph/line.js.map +1 -1
  59. package/lib/number-line/graph/stacks.js +31 -54
  60. package/lib/number-line/graph/stacks.js.map +1 -1
  61. package/lib/number-line/graph/tick-utils.js +120 -209
  62. package/lib/number-line/graph/tick-utils.js.map +1 -1
  63. package/lib/number-line/graph/ticks.js +144 -225
  64. package/lib/number-line/graph/ticks.js.map +1 -1
  65. package/lib/number-line/index.js +331 -395
  66. package/lib/number-line/index.js.map +1 -1
  67. package/lib/number-line/point-chooser/button.js +33 -58
  68. package/lib/number-line/point-chooser/button.js.map +1 -1
  69. package/lib/number-line/point-chooser/img.js +2 -3
  70. package/lib/number-line/point-chooser/img.js.map +1 -1
  71. package/lib/number-line/point-chooser/index.js +152 -148
  72. package/lib/number-line/point-chooser/index.js.map +1 -1
  73. package/lib/number-line/point-chooser/styles.js +29 -52
  74. package/lib/number-line/point-chooser/styles.js.map +1 -1
  75. package/lib/number-line/transitions/fade.js +69 -48
  76. package/lib/number-line/transitions/fade.js.map +1 -1
  77. package/lib/number-line/transitions/index.js +2 -4
  78. package/lib/number-line/transitions/index.js.map +1 -1
  79. package/package.json +14 -11
  80. package/esm/configure.js +0 -84095
  81. package/esm/configure.js.map +0 -1
  82. package/esm/controller.js +0 -68122
  83. package/esm/controller.js.map +0 -1
  84. package/esm/element.js +0 -44487
  85. package/esm/element.js.map +0 -1
  86. package/esm/package.json +0 -3
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.js"],"names":["score","number","scaled","getPartialScore","corrected","ps","correct","rule","find","r","numberOfCorrect","length","scorePercentage","accumulateAnswer","correctResponse","total","answer","isCorrectResponse","some","cr","matches","outcome","model","session","env","Promise","resolve","empty","partialScoringEnabled","partialScoring","enabled","numCorrect","reduce","numIncorrect","getScore","question","getCorrected","correctness","getCorrectness","allowPartialScoring","filter","o","canDoPartialScoring","CLOSE_TO_PRECISION","closeTo","a","b","precision","expectedDiff","Math","pow","receivedDiff","abs","close","v","ov","incorrect","notInAnswer","noCorrectResponse","acc","index","match","push","splice","indexOf","normalize","feedback","defaults","createDefaultModel","out","graph","colorContrast","updateTicks","domain","labelStep","ticks","minor","major","min","Number","toFixed","max","fraction","tickIntervalType","step","math","evaluate","reject","Error","normalizedQuestion","normalizedModel","evaluateMode","mode","exhibitOnly","disabled","teacherInstructions","role","fb","undefined","then","feedbackMessage","prompt","type","message","accessibility","language","extraCSSRules","createCorrectResponseSession","id","getInnerText","html","replaceAll","getContent","replace","validate","config","maxMaxElements","numberLineDimensions","minWidth","maxWidth","width","maxNumberOfPoints","errors","forEach","field","required","widthError","MIN_DOMAIN","MAX_DOMAIN","domainError","maxError","pointsError","correctResponseError"],"mappings":"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","sourcesContent":["import cloneDeep from 'lodash/cloneDeep';\nimport find from 'lodash/find';\nimport isEmpty from 'lodash/isEmpty';\nimport isEqualWith from 'lodash/isEqualWith';\nimport merge from 'lodash/merge';\nimport omitBy from 'lodash/omitBy';\nimport { getFeedbackForCorrectness } from '@pie-lib/feedback';\nimport { partialScoring } from '@pie-lib/controller-utils';\nimport * as math from 'mathjs';\n\nimport defaults from './defaults';\nimport { reloadTicksData } from './utils';\n\nconst score = (number) => {\n return {\n score: {\n scaled: number,\n },\n };\n};\n\nconst getPartialScore = (corrected, ps) => {\n const { correct } = corrected;\n const rule = ps.find((r) => r.numberOfCorrect === correct.length);\n\n if (rule) {\n return 1.0 * (rule.scorePercentage / 100);\n } else {\n return 0;\n }\n};\n\nconst accumulateAnswer = (correctResponse) => (total, answer) => {\n const isCorrectResponse = correctResponse.some((cr) => matches(cr)(answer));\n return total + (isCorrectResponse ? 1 : 0);\n};\n\n/**\n */\nexport function outcome(model, session, env) {\n return new Promise((resolve) => {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n } else {\n const partialScoringEnabled = partialScoring.enabled(model, env);\n const numCorrect = (session.answer || []).reduce(accumulateAnswer(model.correctResponse), 0);\n\n let total = model.correctResponse.length;\n let numIncorrect = 0;\n\n if ((session.answer || []).length > total) {\n numIncorrect = (session.answer || []).length - total;\n }\n\n if (total === 0) {\n total = 1;\n }\n\n let score = numCorrect < 0 ? 0 : (numCorrect - numIncorrect) / total;\n\n if (score < 0) {\n score = 0;\n }\n\n resolve({ score: partialScoringEnabled ? score : score === 1 ? 1 : 0 });\n }\n });\n}\n\nexport function getScore(question, session) {\n return new Promise((resolve) => {\n if (!session || isEmpty(session)) {\n resolve({ score: { scaled: 0 } });\n } else {\n session.answer = session.answer || [];\n\n const corrected = getCorrected(session.answer, cloneDeep(question.correctResponse));\n\n const correctness = getCorrectness(corrected);\n\n if (correctness === 'correct') {\n resolve(score(1.0));\n } else if (correctness === 'incorrect') {\n resolve(score(0.0));\n } else if (correctness === 'partial') {\n const { allowPartialScoring, partialScoring } = question;\n const ps = (partialScoring || []).filter((o) => !isEmpty(o));\n const canDoPartialScoring = allowPartialScoring && ps.length > 0;\n if (canDoPartialScoring) {\n resolve(score(getPartialScore(corrected, ps)));\n } else {\n resolve(score(0.0));\n }\n } else {\n resolve({ score: { scaled: -1 } });\n }\n }\n });\n}\n\nexport const CLOSE_TO_PRECISION = 3;\n\nexport const closeTo = (a, b, precision) => {\n precision = precision || 5;\n const expectedDiff = Math.pow(10, -precision) / 2;\n const receivedDiff = Math.abs(a - b);\n const close = receivedDiff <= expectedDiff;\n return close;\n};\n\nconst matches = (a) => (v) => {\n return isEqualWith(a, v, (v, ov) => {\n if (typeof v === 'number' && typeof ov === 'number') {\n return closeTo(v, ov, CLOSE_TO_PRECISION);\n }\n });\n};\n\nexport const getCorrected = (answer, correctResponse) => {\n if (isEmpty(correctResponse) && answer.length > 0) {\n return {\n correct: [],\n incorrect: [],\n notInAnswer: [],\n noCorrectResponse: true,\n };\n }\n\n return answer.reduce(\n (acc, a, index) => {\n const { correct, incorrect, notInAnswer } = acc;\n\n const match = find(notInAnswer, matches(a));\n if (match) {\n correct.push(index);\n notInAnswer.splice(notInAnswer.indexOf(match), 1);\n } else {\n incorrect.push(index);\n }\n\n return {\n correct: correct,\n incorrect: incorrect,\n notInAnswer: notInAnswer,\n };\n },\n {\n correct: [],\n incorrect: [],\n notInAnswer: correctResponse,\n },\n );\n};\n\nexport const getCorrectness = (corrected) => {\n const { incorrect, correct, notInAnswer, noCorrectResponse } = corrected;\n\n if (noCorrectResponse) {\n return 'unknown';\n }\n\n if (incorrect.length === 0 && correct.length === 0) {\n return 'unanswered';\n }\n\n if (incorrect.length === 0 && notInAnswer.length === 0) {\n return 'correct';\n }\n\n if (incorrect.length > 0 || notInAnswer.length > 0) {\n if (correct.length > 0) {\n return 'partial';\n } else {\n return 'incorrect';\n }\n }\n\n return 'unknown';\n};\n\n/**\n * A sample of a normalize function see:\n * https://github.com/pie-framework/pie-elements/issues/21\n */\nexport function normalize(question) {\n const feedback = merge(defaults.feedback, question.feedback);\n\n return { ...defaults, ...question, feedback };\n}\n\nexport function createDefaultModel(model = {}) {\n return new Promise((resolve) => {\n const out = {\n ...model,\n graph: {\n ...defaults.graph,\n ...model.graph,\n },\n colorContrast: 'black_on_white',\n };\n\n resolve(omitBy(out, (v) => !v));\n });\n}\n\n// this function is duplicated in configure; at some point, use the same shared function\nconst updateTicks = (model) => {\n const { graph: { domain, labelStep, ticks = {} } = {} } = model;\n const { minor, major } = ticks;\n\n if (domain) {\n domain.min = Number((domain.min || 0).toFixed(2));\n domain.max = Number((domain.max || 0).toFixed(2));\n }\n\n if (labelStep && typeof labelStep === 'string' && labelStep.match(/^[1-9][0-9]*\\/[1-9][0-9]*$/g)) {\n model.graph.fraction = true;\n ticks.tickIntervalType = 'Fraction';\n\n // update the ticks frequency and label value to match the label step if needed\n const step = math.evaluate(labelStep);\n\n if (step !== major) {\n ticks.major = step;\n ticks.minor = step / (major / minor);\n }\n }\n\n return model;\n};\n\nexport function model(question, session, env) {\n if (!question) {\n return Promise.reject(new Error('question is null'));\n }\n\n return new Promise(async (resolve, reject) => {\n const normalizedQuestion = await normalize(question);\n const normalizedModel = updateTicks(normalizedQuestion);\n // this function is also called in configure, it is a duplicate to maintain consistency and correctness\n const graph = reloadTicksData(normalizedModel.graph);\n\n if (graph) {\n const evaluateMode = env.mode === 'evaluate';\n\n const correctResponse = cloneDeep(normalizedQuestion.correctResponse);\n const corrected = evaluateMode && getCorrected(session ? session.answer || [] : [], correctResponse);\n const correctness = evaluateMode && getCorrectness(corrected);\n\n const { exhibitOnly } = graph;\n const disabled = env.mode !== 'gather' || exhibitOnly === true;\n let teacherInstructions = null;\n\n if (env.role === 'instructor' && (env.mode === 'view' || evaluateMode)) {\n teacherInstructions = normalizedQuestion.teacherInstructions;\n }\n\n const fb = evaluateMode\n ? getFeedbackForCorrectness(correctness, normalizedQuestion.feedback)\n : Promise.resolve(undefined);\n\n fb.then((feedbackMessage) => {\n const out = {\n prompt: normalizedQuestion.prompt,\n teacherInstructions,\n graph,\n disabled,\n corrected,\n correctResponse:\n evaluateMode && ['unanswered', 'correct'].indexOf(correctness) === -1 && normalizedQuestion.correctResponse,\n feedback: feedbackMessage && {\n type: correctness,\n message: feedbackMessage,\n },\n colorContrast: (env.accessibility && env.accessibility.colorContrast) || 'black_on_white',\n language: normalizedQuestion.language,\n extraCSSRules: normalizedQuestion.extraCSSRules,\n };\n resolve(omitBy(out, (v) => !v));\n });\n } else {\n reject(new Error('graph is undefined'));\n }\n });\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { correctResponse: answer } = question;\n\n resolve({\n answer,\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 { graph, correctResponse } = model || {};\n const { maxMaxElements = 20, numberLineDimensions: { min: minWidth = 200, max: maxWidth = 800 } = {} } = config || {};\n const { width, domain, maxNumberOfPoints } = graph || {};\n const { min, max } = domain || {};\n const errors = {};\n\n ['teacherInstructions', 'prompt'].forEach((field) => {\n if (config[field]?.required && !getContent(model[field])) {\n errors[field] = 'This field is required.';\n }\n });\n\n if (width < minWidth || width > maxWidth) {\n errors.widthError = `Width should be a value between ${minWidth} and ${maxWidth}.`;\n }\n\n const MIN_DOMAIN = -100000;\n const MAX_DOMAIN = 100000;\n\n if (min < MIN_DOMAIN || min > MAX_DOMAIN || max < MIN_DOMAIN || max > MAX_DOMAIN) {\n errors.domainError = `Min and max values must both be in the range [${MIN_DOMAIN}, ${MAX_DOMAIN}].`;\n }\n\n if (min >= max) {\n errors.maxError = 'Max value must be greater than min value.';\n }\n\n if (maxNumberOfPoints < 1 || maxNumberOfPoints > maxMaxElements) {\n errors.pointsError = `Max number of elements should be between 1 and ${maxMaxElements}.`;\n }\n\n if (correctResponse && correctResponse.length === 0) {\n errors.correctResponseError = 'The correct answer should include at least one number line object.';\n }\n\n return errors;\n};\n"],"file":"index.js"}
1
+ {"version":3,"file":"index.js","names":["_cloneDeep","_interopRequireDefault","require","_find","_isEmpty","_isEqualWith","_merge","_omitBy","_feedback","_controllerUtils","math","_interopRequireWildcard","_defaults","_utils","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","score","number","scaled","getPartialScore","corrected","ps","correct","rule","find","numberOfCorrect","length","scorePercentage","accumulateAnswer","correctResponse","total","answer","isCorrectResponse","some","cr","matches","outcome","model","session","env","Promise","resolve","isEmpty","empty","partialScoringEnabled","partialScoring","enabled","numCorrect","reduce","numIncorrect","getScore","question","getCorrected","cloneDeep","correctness","getCorrectness","allowPartialScoring","filter","canDoPartialScoring","CLOSE_TO_PRECISION","exports","closeTo","a","b","precision","expectedDiff","Math","pow","receivedDiff","abs","close","v","isEqualWith","ov","incorrect","notInAnswer","noCorrectResponse","acc","index","match","push","splice","indexOf","normalize","feedback","merge","defaults","createDefaultModel","out","graph","colorContrast","omitBy","updateTicks","domain","labelStep","ticks","minor","major","min","Number","toFixed","max","fraction","tickIntervalType","step","evaluate","Error","normalizedQuestion","normalizedModel","reloadTicksData","evaluateMode","mode","exhibitOnly","disabled","teacherInstructions","role","feedbackMessage","getFeedbackForCorrectness","undefined","prompt","type","message","accessibility","language","extraCSSRules","createCorrectResponseSession","id","getInnerText","html","replaceAll","getContent","replace","validate","config","maxMaxElements","numberLineDimensions","minWidth","maxWidth","width","maxNumberOfPoints","errors","forEach","field","required","widthError","MIN_DOMAIN","MAX_DOMAIN","domainError","maxError","pointsError","correctResponseError"],"sources":["../src/index.js"],"sourcesContent":["import cloneDeep from 'lodash/cloneDeep';\nimport find from 'lodash/find';\nimport isEmpty from 'lodash/isEmpty';\nimport isEqualWith from 'lodash/isEqualWith';\nimport merge from 'lodash/merge';\nimport omitBy from 'lodash/omitBy';\nimport { getFeedbackForCorrectness } from '@pie-lib/feedback';\nimport { partialScoring } from '@pie-lib/controller-utils';\nimport * as math from 'mathjs';\n\nimport defaults from './defaults';\nimport { reloadTicksData } from './utils';\n\nconst score = (number) => {\n return {\n score: {\n scaled: number,\n },\n };\n};\n\nconst getPartialScore = (corrected, ps) => {\n const { correct } = corrected;\n const rule = ps.find((r) => r.numberOfCorrect === correct.length);\n\n if (rule) {\n return 1.0 * (rule.scorePercentage / 100);\n } else {\n return 0;\n }\n};\n\nconst accumulateAnswer = (correctResponse) => (total, answer) => {\n const isCorrectResponse = correctResponse.some((cr) => matches(cr)(answer));\n return total + (isCorrectResponse ? 1 : 0);\n};\n\n/**\n */\nexport function outcome(model, session, env) {\n return new Promise((resolve) => {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n } else {\n const partialScoringEnabled = partialScoring.enabled(model, env);\n const numCorrect = (session.answer || []).reduce(accumulateAnswer(model.correctResponse), 0);\n\n let total = model.correctResponse.length;\n let numIncorrect = 0;\n\n if ((session.answer || []).length > total) {\n numIncorrect = (session.answer || []).length - total;\n }\n\n if (total === 0) {\n total = 1;\n }\n\n let score = numCorrect < 0 ? 0 : (numCorrect - numIncorrect) / total;\n\n if (score < 0) {\n score = 0;\n }\n\n resolve({ score: partialScoringEnabled ? score : score === 1 ? 1 : 0 });\n }\n });\n}\n\nexport function getScore(question, session) {\n return new Promise((resolve) => {\n if (!session || isEmpty(session)) {\n resolve({ score: { scaled: 0 } });\n } else {\n session.answer = session.answer || [];\n\n const corrected = getCorrected(session.answer, cloneDeep(question.correctResponse));\n\n const correctness = getCorrectness(corrected);\n\n if (correctness === 'correct') {\n resolve(score(1.0));\n } else if (correctness === 'incorrect') {\n resolve(score(0.0));\n } else if (correctness === 'partial') {\n const { allowPartialScoring, partialScoring } = question;\n const ps = (partialScoring || []).filter((o) => !isEmpty(o));\n const canDoPartialScoring = allowPartialScoring && ps.length > 0;\n if (canDoPartialScoring) {\n resolve(score(getPartialScore(corrected, ps)));\n } else {\n resolve(score(0.0));\n }\n } else {\n resolve({ score: { scaled: -1 } });\n }\n }\n });\n}\n\nexport const CLOSE_TO_PRECISION = 3;\n\nexport const closeTo = (a, b, precision) => {\n precision = precision || 5;\n const expectedDiff = Math.pow(10, -precision) / 2;\n const receivedDiff = Math.abs(a - b);\n const close = receivedDiff <= expectedDiff;\n return close;\n};\n\nconst matches = (a) => (v) => {\n return isEqualWith(a, v, (v, ov) => {\n if (typeof v === 'number' && typeof ov === 'number') {\n return closeTo(v, ov, CLOSE_TO_PRECISION);\n }\n });\n};\n\nexport const getCorrected = (answer, correctResponse) => {\n if (isEmpty(correctResponse) && answer.length > 0) {\n return {\n correct: [],\n incorrect: [],\n notInAnswer: [],\n noCorrectResponse: true,\n };\n }\n\n return answer.reduce(\n (acc, a, index) => {\n const { correct, incorrect, notInAnswer } = acc;\n\n const match = find(notInAnswer, matches(a));\n if (match) {\n correct.push(index);\n notInAnswer.splice(notInAnswer.indexOf(match), 1);\n } else {\n incorrect.push(index);\n }\n\n return {\n correct: correct,\n incorrect: incorrect,\n notInAnswer: notInAnswer,\n };\n },\n {\n correct: [],\n incorrect: [],\n notInAnswer: correctResponse,\n },\n );\n};\n\nexport const getCorrectness = (corrected) => {\n const { incorrect, correct, notInAnswer, noCorrectResponse } = corrected;\n\n if (noCorrectResponse) {\n return 'unknown';\n }\n\n if (incorrect.length === 0 && correct.length === 0) {\n return 'unanswered';\n }\n\n if (incorrect.length === 0 && notInAnswer.length === 0) {\n return 'correct';\n }\n\n if (incorrect.length > 0 || notInAnswer.length > 0) {\n if (correct.length > 0) {\n return 'partial';\n } else {\n return 'incorrect';\n }\n }\n\n return 'unknown';\n};\n\n/**\n * A sample of a normalize function see:\n * https://github.com/pie-framework/pie-elements/issues/21\n */\nexport function normalize(question) {\n const feedback = merge(defaults.feedback, question.feedback);\n\n return { ...defaults, ...question, feedback };\n}\n\nexport function createDefaultModel(model = {}) {\n return new Promise((resolve) => {\n const out = {\n ...model,\n graph: {\n ...defaults.graph,\n ...model.graph,\n },\n colorContrast: 'black_on_white',\n };\n\n resolve(omitBy(out, (v) => !v));\n });\n}\n\n// this function is duplicated in configure; at some point, use the same shared function\nconst updateTicks = (model) => {\n const { graph: { domain, labelStep, ticks = {} } = {} } = model;\n const { minor, major } = ticks;\n\n if (domain) {\n domain.min = Number((domain.min || 0).toFixed(2));\n domain.max = Number((domain.max || 0).toFixed(2));\n }\n\n if (labelStep && typeof labelStep === 'string' && labelStep.match(/^[1-9][0-9]*\\/[1-9][0-9]*$/g)) {\n model.graph.fraction = true;\n ticks.tickIntervalType = 'Fraction';\n\n // update the ticks frequency and label value to match the label step if needed\n const step = math.evaluate(labelStep);\n\n if (step !== major) {\n ticks.major = step;\n ticks.minor = step / (major / minor);\n }\n }\n\n return model;\n};\n\nexport async function model(question, session, env) {\n if (!question) {\n throw new Error('question is null');\n }\n\n const normalizedQuestion = await normalize(question);\n const normalizedModel = updateTicks(normalizedQuestion);\n // this function is also called in configure, it is a duplicate to maintain consistency and correctness\n const graph = reloadTicksData(normalizedModel.graph);\n\n if (graph) {\n const evaluateMode = env.mode === 'evaluate';\n\n const correctResponse = cloneDeep(normalizedQuestion.correctResponse);\n const corrected = evaluateMode && getCorrected(session ? session.answer || [] : [], correctResponse);\n const correctness = evaluateMode && getCorrectness(corrected);\n\n const { exhibitOnly } = graph;\n const disabled = env.mode !== 'gather' || exhibitOnly === true;\n let teacherInstructions = null;\n\n if (env.role === 'instructor' && (env.mode === 'view' || evaluateMode)) {\n teacherInstructions = normalizedQuestion.teacherInstructions;\n }\n\n const feedbackMessage = evaluateMode\n ? await getFeedbackForCorrectness(correctness, normalizedQuestion.feedback)\n : undefined;\n\n const out = {\n prompt: normalizedQuestion.prompt,\n teacherInstructions,\n graph,\n disabled,\n corrected,\n correctResponse:\n evaluateMode && ['unanswered', 'correct'].indexOf(correctness) === -1 && normalizedQuestion.correctResponse,\n feedback: feedbackMessage && {\n type: correctness,\n message: feedbackMessage,\n },\n colorContrast: (env.accessibility && env.accessibility.colorContrast) || 'black_on_white',\n language: normalizedQuestion.language,\n extraCSSRules: normalizedQuestion.extraCSSRules,\n };\n return omitBy(out, (v) => !v);\n } else {\n throw new Error('graph is undefined');\n }\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { correctResponse: answer } = question;\n\n resolve({\n answer,\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 { graph, correctResponse } = model || {};\n const { maxMaxElements = 20, numberLineDimensions: { min: minWidth = 200, max: maxWidth = 800 } = {} } = config || {};\n const { width, domain, maxNumberOfPoints } = graph || {};\n const { min, max } = domain || {};\n const errors = {};\n\n ['teacherInstructions', 'prompt'].forEach((field) => {\n if (config[field]?.required && !getContent(model[field])) {\n errors[field] = 'This field is required.';\n }\n });\n\n if (width < minWidth || width > maxWidth) {\n errors.widthError = `Width should be a value between ${minWidth} and ${maxWidth}.`;\n }\n\n const MIN_DOMAIN = -100000;\n const MAX_DOMAIN = 100000;\n\n if (min < MIN_DOMAIN || min > MAX_DOMAIN || max < MIN_DOMAIN || max > MAX_DOMAIN) {\n errors.domainError = `Min and max values must both be in the range [${MIN_DOMAIN}, ${MAX_DOMAIN}].`;\n }\n\n if (min >= max) {\n errors.maxError = 'Max value must be greater than min value.';\n }\n\n if (maxNumberOfPoints < 1 || maxNumberOfPoints > maxMaxElements) {\n errors.pointsError = `Max number of elements should be between 1 and ${maxMaxElements}.`;\n }\n\n if (correctResponse && correctResponse.length === 0) {\n errors.correctResponseError = 'The correct answer should include at least one number line object.';\n }\n\n return errors;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,43 +1,26 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- var _typeof = require("@babel/runtime/helpers/typeof");
6
-
7
4
  Object.defineProperty(exports, "__esModule", {
8
5
  value: true
9
6
  });
10
7
  exports.getMinorLimits = exports.generateMinorValues = exports.generateMajorValuesForMinor = void 0;
11
-
12
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
-
14
8
  var math = _interopRequireWildcard(require("mathjs"));
15
-
16
9
  var _uniqWith = _interopRequireDefault(require("lodash/uniqWith"));
17
-
18
10
  var _isObject = _interopRequireDefault(require("lodash/isObject"));
19
-
20
11
  var _isNumber = _interopRequireDefault(require("lodash/isNumber"));
21
-
22
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
23
-
24
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
25
-
26
- 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; }
27
-
28
- 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; }
29
-
12
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
30
13
  // All these functions are duplicated in src/number-line/graph/tick-utils
31
14
 
32
15
  /*This will store the possible decimal tick values*/
33
- var decimalTickValues = [0.001, 0.01, 0.02, 0.04, 0.05, 0.1, 0.125, 0.2, 0.25, 0.5];
16
+ const decimalTickValues = [0.001, 0.01, 0.02, 0.04, 0.05, 0.1, 0.125, 0.2, 0.25, 0.5];
17
+
34
18
  /*This will store the possible fraction tick values*/
19
+ const fractionTickValues = ['1/1000', '1/100', '1/64', '1/50', '1/32', '1/25', '1/20', '1/16', '1/15', '1/12', '1/10', '1/9', '1/8', '1/7', '1/6', '1/5', '1/4', '1/3', '1/2'];
35
20
 
36
- var fractionTickValues = ['1/1000', '1/100', '1/64', '1/50', '1/32', '1/25', '1/20', '1/16', '1/15', '1/12', '1/10', '1/9', '1/8', '1/7', '1/6', '1/5', '1/4', '1/3', '1/2'];
37
21
  /*This const will store possible multiplier for label interval that needs to be multiplied
38
22
  with tick interval with denominator represented with object key.*/
39
-
40
- var labelMultiplier = {
23
+ const labelMultiplier = {
41
24
  1: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
42
25
  2: [1, 2, 4, 6, 8, 10],
43
26
  3: [1, 3, 6, 9],
@@ -59,82 +42,61 @@ var labelMultiplier = {
59
42
  100: [1, 2, 4, 5, 10],
60
43
  1000: [1, 2, 4, 5, 8, 10]
61
44
  };
62
-
63
- var fractionRange = function fractionRange(start, end, interval) {
64
- var m = math.mod(math.abs(start), math.abs(interval));
65
-
45
+ const fractionRange = (start, end, interval) => {
46
+ const m = math.mod(math.abs(start), math.abs(interval));
66
47
  if (!math.equal(m, 0)) {
67
48
  throw new Error('start point must be divisible by interval');
68
49
  }
69
-
70
50
  if (math.equal(start, end)) {
71
51
  return [];
72
52
  }
73
-
74
- var e = math.subtract(end, math.mod(end, math.abs(interval)));
75
- var direction = math.larger(interval, 0) ? 'positive' : 'negative';
76
-
53
+ const e = math.subtract(end, math.mod(end, math.abs(interval)));
54
+ const direction = math.larger(interval, 0) ? 'positive' : 'negative';
77
55
  if (direction === 'negative' && math.largerEq(end, start)) {
78
56
  throw new Error('start must be > than end when doing a negative decrement');
79
57
  }
80
-
81
58
  if (direction === 'positive' && math.smallerEq(end, start)) {
82
59
  throw new Error('start must be < end when doing increments');
83
60
  }
84
-
85
- var compareFn = direction === 'positive' ? math.smallerEq : math.equal(e, end) ? math.largerEq : math.larger;
86
- var out = [];
87
- var next = start;
88
-
61
+ const compareFn = direction === 'positive' ? math.smallerEq : math.equal(e, end) ? math.largerEq : math.larger;
62
+ const out = [];
63
+ let next = start;
89
64
  while (compareFn(next, e)) {
90
65
  out.push(next);
91
66
  next = math.add(next, interval);
92
67
  }
93
-
94
68
  return out;
95
69
  };
96
-
97
- var zbrErrorMessage = function zbrErrorMessage(start, end) {
98
- return "Can only do a positive or negative range, but got: start: ".concat(start, " and end:").concat(end);
99
- };
100
-
101
- var zeroBasedRange = function zeroBasedRange(start, end, interval) {
70
+ const zbrErrorMessage = (start, end) => `Can only do a positive or negative range, but got: start: ${start} and end:${end}`;
71
+ const zeroBasedRange = (start, end, interval) => {
102
72
  start = math.fraction(start);
103
73
  end = math.fraction(end);
104
74
  interval = math.fraction(interval);
105
- var length = math.abs(math.subtract(end, start));
106
-
75
+ const length = math.abs(math.subtract(end, start));
107
76
  if (math.larger(length, math.abs(end))) {
108
77
  throw new Error(zbrErrorMessage(start, end));
109
78
  }
110
-
111
- var a = {
79
+ const a = {
112
80
  start: math.abs(start),
113
81
  end: math.abs(end),
114
82
  interval: math.abs(interval),
115
83
  multiplier: math.smaller(interval, 0) ? -1 : 1
116
84
  };
117
- var m = math.mod(a.start, a.interval);
118
- var s = math.larger(m, 0) ? math.add(math.subtract(a.start, m), a.interval) : a.start;
119
- var r = fractionRange(s, a.end, a.interval);
120
- var out = a.multiplier === -1 ? r.map(function (v) {
121
- return math.multiply(v, -1);
122
- }) : r;
123
-
85
+ const m = math.mod(a.start, a.interval);
86
+ const s = math.larger(m, 0) ? math.add(math.subtract(a.start, m), a.interval) : a.start;
87
+ const r = fractionRange(s, a.end, a.interval);
88
+ const out = a.multiplier === -1 ? r.map(v => math.multiply(v, -1)) : r;
124
89
  if (math.smaller(interval, 0)) {
125
90
  out.reverse();
126
91
  }
127
-
128
92
  return out;
129
93
  };
130
-
131
- var fmin = function fmin(a, b) {
94
+ const fmin = (a, b) => {
132
95
  a = math.fraction(a);
133
96
  b = math.fraction(b);
134
97
  return math.smaller(a, b) ? a : b;
135
98
  };
136
-
137
- var fmax = function fmax(a, b) {
99
+ const fmax = (a, b) => {
138
100
  a = math.fraction(a);
139
101
  b = math.fraction(b);
140
102
  return math.larger(a, b) ? a : b;
@@ -144,148 +106,130 @@ var fmax = function fmax(a, b) {
144
106
  * such that it was hard to round the numbers.
145
107
  * This is a more simplistic version but makes rounding work.
146
108
  */
147
-
148
-
149
- var simpleRange = function simpleRange(start, end, interval) {
109
+ const simpleRange = (start, end, interval) => {
150
110
  start = math.fraction(start);
151
111
  end = math.fraction(end);
152
112
  interval = math.fraction(interval);
153
- var positiveRange = math.larger(end, 0) ? zeroBasedRange(fmax(0, start), end, interval) : [];
154
- var negativeRange = math.smaller(start, 0) ? zeroBasedRange(fmin(0, end), start, math.multiply(interval, -1)) : [];
155
- var together = negativeRange.concat(positiveRange);
156
- var out = (0, _uniqWith["default"])(together, math.equal);
113
+ const positiveRange = math.larger(end, 0) ? zeroBasedRange(fmax(0, start), end, interval) : [];
114
+ const negativeRange = math.smaller(start, 0) ? zeroBasedRange(fmin(0, end), start, math.multiply(interval, -1)) : [];
115
+ let together = negativeRange.concat(positiveRange);
116
+ const out = (0, _uniqWith.default)(together, math.equal);
157
117
  return out;
158
118
  };
159
-
160
- var closeTo = function closeTo(a, b, precision) {
119
+ const closeTo = (a, b, precision) => {
161
120
  precision = precision || 2;
162
- var expectedDiff = Math.pow(10, -precision) / 2;
163
- var receivedDiff = Math.abs(a - b);
121
+ const expectedDiff = Math.pow(10, -precision) / 2;
122
+ const receivedDiff = Math.abs(a - b);
164
123
  return receivedDiff < expectedDiff;
165
124
  };
166
-
167
- var limit = function limit(v, min, max) {
125
+ const limit = (v, min, max) => {
168
126
  if (math.smaller(fraction(v), fraction(min))) {
169
127
  return min;
170
128
  }
171
-
172
129
  if (math.larger(fraction(v), fraction(max))) {
173
130
  return max;
174
131
  }
175
-
176
132
  return v;
177
133
  };
134
+
178
135
  /*
179
136
  * Function to get tick interval limits based on min, max and width entered by the user.
180
137
  * @param domain object containing max and min value.
181
138
  * @param width number represents width of number line.
182
139
  * */
183
-
184
-
185
- var getMinorLimits = function getMinorLimits(domain, width) {
186
- var end = domain.max - domain.min;
187
- var min = math.number(math.multiply(10, math.divide(math.fraction(end), width)));
188
- var max = math.number(math.multiply(20, min));
140
+ const getMinorLimits = (domain, width) => {
141
+ const end = domain.max - domain.min;
142
+ const min = math.number(math.multiply(10, math.divide(math.fraction(end), width)));
143
+ const max = math.number(math.multiply(20, min));
189
144
  return {
190
145
  min: min,
191
146
  max: max
192
147
  };
193
148
  };
194
-
195
149
  exports.getMinorLimits = getMinorLimits;
196
-
197
- var isMultiple = function isMultiple(multiple, src) {
198
- var mod = math.mod(multiple, src);
150
+ const isMultiple = (multiple, src) => {
151
+ const mod = math.mod(multiple, src);
199
152
  return math.equal(mod, 0);
200
153
  };
154
+
201
155
  /**
202
156
  * Accepts a fraction object {n,d,s} or number.
203
157
  * @param {*} v
204
158
  * @return mathjs.fraction
205
159
  */
206
-
207
-
208
- var fraction = function fraction(v) {
209
- if ((0, _isObject["default"])(v)) {
160
+ const fraction = v => {
161
+ if ((0, _isObject.default)(v)) {
210
162
  return math.fraction(v.n * v.s, v.d);
211
- } else if ((0, _isNumber["default"])(v)) {
163
+ } else if ((0, _isNumber.default)(v)) {
212
164
  return math.fraction(v);
213
165
  }
214
166
  };
215
-
216
- var normalizeTicks = function normalizeTicks(domain, width, ticks, opts) {
217
- var useLimit = opts ? opts.limit !== false : true;
218
- var minorLimits = getMinorLimits(domain, width);
219
- var minor = useLimit ? limit(fraction(ticks.minor), minorLimits.min, minorLimits.max) : fraction(ticks.minor);
220
- var major = useLimit ? limit(fraction(ticks.major), minor, math.multiply(minor, 20)) : fraction(ticks.major);
221
- var isMajorMultiple = isMultiple(major, minor);
222
-
167
+ const normalizeTicks = (domain, width, ticks, opts) => {
168
+ const useLimit = opts ? opts.limit !== false : true;
169
+ const minorLimits = getMinorLimits(domain, width);
170
+ const minor = useLimit ? limit(fraction(ticks.minor), minorLimits.min, minorLimits.max) : fraction(ticks.minor);
171
+ const major = useLimit ? limit(fraction(ticks.major), minor, math.multiply(minor, 20)) : fraction(ticks.major);
172
+ const isMajorMultiple = isMultiple(major, minor);
223
173
  if (!isMajorMultiple) {
224
- var multiplier = math.divide(major, minor);
225
- var multiplyBy = multiplier <= 2 ? 2 : Math.round(multiplier); // major must be a multiple of minor
174
+ const multiplier = math.divide(major, minor);
175
+ const multiplyBy = multiplier <= 2 ? 2 : Math.round(multiplier);
226
176
 
177
+ // major must be a multiple of minor
227
178
  return {
228
- minor: minor,
179
+ minor,
229
180
  major: math.multiply(minor, multiplyBy)
230
181
  };
231
182
  }
232
-
233
183
  return {
234
- major: major,
235
- minor: minor
184
+ major,
185
+ minor
236
186
  };
237
187
  };
188
+
238
189
  /**
239
190
  * Build ticks as an array of mathjs Fractions
240
191
  */
241
-
242
-
243
- var buildTickDataAsFractions = function buildTickDataAsFractions(domain, width, ticks, opts) {
192
+ const buildTickDataAsFractions = (domain, width, ticks, opts) => {
244
193
  ticks = normalizeTicks(domain, width, ticks, opts);
245
- var rng = simpleRange(domain.min, domain.max, ticks.minor);
246
- var o = rng.filter(function (x) {
247
- return math.smallerEq(x, math.fraction(domain.max));
248
- }).map(function (x) {
249
- var type = 'minor';
250
- var modulo = math.mod(x, ticks.major);
251
-
194
+ const rng = simpleRange(domain.min, domain.max, ticks.minor);
195
+ const o = rng.filter(x => math.smallerEq(x, math.fraction(domain.max))).map(x => {
196
+ let type = 'minor';
197
+ const modulo = math.mod(x, ticks.major);
252
198
  if (closeTo(math.number(modulo), 0)) {
253
199
  type = 'major';
254
200
  }
255
-
256
201
  return {
257
- x: x,
258
- type: type
202
+ x,
203
+ type
259
204
  };
260
205
  });
261
206
  return o;
262
207
  };
208
+
263
209
  /*
264
210
  * This function will generate tick interval values based on min and max limits of ticks.
265
211
  * @param minorLimits object containing min and max values
266
212
  * @return out object containing three arrays 1. fraction values, 2. decimal values,
267
213
  * */
268
-
269
-
270
- var generateMinorValues = function generateMinorValues(minorLimits) {
271
- var out = {
214
+ const generateMinorValues = minorLimits => {
215
+ let out = {
272
216
  fraction: [],
273
217
  decimal: []
274
218
  };
275
- decimalTickValues.forEach(function (value) {
219
+ decimalTickValues.forEach(value => {
276
220
  if (value >= minorLimits.min && value <= minorLimits.max) {
277
221
  out.decimal.push(value);
278
222
  }
279
223
  });
280
- fractionTickValues.forEach(function (value) {
281
- var decimalValue = math.number(math.fraction(value));
282
-
224
+ fractionTickValues.forEach(value => {
225
+ let decimalValue = math.number(math.fraction(value));
283
226
  if (decimalValue >= minorLimits.min && decimalValue <= minorLimits.max) {
284
227
  out.fraction.push(value);
285
228
  }
286
229
  });
287
230
  return out;
288
231
  };
232
+
289
233
  /*
290
234
  * This function will generate label interval values for provided tick interval value.
291
235
  * @param minor number representing tick interval value.
@@ -293,77 +237,60 @@ var generateMinorValues = function generateMinorValues(minorLimits) {
293
237
  * @param width number representing width of number line.
294
238
  * @return out object containing three arrays 1. fraction values, 2. decimal values,
295
239
  * */
296
-
297
-
298
240
  exports.generateMinorValues = generateMinorValues;
299
-
300
- var generateMajorValuesForMinor = function generateMajorValuesForMinor(minor, domain, width) {
301
- var out = {
241
+ const generateMajorValuesForMinor = (minor, domain, width) => {
242
+ let out = {
302
243
  decimal: [],
303
244
  fraction: []
304
245
  };
305
- var fraction = math.fraction(math.number(math.number(minor)));
306
- var n = fraction.n;
307
- var d = fraction.d;
308
-
246
+ let fraction = math.fraction(math.number(math.number(minor)));
247
+ let n = fraction.n;
248
+ let d = fraction.d;
309
249
  if (n >= 1 && d === 1) {
310
- for (var i = 1; i <= 10; i++) {
311
- var num = math.number(math.multiply(n, i)); //Here we check if this major value can plot at least 2 points on number line.
312
-
313
- var ticksData = {
250
+ for (let i = 1; i <= 10; i++) {
251
+ let num = math.number(math.multiply(n, i));
252
+ //Here we check if this major value can plot at least 2 points on number line.
253
+ let ticksData = {
314
254
  minor: minor,
315
255
  major: num
316
256
  };
317
- var output = buildTickData(domain, width, ticksData, {
257
+ let output = buildTickData(domain, width, ticksData, {
318
258
  fraction: undefined
319
259
  });
320
-
321
- if (output.filter(function (x) {
322
- return x.type === 'major';
323
- }).length > 1) {
260
+ if (output.filter(x => x.type === 'major').length > 1) {
324
261
  out.fraction.push(num.toString());
325
262
  out.decimal.push(num);
326
263
  }
327
264
  }
328
265
  } else {
329
- for (var multiplierKey in labelMultiplier[d]) {
330
- var _num = math.multiply(math.fraction(n, d), labelMultiplier[d][multiplierKey]); //Here we check if this major value can plot at least 2 points on number line.
331
-
332
-
333
- var _ticksData = {
266
+ for (const multiplierKey in labelMultiplier[d]) {
267
+ let num = math.multiply(math.fraction(n, d), labelMultiplier[d][multiplierKey]);
268
+ //Here we check if this major value can plot at least 2 points on number line.
269
+ let ticksData = {
334
270
  minor: minor,
335
- major: math.number(_num)
271
+ major: math.number(num)
336
272
  };
337
-
338
- var _output = buildTickData(domain, width, _ticksData, {
273
+ let output = buildTickData(domain, width, ticksData, {
339
274
  fraction: undefined
340
275
  });
341
-
342
- if (_output.filter(function (x) {
343
- return x.type === 'major';
344
- }).length > 1) {
345
- if (_num.d !== 1) {
346
- out.fraction.push(_num.n + '/' + _num.d);
276
+ if (output.filter(x => x.type === 'major').length > 1) {
277
+ if (num.d !== 1) {
278
+ out.fraction.push(num.n + '/' + num.d);
347
279
  } else {
348
- out.fraction.push(_num.n.toString());
280
+ out.fraction.push(num.n.toString());
349
281
  }
350
-
351
- out.decimal.push(math.number(_num));
282
+ out.decimal.push(math.number(num));
352
283
  }
353
284
  }
354
285
  }
355
-
356
286
  return out;
357
287
  };
358
-
359
288
  exports.generateMajorValuesForMinor = generateMajorValuesForMinor;
360
-
361
- var buildTickData = function buildTickData(domain, width, ticks, opts) {
362
- var result = buildTickDataAsFractions(domain, width, ticks, opts);
363
- var out = result.map(function (o) {
364
- return opts.fraction ? o : _objectSpread(_objectSpread({}, o), {}, {
365
- x: math.number(o.x) || 0
366
- });
289
+ const buildTickData = (domain, width, ticks, opts) => {
290
+ const result = buildTickDataAsFractions(domain, width, ticks, opts);
291
+ const out = result.map(o => opts.fraction ? o : {
292
+ ...o,
293
+ x: math.number(o.x) || 0
367
294
  });
368
295
  return out;
369
296
  };