@pie-element/number-line 5.14.1 → 5.14.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,30 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [5.14.4](https://github.com/pie-framework/pie-elements/compare/@pie-element/number-line@5.14.3...@pie-element/number-line@5.14.4) (2022-03-08)
7
+
8
+ **Note:** Version bump only for package @pie-element/number-line
9
+
10
+
11
+
12
+
13
+
14
+ ## [5.14.3](https://github.com/pie-framework/pie-elements/compare/@pie-element/number-line@5.14.2...@pie-element/number-line@5.14.3) (2022-02-21)
15
+
16
+ **Note:** Version bump only for package @pie-element/number-line
17
+
18
+
19
+
20
+
21
+
22
+ ## [5.14.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/number-line@5.14.1...@pie-element/number-line@5.14.2) (2022-02-04)
23
+
24
+ **Note:** Version bump only for package @pie-element/number-line
25
+
26
+
27
+
28
+
29
+
6
30
  ## [5.14.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/number-line@5.14.0...@pie-element/number-line@5.14.1) (2022-01-24)
7
31
 
8
32
  **Note:** Version bump only for package @pie-element/number-line
@@ -3,6 +3,30 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [4.9.3](https://github.com/pie-framework/pie-elements/compare/@pie-element/number-line-configure@4.9.2...@pie-element/number-line-configure@4.9.3) (2022-03-08)
7
+
8
+ **Note:** Version bump only for package @pie-element/number-line-configure
9
+
10
+
11
+
12
+
13
+
14
+ ## [4.9.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/number-line-configure@4.9.1...@pie-element/number-line-configure@4.9.2) (2022-02-21)
15
+
16
+ **Note:** Version bump only for package @pie-element/number-line-configure
17
+
18
+
19
+
20
+
21
+
22
+ ## [4.9.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/number-line-configure@4.9.0...@pie-element/number-line-configure@4.9.1) (2022-02-04)
23
+
24
+ **Note:** Version bump only for package @pie-element/number-line-configure
25
+
26
+
27
+
28
+
29
+
6
30
  # [4.9.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/number-line-configure@4.8.14...@pie-element/number-line-configure@4.9.0) (2022-01-24)
7
31
 
8
32
 
@@ -70,7 +70,6 @@ var updateTicks = function updateTicks(model) {
70
70
  }
71
71
  }
72
72
 
73
- ;
74
73
  return model;
75
74
  };
76
75
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.js"],"names":["updateTicks","model","graph","labelStep","ticks","minor","major","match","fraction","step","math","evaluate","NumberLine","o","_model","dispatchEvent","ModelUpdatedEvent","_rerender","createDefaultModel","_configuration","defaults","configuration","s","element","React","createElement","Main","onChange","ReactDOM","render","HTMLElement","normalizedModel"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;AAEA;AACA,IAAMA,WAAW,GAAG,SAAdA,WAAc,CAAAC,KAAK,EAAI;AAC3B,qBAAgDA,KAAhD,CAAQC,KAAR;AAAA,2CAA0C,EAA1C;AAAA,MAAiBC,SAAjB,gBAAiBA,SAAjB;AAAA,wCAA4BC,KAA5B;AAAA,MAA4BA,KAA5B,mCAAoC,EAApC;AACA,MAAQC,KAAR,GAAyBD,KAAzB,CAAQC,KAAR;AAAA,MAAeC,KAAf,GAAyBF,KAAzB,CAAeE,KAAf;;AAEA,MAAIH,SAAS,IAAI,OAAOA,SAAP,KAAqB,QAAlC,IAA8CA,SAAS,CAACI,KAAV,CAAgB,6BAAhB,CAAlD,EAAkG;AAChGN,IAAAA,KAAK,CAACC,KAAN,CAAYM,QAAZ,GAAuB,IAAvB,CADgG,CAGhG;;AACA,QAAMC,IAAI,GAAGC,IAAI,CAACC,QAAL,CAAcR,SAAd,CAAb;;AAEA,QAAIM,IAAI,KAAKH,KAAb,EAAoB;AAClBF,MAAAA,KAAK,CAACE,KAAN,GAAcG,IAAd;AACAL,MAAAA,KAAK,CAACC,KAAN,GAAcI,IAAI,IAAIH,KAAK,GAAGD,KAAZ,CAAlB;AACD;AACF;;AAAA;AAED,SAAOJ,KAAP;AACD,CAjBD;;IAmBqBW,U;;;;;AAUnB,wBAAc;AAAA;;AAAA;AACZ;AADY,iGAWH,UAAAC,CAAC,EAAI;AACd,YAAKC,MAAL,mCAAmB,MAAKA,MAAxB,GAAmCD,CAAnC;;AAEA,YAAKE,aAAL,CAAmB,IAAIC,qCAAJ,CAAsB,MAAKF,MAA3B,CAAnB;;AAEA,YAAKG,SAAL;AACD,KAjBa;AAEZ,UAAKH,MAAL,GAAcF,UAAU,CAACM,kBAAX,EAAd;AACA,UAAKC,cAAL,GAAsBC,QAAQ,CAACC,aAA/B;AAHY;AAIb;;;;SAED,aAAUC,CAAV,EAAa;AACX,WAAKR,MAAL,GAAcF,UAAU,CAACM,kBAAX,CAA8BI,CAA9B,CAAd;;AACA,WAAKL,SAAL;AACD;;;WAUD,qBAAY;AACV,UAAIM,OAAO,gBAAGC,kBAAMC,aAAN,CAAoBC,gBAApB,EAA0B;AACtCzB,QAAAA,KAAK,EAAE,KAAKa,MAD0B;AAEtCO,QAAAA,aAAa,EAAE,KAAKF,cAFkB;AAGtCQ,QAAAA,QAAQ,EAAE,KAAKA;AAHuB,OAA1B,CAAd;;AAKAC,2BAASC,MAAT,CAAgBN,OAAhB,EAAyB,IAAzB;AACD;;;kDApCqCO,W;;;iCAAnBlB,U,wBACS,YAAgB;AAAA,MAAfX,KAAe,uEAAP,EAAO;;AAC1C,MAAM8B,eAAe,mCAChBX,QAAQ,CAACnB,KADO,GAEhBA,KAFgB,CAArB;;AAKA,SAAOD,WAAW,CAAC+B,eAAD,CAAlB;AACD,C","sourcesContent":["import Main from './main';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { ModelUpdatedEvent } from '@pie-framework/pie-configure-events';\nimport * as defaults from './defaults';\nimport * as math from \"mathjs\";\n\n// this function is duplicated in controller; at some point, use the same shared function\nconst updateTicks = model => {\n const { graph: { labelStep, ticks = {}} = {}} = model;\n const { minor, major } = ticks;\n\n if (labelStep && typeof labelStep === 'string' && labelStep.match(/^[1-9][0-9]*\\/[1-9][0-9]*$/g)) {\n model.graph.fraction = true;\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 default class NumberLine extends HTMLElement {\n static createDefaultModel = (model = {}) => {\n const normalizedModel = {\n ...defaults.model,\n ...model\n };\n\n return updateTicks(normalizedModel);\n };\n\n constructor() {\n super();\n this._model = NumberLine.createDefaultModel();\n this._configuration = defaults.configuration;\n }\n\n set model(s) {\n this._model = NumberLine.createDefaultModel(s);\n this._rerender();\n }\n\n onChange = o => {\n this._model = { ...this._model, ...o };\n\n this.dispatchEvent(new ModelUpdatedEvent(this._model));\n\n this._rerender();\n };\n\n _rerender() {\n let element = React.createElement(Main, {\n model: this._model,\n configuration: this._configuration,\n onChange: this.onChange\n });\n ReactDOM.render(element, this);\n }\n}\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../src/index.js"],"names":["updateTicks","model","graph","labelStep","ticks","minor","major","match","fraction","step","math","evaluate","NumberLine","o","_model","dispatchEvent","ModelUpdatedEvent","_rerender","createDefaultModel","_configuration","defaults","configuration","s","element","React","createElement","Main","onChange","ReactDOM","render","HTMLElement","normalizedModel"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;AAEA;AACA,IAAMA,WAAW,GAAG,SAAdA,WAAc,CAAAC,KAAK,EAAI;AAC3B,qBAAgDA,KAAhD,CAAQC,KAAR;AAAA,2CAA0C,EAA1C;AAAA,MAAiBC,SAAjB,gBAAiBA,SAAjB;AAAA,wCAA4BC,KAA5B;AAAA,MAA4BA,KAA5B,mCAAoC,EAApC;AACA,MAAQC,KAAR,GAAyBD,KAAzB,CAAQC,KAAR;AAAA,MAAeC,KAAf,GAAyBF,KAAzB,CAAeE,KAAf;;AAEA,MAAIH,SAAS,IAAI,OAAOA,SAAP,KAAqB,QAAlC,IAA8CA,SAAS,CAACI,KAAV,CAAgB,6BAAhB,CAAlD,EAAkG;AAChGN,IAAAA,KAAK,CAACC,KAAN,CAAYM,QAAZ,GAAuB,IAAvB,CADgG,CAGhG;;AACA,QAAMC,IAAI,GAAGC,IAAI,CAACC,QAAL,CAAcR,SAAd,CAAb;;AAEA,QAAIM,IAAI,KAAKH,KAAb,EAAoB;AAClBF,MAAAA,KAAK,CAACE,KAAN,GAAcG,IAAd;AACAL,MAAAA,KAAK,CAACC,KAAN,GAAcI,IAAI,IAAIH,KAAK,GAAGD,KAAZ,CAAlB;AACD;AACF;;AAED,SAAOJ,KAAP;AACD,CAjBD;;IAmBqBW,U;;;;;AAUnB,wBAAc;AAAA;;AAAA;AACZ;AADY,iGAWH,UAAAC,CAAC,EAAI;AACd,YAAKC,MAAL,mCAAmB,MAAKA,MAAxB,GAAmCD,CAAnC;;AAEA,YAAKE,aAAL,CAAmB,IAAIC,qCAAJ,CAAsB,MAAKF,MAA3B,CAAnB;;AAEA,YAAKG,SAAL;AACD,KAjBa;AAEZ,UAAKH,MAAL,GAAcF,UAAU,CAACM,kBAAX,EAAd;AACA,UAAKC,cAAL,GAAsBC,QAAQ,CAACC,aAA/B;AAHY;AAIb;;;;SAED,aAAUC,CAAV,EAAa;AACX,WAAKR,MAAL,GAAcF,UAAU,CAACM,kBAAX,CAA8BI,CAA9B,CAAd;;AACA,WAAKL,SAAL;AACD;;;WAUD,qBAAY;AACV,UAAIM,OAAO,gBAAGC,kBAAMC,aAAN,CAAoBC,gBAApB,EAA0B;AACtCzB,QAAAA,KAAK,EAAE,KAAKa,MAD0B;AAEtCO,QAAAA,aAAa,EAAE,KAAKF,cAFkB;AAGtCQ,QAAAA,QAAQ,EAAE,KAAKA;AAHuB,OAA1B,CAAd;;AAKAC,2BAASC,MAAT,CAAgBN,OAAhB,EAAyB,IAAzB;AACD;;;kDApCqCO,W;;;iCAAnBlB,U,wBACS,YAAgB;AAAA,MAAfX,KAAe,uEAAP,EAAO;;AAC1C,MAAM8B,eAAe,mCAChBX,QAAQ,CAACnB,KADO,GAEhBA,KAFgB,CAArB;;AAKA,SAAOD,WAAW,CAAC+B,eAAD,CAAlB;AACD,C","sourcesContent":["import Main from './main';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { ModelUpdatedEvent } from '@pie-framework/pie-configure-events';\nimport * as defaults from './defaults';\nimport * as math from 'mathjs';\n\n// this function is duplicated in controller; at some point, use the same shared function\nconst updateTicks = model => {\n const { graph: { labelStep, ticks = {}} = {}} = model;\n const { minor, major } = ticks;\n\n if (labelStep && typeof labelStep === 'string' && labelStep.match(/^[1-9][0-9]*\\/[1-9][0-9]*$/g)) {\n model.graph.fraction = true;\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 default class NumberLine extends HTMLElement {\n static createDefaultModel = (model = {}) => {\n const normalizedModel = {\n ...defaults.model,\n ...model\n };\n\n return updateTicks(normalizedModel);\n };\n\n constructor() {\n super();\n this._model = NumberLine.createDefaultModel();\n this._configuration = defaults.configuration;\n }\n\n set model(s) {\n this._model = NumberLine.createDefaultModel(s);\n this._rerender();\n }\n\n onChange = o => {\n this._model = { ...this._model, ...o };\n\n this.dispatchEvent(new ModelUpdatedEvent(this._model));\n\n this._rerender();\n };\n\n _rerender() {\n let element = React.createElement(Main, {\n model: this._model,\n configuration: this._configuration,\n onChange: this.onChange\n });\n ReactDOM.render(element, this);\n }\n}\n"],"file":"index.js"}
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@pie-element/number-line-configure",
3
3
  "private": true,
4
- "version": "4.9.0",
4
+ "version": "4.9.3",
5
5
  "main": "lib/index.js",
6
6
  "module": "src/index.js",
7
7
  "dependencies": {
8
8
  "@material-ui/core": "^3.9.2",
9
9
  "@pie-framework/pie-configure-events": "^1.2.0",
10
- "@pie-lib/config-ui": "^10.10.16",
11
- "@pie-lib/editable-html": "^7.17.16",
10
+ "@pie-lib/config-ui": "^10.10.22",
11
+ "@pie-lib/editable-html": "^7.19.1",
12
12
  "react": "^16.8.1",
13
13
  "react-dom": "^16.8.1"
14
14
  }
@@ -3,6 +3,14 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [4.3.24](https://github.com/pie-framework/pie-elements/compare/@pie-element/number-line-controller@4.3.23...@pie-element/number-line-controller@4.3.24) (2022-02-04)
7
+
8
+ **Note:** Version bump only for package @pie-element/number-line-controller
9
+
10
+
11
+
12
+
13
+
6
14
  ## [4.3.23](https://github.com/pie-framework/pie-elements/compare/@pie-element/number-line-controller@4.3.22...@pie-element/number-line-controller@4.3.23) (2022-01-10)
7
15
 
8
16
  **Note:** Version bump only for package @pie-element/number-line-controller
@@ -271,8 +271,6 @@ function normalize(question) {
271
271
  });
272
272
  }
273
273
 
274
- ;
275
-
276
274
  function createDefaultModel() {
277
275
  var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
278
276
  return new Promise(function (resolve) {
@@ -285,9 +283,8 @@ function createDefaultModel() {
285
283
  return !v;
286
284
  }));
287
285
  });
288
- }
286
+ } // this function is duplicated in configure; at some point, use the same shared function
289
287
 
290
- ; // this function is duplicated in configure; at some point, use the same shared function
291
288
 
292
289
  var updateTicks = function updateTicks(model) {
293
290
  var _model$graph = model.graph;
@@ -309,7 +306,6 @@ var updateTicks = function updateTicks(model) {
309
306
  }
310
307
  }
311
308
 
312
- ;
313
309
  return model;
314
310
  };
315
311
 
@@ -376,8 +372,6 @@ function model(question, session, env) {
376
372
  }());
377
373
  }
378
374
 
379
- ;
380
-
381
375
  var createCorrectResponseSession = function createCorrectResponseSession(question, env) {
382
376
  return new Promise(function (resolve) {
383
377
  if (env.mode !== 'evaluate' && env.role === 'instructor') {
@@ -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","labelStep","ticks","minor","major","fraction","step","math","evaluate","reject","Error","normalizedQuestion","evaluateMode","mode","exhibitOnly","disabled","fb","undefined","then","feedbackMessage","prompt","type","message","accessibility","createCorrectResponseSession","role","id"],"mappings":"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","sourcesContent":["import cloneDeep from 'lodash/cloneDeep';\nimport find from 'lodash/find';\nimport isEmpty from 'lodash/isEmpty';\nimport isEqual from 'lodash/isEqual';\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';\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(\n accumulateAnswer(model.correctResponse),\n 0\n );\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(\n session.answer,\n cloneDeep(question.correctResponse)\n );\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 return new Promise(resolve => {\n const feedback = merge(defaults.feedback, question.feedback);\n\n if (isEqual(feedback, question.feedback)) {\n return resolve({ ...question });\n } else {\n resolve({ ...question, feedback });\n }\n });\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: { labelStep, ticks = {}} = {}} = model;\n const { minor, major } = ticks;\n\n if (labelStep && typeof labelStep === 'string' && labelStep.match(/^[1-9][0-9]*\\/[1-9][0-9]*$/g)) {\n model.graph.fraction = true;\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 { graph } = updateTicks(normalizedQuestion);\n\n if (graph) {\n const evaluateMode = env.mode === 'evaluate';\n\n const correctResponse = cloneDeep(normalizedQuestion.correctResponse);\n const corrected =\n evaluateMode &&\n 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\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 graph,\n disabled,\n corrected,\n correctResponse:\n evaluateMode &&\n ['unanswered', 'correct'].indexOf(correctness) === -1 &&\n normalizedQuestion.correctResponse,\n feedback: feedbackMessage && {\n type: correctness,\n message: feedbackMessage\n },\n colorContrast:\n (env.accessibility && env.accessibility.colorContrast) ||\n 'black_on_white'\n };\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"],"file":"index.js"}
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","labelStep","ticks","minor","major","fraction","step","math","evaluate","reject","Error","normalizedQuestion","evaluateMode","mode","exhibitOnly","disabled","fb","undefined","then","feedbackMessage","prompt","type","message","accessibility","createCorrectResponseSession","role","id"],"mappings":"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","sourcesContent":["import cloneDeep from 'lodash/cloneDeep';\nimport find from 'lodash/find';\nimport isEmpty from 'lodash/isEmpty';\nimport isEqual from 'lodash/isEqual';\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';\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(\n accumulateAnswer(model.correctResponse),\n 0\n );\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(\n session.answer,\n cloneDeep(question.correctResponse)\n );\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 return new Promise(resolve => {\n const feedback = merge(defaults.feedback, question.feedback);\n\n if (isEqual(feedback, question.feedback)) {\n return resolve({ ...question });\n } else {\n resolve({ ...question, feedback });\n }\n });\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: { labelStep, ticks = {}} = {}} = model;\n const { minor, major } = ticks;\n\n if (labelStep && typeof labelStep === 'string' && labelStep.match(/^[1-9][0-9]*\\/[1-9][0-9]*$/g)) {\n model.graph.fraction = true;\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 { graph } = updateTicks(normalizedQuestion);\n\n if (graph) {\n const evaluateMode = env.mode === 'evaluate';\n\n const correctResponse = cloneDeep(normalizedQuestion.correctResponse);\n const corrected =\n evaluateMode &&\n 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\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 graph,\n disabled,\n corrected,\n correctResponse:\n evaluateMode &&\n ['unanswered', 'correct'].indexOf(correctness) === -1 &&\n normalizedQuestion.correctResponse,\n feedback: feedbackMessage && {\n type: correctness,\n message: feedbackMessage\n },\n colorContrast:\n (env.accessibility && env.accessibility.colorContrast) ||\n 'black_on_white'\n };\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"],"file":"index.js"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pie-element/number-line-controller",
3
3
  "private": true,
4
- "version": "4.3.23",
4
+ "version": "4.3.24",
5
5
  "description": "Controller logic for @pie-ui/number-line",
6
6
  "keywords": [
7
7
  "pie",
@@ -161,7 +161,7 @@ var Tick = /*#__PURE__*/function (_React$Component) {
161
161
  y: "14",
162
162
  width: "10",
163
163
  dy: "0.71em",
164
- textAnchor: displayFraction && "middle"
164
+ textAnchor: displayFraction && 'middle'
165
165
  }, xText));
166
166
  }
167
167
  }]);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/number-line/graph/ticks.jsx"],"names":["style","text","userSelect","textAlign","fill","color","primary","line","stroke","TickValidator","PropTypes","shape","major","props","propName","minor","Error","componentName","isRequired","Tick","wasRendered","fraction","getBBox","width","setAttribute","forceUpdate","x","y","type","classes","xScale","displayFraction","n","d","labelTick","height","textWidth","textHeight","textX","textY","xText","Number","toFixed","s","React","Component","object","number","bool","func","string","Ticks","domain","ticks","context","tickData","map","min","max"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { buildTickData, isMultiple } from './tick-utils';\nimport injectSheet from 'react-jss';\nimport { color } from '@pie-lib/render-ui';\n\nconst style = {\n text: {\n userSelect: 'none',\n textAlign: 'center',\n fill: color.primary()\n },\n line: {\n stroke: color.primary()\n }\n};\n\nexport const TickValidator = PropTypes.shape({\n /** the number of major ticks (including min + max)\n * to display. cant be lower than 2.\n */\n major: (props, propName) => {\n let major = props[propName];\n let minor = props.minor;\n\n if (!isMultiple(major, minor)) {\n return new Error(`Invalid prop major. It must be a multiple of ${minor}`);\n }\n },\n /** the number of minor ticks to display between major ticks.\n * Can't be less than zero.\n */\n minor: (props, propName, componentName) => {\n let minor = props[propName];\n if (minor <= 0) {\n return new Error(\n `Invalid prop ${propName} must be > 0. ${componentName}`\n );\n }\n }\n}).isRequired;\n\nexport class Tick extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n y: PropTypes.number.isRequired,\n x: PropTypes.number.isRequired,\n major: PropTypes.bool,\n fraction: PropTypes.bool,\n xScale: PropTypes.func,\n type: PropTypes.string\n };\n\n static defaultProps = {\n major: false\n };\n\n constructor(props) {\n super(props);\n this.wasRendered = false;\n };\n\n componentDidMount() {\n //center align the tick text\n if (this.text) {\n const { fraction } = this.props;\n let { width } = this.text.getBBox();\n this.text.setAttribute('x', (width / 2) * -1);\n\n if (fraction && !this.wasRendered) {\n // used for rendering the line fraction\n this.wasRendered = true;\n this.forceUpdate();\n }\n }\n }\n\n render() {\n //the domain value\n let { x, y, type, classes, xScale, fraction } = this.props;\n const displayFraction = fraction && x.n !== x.d && x.n !== 0 && x.d !== 1;\n const labelTick = type === 'major';\n const height = labelTick ? 20 : 10;\n const {\n width: textWidth = 0,\n height: textHeight = 0,\n x: textX = 0,\n y: textY = 0\n } = this.text && this.text.getBBox() || {};\n\n const xText = !fraction ? Number(x.toFixed(2))\n : !displayFraction ? x.n * x.s\n : <>\n <tspan x=\"0\" dy=\"0.71em\">{x.n * x.s}</tspan>\n <tspan x=\"0\" dy=\"1.11em\">{x.d}</tspan>\n </>;\n\n return (\n <g opacity=\"1\" transform={`translate(${xScale(x)}, ${y})`}>\n <line\n className={classes.line}\n y1={(height / 2) * -1}\n y2={height / 2}\n x1=\"0.5\"\n x2=\"0.5\"\n />\n\n {displayFraction &&\n <line\n className={classes.line}\n x1={textX}\n x2={textX + textWidth}\n y1={textY + textHeight / 2}\n y2={textY + textHeight / 2}\n />\n }\n\n {labelTick && (\n <text\n ref={text => (this.text = text)}\n className={classes.text}\n y=\"14\"\n width=\"10\"\n dy=\"0.71em\"\n textAnchor={displayFraction && \"middle\"}\n >\n {xText}\n </text>\n )}\n </g>\n );\n }\n}\n\nexport class Ticks extends React.Component {\n static contextTypes = {\n xScale: PropTypes.func.isRequired\n };\n\n static propTypes = {\n classes: PropTypes.object.isRequired,\n domain: PropTypes.shape({\n min: PropTypes.number.isRequired,\n max: PropTypes.number.isRequired\n }).isRequired,\n fraction: PropTypes.bool,\n ticks: TickValidator,\n y: PropTypes.number.isRequired\n };\n\n render() {\n let { domain, ticks, y, classes, fraction } = this.props;\n let { xScale } = this.context;\n\n const tickData = buildTickData(domain, ticks, { fraction });\n\n return (\n <g>\n {tickData.map(({ x, type }) => {\n return (\n <Tick\n classes={classes}\n fraction={fraction}\n x={x}\n y={y}\n type={type}\n xScale={xScale}\n key={`${x}-${type}`}\n />\n );\n })}\n </g>\n );\n }\n}\n\nexport default injectSheet(style)(Ticks);\n"],"file":"ticks.js"}
1
+ {"version":3,"sources":["../../../src/number-line/graph/ticks.jsx"],"names":["style","text","userSelect","textAlign","fill","color","primary","line","stroke","TickValidator","PropTypes","shape","major","props","propName","minor","Error","componentName","isRequired","Tick","wasRendered","fraction","getBBox","width","setAttribute","forceUpdate","x","y","type","classes","xScale","displayFraction","n","d","labelTick","height","textWidth","textHeight","textX","textY","xText","Number","toFixed","s","React","Component","object","number","bool","func","string","Ticks","domain","ticks","context","tickData","map","min","max"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { buildTickData, isMultiple } from './tick-utils';\nimport injectSheet from 'react-jss';\nimport { color } from '@pie-lib/render-ui';\n\nconst style = {\n text: {\n userSelect: 'none',\n textAlign: 'center',\n fill: color.primary()\n },\n line: {\n stroke: color.primary()\n }\n};\n\nexport const TickValidator = PropTypes.shape({\n /** the number of major ticks (including min + max)\n * to display. cant be lower than 2.\n */\n major: (props, propName) => {\n let major = props[propName];\n let minor = props.minor;\n\n if (!isMultiple(major, minor)) {\n return new Error(`Invalid prop major. It must be a multiple of ${minor}`);\n }\n },\n /** the number of minor ticks to display between major ticks.\n * Can't be less than zero.\n */\n minor: (props, propName, componentName) => {\n let minor = props[propName];\n if (minor <= 0) {\n return new Error(\n `Invalid prop ${propName} must be > 0. ${componentName}`\n );\n }\n }\n}).isRequired;\n\nexport class Tick extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n y: PropTypes.number.isRequired,\n x: PropTypes.number.isRequired,\n major: PropTypes.bool,\n fraction: PropTypes.bool,\n xScale: PropTypes.func,\n type: PropTypes.string\n };\n\n static defaultProps = {\n major: false\n };\n\n constructor(props) {\n super(props);\n this.wasRendered = false;\n }\n\n componentDidMount() {\n //center align the tick text\n if (this.text) {\n const { fraction } = this.props;\n let { width } = this.text.getBBox();\n this.text.setAttribute('x', (width / 2) * -1);\n\n if (fraction && !this.wasRendered) {\n // used for rendering the line fraction\n this.wasRendered = true;\n this.forceUpdate();\n }\n }\n }\n\n render() {\n //the domain value\n let { x, y, type, classes, xScale, fraction } = this.props;\n const displayFraction = fraction && x.n !== x.d && x.n !== 0 && x.d !== 1;\n const labelTick = type === 'major';\n const height = labelTick ? 20 : 10;\n const {\n width: textWidth = 0,\n height: textHeight = 0,\n x: textX = 0,\n y: textY = 0\n } = this.text && this.text.getBBox() || {};\n\n const xText = !fraction ? Number(x.toFixed(2))\n : !displayFraction ? x.n * x.s\n : <><tspan x=\"0\" dy=\"0.71em\">{x.n * x.s}</tspan><tspan x=\"0\" dy=\"1.11em\">{x.d}</tspan></>;\n\n return (\n <g opacity=\"1\" transform={`translate(${xScale(x)}, ${y})`}>\n <line\n className={classes.line}\n y1={(height / 2) * -1}\n y2={height / 2}\n x1=\"0.5\"\n x2=\"0.5\"\n />\n\n {displayFraction &&\n <line\n className={classes.line}\n x1={textX}\n x2={textX + textWidth}\n y1={textY + textHeight / 2}\n y2={textY + textHeight / 2}\n />\n }\n\n {labelTick && (\n <text\n ref={text => (this.text = text)}\n className={classes.text}\n y=\"14\"\n width=\"10\"\n dy=\"0.71em\"\n textAnchor={displayFraction && 'middle'}\n >\n {xText}\n </text>\n )}\n </g>\n );\n }\n}\n\nexport class Ticks extends React.Component {\n static contextTypes = {\n xScale: PropTypes.func.isRequired\n };\n\n static propTypes = {\n classes: PropTypes.object.isRequired,\n domain: PropTypes.shape({\n min: PropTypes.number.isRequired,\n max: PropTypes.number.isRequired\n }).isRequired,\n fraction: PropTypes.bool,\n ticks: TickValidator,\n y: PropTypes.number.isRequired\n };\n\n render() {\n let { domain, ticks, y, classes, fraction } = this.props;\n let { xScale } = this.context;\n\n const tickData = buildTickData(domain, ticks, { fraction });\n\n return (\n <g>\n {tickData.map(({ x, type }) => {\n return (\n <Tick\n classes={classes}\n fraction={fraction}\n x={x}\n y={y}\n type={type}\n xScale={xScale}\n key={`${x}-${type}`}\n />\n );\n })}\n </g>\n );\n }\n}\n\nexport default injectSheet(style)(Ticks);\n"],"file":"ticks.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pie-element/number-line",
3
- "version": "5.14.1",
3
+ "version": "5.14.4",
4
4
  "repository": "pie-framework/pie-elements",
5
5
  "description": "",
6
6
  "publishConfig": {
@@ -27,7 +27,7 @@
27
27
  },
28
28
  "author": "pie framework developers",
29
29
  "license": "ISC",
30
- "gitHead": "510db2949732b8997ff2e1a496ca1a7bd3973088",
30
+ "gitHead": "711fb90f7f30b2b7438fd252d104b2c9c25accba",
31
31
  "scripts": {
32
32
  "postpublish": "../../scripts/postpublish"
33
33
  },