@pie-element/graphing 10.1.1-next.11 → 10.1.1-next.131

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.
@@ -125,9 +125,13 @@ class GraphLinesConfigure extends HTMLElement {
125
125
  });
126
126
  }
127
127
  }
128
+ connectedCallback() {
129
+ this._render();
130
+ }
128
131
  disconnectedCallback() {
129
132
  if (this._root) {
130
133
  this._root.unmount();
134
+ this._root = null;
131
135
  }
132
136
  }
133
137
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_client","_configure","_pieConfigureEvents","_debug","_defaults","_mathRendering","_lodashEs","log","debug","sortedAnswers","answers","Object","keys","sort","reduce","result","key","GraphLinesConfigure","HTMLElement","constructor","_defineProperty2","default","pieAuthors","document","querySelectorAll","hasPlayerAsParent","Array","from","some","author","contains","_modelCopy","_model","model","_render","dispatchEvent","ModelUpdatedEvent","config","_configuration","handler","InsertImageEvent","src","done","DeleteImageEvent","_root","createDefaultModel","defaultValues","configuration","m","cloneDeep","c","resetModelAfterConfigurationIsSet","language","enabled","languageChoices","options","length","value","settings","insertSound","InsertSoundEvent","onDeleteSound","DeleteSoundEvent","el","React","createElement","Configure","onModelChanged","onConfigurationChanged","imageSupport","add","insertImage","delete","onDeleteImage","uploadSoundSupport","bind","createRoot","render","queueMicrotask","renderMath","disconnectedCallback","unmount","exports","normalizedModel","domain","defaultTool","graph","range","standardGrid","toolbarTools","toolbarToolsNoLabel","filter","tool","normalizedDefaultTool","correctAnswer","min","max","step","labelStep","height","width"],"sources":["../src/index.js"],"sourcesContent":["import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport Configure from './configure';\nimport {\n DeleteImageEvent,\n DeleteSoundEvent,\n InsertImageEvent,\n InsertSoundEvent,\n ModelUpdatedEvent,\n} from '@pie-framework/pie-configure-events';\nimport debug from 'debug';\nimport defaultValues from './defaults';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport { cloneDeep } from 'lodash-es';\n\nconst log = debug('pie-elements:graphing:configure');\n\n// this function is implemented in controller as well\nconst sortedAnswers = (answers) =>\n Object.keys(answers || {})\n .sort()\n .reduce((result, key) => {\n if (key !== 'correctAnswer') {\n result[key] = answers[key];\n }\n\n return result;\n }, {});\n\nexport default class GraphLinesConfigure extends HTMLElement {\n static createDefaultModel = (model = {}) => {\n const normalizedModel = { ...defaultValues.model, ...model };\n const {\n answers = {},\n domain = {},\n defaultTool,\n graph = {},\n range = {},\n standardGrid,\n toolbarTools,\n } = normalizedModel;\n\n // added support for models without defaultTool defined; also used in packages/graphing/controller/src/index.js\n const toolbarToolsNoLabel = (toolbarTools || []).filter((tool) => tool !== 'label');\n const normalizedDefaultTool = defaultTool || (toolbarToolsNoLabel.length && toolbarToolsNoLabel[0]) || '';\n\n return {\n ...normalizedModel,\n answers:\n (answers &&\n answers.correctAnswer && {\n correctAnswer: answers.correctAnswer,\n ...sortedAnswers(answers),\n }) ||\n answers,\n defaultTool: normalizedDefaultTool,\n range:\n (standardGrid && {\n ...range,\n min: domain.min,\n max: domain.max,\n step: domain.step,\n labelStep: domain.labelStep,\n }) ||\n range,\n graph: (standardGrid && { ...graph, height: graph.width }) || graph,\n };\n };\n\n constructor() {\n super();\n this._root = null;\n this._model = GraphLinesConfigure.createDefaultModel();\n this._configuration = defaultValues.configuration;\n }\n\n set model(m) {\n this._model = GraphLinesConfigure.createDefaultModel(m);\n this._modelCopy = cloneDeep(this._model);\n\n this._render();\n }\n\n resetModelAfterConfigurationIsSet = () => {\n // In environments that use pie-player-components, model is set before configuration.\n // This is the reason why sometimes the model gets altered non-reversible\n // (altered using default configuration instead of client configuration, because at that point client configuration was not set yet)\n // Therefore, in such environments, we will make sure to keep a modelCopy (initialised in set model) and use it to reset\n // the model in set configuration (resetModelAfterConfigurationIsSet) if set configuration is ever called\n const pieAuthors = document.querySelectorAll('pie-author');\n this.hasPlayerAsParent = Array.from(pieAuthors).some((author) => author.contains(this));\n\n if (this.hasPlayerAsParent) {\n if (this._modelCopy) {\n this._model = this._modelCopy;\n } else {\n delete this._modelCopy;\n }\n }\n };\n\n set configuration(c) {\n this._configuration = {\n ...defaultValues.configuration,\n ...c,\n };\n\n this.resetModelAfterConfigurationIsSet();\n\n // if language:enabled is true, then the corresponding default item model should include a language value;\n // if it is false, then the language field should be omitted from the item model.\n // if a default item model includes a language value (e.g., en_US) and the corresponding authoring view settings have language:settings = true,\n // then (a) language:enabled should also be true, and (b) that default language value should be represented in languageChoices[] (as a key).\n //TODO: add logic in controller and add tests\n if (c.language?.enabled) {\n if (c.languageChoices?.options?.length) {\n this._model.language = c.languageChoices.options[0].value;\n }\n } else {\n if (c.language.settings) {\n if (this._model.language) {\n this._configuration.language.enabled = true;\n }\n } else {\n delete this._model.language;\n }\n }\n\n this._render();\n }\n\n onModelChanged = (model) => {\n this._model = model;\n this._render();\n\n log('[onModelChanged]: ', this._model);\n\n this.dispatchEvent(new ModelUpdatedEvent(this._model));\n };\n\n onConfigurationChanged = (config) => {\n this._configuration = config;\n this._render();\n };\n\n insertImage = (handler) => {\n this.dispatchEvent(new InsertImageEvent(handler));\n };\n\n onDeleteImage = (src, done) => {\n this.dispatchEvent(new DeleteImageEvent(src, done));\n };\n\n insertSound(handler) {\n this.dispatchEvent(new InsertSoundEvent(handler));\n }\n\n onDeleteSound(src, done) {\n this.dispatchEvent(new DeleteSoundEvent(src, done));\n }\n\n _render() {\n if (this._model) {\n const el = React.createElement(Configure, {\n onModelChanged: this.onModelChanged,\n onConfigurationChanged: this.onConfigurationChanged,\n model: this._model,\n configuration: this._configuration,\n imageSupport: {\n add: this.insertImage,\n delete: this.onDeleteImage,\n },\n uploadSoundSupport: {\n add: this.insertSound.bind(this),\n delete: this.onDeleteSound.bind(this),\n },\n });\n\n if (!this._root) {\n this._root = createRoot(this);\n }\n this._root.render(el);\n queueMicrotask(() => {\n renderMath(this);\n });\n }\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","_configure","_pieConfigureEvents","_debug","_defaults","_mathRendering","_lodashEs","log","debug","sortedAnswers","answers","Object","keys","sort","reduce","result","key","GraphLinesConfigure","HTMLElement","constructor","_defineProperty2","default","pieAuthors","document","querySelectorAll","hasPlayerAsParent","Array","from","some","author","contains","_modelCopy","_model","model","_render","dispatchEvent","ModelUpdatedEvent","config","_configuration","handler","InsertImageEvent","src","done","DeleteImageEvent","_root","createDefaultModel","defaultValues","configuration","m","cloneDeep","c","resetModelAfterConfigurationIsSet","language","enabled","languageChoices","options","length","value","settings","insertSound","InsertSoundEvent","onDeleteSound","DeleteSoundEvent","el","React","createElement","Configure","onModelChanged","onConfigurationChanged","imageSupport","add","insertImage","delete","onDeleteImage","uploadSoundSupport","bind","createRoot","render","queueMicrotask","renderMath","connectedCallback","disconnectedCallback","unmount","exports","normalizedModel","domain","defaultTool","graph","range","standardGrid","toolbarTools","toolbarToolsNoLabel","filter","tool","normalizedDefaultTool","correctAnswer","min","max","step","labelStep","height","width"],"sources":["../src/index.js"],"sourcesContent":["import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport Configure from './configure';\nimport {\n DeleteImageEvent,\n DeleteSoundEvent,\n InsertImageEvent,\n InsertSoundEvent,\n ModelUpdatedEvent,\n} from '@pie-framework/pie-configure-events';\nimport debug from 'debug';\nimport defaultValues from './defaults';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport { cloneDeep } from 'lodash-es';\n\nconst log = debug('pie-elements:graphing:configure');\n\n// this function is implemented in controller as well\nconst sortedAnswers = (answers) =>\n Object.keys(answers || {})\n .sort()\n .reduce((result, key) => {\n if (key !== 'correctAnswer') {\n result[key] = answers[key];\n }\n\n return result;\n }, {});\n\nexport default class GraphLinesConfigure extends HTMLElement {\n static createDefaultModel = (model = {}) => {\n const normalizedModel = { ...defaultValues.model, ...model };\n const {\n answers = {},\n domain = {},\n defaultTool,\n graph = {},\n range = {},\n standardGrid,\n toolbarTools,\n } = normalizedModel;\n\n // added support for models without defaultTool defined; also used in packages/graphing/controller/src/index.js\n const toolbarToolsNoLabel = (toolbarTools || []).filter((tool) => tool !== 'label');\n const normalizedDefaultTool = defaultTool || (toolbarToolsNoLabel.length && toolbarToolsNoLabel[0]) || '';\n\n return {\n ...normalizedModel,\n answers:\n (answers &&\n answers.correctAnswer && {\n correctAnswer: answers.correctAnswer,\n ...sortedAnswers(answers),\n }) ||\n answers,\n defaultTool: normalizedDefaultTool,\n range:\n (standardGrid && {\n ...range,\n min: domain.min,\n max: domain.max,\n step: domain.step,\n labelStep: domain.labelStep,\n }) ||\n range,\n graph: (standardGrid && { ...graph, height: graph.width }) || graph,\n };\n };\n\n constructor() {\n super();\n this._root = null;\n this._model = GraphLinesConfigure.createDefaultModel();\n this._configuration = defaultValues.configuration;\n }\n\n set model(m) {\n this._model = GraphLinesConfigure.createDefaultModel(m);\n this._modelCopy = cloneDeep(this._model);\n\n this._render();\n }\n\n resetModelAfterConfigurationIsSet = () => {\n // In environments that use pie-player-components, model is set before configuration.\n // This is the reason why sometimes the model gets altered non-reversible\n // (altered using default configuration instead of client configuration, because at that point client configuration was not set yet)\n // Therefore, in such environments, we will make sure to keep a modelCopy (initialised in set model) and use it to reset\n // the model in set configuration (resetModelAfterConfigurationIsSet) if set configuration is ever called\n const pieAuthors = document.querySelectorAll('pie-author');\n this.hasPlayerAsParent = Array.from(pieAuthors).some((author) => author.contains(this));\n\n if (this.hasPlayerAsParent) {\n if (this._modelCopy) {\n this._model = this._modelCopy;\n } else {\n delete this._modelCopy;\n }\n }\n };\n\n set configuration(c) {\n this._configuration = {\n ...defaultValues.configuration,\n ...c,\n };\n\n this.resetModelAfterConfigurationIsSet();\n\n // if language:enabled is true, then the corresponding default item model should include a language value;\n // if it is false, then the language field should be omitted from the item model.\n // if a default item model includes a language value (e.g., en_US) and the corresponding authoring view settings have language:settings = true,\n // then (a) language:enabled should also be true, and (b) that default language value should be represented in languageChoices[] (as a key).\n //TODO: add logic in controller and add tests\n if (c.language?.enabled) {\n if (c.languageChoices?.options?.length) {\n this._model.language = c.languageChoices.options[0].value;\n }\n } else {\n if (c.language.settings) {\n if (this._model.language) {\n this._configuration.language.enabled = true;\n }\n } else {\n delete this._model.language;\n }\n }\n\n this._render();\n }\n\n onModelChanged = (model) => {\n this._model = model;\n this._render();\n\n log('[onModelChanged]: ', this._model);\n\n this.dispatchEvent(new ModelUpdatedEvent(this._model));\n };\n\n onConfigurationChanged = (config) => {\n this._configuration = config;\n this._render();\n };\n\n insertImage = (handler) => {\n this.dispatchEvent(new InsertImageEvent(handler));\n };\n\n onDeleteImage = (src, done) => {\n this.dispatchEvent(new DeleteImageEvent(src, done));\n };\n\n insertSound(handler) {\n this.dispatchEvent(new InsertSoundEvent(handler));\n }\n\n onDeleteSound(src, done) {\n this.dispatchEvent(new DeleteSoundEvent(src, done));\n }\n\n _render() {\n if (this._model) {\n const el = React.createElement(Configure, {\n onModelChanged: this.onModelChanged,\n onConfigurationChanged: this.onConfigurationChanged,\n model: this._model,\n configuration: this._configuration,\n imageSupport: {\n add: this.insertImage,\n delete: this.onDeleteImage,\n },\n uploadSoundSupport: {\n add: this.insertSound.bind(this),\n delete: this.onDeleteSound.bind(this),\n },\n });\n\n if (!this._root) {\n this._root = createRoot(this);\n }\n this._root.render(el);\n queueMicrotask(() => {\n renderMath(this);\n });\n }\n }\n\n connectedCallback() {\n this._render();\n }\n\n disconnectedCallback() {\n if (this._root) {\n this._root.unmount();\n this._root = null;\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -12,10 +12,10 @@
12
12
  "@mui/icons-material": "^7.3.4",
13
13
  "@mui/material": "^7.3.4",
14
14
  "@pie-framework/pie-configure-events": "^1.3.0",
15
- "@pie-lib/config-ui": "13.0.5",
16
- "@pie-lib/editable-html-tip-tap": "2.1.3",
17
- "@pie-lib/graphing": "4.0.6",
18
- "@pie-lib/math-rendering": "5.0.2",
15
+ "@pie-lib/config-ui": "13.0.15",
16
+ "@pie-lib/editable-html-tip-tap": "2.1.13",
17
+ "@pie-lib/graphing": "4.0.16",
18
+ "@pie-lib/math-rendering": "5.1.0",
19
19
  "classnames": "^2.2.6",
20
20
  "debug": "^4.1.1",
21
21
  "lodash-es": "^4.17.23",
@@ -406,12 +406,12 @@ const equalExponential = (p1, p2) => {
406
406
  ...rootP2
407
407
  };
408
408
  const {
409
- a1,
410
- b1
409
+ a: a1,
410
+ b: b1
411
411
  } = (0, _graphingUtils.pointsToABForExponential)(rootP1, p1edge);
412
412
  const {
413
- a2,
414
- b2
413
+ a: a2,
414
+ b: b2
415
415
  } = (0, _graphingUtils.pointsToABForExponential)(rootP2, p2edge);
416
416
 
417
417
  // if both a and b value are equal
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":["_lodashEs","require","_graphingUtils","equalPoint","A","B","isEqual","x","y","exports","equalPointWithLabel","equalLabel","label","equalSegment","segment1","segment2","from","to","equalVector","vector1","vector2","sortedAnswers","answers","Object","keys","sort","reduce","result","key","returnLineEquationCoefficients","line","xA","yA","xB","yB","a","b","c","getSignificantDecimals","number","Math","round","equalLine","line1","line2","a1","b1","c1","a2","b2","c2","proportions","push","uniq","length","equalRay","ray1","ray2","mRay1","mRay2","angleRay1","atan2","PI","angleRay2","constructSegmentsFromPoints","points","map","point","index","removeDuplicateSegments","segments","uniqWith","s1","s2","removeInvalidSegments","filter","segment","equalPolygon","poly1","poly2","points1","points2","segments1","segments2","segments1NoDuplicates","segments2NoDuplicates","differentSegments1","differenceWith","differentSegments2","equalCircle","root","edge","equalRootAndEdge","rC1","sqrt","rC2","equalSine","sine1","sine2","getPoints","amplitude","freq","getAmplitudeAndFreq","tY","abs","tXRoot","tX","edgeAboveZeroX","edgeAboveZeroY","min","max","studentAnswerBpY","correctAnswerBpY","amplitude1","freq1","min1","max1","edgeAboveZeroX1","edgeAboveZeroY1","amplitude2","freq2","min2","max2","edgeAboveZeroX2","edgeAboveZeroY2","equalParabola","p1","p2","edgeP1","edgeP2","rootP1","rootP2","p1edge","p2edge","p1mirrorEdge","p2mirrorEdge","pointsToABC","equalAbsolute","p1a1","pointsToAForAbsolute","p2a2","equalExponential","pointsToABForExponential","equalMarks","circle","sessAnswer","mark","parabola","absolute","exponential","polygon","poly","ray","sine","vector","completePoint","Number","isFinite","completeFromTo","item","completeMark","completeRootEdge","completePoints"],"sources":["../src/utils.js"],"sourcesContent":["import { differenceWith, isEqual, uniq, uniqWith } from 'lodash-es';\nimport {\n getAmplitudeAndFreq,\n pointsToABC,\n pointsToAForAbsolute,\n pointsToABForExponential,\n} from '@pie-lib/graphing-utils';\n\nexport const equalPoint = (A, B) => {\n A = { ...A };\n B = { ...B };\n\n return isEqual(A.x, B.x) && isEqual(A.y, B.y);\n};\n\nexport const equalPointWithLabel = (A, B) => {\n // x1 = x2 & y1 = y2\n // A point is only correct if both its position AND its label match.\n // Labels are not scored independently; a point in the correct position\n // with the wrong label is considered incorrect as a whole.\n let equalLabel = true;\n\n A = { ...A };\n B = { ...B };\n\n if (A.label || B.label) {\n equalLabel = isEqual(A.label, B.label);\n }\n\n return isEqual(A.x, B.x) && isEqual(A.y, B.y) && equalLabel;\n};\n\nexport const equalSegment = (segment1, segment2) => {\n // A.from = B.from, A.to = B.to OR A.from = B.to, A.to = B.from\n // x1 = x3 & y1 = y3 & x2 = x4 & y2 = y4\n return (\n (isEqual(segment1.from, segment2.from) && isEqual(segment1.to, segment2.to)) ||\n (isEqual(segment1.to, segment2.from) && isEqual(segment1.from, segment2.to))\n );\n};\n\nexport const equalVector = (vector1, vector2) => {\n // A.from = B.from, A.to = B.to;\n // x1 = x3 & y1 = y3 & x2 = x4 & y2 = y4\n return isEqual(vector1.from, vector2.from) && isEqual(vector1.to, vector2.to);\n};\n\n// this function is implemented in configure as well\nexport const sortedAnswers = (answers) =>\n Object.keys(answers || {})\n .sort()\n .reduce((result, key) => {\n if (key !== 'correctAnswer') {\n result[key] = answers[key];\n }\n\n return result;\n }, {});\n\nconst returnLineEquationCoefficients = (line) => {\n line = { ...line, to: { ...line.to }, from: { ...line.from } };\n\n const xA = line.from.x;\n const yA = line.from.y;\n const xB = line.to.x;\n const yB = line.to.y;\n\n return {\n a: yB - yA,\n b: xA - xB,\n c: xB * yA - xA * yB,\n };\n};\n\nconst getSignificantDecimals = (number) => Math.round(number * 10000) / 10000;\n\nexport const equalLine = (line1, line2) => {\n // line equation: ax + by + c = 0\n // 2 lines are equal if a1/a2 = b1/b2 = c1/c2, where a, b, c are the coefficients in line equation\n\n // line equation knowing 2 points: (y - yA) / (yB - yA) = (x - xA) / (xB - xA)\n // extending this equation, we get: x * (yB - yA) + y * (xA - xB) + (xB * yA - xA * yB) = 0\n // where a = yB - yA; b = xA - xB; c = xB * yA - xA * yB\n\n const { a: a1, b: b1, c: c1 } = returnLineEquationCoefficients(line1);\n const { a: a2, b: b2, c: c2 } = returnLineEquationCoefficients(line2);\n\n const proportions = [];\n\n if (a2 !== 0) {\n proportions.push(getSignificantDecimals(a1 / a2));\n } else if (a1 !== a2) {\n return false;\n }\n\n if (b2 !== 0) {\n proportions.push(getSignificantDecimals(b1 / b2));\n } else if (b1 !== b2) {\n return false;\n }\n\n if (c2 !== 0) {\n proportions.push(getSignificantDecimals(c1 / c2));\n } else if (c1 !== c2) {\n return false;\n }\n\n return uniq(proportions).length === 1;\n\n // (y2 - y1)/(x2 - x1) = (y4 - y3)/(x4 - x3);\n // return ((Math.abs((line1.to.y - line1.from.y) / (line1.to.x - line1.from.x))) === (Math.abs((line2.to.y - line2.from.y) / (line2.to.x - line2.from.x))));\n};\n\nexport const equalRay = (ray1, ray2) => {\n ray1 = { ...ray1, to: { ...ray1.to }, from: { ...ray1.from } };\n ray2 = { ...ray2, to: { ...ray2.to }, from: { ...ray2.from } };\n\n // slope: m = (y2-y1)/(x2-x1)\n // slope & x1 = x3 & y1 = y3 & angle between (x1, y1) (x2, y2) is same as angle between (x3, y3) (x4, y4)\n const mRay1 = (ray1.to.y - ray1.from.y) / (ray1.to.x - ray1.from.x);\n const mRay2 = (ray2.to.y - ray2.from.y) / (ray2.to.x - ray2.from.x);\n const angleRay1 = (Math.atan2(ray1.to.y - ray1.from.y, ray1.to.x - ray1.from.x) * 180) / Math.PI;\n const angleRay2 = (Math.atan2(ray2.to.y - ray2.from.y, ray2.to.x - ray2.from.x) * 180) / Math.PI;\n\n return mRay1 === mRay2 && ray1.from.x === ray2.from.x && ray1.from.y === ray2.from.y && angleRay1 === angleRay2;\n};\n\nexport const constructSegmentsFromPoints = (points) => {\n // takes the list of points that represent a polygon and transforms it into a list of segments; eg.:\n // points: A, B, C, D => segments: AB, BC, CD, DA\n return (points || []).map((point, index) => ({ from: point, to: points[(index + 1) % points.length] }));\n};\n\nexport const removeDuplicateSegments = (segments) => {\n segments = segments || [];\n // removes segments that are duplicates; eg. These segments are the same, so one will be removed:\n // segment1: from: { x: 1, y: 1 }, to: { x: 2, y: 1 }\n // segment2: from: { x: 2, y: 1 }, to: { x: 1, y: 1 }\n return uniqWith(segments, (s1, s2) => equalSegment(s1, s2));\n};\n\nexport const removeInvalidSegments = (segments) => {\n segments = segments || [];\n // removes segments that start in a point and end in the same point (eg.: from: { x: 1, y: 1 }, to: { x: 1, y: 1 })\n\n return segments.filter((segment) => !isEqual(segment.from, segment.to));\n};\n\nexport const equalPolygon = (poly1, poly2) => {\n const { points: points1 } = poly1;\n const { points: points2 } = poly2;\n\n // generate segments\n const segments1 = constructSegmentsFromPoints(points1);\n const segments2 = constructSegmentsFromPoints(points2);\n\n const segments1NoDuplicates = removeDuplicateSegments(removeInvalidSegments(segments1));\n const segments2NoDuplicates = removeDuplicateSegments(removeInvalidSegments(segments2));\n\n const differentSegments1 = differenceWith(segments1NoDuplicates, segments2NoDuplicates, equalSegment);\n const differentSegments2 = differenceWith(segments2NoDuplicates, segments1NoDuplicates, equalSegment);\n\n return (!differentSegments1 || !differentSegments1.length) && (!differentSegments2 || !differentSegments2.length);\n};\n\nexport const equalCircle = (c1, c2) => {\n c1 = { ...c1, root: { ...c1.root }, edge: { ...c1.edge } };\n c2 = { ...c2, root: { ...c2.root }, edge: { ...c2.edge } };\n const equalRootAndEdge = isEqual(c2.edge, c1.edge) && isEqual(c2.root, c1.root);\n\n // if both edge and root are the same, it means the shapes are exactly the same\n if (equalRootAndEdge) return true;\n\n const rC1 = Math.sqrt((c1.edge.x - c1.root.x) ** 2 + (c1.edge.y - c1.root.y) ** 2);\n const rC2 = Math.sqrt((c2.edge.x - c2.root.x) ** 2 + (c2.edge.y - c2.root.y) ** 2);\n\n // if both root and radius are the same, it means the shapes are equal\n return isEqual(c2.root, c1.root) && isEqual(rC1, rC2);\n};\n\nexport const equalSine = (sine1, sine2) => {\n const getPoints = ({ root, edge }) => {\n root = { ...root };\n edge = { ...edge };\n\n const { amplitude, freq } = getAmplitudeAndFreq(root, edge);\n // the height of the sine wave\n const tY = Math.abs(root.y - edge.y) * 2;\n // the distance on x axis between edge and root\n const tXRoot = Math.abs(root.x - edge.x);\n // the distance on x axis between 2 edges for sine wave (min & max)\n const tX = tXRoot * 2;\n // the first edge placed east side of root\n let edgeAboveZeroX = edge.x;\n let edgeAboveZeroY = edge.y;\n\n // if edge less then 0, find out the appropriate edge placed east side of zero (0)\n while (edgeAboveZeroX < 0 && tX !== 0) {\n edgeAboveZeroX = edgeAboveZeroX + tX;\n edgeAboveZeroY = edgeAboveZeroY < root.y ? edgeAboveZeroY + tY : edgeAboveZeroY - tY;\n }\n\n // if edge more then 0, find out the appropriate edge placed east side of zero (0)\n while (edgeAboveZeroX - tX > 0 && tX !== 0) {\n edgeAboveZeroX = edgeAboveZeroX - tX;\n edgeAboveZeroY = edgeAboveZeroY < root.y ? edgeAboveZeroY + tY : edgeAboveZeroY - tY;\n }\n\n return {\n amplitude: getSignificantDecimals(amplitude),\n freq: getSignificantDecimals(freq),\n min: getSignificantDecimals(edge.y < root.y ? edge.y : edge.y - tY),\n max: getSignificantDecimals(edge.y < root.y ? edge.y + tY : edge.y),\n edgeAboveZeroX: getSignificantDecimals(edgeAboveZeroX),\n edgeAboveZeroY: getSignificantDecimals(edgeAboveZeroY),\n };\n };\n\n const studentAnswerBpY = getPoints(sine1);\n const correctAnswerBpY = getPoints(sine2);\n\n const {\n amplitude: amplitude1,\n freq: freq1,\n min: min1,\n max: max1,\n edgeAboveZeroX: edgeAboveZeroX1,\n edgeAboveZeroY: edgeAboveZeroY1,\n } = studentAnswerBpY;\n const {\n amplitude: amplitude2,\n freq: freq2,\n min: min2,\n max: max2,\n edgeAboveZeroX: edgeAboveZeroX2,\n edgeAboveZeroY: edgeAboveZeroY2,\n } = correctAnswerBpY;\n\n return (\n Math.abs(amplitude1) === Math.abs(amplitude2) &&\n Math.abs(freq1) === Math.abs(freq2) &&\n min1 === min2 &&\n max1 === max2 &&\n edgeAboveZeroX1 === edgeAboveZeroX2 &&\n edgeAboveZeroY1 === edgeAboveZeroY2\n );\n // rootDiff1 === rootDiff2);\n};\n\nexport const equalParabola = (p1, p2) => {\n const { edge: edgeP1 } = p1;\n const { edge: edgeP2 } = p2;\n let { root: rootP1 } = p1;\n let { root: rootP2 } = p2;\n\n rootP1 = { ...rootP1 };\n rootP2 = { ...rootP2 };\n\n const p1edge = edgeP1 || { ...rootP1 };\n const p2edge = edgeP2 || { ...rootP2 };\n\n const p1mirrorEdge = { x: rootP1.x - (p1edge.x - rootP1.x), y: p1edge.y };\n const p2mirrorEdge = { x: rootP2.x - (p2edge.x - rootP2.x), y: p2edge.y };\n\n if (!edgeP1 || !edgeP2) return false;\n\n const { a: a1, b: b1, c: c1 } = pointsToABC(rootP1, edgeP1, p1mirrorEdge);\n const { a: a2, b: b2, c: c2 } = pointsToABC(rootP2, edgeP2, p2mirrorEdge);\n\n // sometimes numbers have this form: 1.00000000002 because of calculations, we have to round them\n const round = (number) => Math.round(number * 10000) / 10000;\n\n return round(a1) === round(a2) && round(b1) === round(b2) && round(c1) === round(c2);\n};\n\n/*\n * Function to check if given two points for absolute function\n * for correct answer and student answer are equal or not.\n * @param p1 - student answer\n * @param p2 - correct answer\n * */\nexport const equalAbsolute = (p1, p2) => {\n const { edge: edgeP1 } = p1;\n const { edge: edgeP2 } = p2;\n let { root: rootP1 } = p1;\n let { root: rootP2 } = p2;\n\n rootP1 = { ...rootP1 };\n rootP2 = { ...rootP2 };\n\n const p1edge = edgeP1 || { ...rootP1 };\n const p2edge = edgeP2 || { ...rootP2 };\n\n const p1a1 = pointsToAForAbsolute(rootP1, p1edge);\n const p2a2 = pointsToAForAbsolute(rootP2, p2edge);\n\n // if both root and a value are equal\n return isEqual(rootP2, rootP1) && isEqual(p2a2, p1a1);\n};\n\n/*\n * Function to check if given two points for exponential function\n * for correct answer and student answer are equal or not.\n * @param p1 - student answer\n * @param p2 - correct answer\n * */\nexport const equalExponential = (p1, p2) => {\n const { edge: edgeP1 } = p1;\n const { edge: edgeP2 } = p2;\n let { root: rootP1 } = p1;\n let { root: rootP2 } = p2;\n\n rootP1 = { ...rootP1 };\n rootP2 = { ...rootP2 };\n\n const p1edge = edgeP1 || { ...rootP1 };\n const p2edge = edgeP2 || { ...rootP2 };\n\n const { a1, b1 } = pointsToABForExponential(rootP1, p1edge);\n const { a2, b2 } = pointsToABForExponential(rootP2, p2edge);\n\n // if both a and b value are equal\n return isEqual(a2, a1) && isEqual(b2, b1);\n};\n\nexport const equalMarks = {\n circle: (sessAnswer, mark) => equalCircle(sessAnswer, mark),\n line: (sessAnswer, mark) => equalLine(sessAnswer, mark),\n parabola: (sessAnswer, mark) => equalParabola(sessAnswer, mark),\n absolute: (sessAnswer, mark) => equalAbsolute(sessAnswer, mark),\n exponential: (sessAnswer, mark) => equalExponential(sessAnswer, mark),\n point: (sessAnswer, mark) => equalPoint(sessAnswer, mark),\n polygon: (sessAnswer, poly) => equalPolygon(sessAnswer, poly),\n ray: (sessAnswer, mark) => equalRay(sessAnswer, mark),\n segment: (sessAnswer, mark) => equalSegment(sessAnswer, mark),\n sine: (sessAnswer, mark) => equalSine(sessAnswer, mark),\n vector: (sessAnswer, mark) => equalVector(sessAnswer, mark),\n};\n\nconst completePoint = (point) => point && Number.isFinite(point.x) && Number.isFinite(point.y);\nconst completeFromTo = (item) => item && completeMark.point(item.from) && completeMark.point(item.to);\nconst completeRootEdge = (item) => item && completeMark.point(item.edge) && completeMark.point(item.root);\nconst completePoints = (item) =>\n item &&\n item.points &&\n item.points.length &&\n (item.points.filter((point) => completePoint(point)) || []).length === item.points.length;\n\nconst completeMark = {\n point: completePoint,\n line: completeFromTo,\n ray: completeFromTo,\n segment: completeFromTo,\n vector: completeFromTo,\n circle: completeRootEdge,\n parabola: completeRootEdge,\n absolute: completeRootEdge,\n exponential: completeRootEdge,\n sine: completeRootEdge,\n polygon: completePoints,\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"utils.js","names":["_lodashEs","require","_graphingUtils","equalPoint","A","B","isEqual","x","y","exports","equalPointWithLabel","equalLabel","label","equalSegment","segment1","segment2","from","to","equalVector","vector1","vector2","sortedAnswers","answers","Object","keys","sort","reduce","result","key","returnLineEquationCoefficients","line","xA","yA","xB","yB","a","b","c","getSignificantDecimals","number","Math","round","equalLine","line1","line2","a1","b1","c1","a2","b2","c2","proportions","push","uniq","length","equalRay","ray1","ray2","mRay1","mRay2","angleRay1","atan2","PI","angleRay2","constructSegmentsFromPoints","points","map","point","index","removeDuplicateSegments","segments","uniqWith","s1","s2","removeInvalidSegments","filter","segment","equalPolygon","poly1","poly2","points1","points2","segments1","segments2","segments1NoDuplicates","segments2NoDuplicates","differentSegments1","differenceWith","differentSegments2","equalCircle","root","edge","equalRootAndEdge","rC1","sqrt","rC2","equalSine","sine1","sine2","getPoints","amplitude","freq","getAmplitudeAndFreq","tY","abs","tXRoot","tX","edgeAboveZeroX","edgeAboveZeroY","min","max","studentAnswerBpY","correctAnswerBpY","amplitude1","freq1","min1","max1","edgeAboveZeroX1","edgeAboveZeroY1","amplitude2","freq2","min2","max2","edgeAboveZeroX2","edgeAboveZeroY2","equalParabola","p1","p2","edgeP1","edgeP2","rootP1","rootP2","p1edge","p2edge","p1mirrorEdge","p2mirrorEdge","pointsToABC","equalAbsolute","p1a1","pointsToAForAbsolute","p2a2","equalExponential","pointsToABForExponential","equalMarks","circle","sessAnswer","mark","parabola","absolute","exponential","polygon","poly","ray","sine","vector","completePoint","Number","isFinite","completeFromTo","item","completeMark","completeRootEdge","completePoints"],"sources":["../src/utils.js"],"sourcesContent":["import { differenceWith, isEqual, uniq, uniqWith } from 'lodash-es';\nimport {\n getAmplitudeAndFreq,\n pointsToABC,\n pointsToAForAbsolute,\n pointsToABForExponential,\n} from '@pie-lib/graphing-utils';\n\nexport const equalPoint = (A, B) => {\n A = { ...A };\n B = { ...B };\n\n return isEqual(A.x, B.x) && isEqual(A.y, B.y);\n};\n\nexport const equalPointWithLabel = (A, B) => {\n // x1 = x2 & y1 = y2\n // A point is only correct if both its position AND its label match.\n // Labels are not scored independently; a point in the correct position\n // with the wrong label is considered incorrect as a whole.\n let equalLabel = true;\n\n A = { ...A };\n B = { ...B };\n\n if (A.label || B.label) {\n equalLabel = isEqual(A.label, B.label);\n }\n\n return isEqual(A.x, B.x) && isEqual(A.y, B.y) && equalLabel;\n};\n\nexport const equalSegment = (segment1, segment2) => {\n // A.from = B.from, A.to = B.to OR A.from = B.to, A.to = B.from\n // x1 = x3 & y1 = y3 & x2 = x4 & y2 = y4\n return (\n (isEqual(segment1.from, segment2.from) && isEqual(segment1.to, segment2.to)) ||\n (isEqual(segment1.to, segment2.from) && isEqual(segment1.from, segment2.to))\n );\n};\n\nexport const equalVector = (vector1, vector2) => {\n // A.from = B.from, A.to = B.to;\n // x1 = x3 & y1 = y3 & x2 = x4 & y2 = y4\n return isEqual(vector1.from, vector2.from) && isEqual(vector1.to, vector2.to);\n};\n\n// this function is implemented in configure as well\nexport const sortedAnswers = (answers) =>\n Object.keys(answers || {})\n .sort()\n .reduce((result, key) => {\n if (key !== 'correctAnswer') {\n result[key] = answers[key];\n }\n\n return result;\n }, {});\n\nconst returnLineEquationCoefficients = (line) => {\n line = { ...line, to: { ...line.to }, from: { ...line.from } };\n\n const xA = line.from.x;\n const yA = line.from.y;\n const xB = line.to.x;\n const yB = line.to.y;\n\n return {\n a: yB - yA,\n b: xA - xB,\n c: xB * yA - xA * yB,\n };\n};\n\nconst getSignificantDecimals = (number) => Math.round(number * 10000) / 10000;\n\nexport const equalLine = (line1, line2) => {\n // line equation: ax + by + c = 0\n // 2 lines are equal if a1/a2 = b1/b2 = c1/c2, where a, b, c are the coefficients in line equation\n\n // line equation knowing 2 points: (y - yA) / (yB - yA) = (x - xA) / (xB - xA)\n // extending this equation, we get: x * (yB - yA) + y * (xA - xB) + (xB * yA - xA * yB) = 0\n // where a = yB - yA; b = xA - xB; c = xB * yA - xA * yB\n\n const { a: a1, b: b1, c: c1 } = returnLineEquationCoefficients(line1);\n const { a: a2, b: b2, c: c2 } = returnLineEquationCoefficients(line2);\n\n const proportions = [];\n\n if (a2 !== 0) {\n proportions.push(getSignificantDecimals(a1 / a2));\n } else if (a1 !== a2) {\n return false;\n }\n\n if (b2 !== 0) {\n proportions.push(getSignificantDecimals(b1 / b2));\n } else if (b1 !== b2) {\n return false;\n }\n\n if (c2 !== 0) {\n proportions.push(getSignificantDecimals(c1 / c2));\n } else if (c1 !== c2) {\n return false;\n }\n\n return uniq(proportions).length === 1;\n\n // (y2 - y1)/(x2 - x1) = (y4 - y3)/(x4 - x3);\n // return ((Math.abs((line1.to.y - line1.from.y) / (line1.to.x - line1.from.x))) === (Math.abs((line2.to.y - line2.from.y) / (line2.to.x - line2.from.x))));\n};\n\nexport const equalRay = (ray1, ray2) => {\n ray1 = { ...ray1, to: { ...ray1.to }, from: { ...ray1.from } };\n ray2 = { ...ray2, to: { ...ray2.to }, from: { ...ray2.from } };\n\n // slope: m = (y2-y1)/(x2-x1)\n // slope & x1 = x3 & y1 = y3 & angle between (x1, y1) (x2, y2) is same as angle between (x3, y3) (x4, y4)\n const mRay1 = (ray1.to.y - ray1.from.y) / (ray1.to.x - ray1.from.x);\n const mRay2 = (ray2.to.y - ray2.from.y) / (ray2.to.x - ray2.from.x);\n const angleRay1 = (Math.atan2(ray1.to.y - ray1.from.y, ray1.to.x - ray1.from.x) * 180) / Math.PI;\n const angleRay2 = (Math.atan2(ray2.to.y - ray2.from.y, ray2.to.x - ray2.from.x) * 180) / Math.PI;\n\n return mRay1 === mRay2 && ray1.from.x === ray2.from.x && ray1.from.y === ray2.from.y && angleRay1 === angleRay2;\n};\n\nexport const constructSegmentsFromPoints = (points) => {\n // takes the list of points that represent a polygon and transforms it into a list of segments; eg.:\n // points: A, B, C, D => segments: AB, BC, CD, DA\n return (points || []).map((point, index) => ({ from: point, to: points[(index + 1) % points.length] }));\n};\n\nexport const removeDuplicateSegments = (segments) => {\n segments = segments || [];\n // removes segments that are duplicates; eg. These segments are the same, so one will be removed:\n // segment1: from: { x: 1, y: 1 }, to: { x: 2, y: 1 }\n // segment2: from: { x: 2, y: 1 }, to: { x: 1, y: 1 }\n return uniqWith(segments, (s1, s2) => equalSegment(s1, s2));\n};\n\nexport const removeInvalidSegments = (segments) => {\n segments = segments || [];\n // removes segments that start in a point and end in the same point (eg.: from: { x: 1, y: 1 }, to: { x: 1, y: 1 })\n\n return segments.filter((segment) => !isEqual(segment.from, segment.to));\n};\n\nexport const equalPolygon = (poly1, poly2) => {\n const { points: points1 } = poly1;\n const { points: points2 } = poly2;\n\n // generate segments\n const segments1 = constructSegmentsFromPoints(points1);\n const segments2 = constructSegmentsFromPoints(points2);\n\n const segments1NoDuplicates = removeDuplicateSegments(removeInvalidSegments(segments1));\n const segments2NoDuplicates = removeDuplicateSegments(removeInvalidSegments(segments2));\n\n const differentSegments1 = differenceWith(segments1NoDuplicates, segments2NoDuplicates, equalSegment);\n const differentSegments2 = differenceWith(segments2NoDuplicates, segments1NoDuplicates, equalSegment);\n\n return (!differentSegments1 || !differentSegments1.length) && (!differentSegments2 || !differentSegments2.length);\n};\n\nexport const equalCircle = (c1, c2) => {\n c1 = { ...c1, root: { ...c1.root }, edge: { ...c1.edge } };\n c2 = { ...c2, root: { ...c2.root }, edge: { ...c2.edge } };\n const equalRootAndEdge = isEqual(c2.edge, c1.edge) && isEqual(c2.root, c1.root);\n\n // if both edge and root are the same, it means the shapes are exactly the same\n if (equalRootAndEdge) return true;\n\n const rC1 = Math.sqrt((c1.edge.x - c1.root.x) ** 2 + (c1.edge.y - c1.root.y) ** 2);\n const rC2 = Math.sqrt((c2.edge.x - c2.root.x) ** 2 + (c2.edge.y - c2.root.y) ** 2);\n\n // if both root and radius are the same, it means the shapes are equal\n return isEqual(c2.root, c1.root) && isEqual(rC1, rC2);\n};\n\nexport const equalSine = (sine1, sine2) => {\n const getPoints = ({ root, edge }) => {\n root = { ...root };\n edge = { ...edge };\n\n const { amplitude, freq } = getAmplitudeAndFreq(root, edge);\n // the height of the sine wave\n const tY = Math.abs(root.y - edge.y) * 2;\n // the distance on x axis between edge and root\n const tXRoot = Math.abs(root.x - edge.x);\n // the distance on x axis between 2 edges for sine wave (min & max)\n const tX = tXRoot * 2;\n // the first edge placed east side of root\n let edgeAboveZeroX = edge.x;\n let edgeAboveZeroY = edge.y;\n\n // if edge less then 0, find out the appropriate edge placed east side of zero (0)\n while (edgeAboveZeroX < 0 && tX !== 0) {\n edgeAboveZeroX = edgeAboveZeroX + tX;\n edgeAboveZeroY = edgeAboveZeroY < root.y ? edgeAboveZeroY + tY : edgeAboveZeroY - tY;\n }\n\n // if edge more then 0, find out the appropriate edge placed east side of zero (0)\n while (edgeAboveZeroX - tX > 0 && tX !== 0) {\n edgeAboveZeroX = edgeAboveZeroX - tX;\n edgeAboveZeroY = edgeAboveZeroY < root.y ? edgeAboveZeroY + tY : edgeAboveZeroY - tY;\n }\n\n return {\n amplitude: getSignificantDecimals(amplitude),\n freq: getSignificantDecimals(freq),\n min: getSignificantDecimals(edge.y < root.y ? edge.y : edge.y - tY),\n max: getSignificantDecimals(edge.y < root.y ? edge.y + tY : edge.y),\n edgeAboveZeroX: getSignificantDecimals(edgeAboveZeroX),\n edgeAboveZeroY: getSignificantDecimals(edgeAboveZeroY),\n };\n };\n\n const studentAnswerBpY = getPoints(sine1);\n const correctAnswerBpY = getPoints(sine2);\n\n const {\n amplitude: amplitude1,\n freq: freq1,\n min: min1,\n max: max1,\n edgeAboveZeroX: edgeAboveZeroX1,\n edgeAboveZeroY: edgeAboveZeroY1,\n } = studentAnswerBpY;\n const {\n amplitude: amplitude2,\n freq: freq2,\n min: min2,\n max: max2,\n edgeAboveZeroX: edgeAboveZeroX2,\n edgeAboveZeroY: edgeAboveZeroY2,\n } = correctAnswerBpY;\n\n return (\n Math.abs(amplitude1) === Math.abs(amplitude2) &&\n Math.abs(freq1) === Math.abs(freq2) &&\n min1 === min2 &&\n max1 === max2 &&\n edgeAboveZeroX1 === edgeAboveZeroX2 &&\n edgeAboveZeroY1 === edgeAboveZeroY2\n );\n // rootDiff1 === rootDiff2);\n};\n\nexport const equalParabola = (p1, p2) => {\n const { edge: edgeP1 } = p1;\n const { edge: edgeP2 } = p2;\n let { root: rootP1 } = p1;\n let { root: rootP2 } = p2;\n\n rootP1 = { ...rootP1 };\n rootP2 = { ...rootP2 };\n\n const p1edge = edgeP1 || { ...rootP1 };\n const p2edge = edgeP2 || { ...rootP2 };\n\n const p1mirrorEdge = { x: rootP1.x - (p1edge.x - rootP1.x), y: p1edge.y };\n const p2mirrorEdge = { x: rootP2.x - (p2edge.x - rootP2.x), y: p2edge.y };\n\n if (!edgeP1 || !edgeP2) return false;\n\n const { a: a1, b: b1, c: c1 } = pointsToABC(rootP1, edgeP1, p1mirrorEdge);\n const { a: a2, b: b2, c: c2 } = pointsToABC(rootP2, edgeP2, p2mirrorEdge);\n\n // sometimes numbers have this form: 1.00000000002 because of calculations, we have to round them\n const round = (number) => Math.round(number * 10000) / 10000;\n\n return round(a1) === round(a2) && round(b1) === round(b2) && round(c1) === round(c2);\n};\n\n/*\n * Function to check if given two points for absolute function\n * for correct answer and student answer are equal or not.\n * @param p1 - student answer\n * @param p2 - correct answer\n * */\nexport const equalAbsolute = (p1, p2) => {\n const { edge: edgeP1 } = p1;\n const { edge: edgeP2 } = p2;\n let { root: rootP1 } = p1;\n let { root: rootP2 } = p2;\n\n rootP1 = { ...rootP1 };\n rootP2 = { ...rootP2 };\n\n const p1edge = edgeP1 || { ...rootP1 };\n const p2edge = edgeP2 || { ...rootP2 };\n\n const p1a1 = pointsToAForAbsolute(rootP1, p1edge);\n const p2a2 = pointsToAForAbsolute(rootP2, p2edge);\n\n // if both root and a value are equal\n return isEqual(rootP2, rootP1) && isEqual(p2a2, p1a1);\n};\n\n/*\n * Function to check if given two points for exponential function\n * for correct answer and student answer are equal or not.\n * @param p1 - student answer\n * @param p2 - correct answer\n * */\nexport const equalExponential = (p1, p2) => {\n const { edge: edgeP1 } = p1;\n const { edge: edgeP2 } = p2;\n let { root: rootP1 } = p1;\n let { root: rootP2 } = p2;\n\n rootP1 = { ...rootP1 };\n rootP2 = { ...rootP2 };\n\n const p1edge = edgeP1 || { ...rootP1 };\n const p2edge = edgeP2 || { ...rootP2 };\n\n const { a: a1, b: b1 } = pointsToABForExponential(rootP1, p1edge);\n const { a: a2, b: b2 } = pointsToABForExponential(rootP2, p2edge);\n\n // if both a and b value are equal\n return isEqual(a2, a1) && isEqual(b2, b1);\n};\n\nexport const equalMarks = {\n circle: (sessAnswer, mark) => equalCircle(sessAnswer, mark),\n line: (sessAnswer, mark) => equalLine(sessAnswer, mark),\n parabola: (sessAnswer, mark) => equalParabola(sessAnswer, mark),\n absolute: (sessAnswer, mark) => equalAbsolute(sessAnswer, mark),\n exponential: (sessAnswer, mark) => equalExponential(sessAnswer, mark),\n point: (sessAnswer, mark) => equalPoint(sessAnswer, mark),\n polygon: (sessAnswer, poly) => equalPolygon(sessAnswer, poly),\n ray: (sessAnswer, mark) => equalRay(sessAnswer, mark),\n segment: (sessAnswer, mark) => equalSegment(sessAnswer, mark),\n sine: (sessAnswer, mark) => equalSine(sessAnswer, mark),\n vector: (sessAnswer, mark) => equalVector(sessAnswer, mark),\n};\n\nconst completePoint = (point) => point && Number.isFinite(point.x) && Number.isFinite(point.y);\nconst completeFromTo = (item) => item && completeMark.point(item.from) && completeMark.point(item.to);\nconst completeRootEdge = (item) => item && completeMark.point(item.edge) && completeMark.point(item.root);\nconst completePoints = (item) =>\n item &&\n item.points &&\n item.points.length &&\n (item.points.filter((point) => completePoint(point)) || []).length === item.points.length;\n\nconst completeMark = {\n point: completePoint,\n line: completeFromTo,\n ray: completeFromTo,\n segment: completeFromTo,\n vector: completeFromTo,\n circle: completeRootEdge,\n parabola: completeRootEdge,\n absolute: completeRootEdge,\n exponential: completeRootEdge,\n sine: completeRootEdge,\n polygon: completePoints,\n};\n"],"mappings":"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","ignoreList":[]}
@@ -9,7 +9,7 @@
9
9
  "test": "./node_modules/.bin/jest"
10
10
  },
11
11
  "dependencies": {
12
- "@pie-lib/controller-utils": "2.0.2",
12
+ "@pie-lib/controller-utils": "2.0.3",
13
13
  "@pie-lib/graphing-utils": "3.0.2",
14
14
  "debug": "^4.1.1"
15
15
  },
@@ -176,7 +176,12 @@ const oldModel = {
176
176
  height: 480,
177
177
  },
178
178
  coordinatesOnHover: false,
179
- labels: { top: 'top', left: 'left', bottom: 'bottom', right: 'right' },
179
+ labels: {
180
+ "top": "<div>Math in the top label: <span data-latex=\"\" data-raw=\"x^2\">\\(x^2\\)</span>​</div>",
181
+ "right": "<div><span data-latex=\"\" data-raw=\"\\frac{\\pi}{2}\">\\(\\frac{\\pi}{2}\\)</span>​</div>",
182
+ "left": "<div><span data-latex=\"\" data-raw=\"3\\pi\">\\(3\\pi\\)</span>​</div>",
183
+ "bottom": "<div><span data-latex=\"\" data-raw=\"3x^2\">\\(3x^2\\)</span>​</div>"
184
+ },
180
185
  padding: true,
181
186
  prompt: 'Here goes item stem !!!!!!',
182
187
  promptEnabled: true,
@@ -189,7 +194,7 @@ const oldModel = {
189
194
  axisLabel: 'y',
190
195
  },
191
196
  rationale: 'Rationale goes here',
192
- title: 'Graph title',
197
+ title: "<div>Math in the title: <span data-latex=\"\" data-raw=\"\\frac{x}{y}\">\\(\\frac{x}{y}\\)</span>​</div>",
193
198
  rubricEnabled: false,
194
199
  };
195
200
 
package/lib/index.js CHANGED
@@ -20,6 +20,29 @@ var _main = _interopRequireDefault(require("./main"));
20
20
  class Graphing extends HTMLElement {
21
21
  constructor() {
22
22
  super();
23
+ // The title and axis labels are injected synchronously via dangerouslySetInnerHTML,
24
+ // but createRoot().render() commits asynchronously, so a queueMicrotask(renderMath)
25
+ // would run before the LaTeX spans are in the DOM and leave raw LaTeX on first render.
26
+ // Observing the DOM and typesetting after each commit keeps math in sync regardless of timing.
27
+ (0, _defineProperty2.default)(this, "_scheduleMathRender", () => {
28
+ if (this._mathRenderPending) return;
29
+ this._mathRenderPending = true;
30
+ requestAnimationFrame(() => {
31
+ if (this._mathObserver) {
32
+ this._mathObserver.disconnect();
33
+ }
34
+ (0, _mathRendering.renderMath)(this);
35
+ this._mathRenderPending = false;
36
+ setTimeout(() => {
37
+ if (this._mathObserver) {
38
+ this._mathObserver.observe(this, {
39
+ childList: true,
40
+ subtree: true
41
+ });
42
+ }
43
+ }, 50);
44
+ });
45
+ });
23
46
  (0, _defineProperty2.default)(this, "isComplete", answer => Array.isArray(answer) && answer.length > 0);
24
47
  (0, _defineProperty2.default)(this, "changeAnswers", answer => {
25
48
  this._session.answer = answer;
@@ -27,6 +50,22 @@ class Graphing extends HTMLElement {
27
50
  this._render();
28
51
  });
29
52
  this._root = null;
53
+ this._mathObserver = null;
54
+ this._mathRenderPending = false;
55
+ }
56
+ _initMathObserver() {
57
+ if (this._mathObserver) return;
58
+ this._mathObserver = new MutationObserver(this._scheduleMathRender);
59
+ this._mathObserver.observe(this, {
60
+ childList: true,
61
+ subtree: true
62
+ });
63
+ }
64
+ _disconnectMathObserver() {
65
+ if (this._mathObserver) {
66
+ this._mathObserver.disconnect();
67
+ this._mathObserver = null;
68
+ }
30
69
  }
31
70
  set model(m) {
32
71
  this._model = m;
@@ -40,12 +79,14 @@ class Graphing extends HTMLElement {
40
79
  return this._session;
41
80
  }
42
81
  connectedCallback() {
82
+ this._initMathObserver();
43
83
  this._render();
44
84
  }
45
85
  _render() {
46
86
  if (!this._model || !this._session) {
47
87
  return;
48
88
  }
89
+ this._initMathObserver();
49
90
  const el = /*#__PURE__*/_react.default.createElement(_main.default, {
50
91
  model: this._model,
51
92
  session: this._session,
@@ -55,13 +96,12 @@ class Graphing extends HTMLElement {
55
96
  this._root = (0, _client.createRoot)(this);
56
97
  }
57
98
  this._root.render(el);
58
- queueMicrotask(() => {
59
- (0, _mathRendering.renderMath)(this);
60
- });
61
99
  }
62
100
  disconnectedCallback() {
101
+ this._disconnectMathObserver();
63
102
  if (this._root) {
64
103
  this._root.unmount();
104
+ this._root = null;
65
105
  }
66
106
  }
67
107
  }
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_client","_piePlayerEvents","_mathRendering","_main","Graphing","HTMLElement","constructor","_defineProperty2","default","answer","Array","isArray","length","_session","dispatchEvent","SessionChangedEvent","tagName","toLowerCase","isComplete","_render","_root","model","m","_model","session","s","connectedCallback","el","React","createElement","Main","onAnswersChange","changeAnswers","createRoot","render","queueMicrotask","renderMath","disconnectedCallback","unmount","exports"],"sources":["../src/index.js"],"sourcesContent":["import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { SessionChangedEvent } from '@pie-framework/pie-player-events';\nimport { renderMath } from '@pie-lib/math-rendering';\n\nimport Main from './main';\n\nexport { Main as Component };\n\nexport default class Graphing extends HTMLElement {\n constructor() {\n super();\n this._root = null;\n }\n\n set model(m) {\n this._model = m;\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 connectedCallback() {\n this._render();\n }\n\n isComplete = (answer) => Array.isArray(answer) && answer.length > 0;\n\n changeAnswers = (answer) => {\n this._session.answer = answer;\n\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), this.isComplete(this._session.answer)));\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 onAnswersChange: this.changeAnswers,\n });\n\n if (!this._root) {\n this._root = createRoot(this);\n }\n this._root.render(el);\n queueMicrotask(() => {\n renderMath(this);\n });\n }\n\n disconnectedCallback() {\n if (this._root) {\n this._root.unmount();\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,gBAAA,GAAAF,OAAA;AACA,IAAAG,cAAA,GAAAH,OAAA;AAEA,IAAAI,KAAA,GAAAL,sBAAA,CAAAC,OAAA;AAIe,MAAMK,QAAQ,SAASC,WAAW,CAAC;EAChDC,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAAC,IAAAC,gBAAA,CAAAC,OAAA,sBAsBIC,MAAM,IAAKC,KAAK,CAACC,OAAO,CAACF,MAAM,CAAC,IAAIA,MAAM,CAACG,MAAM,GAAG,CAAC;IAAA,IAAAL,gBAAA,CAAAC,OAAA,yBAElDC,MAAM,IAAK;MAC1B,IAAI,CAACI,QAAQ,CAACJ,MAAM,GAAGA,MAAM;MAE7B,IAAI,CAACK,aAAa,CAAC,IAAIC,oCAAmB,CAAC,IAAI,CAACC,OAAO,CAACC,WAAW,CAAC,CAAC,EAAE,IAAI,CAACC,UAAU,CAAC,IAAI,CAACL,QAAQ,CAACJ,MAAM,CAAC,CAAC,CAAC;MAE9G,IAAI,CAACU,OAAO,CAAC,CAAC;IAChB,CAAC;IA7BC,IAAI,CAACC,KAAK,GAAG,IAAI;EACnB;EAEA,IAAIC,KAAKA,CAACC,CAAC,EAAE;IACX,IAAI,CAACC,MAAM,GAAGD,CAAC;IACf,IAAI,CAACH,OAAO,CAAC,CAAC;EAChB;EAEA,IAAIK,OAAOA,CAACC,CAAC,EAAE;IACb,IAAI,CAACZ,QAAQ,GAAGY,CAAC;IACjB,IAAI,CAACN,OAAO,CAAC,CAAC;EAChB;EAEA,IAAIK,OAAOA,CAAA,EAAG;IACZ,OAAO,IAAI,CAACX,QAAQ;EACtB;EAEAa,iBAAiBA,CAAA,EAAG;IAClB,IAAI,CAACP,OAAO,CAAC,CAAC;EAChB;EAYAA,OAAOA,CAAA,EAAG;IACR,IAAI,CAAC,IAAI,CAACI,MAAM,IAAI,CAAC,IAAI,CAACV,QAAQ,EAAE;MAClC;IACF;IAEA,MAAMc,EAAE,gBAAGC,cAAK,CAACC,aAAa,CAACC,aAAI,EAAE;MACnCT,KAAK,EAAE,IAAI,CAACE,MAAM;MAClBC,OAAO,EAAE,IAAI,CAACX,QAAQ;MACtBkB,eAAe,EAAE,IAAI,CAACC;IACxB,CAAC,CAAC;IAEF,IAAI,CAAC,IAAI,CAACZ,KAAK,EAAE;MACf,IAAI,CAACA,KAAK,GAAG,IAAAa,kBAAU,EAAC,IAAI,CAAC;IAC/B;IACA,IAAI,CAACb,KAAK,CAACc,MAAM,CAACP,EAAE,CAAC;IACrBQ,cAAc,CAAC,MAAM;MACnB,IAAAC,yBAAU,EAAC,IAAI,CAAC;IAClB,CAAC,CAAC;EACJ;EAEAC,oBAAoBA,CAAA,EAAG;IACrB,IAAI,IAAI,CAACjB,KAAK,EAAE;MACd,IAAI,CAACA,KAAK,CAACkB,OAAO,CAAC,CAAC;IACtB;EACF;AACF;AAACC,OAAA,CAAA/B,OAAA,GAAAJ,QAAA","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_client","_piePlayerEvents","_mathRendering","_main","Graphing","HTMLElement","constructor","_defineProperty2","default","_mathRenderPending","requestAnimationFrame","_mathObserver","disconnect","renderMath","setTimeout","observe","childList","subtree","answer","Array","isArray","length","_session","dispatchEvent","SessionChangedEvent","tagName","toLowerCase","isComplete","_render","_root","_initMathObserver","MutationObserver","_scheduleMathRender","_disconnectMathObserver","model","m","_model","session","s","connectedCallback","el","React","createElement","Main","onAnswersChange","changeAnswers","createRoot","render","disconnectedCallback","unmount","exports"],"sources":["../src/index.js"],"sourcesContent":["import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { SessionChangedEvent } from '@pie-framework/pie-player-events';\nimport { renderMath } from '@pie-lib/math-rendering';\n\nimport Main from './main';\n\nexport { Main as Component };\n\nexport default class Graphing extends HTMLElement {\n constructor() {\n super();\n this._root = null;\n this._mathObserver = null;\n this._mathRenderPending = false;\n }\n\n // The title and axis labels are injected synchronously via dangerouslySetInnerHTML,\n // but createRoot().render() commits asynchronously, so a queueMicrotask(renderMath)\n // would run before the LaTeX spans are in the DOM and leave raw LaTeX on first render.\n // Observing the DOM and typesetting after each commit keeps math in sync regardless of timing.\n _scheduleMathRender = () => {\n if (this._mathRenderPending) return;\n this._mathRenderPending = true;\n\n requestAnimationFrame(() => {\n if (this._mathObserver) {\n this._mathObserver.disconnect();\n }\n renderMath(this);\n this._mathRenderPending = false;\n setTimeout(() => {\n if (this._mathObserver) {\n this._mathObserver.observe(this, { childList: true, subtree: true });\n }\n }, 50);\n });\n };\n\n _initMathObserver() {\n if (this._mathObserver) return;\n this._mathObserver = new MutationObserver(this._scheduleMathRender);\n this._mathObserver.observe(this, { childList: true, subtree: true });\n }\n\n _disconnectMathObserver() {\n if (this._mathObserver) {\n this._mathObserver.disconnect();\n this._mathObserver = null;\n }\n }\n\n set model(m) {\n this._model = m;\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 connectedCallback() {\n this._initMathObserver();\n this._render();\n }\n\n isComplete = (answer) => Array.isArray(answer) && answer.length > 0;\n\n changeAnswers = (answer) => {\n this._session.answer = answer;\n\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), this.isComplete(this._session.answer)));\n\n this._render();\n };\n\n _render() {\n if (!this._model || !this._session) {\n return;\n }\n\n this._initMathObserver();\n\n const el = React.createElement(Main, {\n model: this._model,\n session: this._session,\n onAnswersChange: this.changeAnswers,\n });\n\n if (!this._root) {\n this._root = createRoot(this);\n }\n this._root.render(el);\n }\n\n disconnectedCallback() {\n this._disconnectMathObserver();\n if (this._root) {\n this._root.unmount();\n this._root = null;\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
7
- "version": "10.1.1-next.11+84119e88b",
7
+ "version": "10.1.1-next.131+3228cc72e",
8
8
  "description": "",
9
9
  "scripts": {
10
10
  "postpublish": "../../scripts/postpublish"
@@ -15,10 +15,10 @@
15
15
  "@mui/icons-material": "^7.3.4",
16
16
  "@mui/material": "^7.3.4",
17
17
  "@pie-framework/pie-player-events": "^0.1.0",
18
- "@pie-lib/correct-answer-toggle": "4.0.3",
19
- "@pie-lib/graphing": "4.0.6",
20
- "@pie-lib/math-rendering": "5.0.2",
21
- "@pie-lib/render-ui": "6.1.1",
18
+ "@pie-lib/correct-answer-toggle": "4.0.5",
19
+ "@pie-lib/graphing": "4.0.16",
20
+ "@pie-lib/math-rendering": "5.1.0",
21
+ "@pie-lib/render-ui": "6.1.3",
22
22
  "classnames": "^2.2.6",
23
23
  "debug": "^4.1.1",
24
24
  "react": "18.3.1",
@@ -26,7 +26,7 @@
26
26
  },
27
27
  "author": "",
28
28
  "license": "ISC",
29
- "gitHead": "84119e88bfc3869f06f03cb7d63655060d30db73",
29
+ "gitHead": "3228cc72e1aa50c216f3a8014db2c98107c2f17c",
30
30
  "main": "lib/index.js",
31
31
  "module": "src/index.js"
32
32
  }