@pie-element/number-line 9.6.1-next.9 → 9.6.2-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,18 @@
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
+ ## [9.6.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/number-line@9.6.0...@pie-element/number-line@9.6.1) (2025-04-10)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * update pie-lib/pie-toolbox PD-4765, PD-4947 ([56312ea](https://github.com/pie-framework/pie-elements/commit/56312ea13151cc7e5d026a112fb7d86d320e4799))
12
+ * **number-line:** set tickIntervalType to Fraction when labelStep defined PD-4861 ([ce1d0e8](https://github.com/pie-framework/pie-elements/commit/ce1d0e878f0b360c2f17533d01c8718f0bdebc43))
13
+
14
+
15
+
16
+
17
+
6
18
  # [9.6.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/number-line@9.5.0...@pie-element/number-line@9.6.0) (2025-04-01)
7
19
 
8
20
 
@@ -3,6 +3,18 @@
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
+ ## [8.5.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/number-line-configure@8.5.0...@pie-element/number-line-configure@8.5.1) (2025-04-10)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * update pie-lib/pie-toolbox PD-4765, PD-4947 ([56312ea](https://github.com/pie-framework/pie-elements/commit/56312ea13151cc7e5d026a112fb7d86d320e4799))
12
+ * **number-line:** set tickIntervalType to Fraction when labelStep defined PD-4861 ([ce1d0e8](https://github.com/pie-framework/pie-elements/commit/ce1d0e878f0b360c2f17533d01c8718f0bdebc43))
13
+
14
+
15
+
16
+
17
+
6
18
  # [8.5.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/number-line-configure@8.4.0...@pie-element/number-line-configure@8.5.0) (2025-04-01)
7
19
 
8
20
 
@@ -39,8 +39,6 @@ var math = _interopRequireWildcard(require("mathjs"));
39
39
 
40
40
  var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
41
41
 
42
- var _numberLine = require("@pie-element/number-line");
43
-
44
42
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
45
43
 
46
44
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -70,7 +68,8 @@ var updateTicks = function updateTicks(model) {
70
68
  }
71
69
 
72
70
  if (labelStep && typeof labelStep === 'string' && labelStep.match(/^[1-9][0-9]*\/[1-9][0-9]*$/g)) {
73
- model.graph.fraction = true; // update the ticks frequency and label value to match the label step if needed
71
+ model.graph.fraction = true;
72
+ ticks.tickIntervalType = 'Fraction'; // update the ticks frequency and label value to match the label step if needed
74
73
 
75
74
  var step = math.evaluate(labelStep);
76
75
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.js"],"names":["updateTicks","model","graph","domain","labelStep","ticks","minor","major","min","Number","toFixed","max","match","fraction","step","math","evaluate","NumberLine","pieAuthors","document","querySelectorAll","hasPlayerAsParent","Array","from","some","author","contains","_modelCopy","_model","o","dispatchEvent","ModelUpdatedEvent","_rerender","config","_configuration","_render","createDefaultModel","defaults","configuration","m","c","newConfiguration","resetModelAfterConfigurationIsSet","language","enabled","languageChoices","options","length","value","settings","find","option","push","label","handler","InsertImageEvent","src","done","DeleteImageEvent","InsertSoundEvent","DeleteSoundEvent","element","React","createElement","Main","onChange","onConfigurationChanged","imageSupport","add","insertImage","bind","onDeleteImage","uploadSoundSupport","insertSound","onDeleteSound","ReactDOM","render","HTMLElement","normalizedModel"],"mappings":"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","sourcesContent":["import Main from './main';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport {\n ModelUpdatedEvent,\n InsertSoundEvent,\n DeleteSoundEvent,\n InsertImageEvent,\n DeleteImageEvent,\n} from '@pie-framework/pie-configure-events';\nimport * as defaults from './defaults';\nimport * as math from 'mathjs';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { tickUtils } from '@pie-element/number-line';\n\n// this function is duplicated in controller; at some point, use the same shared function\nconst updateTicks = (model) => {\n const { graph: { domain, labelStep, ticks = {} } = {} } = model;\n const { minor, major } = ticks;\n\n if (domain) {\n domain.min = Number((domain.min || 0).toFixed(2));\n domain.max = Number((domain.max || 0).toFixed(2));\n }\n\n if (labelStep && typeof labelStep === 'string' && labelStep.match(/^[1-9][0-9]*\\/[1-9][0-9]*$/g)) {\n model.graph.fraction = true;\n\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 c = defaults.configuration;\n let language = model.language || '';\n\n if (!language && c.language && c.language.enabled) {\n if (c.languageChoices?.options?.length) {\n language = c.languageChoices.options[0].value;\n }\n }\n\n const normalizedModel = {\n ...defaults.model,\n ...model,\n language,\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(m) {\n this._model = NumberLine.createDefaultModel(m);\n this._modelCopy = cloneDeep(this._model);\n\n this._rerender();\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 const newConfiguration = {\n ...defaults.configuration,\n ...c,\n };\n\n this._configuration = newConfiguration;\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 if (newConfiguration?.language?.enabled) {\n if (newConfiguration?.languageChoices?.options?.length) {\n this._model.language = newConfiguration?.languageChoices.options[0].value;\n }\n } else if (newConfiguration.language.settings && this._model.language) {\n this._configuration.language.enabled = true;\n\n if (!this._configuration.languageChoices.options || !this._configuration.languageChoices.options.length) {\n this._configuration.languageChoices.options = [];\n }\n\n // check if the language is already included in the languageChoices.options array\n // and if not, then add it.\n if (!this._configuration.languageChoices.options.find((option) => option.value === this._model.language)) {\n this._configuration.languageChoices.options.push({\n value: this._model.language,\n label: this._model.language,\n });\n }\n } else {\n delete this._model.language;\n }\n\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 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 _rerender() {\n let element = React.createElement(Main, {\n model: this._model,\n configuration: this._configuration,\n onChange: this.onChange,\n onConfigurationChanged: this.onConfigurationChanged,\n imageSupport: {\n add: this.insertImage.bind(this),\n delete: this.onDeleteImage.bind(this),\n },\n uploadSoundSupport: {\n add: this.insertSound.bind(this),\n delete: this.onDeleteSound.bind(this),\n },\n });\n\n ReactDOM.render(element, this);\n }\n}\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../src/index.js"],"names":["updateTicks","model","graph","domain","labelStep","ticks","minor","major","min","Number","toFixed","max","match","fraction","tickIntervalType","step","math","evaluate","NumberLine","pieAuthors","document","querySelectorAll","hasPlayerAsParent","Array","from","some","author","contains","_modelCopy","_model","o","dispatchEvent","ModelUpdatedEvent","_rerender","config","_configuration","_render","createDefaultModel","defaults","configuration","m","c","newConfiguration","resetModelAfterConfigurationIsSet","language","enabled","languageChoices","options","length","value","settings","find","option","push","label","handler","InsertImageEvent","src","done","DeleteImageEvent","InsertSoundEvent","DeleteSoundEvent","element","React","createElement","Main","onChange","onConfigurationChanged","imageSupport","add","insertImage","bind","onDeleteImage","uploadSoundSupport","insertSound","onDeleteSound","ReactDOM","render","HTMLElement","normalizedModel"],"mappings":"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","sourcesContent":["import Main from './main';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport {\n ModelUpdatedEvent,\n InsertSoundEvent,\n DeleteSoundEvent,\n InsertImageEvent,\n DeleteImageEvent,\n} from '@pie-framework/pie-configure-events';\nimport * as defaults from './defaults';\nimport * as math from 'mathjs';\nimport cloneDeep from 'lodash/cloneDeep';\n\n// this function is duplicated in controller; at some point, use the same shared function\nconst updateTicks = (model) => {\n const { graph: { domain, labelStep, ticks = {} } = {} } = model;\n const { minor, major } = ticks;\n\n if (domain) {\n domain.min = Number((domain.min || 0).toFixed(2));\n domain.max = Number((domain.max || 0).toFixed(2));\n }\n\n if (labelStep && typeof labelStep === 'string' && labelStep.match(/^[1-9][0-9]*\\/[1-9][0-9]*$/g)) {\n model.graph.fraction = true;\n ticks.tickIntervalType = 'Fraction';\n\n // update the ticks frequency and label value to match the label step if needed\n const step = math.evaluate(labelStep);\n\n if (step !== major) {\n ticks.major = step;\n ticks.minor = step / (major / minor);\n }\n }\n\n return model;\n};\n\nexport default class NumberLine extends HTMLElement {\n static createDefaultModel = (model = {}) => {\n const c = defaults.configuration;\n let language = model.language || '';\n\n if (!language && c.language && c.language.enabled) {\n if (c.languageChoices?.options?.length) {\n language = c.languageChoices.options[0].value;\n }\n }\n\n const normalizedModel = {\n ...defaults.model,\n ...model,\n language,\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(m) {\n this._model = NumberLine.createDefaultModel(m);\n this._modelCopy = cloneDeep(this._model);\n\n this._rerender();\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 const newConfiguration = {\n ...defaults.configuration,\n ...c,\n };\n\n this._configuration = newConfiguration;\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 if (newConfiguration?.language?.enabled) {\n if (newConfiguration?.languageChoices?.options?.length) {\n this._model.language = newConfiguration?.languageChoices.options[0].value;\n }\n } else if (newConfiguration.language.settings && this._model.language) {\n this._configuration.language.enabled = true;\n\n if (!this._configuration.languageChoices.options || !this._configuration.languageChoices.options.length) {\n this._configuration.languageChoices.options = [];\n }\n\n // check if the language is already included in the languageChoices.options array\n // and if not, then add it.\n if (!this._configuration.languageChoices.options.find((option) => option.value === this._model.language)) {\n this._configuration.languageChoices.options.push({\n value: this._model.language,\n label: this._model.language,\n });\n }\n } else {\n delete this._model.language;\n }\n\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 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 _rerender() {\n let element = React.createElement(Main, {\n model: this._model,\n configuration: this._configuration,\n onChange: this.onChange,\n onConfigurationChanged: this.onConfigurationChanged,\n imageSupport: {\n add: this.insertImage.bind(this),\n delete: this.onDeleteImage.bind(this),\n },\n uploadSoundSupport: {\n add: this.insertSound.bind(this),\n delete: this.onDeleteSound.bind(this),\n },\n });\n\n ReactDOM.render(element, this);\n }\n}\n"],"file":"index.js"}
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@pie-element/number-line-configure",
3
3
  "private": true,
4
- "version": "8.5.0",
4
+ "version": "8.5.1",
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.3.0",
10
- "@pie-lib/pie-toolbox": "2.13.0",
10
+ "@pie-lib/pie-toolbox": "2.14.0",
11
11
  "lodash": "^4.17.15",
12
12
  "react": "^16.8.1",
13
13
  "react-dom": "^16.8.1"
@@ -3,6 +3,18 @@
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
+ ## [6.2.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/number-line-controller@6.2.0...@pie-element/number-line-controller@6.2.1) (2025-04-10)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * update pie-lib/pie-toolbox PD-4765, PD-4947 ([56312ea](https://github.com/pie-framework/pie-elements/commit/56312ea13151cc7e5d026a112fb7d86d320e4799))
12
+ * **number-line:** set tickIntervalType to Fraction when labelStep defined PD-4861 ([ce1d0e8](https://github.com/pie-framework/pie-elements/commit/ce1d0e878f0b360c2f17533d01c8718f0bdebc43))
13
+
14
+
15
+
16
+
17
+
6
18
  # [6.2.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/number-line-controller@6.1.21...@pie-element/number-line-controller@6.2.0) (2025-04-01)
7
19
 
8
20
 
@@ -297,7 +297,8 @@ var updateTicks = function updateTicks(model) {
297
297
  }
298
298
 
299
299
  if (labelStep && typeof labelStep === 'string' && labelStep.match(/^[1-9][0-9]*\/[1-9][0-9]*$/g)) {
300
- model.graph.fraction = true; // update the ticks frequency and label value to match the label step if needed
300
+ model.graph.fraction = true;
301
+ ticks.tickIntervalType = 'Fraction'; // update the ticks frequency and label value to match the label step if needed
301
302
 
302
303
  var step = math.evaluate(labelStep);
303
304
 
@@ -317,8 +318,7 @@ function model(question, session, env) {
317
318
 
318
319
  return new Promise( /*#__PURE__*/function () {
319
320
  var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(resolve, reject) {
320
- var normalizedQuestion, _updateTicks, graph, evaluateMode, correctResponse, corrected, correctness, _graph, exhibitOnly, disabled, teacherInstructions, fb;
321
-
321
+ var normalizedQuestion, normalizedModel, graph, evaluateMode, correctResponse, corrected, correctness, exhibitOnly, disabled, teacherInstructions, fb;
322
322
  return _regenerator["default"].wrap(function _callee$(_context) {
323
323
  while (1) {
324
324
  switch (_context.prev = _context.next) {
@@ -328,16 +328,16 @@ function model(question, session, env) {
328
328
 
329
329
  case 2:
330
330
  normalizedQuestion = _context.sent;
331
- _updateTicks = updateTicks(normalizedQuestion), graph = _updateTicks.graph; // this function is also called in configure, it is a duplicate to maintain consistency and correctness
331
+ normalizedModel = updateTicks(normalizedQuestion); // this function is also called in configure, it is a duplicate to maintain consistency and correctness
332
332
 
333
- graph = (0, _utils.reloadTicksData)(graph);
333
+ graph = (0, _utils.reloadTicksData)(normalizedModel.graph);
334
334
 
335
335
  if (graph) {
336
336
  evaluateMode = env.mode === 'evaluate';
337
337
  correctResponse = (0, _cloneDeep["default"])(normalizedQuestion.correctResponse);
338
338
  corrected = evaluateMode && getCorrected(session ? session.answer || [] : [], correctResponse);
339
339
  correctness = evaluateMode && getCorrectness(corrected);
340
- _graph = graph, exhibitOnly = _graph.exhibitOnly;
340
+ exhibitOnly = graph.exhibitOnly;
341
341
  disabled = env.mode !== 'gather' || exhibitOnly === true;
342
342
  teacherInstructions = null;
343
343
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.js"],"names":["score","number","scaled","getPartialScore","corrected","ps","correct","rule","find","r","numberOfCorrect","length","scorePercentage","accumulateAnswer","correctResponse","total","answer","isCorrectResponse","some","cr","matches","outcome","model","session","env","Promise","resolve","empty","partialScoringEnabled","partialScoring","enabled","numCorrect","reduce","numIncorrect","getScore","question","getCorrected","correctness","getCorrectness","allowPartialScoring","filter","o","canDoPartialScoring","CLOSE_TO_PRECISION","closeTo","a","b","precision","expectedDiff","Math","pow","receivedDiff","abs","close","v","ov","incorrect","notInAnswer","noCorrectResponse","acc","index","match","push","splice","indexOf","normalize","feedback","defaults","createDefaultModel","out","graph","colorContrast","updateTicks","domain","labelStep","ticks","minor","major","min","Number","toFixed","max","fraction","step","math","evaluate","reject","Error","normalizedQuestion","evaluateMode","mode","exhibitOnly","disabled","teacherInstructions","role","fb","undefined","then","feedbackMessage","prompt","type","message","accessibility","language","extraCSSRules","createCorrectResponseSession","id","getInnerText","html","replaceAll","getContent","replace","validate","config","maxMaxElements","numberLineDimensions","minWidth","maxWidth","width","maxNumberOfPoints","errors","forEach","field","required","widthError","MIN_DOMAIN","MAX_DOMAIN","domainError","maxError","pointsError","correctResponseError"],"mappings":"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","sourcesContent":["import cloneDeep from 'lodash/cloneDeep';\nimport find from 'lodash/find';\nimport isEmpty from 'lodash/isEmpty';\nimport isEqualWith from 'lodash/isEqualWith';\nimport merge from 'lodash/merge';\nimport omitBy from 'lodash/omitBy';\nimport { getFeedbackForCorrectness } from '@pie-lib/pie-toolbox/feedback';\nimport { partialScoring } from '@pie-lib/pie-toolbox/controller-utils';\nimport * as math from 'mathjs';\n\nimport defaults from './defaults';\nimport { reloadTicksData } from './utils';\n\nconst score = (number) => {\n return {\n score: {\n scaled: number,\n },\n };\n};\n\nconst getPartialScore = (corrected, ps) => {\n const { correct } = corrected;\n const rule = ps.find((r) => r.numberOfCorrect === correct.length);\n\n if (rule) {\n return 1.0 * (rule.scorePercentage / 100);\n } else {\n return 0;\n }\n};\n\nconst accumulateAnswer = (correctResponse) => (total, answer) => {\n const isCorrectResponse = correctResponse.some((cr) => matches(cr)(answer));\n return total + (isCorrectResponse ? 1 : 0);\n};\n\n/**\n */\nexport function outcome(model, session, env) {\n return new Promise((resolve) => {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n } else {\n const partialScoringEnabled = partialScoring.enabled(model, env);\n const numCorrect = (session.answer || []).reduce(accumulateAnswer(model.correctResponse), 0);\n\n let total = model.correctResponse.length;\n let numIncorrect = 0;\n\n if ((session.answer || []).length > total) {\n numIncorrect = (session.answer || []).length - total;\n }\n\n if (total === 0) {\n total = 1;\n }\n\n let score = numCorrect < 0 ? 0 : (numCorrect - numIncorrect) / total;\n\n if (score < 0) {\n score = 0;\n }\n\n resolve({ score: partialScoringEnabled ? score : score === 1 ? 1 : 0 });\n }\n });\n}\n\nexport function getScore(question, session) {\n return new Promise((resolve) => {\n if (!session || isEmpty(session)) {\n resolve({ score: { scaled: 0 } });\n } else {\n session.answer = session.answer || [];\n\n const corrected = getCorrected(session.answer, cloneDeep(question.correctResponse));\n\n const correctness = getCorrectness(corrected);\n\n if (correctness === 'correct') {\n resolve(score(1.0));\n } else if (correctness === 'incorrect') {\n resolve(score(0.0));\n } else if (correctness === 'partial') {\n const { allowPartialScoring, partialScoring } = question;\n const ps = (partialScoring || []).filter((o) => !isEmpty(o));\n const canDoPartialScoring = allowPartialScoring && ps.length > 0;\n if (canDoPartialScoring) {\n resolve(score(getPartialScore(corrected, ps)));\n } else {\n resolve(score(0.0));\n }\n } else {\n resolve({ score: { scaled: -1 } });\n }\n }\n });\n}\n\nexport const CLOSE_TO_PRECISION = 3;\n\nexport const closeTo = (a, b, precision) => {\n precision = precision || 5;\n const expectedDiff = Math.pow(10, -precision) / 2;\n const receivedDiff = Math.abs(a - b);\n const close = receivedDiff <= expectedDiff;\n return close;\n};\n\nconst matches = (a) => (v) => {\n return isEqualWith(a, v, (v, ov) => {\n if (typeof v === 'number' && typeof ov === 'number') {\n return closeTo(v, ov, CLOSE_TO_PRECISION);\n }\n });\n};\n\nexport const getCorrected = (answer, correctResponse) => {\n if (isEmpty(correctResponse) && answer.length > 0) {\n return {\n correct: [],\n incorrect: [],\n notInAnswer: [],\n noCorrectResponse: true,\n };\n }\n\n return answer.reduce(\n (acc, a, index) => {\n const { correct, incorrect, notInAnswer } = acc;\n\n const match = find(notInAnswer, matches(a));\n if (match) {\n correct.push(index);\n notInAnswer.splice(notInAnswer.indexOf(match), 1);\n } else {\n incorrect.push(index);\n }\n\n return {\n correct: correct,\n incorrect: incorrect,\n notInAnswer: notInAnswer,\n };\n },\n {\n correct: [],\n incorrect: [],\n notInAnswer: correctResponse,\n },\n );\n};\n\nexport const getCorrectness = (corrected) => {\n const { incorrect, correct, notInAnswer, noCorrectResponse } = corrected;\n\n if (noCorrectResponse) {\n return 'unknown';\n }\n\n if (incorrect.length === 0 && correct.length === 0) {\n return 'unanswered';\n }\n\n if (incorrect.length === 0 && notInAnswer.length === 0) {\n return 'correct';\n }\n\n if (incorrect.length > 0 || notInAnswer.length > 0) {\n if (correct.length > 0) {\n return 'partial';\n } else {\n return 'incorrect';\n }\n }\n\n return 'unknown';\n};\n\n/**\n * A sample of a normalize function see:\n * https://github.com/pie-framework/pie-elements/issues/21\n */\nexport function normalize(question) {\n const feedback = merge(defaults.feedback, question.feedback);\n\n return { ...defaults, ...question, feedback };\n}\n\nexport function createDefaultModel(model = {}) {\n return new Promise((resolve) => {\n const out = {\n ...model,\n graph: {\n ...defaults.graph,\n ...model.graph,\n },\n colorContrast: 'black_on_white',\n };\n\n resolve(omitBy(out, (v) => !v));\n });\n}\n\n// this function is duplicated in configure; at some point, use the same shared function\nconst updateTicks = (model) => {\n const { graph: { domain, labelStep, ticks = {} } = {} } = model;\n const { minor, major } = ticks;\n\n if (domain) {\n domain.min = Number((domain.min || 0).toFixed(2));\n domain.max = Number((domain.max || 0).toFixed(2));\n }\n\n if (labelStep && typeof labelStep === 'string' && labelStep.match(/^[1-9][0-9]*\\/[1-9][0-9]*$/g)) {\n model.graph.fraction = true;\n\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 let { graph } = updateTicks(normalizedQuestion);\n // this function is also called in configure, it is a duplicate to maintain consistency and correctness\n graph = reloadTicksData(graph);\n\n if (graph) {\n const evaluateMode = env.mode === 'evaluate';\n\n const correctResponse = cloneDeep(normalizedQuestion.correctResponse);\n const corrected = evaluateMode && getCorrected(session ? session.answer || [] : [], correctResponse);\n const correctness = evaluateMode && getCorrectness(corrected);\n\n const { exhibitOnly } = graph;\n const disabled = env.mode !== 'gather' || exhibitOnly === true;\n let teacherInstructions = null;\n\n if (env.role === 'instructor' && (env.mode === 'view' || evaluateMode)) {\n teacherInstructions = normalizedQuestion.teacherInstructions;\n }\n\n const fb = evaluateMode\n ? getFeedbackForCorrectness(correctness, normalizedQuestion.feedback)\n : Promise.resolve(undefined);\n\n fb.then((feedbackMessage) => {\n const out = {\n prompt: normalizedQuestion.prompt,\n teacherInstructions,\n graph,\n disabled,\n corrected,\n correctResponse:\n evaluateMode && ['unanswered', 'correct'].indexOf(correctness) === -1 && normalizedQuestion.correctResponse,\n feedback: feedbackMessage && {\n type: correctness,\n message: feedbackMessage,\n },\n colorContrast: (env.accessibility && env.accessibility.colorContrast) || 'black_on_white',\n language: normalizedQuestion.language,\n extraCSSRules: normalizedQuestion.extraCSSRules,\n };\n resolve(omitBy(out, (v) => !v));\n });\n } else {\n reject(new Error('graph is undefined'));\n }\n });\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { correctResponse: answer } = question;\n\n resolve({\n answer,\n id: '1',\n });\n } else {\n resolve(null);\n }\n });\n};\n\n// remove all html tags\nconst getInnerText = (html) => (html || '').replaceAll(/<[^>]*>/g, '');\n\n// remove all html tags except img and iframe\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe)([^>]+)>)/gi, '');\n\nexport const validate = (model = {}, config = {}) => {\n const { graph, correctResponse } = model || {};\n const { maxMaxElements = 20, numberLineDimensions: { min: minWidth = 200, max: maxWidth = 800 } = {} } = config || {};\n const { width, domain, maxNumberOfPoints } = graph || {};\n const { min, max } = domain || {};\n const errors = {};\n\n ['teacherInstructions', 'prompt'].forEach((field) => {\n if (config[field]?.required && !getContent(model[field])) {\n errors[field] = 'This field is required.';\n }\n });\n\n if (width < minWidth || width > maxWidth) {\n errors.widthError = `Width should be a value between ${minWidth} and ${maxWidth}.`;\n }\n\n const MIN_DOMAIN = -100000;\n const MAX_DOMAIN = 100000;\n\n if (min < MIN_DOMAIN || min > MAX_DOMAIN || max < MIN_DOMAIN || max > MAX_DOMAIN) {\n errors.domainError = `Min and max values must both be in the range [${MIN_DOMAIN}, ${MAX_DOMAIN}].`;\n }\n\n if (min >= max) {\n errors.maxError = 'Max value must be greater than min value.';\n }\n\n if (maxNumberOfPoints < 1 || maxNumberOfPoints > maxMaxElements) {\n errors.pointsError = `Max number of elements should be between 1 and ${maxMaxElements}.`;\n }\n\n if (correctResponse && correctResponse.length === 0) {\n errors.correctResponseError = 'The correct answer should include at least one number line object.';\n }\n\n return errors;\n};\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../src/index.js"],"names":["score","number","scaled","getPartialScore","corrected","ps","correct","rule","find","r","numberOfCorrect","length","scorePercentage","accumulateAnswer","correctResponse","total","answer","isCorrectResponse","some","cr","matches","outcome","model","session","env","Promise","resolve","empty","partialScoringEnabled","partialScoring","enabled","numCorrect","reduce","numIncorrect","getScore","question","getCorrected","correctness","getCorrectness","allowPartialScoring","filter","o","canDoPartialScoring","CLOSE_TO_PRECISION","closeTo","a","b","precision","expectedDiff","Math","pow","receivedDiff","abs","close","v","ov","incorrect","notInAnswer","noCorrectResponse","acc","index","match","push","splice","indexOf","normalize","feedback","defaults","createDefaultModel","out","graph","colorContrast","updateTicks","domain","labelStep","ticks","minor","major","min","Number","toFixed","max","fraction","tickIntervalType","step","math","evaluate","reject","Error","normalizedQuestion","normalizedModel","evaluateMode","mode","exhibitOnly","disabled","teacherInstructions","role","fb","undefined","then","feedbackMessage","prompt","type","message","accessibility","language","extraCSSRules","createCorrectResponseSession","id","getInnerText","html","replaceAll","getContent","replace","validate","config","maxMaxElements","numberLineDimensions","minWidth","maxWidth","width","maxNumberOfPoints","errors","forEach","field","required","widthError","MIN_DOMAIN","MAX_DOMAIN","domainError","maxError","pointsError","correctResponseError"],"mappings":"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","sourcesContent":["import cloneDeep from 'lodash/cloneDeep';\nimport find from 'lodash/find';\nimport isEmpty from 'lodash/isEmpty';\nimport isEqualWith from 'lodash/isEqualWith';\nimport merge from 'lodash/merge';\nimport omitBy from 'lodash/omitBy';\nimport { getFeedbackForCorrectness } from '@pie-lib/pie-toolbox/feedback';\nimport { partialScoring } from '@pie-lib/pie-toolbox/controller-utils';\nimport * as math from 'mathjs';\n\nimport defaults from './defaults';\nimport { reloadTicksData } from './utils';\n\nconst score = (number) => {\n return {\n score: {\n scaled: number,\n },\n };\n};\n\nconst getPartialScore = (corrected, ps) => {\n const { correct } = corrected;\n const rule = ps.find((r) => r.numberOfCorrect === correct.length);\n\n if (rule) {\n return 1.0 * (rule.scorePercentage / 100);\n } else {\n return 0;\n }\n};\n\nconst accumulateAnswer = (correctResponse) => (total, answer) => {\n const isCorrectResponse = correctResponse.some((cr) => matches(cr)(answer));\n return total + (isCorrectResponse ? 1 : 0);\n};\n\n/**\n */\nexport function outcome(model, session, env) {\n return new Promise((resolve) => {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n } else {\n const partialScoringEnabled = partialScoring.enabled(model, env);\n const numCorrect = (session.answer || []).reduce(accumulateAnswer(model.correctResponse), 0);\n\n let total = model.correctResponse.length;\n let numIncorrect = 0;\n\n if ((session.answer || []).length > total) {\n numIncorrect = (session.answer || []).length - total;\n }\n\n if (total === 0) {\n total = 1;\n }\n\n let score = numCorrect < 0 ? 0 : (numCorrect - numIncorrect) / total;\n\n if (score < 0) {\n score = 0;\n }\n\n resolve({ score: partialScoringEnabled ? score : score === 1 ? 1 : 0 });\n }\n });\n}\n\nexport function getScore(question, session) {\n return new Promise((resolve) => {\n if (!session || isEmpty(session)) {\n resolve({ score: { scaled: 0 } });\n } else {\n session.answer = session.answer || [];\n\n const corrected = getCorrected(session.answer, cloneDeep(question.correctResponse));\n\n const correctness = getCorrectness(corrected);\n\n if (correctness === 'correct') {\n resolve(score(1.0));\n } else if (correctness === 'incorrect') {\n resolve(score(0.0));\n } else if (correctness === 'partial') {\n const { allowPartialScoring, partialScoring } = question;\n const ps = (partialScoring || []).filter((o) => !isEmpty(o));\n const canDoPartialScoring = allowPartialScoring && ps.length > 0;\n if (canDoPartialScoring) {\n resolve(score(getPartialScore(corrected, ps)));\n } else {\n resolve(score(0.0));\n }\n } else {\n resolve({ score: { scaled: -1 } });\n }\n }\n });\n}\n\nexport const CLOSE_TO_PRECISION = 3;\n\nexport const closeTo = (a, b, precision) => {\n precision = precision || 5;\n const expectedDiff = Math.pow(10, -precision) / 2;\n const receivedDiff = Math.abs(a - b);\n const close = receivedDiff <= expectedDiff;\n return close;\n};\n\nconst matches = (a) => (v) => {\n return isEqualWith(a, v, (v, ov) => {\n if (typeof v === 'number' && typeof ov === 'number') {\n return closeTo(v, ov, CLOSE_TO_PRECISION);\n }\n });\n};\n\nexport const getCorrected = (answer, correctResponse) => {\n if (isEmpty(correctResponse) && answer.length > 0) {\n return {\n correct: [],\n incorrect: [],\n notInAnswer: [],\n noCorrectResponse: true,\n };\n }\n\n return answer.reduce(\n (acc, a, index) => {\n const { correct, incorrect, notInAnswer } = acc;\n\n const match = find(notInAnswer, matches(a));\n if (match) {\n correct.push(index);\n notInAnswer.splice(notInAnswer.indexOf(match), 1);\n } else {\n incorrect.push(index);\n }\n\n return {\n correct: correct,\n incorrect: incorrect,\n notInAnswer: notInAnswer,\n };\n },\n {\n correct: [],\n incorrect: [],\n notInAnswer: correctResponse,\n },\n );\n};\n\nexport const getCorrectness = (corrected) => {\n const { incorrect, correct, notInAnswer, noCorrectResponse } = corrected;\n\n if (noCorrectResponse) {\n return 'unknown';\n }\n\n if (incorrect.length === 0 && correct.length === 0) {\n return 'unanswered';\n }\n\n if (incorrect.length === 0 && notInAnswer.length === 0) {\n return 'correct';\n }\n\n if (incorrect.length > 0 || notInAnswer.length > 0) {\n if (correct.length > 0) {\n return 'partial';\n } else {\n return 'incorrect';\n }\n }\n\n return 'unknown';\n};\n\n/**\n * A sample of a normalize function see:\n * https://github.com/pie-framework/pie-elements/issues/21\n */\nexport function normalize(question) {\n const feedback = merge(defaults.feedback, question.feedback);\n\n return { ...defaults, ...question, feedback };\n}\n\nexport function createDefaultModel(model = {}) {\n return new Promise((resolve) => {\n const out = {\n ...model,\n graph: {\n ...defaults.graph,\n ...model.graph,\n },\n colorContrast: 'black_on_white',\n };\n\n resolve(omitBy(out, (v) => !v));\n });\n}\n\n// this function is duplicated in configure; at some point, use the same shared function\nconst updateTicks = (model) => {\n const { graph: { domain, labelStep, ticks = {} } = {} } = model;\n const { minor, major } = ticks;\n\n if (domain) {\n domain.min = Number((domain.min || 0).toFixed(2));\n domain.max = Number((domain.max || 0).toFixed(2));\n }\n\n if (labelStep && typeof labelStep === 'string' && labelStep.match(/^[1-9][0-9]*\\/[1-9][0-9]*$/g)) {\n model.graph.fraction = true;\n ticks.tickIntervalType = 'Fraction';\n\n // update the ticks frequency and label value to match the label step if needed\n const step = math.evaluate(labelStep);\n\n if (step !== major) {\n ticks.major = step;\n ticks.minor = step / (major / minor);\n }\n }\n\n return model;\n};\n\nexport function model(question, session, env) {\n if (!question) {\n return Promise.reject(new Error('question is null'));\n }\n\n return new Promise(async (resolve, reject) => {\n const normalizedQuestion = await normalize(question);\n const normalizedModel = updateTicks(normalizedQuestion);\n // this function is also called in configure, it is a duplicate to maintain consistency and correctness\n const graph = reloadTicksData(normalizedModel.graph);\n\n if (graph) {\n const evaluateMode = env.mode === 'evaluate';\n\n const correctResponse = cloneDeep(normalizedQuestion.correctResponse);\n const corrected = evaluateMode && getCorrected(session ? session.answer || [] : [], correctResponse);\n const correctness = evaluateMode && getCorrectness(corrected);\n\n const { exhibitOnly } = graph;\n const disabled = env.mode !== 'gather' || exhibitOnly === true;\n let teacherInstructions = null;\n\n if (env.role === 'instructor' && (env.mode === 'view' || evaluateMode)) {\n teacherInstructions = normalizedQuestion.teacherInstructions;\n }\n\n const fb = evaluateMode\n ? getFeedbackForCorrectness(correctness, normalizedQuestion.feedback)\n : Promise.resolve(undefined);\n\n fb.then((feedbackMessage) => {\n const out = {\n prompt: normalizedQuestion.prompt,\n teacherInstructions,\n graph,\n disabled,\n corrected,\n correctResponse:\n evaluateMode && ['unanswered', 'correct'].indexOf(correctness) === -1 && normalizedQuestion.correctResponse,\n feedback: feedbackMessage && {\n type: correctness,\n message: feedbackMessage,\n },\n colorContrast: (env.accessibility && env.accessibility.colorContrast) || 'black_on_white',\n language: normalizedQuestion.language,\n extraCSSRules: normalizedQuestion.extraCSSRules,\n };\n resolve(omitBy(out, (v) => !v));\n });\n } else {\n reject(new Error('graph is undefined'));\n }\n });\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { correctResponse: answer } = question;\n\n resolve({\n answer,\n id: '1',\n });\n } else {\n resolve(null);\n }\n });\n};\n\n// remove all html tags\nconst getInnerText = (html) => (html || '').replaceAll(/<[^>]*>/g, '');\n\n// remove all html tags except img and iframe\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe)([^>]+)>)/gi, '');\n\nexport const validate = (model = {}, config = {}) => {\n const { graph, correctResponse } = model || {};\n const { maxMaxElements = 20, numberLineDimensions: { min: minWidth = 200, max: maxWidth = 800 } = {} } = config || {};\n const { width, domain, maxNumberOfPoints } = graph || {};\n const { min, max } = domain || {};\n const errors = {};\n\n ['teacherInstructions', 'prompt'].forEach((field) => {\n if (config[field]?.required && !getContent(model[field])) {\n errors[field] = 'This field is required.';\n }\n });\n\n if (width < minWidth || width > maxWidth) {\n errors.widthError = `Width should be a value between ${minWidth} and ${maxWidth}.`;\n }\n\n const MIN_DOMAIN = -100000;\n const MAX_DOMAIN = 100000;\n\n if (min < MIN_DOMAIN || min > MAX_DOMAIN || max < MIN_DOMAIN || max > MAX_DOMAIN) {\n errors.domainError = `Min and max values must both be in the range [${MIN_DOMAIN}, ${MAX_DOMAIN}].`;\n }\n\n if (min >= max) {\n errors.maxError = 'Max value must be greater than min value.';\n }\n\n if (maxNumberOfPoints < 1 || maxNumberOfPoints > maxMaxElements) {\n errors.pointsError = `Max number of elements should be between 1 and ${maxMaxElements}.`;\n }\n\n if (correctResponse && correctResponse.length === 0) {\n errors.correctResponseError = 'The correct answer should include at least one number line object.';\n }\n\n return errors;\n};\n"],"file":"index.js"}
@@ -175,6 +175,24 @@ var limit = function limit(v, min, max) {
175
175
 
176
176
  return v;
177
177
  };
178
+ /*
179
+ * Function to get tick interval limits based on min, max and width entered by the user.
180
+ * @param domain object containing max and min value.
181
+ * @param width number represents width of number line.
182
+ * */
183
+
184
+
185
+ var getMinorLimits = function getMinorLimits(domain, width) {
186
+ var end = domain.max - domain.min;
187
+ var min = math.number(math.multiply(10, math.divide(math.fraction(end), width)));
188
+ var max = math.number(math.multiply(20, min));
189
+ return {
190
+ min: min,
191
+ max: max
192
+ };
193
+ };
194
+
195
+ exports.getMinorLimits = getMinorLimits;
178
196
 
179
197
  var isMultiple = function isMultiple(multiple, src) {
180
198
  var mod = math.mod(multiple, src);
@@ -242,31 +260,31 @@ var buildTickDataAsFractions = function buildTickDataAsFractions(domain, width,
242
260
  });
243
261
  return o;
244
262
  };
245
-
246
- var buildTickData = function buildTickData(domain, width, ticks, opts) {
247
- var result = buildTickDataAsFractions(domain, width, ticks, opts);
248
- var out = result.map(function (o) {
249
- return opts.fraction ? o : _objectSpread(_objectSpread({}, o), {}, {
250
- x: math.number(o.x) || 0
251
- });
252
- });
253
- return out;
254
- };
255
263
  /*
256
- * Function to get tick interval limits based on min, max and width entered by the user.
257
- * @param domain object containing max and min value.
258
- * @param width number represents width of number line.
264
+ * This function will generate tick interval values based on min and max limits of ticks.
265
+ * @param minorLimits object containing min and max values
266
+ * @return out object containing three arrays 1. fraction values, 2. decimal values,
259
267
  * */
260
268
 
261
269
 
262
- var getMinorLimits = function getMinorLimits(domain, width) {
263
- var end = domain.max - domain.min;
264
- var min = math.number(math.multiply(10, math.divide(math.fraction(end), width)));
265
- var max = math.number(math.multiply(20, min));
266
- return {
267
- min: min,
268
- max: max
270
+ var generateMinorValues = function generateMinorValues(minorLimits) {
271
+ var out = {
272
+ fraction: [],
273
+ decimal: []
269
274
  };
275
+ decimalTickValues.forEach(function (value) {
276
+ if (value >= minorLimits.min && value <= minorLimits.max) {
277
+ out.decimal.push(value);
278
+ }
279
+ });
280
+ fractionTickValues.forEach(function (value) {
281
+ var decimalValue = math.number(math.fraction(value));
282
+
283
+ if (decimalValue >= minorLimits.min && decimalValue <= minorLimits.max) {
284
+ out.fraction.push(value);
285
+ }
286
+ });
287
+ return out;
270
288
  };
271
289
  /*
272
290
  * This function will generate label interval values for provided tick interval value.
@@ -277,7 +295,7 @@ var getMinorLimits = function getMinorLimits(domain, width) {
277
295
  * */
278
296
 
279
297
 
280
- exports.getMinorLimits = getMinorLimits;
298
+ exports.generateMinorValues = generateMinorValues;
281
299
 
282
300
  var generateMajorValuesForMinor = function generateMajorValuesForMinor(minor, domain, width) {
283
301
  var out = {
@@ -337,34 +355,16 @@ var generateMajorValuesForMinor = function generateMajorValuesForMinor(minor, do
337
355
 
338
356
  return out;
339
357
  };
340
- /*
341
- * This function will generate tick interval values based on min and max limits of ticks.
342
- * @param minorLimits object containing min and max values
343
- * @return out object containing three arrays 1. fraction values, 2. decimal values,
344
- * */
345
-
346
358
 
347
359
  exports.generateMajorValuesForMinor = generateMajorValuesForMinor;
348
360
 
349
- var generateMinorValues = function generateMinorValues(minorLimits) {
350
- var out = {
351
- fraction: [],
352
- decimal: []
353
- };
354
- decimalTickValues.forEach(function (value) {
355
- if (value >= minorLimits.min && value <= minorLimits.max) {
356
- out.decimal.push(value);
357
- }
358
- });
359
- fractionTickValues.forEach(function (value) {
360
- var decimalValue = math.number(math.fraction(value));
361
-
362
- if (decimalValue >= minorLimits.min && decimalValue <= minorLimits.max) {
363
- out.fraction.push(value);
364
- }
361
+ var buildTickData = function buildTickData(domain, width, ticks, opts) {
362
+ var result = buildTickDataAsFractions(domain, width, ticks, opts);
363
+ var out = result.map(function (o) {
364
+ return opts.fraction ? o : _objectSpread(_objectSpread({}, o), {}, {
365
+ x: math.number(o.x) || 0
366
+ });
365
367
  });
366
368
  return out;
367
369
  };
368
-
369
- exports.generateMinorValues = generateMinorValues;
370
370
  //# sourceMappingURL=tickUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/tickUtils.js"],"names":["decimalTickValues","fractionTickValues","labelMultiplier","fractionRange","start","end","interval","m","math","mod","abs","equal","Error","e","subtract","direction","larger","largerEq","smallerEq","compareFn","out","next","push","add","zbrErrorMessage","zeroBasedRange","fraction","length","a","multiplier","smaller","s","r","map","v","multiply","reverse","fmin","b","fmax","simpleRange","positiveRange","negativeRange","together","concat","closeTo","precision","expectedDiff","Math","pow","receivedDiff","limit","min","max","isMultiple","multiple","src","n","d","normalizeTicks","domain","width","ticks","opts","useLimit","minorLimits","getMinorLimits","minor","major","isMajorMultiple","divide","multiplyBy","round","buildTickDataAsFractions","rng","o","filter","x","type","modulo","number","buildTickData","result","generateMajorValuesForMinor","decimal","i","num","ticksData","output","undefined","toString","multiplierKey","generateMinorValues","forEach","value","decimalValue"],"mappings":"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","sourcesContent":["import * as math from 'mathjs';\nimport uniqWith from 'lodash/uniqWith';\nimport isObject from 'lodash/isObject';\nimport isNumber from 'lodash/isNumber';\n\n// All these functions are duplicated in src/number-line/graph/tick-utils\n\n/*This will store the possible decimal tick values*/\nconst decimalTickValues = [0.001, 0.01, 0.02, 0.04, 0.05, 0.1, 0.125, 0.2, 0.25, 0.5];\n\n/*This will store the possible fraction tick values*/\nconst fractionTickValues = [\n '1/1000',\n '1/100',\n '1/64',\n '1/50',\n '1/32',\n '1/25',\n '1/20',\n '1/16',\n '1/15',\n '1/12',\n '1/10',\n '1/9',\n '1/8',\n '1/7',\n '1/6',\n '1/5',\n '1/4',\n '1/3',\n '1/2',\n];\n\n/*This const will store possible multiplier for label interval that needs to be multiplied\nwith tick interval with denominator represented with object key.*/\nconst labelMultiplier = {\n 1: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],\n 2: [1, 2, 4, 6, 8, 10],\n 3: [1, 3, 6, 9],\n 4: [1, 2, 4, 8],\n 5: [1, 5, 10],\n 6: [1, 2, 3, 6],\n 7: [1, 7],\n 8: [1, 2, 4, 8],\n 9: [1, 3, 9],\n 10: [1, 2, 5, 10],\n 12: [1, 2, 3, 4, 6],\n 15: [1, 3, 5],\n 16: [1, 2, 4, 8],\n 20: [1, 2, 4, 5, 10],\n 25: [1, 5],\n 32: [1, 2, 4, 8],\n 50: [1, 2, 5, 10],\n 64: [1, 2, 4, 8],\n 100: [1, 2, 4, 5, 10],\n 1000: [1, 2, 4, 5, 8, 10],\n};\n\nconst fractionRange = (start, end, interval) => {\n const m = math.mod(math.abs(start), math.abs(interval));\n if (!math.equal(m, 0)) {\n throw new Error('start point must be divisible by interval');\n }\n\n if (math.equal(start, end)) {\n return [];\n }\n\n const e = math.subtract(end, math.mod(end, math.abs(interval)));\n\n const direction = math.larger(interval, 0) ? 'positive' : 'negative';\n\n if (direction === 'negative' && math.largerEq(end, start)) {\n throw new Error('start must be > than end when doing a negative decrement');\n }\n if (direction === 'positive' && math.smallerEq(end, start)) {\n throw new Error('start must be < end when doing increments');\n }\n const compareFn = direction === 'positive' ? math.smallerEq : math.equal(e, end) ? math.largerEq : math.larger;\n const out = [];\n\n let next = start;\n while (compareFn(next, e)) {\n out.push(next);\n next = math.add(next, interval);\n }\n return out;\n};\n\nconst zbrErrorMessage = (start, end) =>\n `Can only do a positive or negative range, but got: start: ${start} and end:${end}`;\n\nconst zeroBasedRange = (start, end, interval) => {\n start = math.fraction(start);\n end = math.fraction(end);\n interval = math.fraction(interval);\n\n const length = math.abs(math.subtract(end, start));\n\n if (math.larger(length, math.abs(end))) {\n throw new Error(zbrErrorMessage(start, end));\n }\n const a = {\n start: math.abs(start),\n end: math.abs(end),\n interval: math.abs(interval),\n multiplier: math.smaller(interval, 0) ? -1 : 1,\n };\n\n const m = math.mod(a.start, a.interval);\n const s = math.larger(m, 0) ? math.add(math.subtract(a.start, m), a.interval) : a.start;\n\n const r = fractionRange(s, a.end, a.interval);\n const out = a.multiplier === -1 ? r.map((v) => math.multiply(v, -1)) : r;\n\n if (math.smaller(interval, 0)) {\n out.reverse();\n }\n return out;\n};\n\nconst fmin = (a, b) => {\n a = math.fraction(a);\n b = math.fraction(b);\n return math.smaller(a, b) ? a : b;\n};\n\nconst fmax = (a, b) => {\n a = math.fraction(a);\n b = math.fraction(b);\n return math.larger(a, b) ? a : b;\n};\n/**\n * the lodash range was causing too much variance in the rounding errors\n * such that it was hard to round the numbers.\n * This is a more simplistic version but makes rounding work.\n */\nconst simpleRange = (start, end, interval) => {\n start = math.fraction(start);\n end = math.fraction(end);\n interval = math.fraction(interval);\n\n const positiveRange = math.larger(end, 0) ? zeroBasedRange(fmax(0, start), end, interval) : [];\n\n const negativeRange = math.smaller(start, 0) ? zeroBasedRange(fmin(0, end), start, math.multiply(interval, -1)) : [];\n let together = negativeRange.concat(positiveRange);\n\n const out = uniqWith(together, math.equal);\n return out;\n};\n\nconst closeTo = (a, b, precision) => {\n precision = precision || 2;\n const expectedDiff = Math.pow(10, -precision) / 2;\n const receivedDiff = Math.abs(a - b);\n return receivedDiff < expectedDiff;\n};\n\nconst limit = (v, min, max) => {\n if (math.smaller(fraction(v), fraction(min))) {\n return min;\n }\n\n if (math.larger(fraction(v), fraction(max))) {\n return max;\n }\n\n return v;\n};\n\nconst isMultiple = (multiple, src) => {\n const mod = math.mod(multiple, src);\n return math.equal(mod, 0);\n};\n\n/**\n * Accepts a fraction object {n,d,s} or number.\n * @param {*} v\n * @return mathjs.fraction\n */\nconst fraction = (v) => {\n if (isObject(v)) {\n return math.fraction(v.n * v.s, v.d);\n } else if (isNumber(v)) {\n return math.fraction(v);\n }\n};\n\nconst normalizeTicks = (domain, width, ticks, opts) => {\n const useLimit = opts ? opts.limit !== false : true;\n const minorLimits = getMinorLimits(domain, width);\n\n const minor = useLimit ? limit(fraction(ticks.minor), minorLimits.min, minorLimits.max) : fraction(ticks.minor);\n const major = useLimit ? limit(fraction(ticks.major), minor, math.multiply(minor, 20)) : fraction(ticks.major);\n\n const isMajorMultiple = isMultiple(major, minor);\n\n if (!isMajorMultiple) {\n const multiplier = math.divide(major, minor);\n const multiplyBy = multiplier <= 2 ? 2 : Math.round(multiplier);\n\n // major must be a multiple of minor\n return { minor, major: math.multiply(minor, multiplyBy) };\n }\n\n return { major, minor };\n};\n\n/**\n * Build ticks as an array of mathjs Fractions\n */\nconst buildTickDataAsFractions = (domain, width, ticks, opts) => {\n ticks = normalizeTicks(domain, width, ticks, opts);\n const rng = simpleRange(domain.min, domain.max, ticks.minor);\n\n const o = rng\n .filter((x) => math.smallerEq(x, math.fraction(domain.max)))\n .map((x) => {\n let type = 'minor';\n const modulo = math.mod(x, ticks.major);\n\n if (closeTo(math.number(modulo), 0)) {\n type = 'major';\n }\n\n return { x, type };\n });\n\n return o;\n};\n\nconst buildTickData = (domain, width, ticks, opts) => {\n const result = buildTickDataAsFractions(domain, width, ticks, opts);\n\n const out = result.map((o) => (opts.fraction ? o : { ...o, x: math.number(o.x) || 0 }));\n\n return out;\n};\n\n/*\n * Function to get tick interval limits based on min, max and width entered by the user.\n * @param domain object containing max and min value.\n * @param width number represents width of number line.\n * */\nexport const getMinorLimits = (domain, width) => {\n const end = domain.max - domain.min;\n const min = math.number(math.multiply(10, math.divide(math.fraction(end), width)));\n const max = math.number(math.multiply(20, min));\n return {\n min: min,\n max: max,\n };\n};\n\n/*\n * This function will generate label interval values for provided tick interval value.\n * @param minor number representing tick interval value.\n * @param domain object containing min and max values.\n * @param width number representing width of number line.\n * @return out object containing three arrays 1. fraction values, 2. decimal values,\n * */\nexport const generateMajorValuesForMinor = (minor, domain, width) => {\n let out = { decimal: [], fraction: [] };\n let fraction = math.fraction(math.number(math.number(minor)));\n let n = fraction.n;\n let d = fraction.d;\n if (n >= 1 && d === 1) {\n for (let i = 1; i <= 10; i++) {\n let num = math.number(math.multiply(n, i));\n //Here we check if this major value can plot at least 2 points on number line.\n let ticksData = { minor: minor, major: num };\n let output = buildTickData(domain, width, ticksData, { fraction: undefined });\n if (output.filter((x) => x.type === 'major').length > 1) {\n out.fraction.push(num.toString());\n out.decimal.push(num);\n }\n }\n } else {\n for (const multiplierKey in labelMultiplier[d]) {\n let num = math.multiply(math.fraction(n, d), labelMultiplier[d][multiplierKey]);\n //Here we check if this major value can plot at least 2 points on number line.\n let ticksData = { minor: minor, major: math.number(num) };\n let output = buildTickData(domain, width, ticksData, { fraction: undefined });\n if (output.filter((x) => x.type === 'major').length > 1) {\n if (num.d !== 1) {\n out.fraction.push(num.n + '/' + num.d);\n } else {\n out.fraction.push(num.n.toString());\n }\n out.decimal.push(math.number(num));\n }\n }\n }\n return out;\n};\n\n/*\n * This function will generate tick interval values based on min and max limits of ticks.\n * @param minorLimits object containing min and max values\n * @return out object containing three arrays 1. fraction values, 2. decimal values,\n * */\nexport const generateMinorValues = (minorLimits) => {\n let out = { fraction: [], decimal: [] };\n decimalTickValues.forEach((value) => {\n if (value >= minorLimits.min && value <= minorLimits.max) {\n out.decimal.push(value);\n }\n });\n fractionTickValues.forEach((value) => {\n let decimalValue = math.number(math.fraction(value));\n if (decimalValue >= minorLimits.min && decimalValue <= minorLimits.max) {\n out.fraction.push(value);\n }\n });\n return out;\n};\n"],"file":"tickUtils.js"}
1
+ {"version":3,"sources":["../src/tickUtils.js"],"names":["decimalTickValues","fractionTickValues","labelMultiplier","fractionRange","start","end","interval","m","math","mod","abs","equal","Error","e","subtract","direction","larger","largerEq","smallerEq","compareFn","out","next","push","add","zbrErrorMessage","zeroBasedRange","fraction","length","a","multiplier","smaller","s","r","map","v","multiply","reverse","fmin","b","fmax","simpleRange","positiveRange","negativeRange","together","concat","closeTo","precision","expectedDiff","Math","pow","receivedDiff","limit","min","max","getMinorLimits","domain","width","number","divide","isMultiple","multiple","src","n","d","normalizeTicks","ticks","opts","useLimit","minorLimits","minor","major","isMajorMultiple","multiplyBy","round","buildTickDataAsFractions","rng","o","filter","x","type","modulo","generateMinorValues","decimal","forEach","value","decimalValue","generateMajorValuesForMinor","i","num","ticksData","output","buildTickData","undefined","toString","multiplierKey","result"],"mappings":"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","sourcesContent":["import * as math from 'mathjs';\nimport uniqWith from 'lodash/uniqWith';\nimport isObject from 'lodash/isObject';\nimport isNumber from 'lodash/isNumber';\n\n// All these functions are duplicated in src/number-line/graph/tick-utils\n\n/*This will store the possible decimal tick values*/\nconst decimalTickValues = [0.001, 0.01, 0.02, 0.04, 0.05, 0.1, 0.125, 0.2, 0.25, 0.5];\n\n/*This will store the possible fraction tick values*/\nconst fractionTickValues = [\n '1/1000',\n '1/100',\n '1/64',\n '1/50',\n '1/32',\n '1/25',\n '1/20',\n '1/16',\n '1/15',\n '1/12',\n '1/10',\n '1/9',\n '1/8',\n '1/7',\n '1/6',\n '1/5',\n '1/4',\n '1/3',\n '1/2',\n];\n\n/*This const will store possible multiplier for label interval that needs to be multiplied\nwith tick interval with denominator represented with object key.*/\nconst labelMultiplier = {\n 1: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],\n 2: [1, 2, 4, 6, 8, 10],\n 3: [1, 3, 6, 9],\n 4: [1, 2, 4, 8],\n 5: [1, 5, 10],\n 6: [1, 2, 3, 6],\n 7: [1, 7],\n 8: [1, 2, 4, 8],\n 9: [1, 3, 9],\n 10: [1, 2, 5, 10],\n 12: [1, 2, 3, 4, 6],\n 15: [1, 3, 5],\n 16: [1, 2, 4, 8],\n 20: [1, 2, 4, 5, 10],\n 25: [1, 5],\n 32: [1, 2, 4, 8],\n 50: [1, 2, 5, 10],\n 64: [1, 2, 4, 8],\n 100: [1, 2, 4, 5, 10],\n 1000: [1, 2, 4, 5, 8, 10],\n};\n\nconst fractionRange = (start, end, interval) => {\n const m = math.mod(math.abs(start), math.abs(interval));\n if (!math.equal(m, 0)) {\n throw new Error('start point must be divisible by interval');\n }\n\n if (math.equal(start, end)) {\n return [];\n }\n\n const e = math.subtract(end, math.mod(end, math.abs(interval)));\n\n const direction = math.larger(interval, 0) ? 'positive' : 'negative';\n\n if (direction === 'negative' && math.largerEq(end, start)) {\n throw new Error('start must be > than end when doing a negative decrement');\n }\n if (direction === 'positive' && math.smallerEq(end, start)) {\n throw new Error('start must be < end when doing increments');\n }\n const compareFn = direction === 'positive' ? math.smallerEq : math.equal(e, end) ? math.largerEq : math.larger;\n const out = [];\n\n let next = start;\n while (compareFn(next, e)) {\n out.push(next);\n next = math.add(next, interval);\n }\n return out;\n};\n\nconst zbrErrorMessage = (start, end) =>\n `Can only do a positive or negative range, but got: start: ${start} and end:${end}`;\n\nconst zeroBasedRange = (start, end, interval) => {\n start = math.fraction(start);\n end = math.fraction(end);\n interval = math.fraction(interval);\n\n const length = math.abs(math.subtract(end, start));\n\n if (math.larger(length, math.abs(end))) {\n throw new Error(zbrErrorMessage(start, end));\n }\n const a = {\n start: math.abs(start),\n end: math.abs(end),\n interval: math.abs(interval),\n multiplier: math.smaller(interval, 0) ? -1 : 1,\n };\n\n const m = math.mod(a.start, a.interval);\n const s = math.larger(m, 0) ? math.add(math.subtract(a.start, m), a.interval) : a.start;\n\n const r = fractionRange(s, a.end, a.interval);\n const out = a.multiplier === -1 ? r.map((v) => math.multiply(v, -1)) : r;\n\n if (math.smaller(interval, 0)) {\n out.reverse();\n }\n return out;\n};\n\nconst fmin = (a, b) => {\n a = math.fraction(a);\n b = math.fraction(b);\n return math.smaller(a, b) ? a : b;\n};\n\nconst fmax = (a, b) => {\n a = math.fraction(a);\n b = math.fraction(b);\n return math.larger(a, b) ? a : b;\n};\n/**\n * the lodash range was causing too much variance in the rounding errors\n * such that it was hard to round the numbers.\n * This is a more simplistic version but makes rounding work.\n */\nconst simpleRange = (start, end, interval) => {\n start = math.fraction(start);\n end = math.fraction(end);\n interval = math.fraction(interval);\n\n const positiveRange = math.larger(end, 0) ? zeroBasedRange(fmax(0, start), end, interval) : [];\n\n const negativeRange = math.smaller(start, 0) ? zeroBasedRange(fmin(0, end), start, math.multiply(interval, -1)) : [];\n let together = negativeRange.concat(positiveRange);\n\n const out = uniqWith(together, math.equal);\n return out;\n};\n\nconst closeTo = (a, b, precision) => {\n precision = precision || 2;\n const expectedDiff = Math.pow(10, -precision) / 2;\n const receivedDiff = Math.abs(a - b);\n return receivedDiff < expectedDiff;\n};\n\nconst limit = (v, min, max) => {\n if (math.smaller(fraction(v), fraction(min))) {\n return min;\n }\n\n if (math.larger(fraction(v), fraction(max))) {\n return max;\n }\n\n return v;\n};\n\n/*\n * Function to get tick interval limits based on min, max and width entered by the user.\n * @param domain object containing max and min value.\n * @param width number represents width of number line.\n * */\nexport const getMinorLimits = (domain, width) => {\n const end = domain.max - domain.min;\n const min = math.number(math.multiply(10, math.divide(math.fraction(end), width)));\n const max = math.number(math.multiply(20, min));\n return {\n min: min,\n max: max,\n };\n};\n\nconst isMultiple = (multiple, src) => {\n const mod = math.mod(multiple, src);\n return math.equal(mod, 0);\n};\n\n/**\n * Accepts a fraction object {n,d,s} or number.\n * @param {*} v\n * @return mathjs.fraction\n */\nconst fraction = (v) => {\n if (isObject(v)) {\n return math.fraction(v.n * v.s, v.d);\n } else if (isNumber(v)) {\n return math.fraction(v);\n }\n};\n\nconst normalizeTicks = (domain, width, ticks, opts) => {\n const useLimit = opts ? opts.limit !== false : true;\n const minorLimits = getMinorLimits(domain, width);\n\n const minor = useLimit ? limit(fraction(ticks.minor), minorLimits.min, minorLimits.max) : fraction(ticks.minor);\n const major = useLimit ? limit(fraction(ticks.major), minor, math.multiply(minor, 20)) : fraction(ticks.major);\n\n const isMajorMultiple = isMultiple(major, minor);\n\n if (!isMajorMultiple) {\n const multiplier = math.divide(major, minor);\n const multiplyBy = multiplier <= 2 ? 2 : Math.round(multiplier);\n\n // major must be a multiple of minor\n return { minor, major: math.multiply(minor, multiplyBy) };\n }\n\n return { major, minor };\n};\n\n/**\n * Build ticks as an array of mathjs Fractions\n */\nconst buildTickDataAsFractions = (domain, width, ticks, opts) => {\n ticks = normalizeTicks(domain, width, ticks, opts);\n const rng = simpleRange(domain.min, domain.max, ticks.minor);\n\n const o = rng\n .filter((x) => math.smallerEq(x, math.fraction(domain.max)))\n .map((x) => {\n let type = 'minor';\n const modulo = math.mod(x, ticks.major);\n\n if (closeTo(math.number(modulo), 0)) {\n type = 'major';\n }\n\n return { x, type };\n });\n\n return o;\n};\n\n/*\n * This function will generate tick interval values based on min and max limits of ticks.\n * @param minorLimits object containing min and max values\n * @return out object containing three arrays 1. fraction values, 2. decimal values,\n * */\nexport const generateMinorValues = (minorLimits) => {\n let out = { fraction: [], decimal: [] };\n decimalTickValues.forEach((value) => {\n if (value >= minorLimits.min && value <= minorLimits.max) {\n out.decimal.push(value);\n }\n });\n fractionTickValues.forEach((value) => {\n let decimalValue = math.number(math.fraction(value));\n if (decimalValue >= minorLimits.min && decimalValue <= minorLimits.max) {\n out.fraction.push(value);\n }\n });\n return out;\n};\n\n/*\n * This function will generate label interval values for provided tick interval value.\n * @param minor number representing tick interval value.\n * @param domain object containing min and max values.\n * @param width number representing width of number line.\n * @return out object containing three arrays 1. fraction values, 2. decimal values,\n * */\nexport const generateMajorValuesForMinor = (minor, domain, width) => {\n let out = { decimal: [], fraction: [] };\n let fraction = math.fraction(math.number(math.number(minor)));\n let n = fraction.n;\n let d = fraction.d;\n if (n >= 1 && d === 1) {\n for (let i = 1; i <= 10; i++) {\n let num = math.number(math.multiply(n, i));\n //Here we check if this major value can plot at least 2 points on number line.\n let ticksData = { minor: minor, major: num };\n let output = buildTickData(domain, width, ticksData, { fraction: undefined });\n if (output.filter((x) => x.type === 'major').length > 1) {\n out.fraction.push(num.toString());\n out.decimal.push(num);\n }\n }\n } else {\n for (const multiplierKey in labelMultiplier[d]) {\n let num = math.multiply(math.fraction(n, d), labelMultiplier[d][multiplierKey]);\n //Here we check if this major value can plot at least 2 points on number line.\n let ticksData = { minor: minor, major: math.number(num) };\n let output = buildTickData(domain, width, ticksData, { fraction: undefined });\n if (output.filter((x) => x.type === 'major').length > 1) {\n if (num.d !== 1) {\n out.fraction.push(num.n + '/' + num.d);\n } else {\n out.fraction.push(num.n.toString());\n }\n out.decimal.push(math.number(num));\n }\n }\n }\n return out;\n};\n\nconst buildTickData = (domain, width, ticks, opts) => {\n const result = buildTickDataAsFractions(domain, width, ticks, opts);\n\n const out = result.map((o) => (opts.fraction ? o : { ...o, x: math.number(o.x) || 0 }));\n\n return out;\n};\n"],"file":"tickUtils.js"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pie-element/number-line-controller",
3
3
  "private": true,
4
- "version": "6.2.0",
4
+ "version": "6.2.1",
5
5
  "description": "Controller logic for @pie-ui/number-line",
6
6
  "keywords": [
7
7
  "pie",
@@ -14,7 +14,7 @@
14
14
  "access": "public"
15
15
  },
16
16
  "dependencies": {
17
- "@pie-lib/pie-toolbox": "2.13.0",
17
+ "@pie-lib/pie-toolbox": "2.14.0",
18
18
  "lodash": "^4.17.15",
19
19
  "mathjs": "^7.5.1"
20
20
  },
@@ -7,7 +7,7 @@ var _typeof = require("@babel/runtime/helpers/typeof");
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
10
- exports.zeroBasedRange = exports.zbrErrorMessage = exports.testSharedFunction = exports.snapTo = exports.snapElements = exports.simpleRange = exports.normalizeTicks = exports.labelMultiplier = exports.isMultiple = exports.getMinorLimits = exports.generateMinorValues = exports.generateMajorValuesForMinor = exports.fractionTickValues = exports.fractionSnapTo = exports.fractionRange = exports.fraction = exports.decimalTickValues = exports.closeTo = exports.buildTickDataAsFractions = exports.buildTickData = void 0;
10
+ exports.zeroBasedRange = exports.zbrErrorMessage = exports.snapTo = exports.snapElements = exports.simpleRange = exports.normalizeTicks = exports.labelMultiplier = exports.isMultiple = exports.getMinorLimits = exports.generateMinorValues = exports.generateMajorValuesForMinor = exports.fractionTickValues = exports.fractionSnapTo = exports.fractionRange = exports.fraction = exports.decimalTickValues = exports.closeTo = exports.buildTickDataAsFractions = exports.buildTickData = void 0;
11
11
 
12
12
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
13
 
@@ -19,8 +19,6 @@ var _isObject = _interopRequireDefault(require("lodash/isObject"));
19
19
 
20
20
  var _isNumber = _interopRequireDefault(require("lodash/isNumber"));
21
21
 
22
- var _index = require("../../index");
23
-
24
22
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
25
23
 
26
24
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -65,33 +63,6 @@ var labelMultiplier = {
65
63
  };
66
64
  exports.labelMultiplier = labelMultiplier;
67
65
 
68
- var fractionSnapTo = function fractionSnapTo(min, max, interval, value) {
69
- value = fmax(fmin(value, max), min);
70
- var mod = value.mod(interval);
71
- var v;
72
- var half = interval.div(2);
73
-
74
- if (math.largerEq(math.abs(mod), half)) {
75
- var d = interval.sub(math.abs(mod));
76
- var fn = math.largerEq(value, 0) ? 'add' : 'sub';
77
- v = value[fn](d);
78
- } else {
79
- var fn2 = math.largerEq(value, 0) ? 'sub' : 'add';
80
- v = value[fn2](math.abs(mod));
81
- }
82
-
83
- return v;
84
- };
85
-
86
- exports.fractionSnapTo = fractionSnapTo;
87
-
88
- var snapTo = function snapTo(min, max, interval, value) {
89
- var out = fractionSnapTo(math.fraction(min), math.fraction(max), math.fraction(interval), math.fraction(value));
90
- return math.number(out);
91
- };
92
-
93
- exports.snapTo = snapTo;
94
-
95
66
  var fractionRange = function fractionRange(start, end, interval) {
96
67
  var m = math.mod(math.abs(start), math.abs(interval));
97
68
 
@@ -364,8 +335,7 @@ var generateMajorValuesForMinor = function generateMajorValuesForMinor(minor, do
364
335
  minor: minor,
365
336
  major: num
366
337
  };
367
-
368
- var output = _index.tickUtils.buildTickData(domain, width, ticksData, {
338
+ var output = buildTickData(domain, width, ticksData, {
369
339
  fraction: undefined
370
340
  });
371
341
 
@@ -386,7 +356,7 @@ var generateMajorValuesForMinor = function generateMajorValuesForMinor(minor, do
386
356
  major: math.number(_num)
387
357
  };
388
358
 
389
- var _output = _index.tickUtils.buildTickData(domain, width, _ticksData, {
359
+ var _output = buildTickData(domain, width, _ticksData, {
390
360
  fraction: undefined
391
361
  });
392
362
 
@@ -421,6 +391,33 @@ var buildTickData = function buildTickData(domain, width, ticks, opts) {
421
391
 
422
392
  exports.buildTickData = buildTickData;
423
393
 
394
+ var fractionSnapTo = function fractionSnapTo(min, max, interval, value) {
395
+ value = fmax(fmin(value, max), min);
396
+ var mod = value.mod(interval);
397
+ var v;
398
+ var half = interval.div(2);
399
+
400
+ if (math.largerEq(math.abs(mod), half)) {
401
+ var d = interval.sub(math.abs(mod));
402
+ var fn = math.largerEq(value, 0) ? 'add' : 'sub';
403
+ v = value[fn](d);
404
+ } else {
405
+ var fn2 = math.largerEq(value, 0) ? 'sub' : 'add';
406
+ v = value[fn2](math.abs(mod));
407
+ }
408
+
409
+ return v;
410
+ };
411
+
412
+ exports.fractionSnapTo = fractionSnapTo;
413
+
414
+ var snapTo = function snapTo(min, max, interval, value) {
415
+ var out = fractionSnapTo(math.fraction(min), math.fraction(max), math.fraction(interval), math.fraction(value));
416
+ return math.number(out);
417
+ };
418
+
419
+ exports.snapTo = snapTo;
420
+
424
421
  var snapElements = function snapElements(domain, ticks, elements) {
425
422
  return elements.map(function (e) {
426
423
  var size = Number.isFinite(e.size) ? snapTo(0, e.size, ticks.minor, e.size) : undefined;
@@ -439,10 +436,4 @@ var snapElements = function snapElements(domain, ticks, elements) {
439
436
  };
440
437
 
441
438
  exports.snapElements = snapElements;
442
-
443
- var testSharedFunction = function testSharedFunction(param) {
444
- return 'test' + param;
445
- };
446
-
447
- exports.testSharedFunction = testSharedFunction;
448
439
  //# sourceMappingURL=tick-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/number-line/graph/tick-utils.js"],"names":["decimalTickValues","fractionTickValues","labelMultiplier","fractionSnapTo","min","max","interval","value","fmax","fmin","mod","v","half","div","math","largerEq","abs","d","sub","fn","fn2","snapTo","out","fraction","number","fractionRange","start","end","m","equal","Error","e","subtract","direction","larger","smallerEq","compareFn","next","push","add","zbrErrorMessage","zeroBasedRange","length","a","multiplier","smaller","s","r","map","multiply","reverse","b","simpleRange","positiveRange","negativeRange","together","concat","closeTo","precision","expectedDiff","Math","pow","receivedDiff","limit","getMinorLimits","domain","width","divide","isMultiple","multiple","src","n","normalizeTicks","ticks","opts","useLimit","minorLimits","minor","major","isMajorMultiple","multiplyBy","round","buildTickDataAsFractions","rng","o","filter","x","type","modulo","generateMinorValues","decimal","forEach","decimalValue","generateMajorValuesForMinor","i","num","ticksData","output","tickUtils","buildTickData","undefined","toString","multiplierKey","result","snapElements","elements","size","Number","isFinite","domainPosition","testSharedFunction","param"],"mappings":"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","sourcesContent":["import * as math from 'mathjs';\nimport uniqWith from 'lodash/uniqWith';\nimport isObject from 'lodash/isObject';\nimport isNumber from 'lodash/isNumber';\nimport { tickUtils } from '../../index';\n\n// All these functions are duplicated in controller/src/tickUtils\n\n/*This will store the possible decimal tick values*/\nexport const decimalTickValues = [0.001, 0.01, 0.02, 0.04, 0.05, 0.1, 0.125, 0.2, 0.25, 0.5];\n\n/*This will store the possible fraction tick values*/\nexport const fractionTickValues = [\n '1/1000',\n '1/100',\n '1/64',\n '1/50',\n '1/32',\n '1/25',\n '1/20',\n '1/16',\n '1/15',\n '1/12',\n '1/10',\n '1/9',\n '1/8',\n '1/7',\n '1/6',\n '1/5',\n '1/4',\n '1/3',\n '1/2',\n];\n\n/*This const will store possible multiplier for label interval that needs to be multiplied\nwith tick interval with denominator represented with object key.*/\nexport const labelMultiplier = {\n 1: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],\n 2: [1, 2, 4, 6, 8, 10],\n 3: [1, 3, 6, 9],\n 4: [1, 2, 4, 8],\n 5: [1, 5, 10],\n 6: [1, 2, 3, 6],\n 7: [1, 7],\n 8: [1, 2, 4, 8],\n 9: [1, 3, 9],\n 10: [1, 2, 5, 10],\n 12: [1, 2, 3, 4, 6],\n 15: [1, 3, 5],\n 16: [1, 2, 4, 8],\n 20: [1, 2, 4, 5, 10],\n 25: [1, 5],\n 32: [1, 2, 4, 8],\n 50: [1, 2, 5, 10],\n 64: [1, 2, 4, 8],\n 100: [1, 2, 4, 5, 10],\n 1000: [1, 2, 4, 5, 8, 10],\n};\n\nexport const fractionSnapTo = (min, max, interval, value) => {\n value = fmax(fmin(value, max), min);\n const mod = value.mod(interval);\n let v;\n\n const half = interval.div(2);\n if (math.largerEq(math.abs(mod), half)) {\n const d = interval.sub(math.abs(mod));\n const fn = math.largerEq(value, 0) ? 'add' : 'sub';\n v = value[fn](d);\n } else {\n const fn2 = math.largerEq(value, 0) ? 'sub' : 'add';\n v = value[fn2](math.abs(mod));\n }\n return v;\n};\n\nexport const snapTo = (min, max, interval, value) => {\n const out = fractionSnapTo(math.fraction(min), math.fraction(max), math.fraction(interval), math.fraction(value));\n return math.number(out);\n};\n\nexport const fractionRange = (start, end, interval) => {\n const m = math.mod(math.abs(start), math.abs(interval));\n if (!math.equal(m, 0)) {\n throw new Error('start point must be divisible by interval');\n }\n\n if (math.equal(start, end)) {\n return [];\n }\n\n const e = math.subtract(end, math.mod(end, math.abs(interval)));\n\n const direction = math.larger(interval, 0) ? 'positive' : 'negative';\n\n if (direction === 'negative' && math.largerEq(end, start)) {\n throw new Error('start must be > than end when doing a negative decrement');\n }\n if (direction === 'positive' && math.smallerEq(end, start)) {\n throw new Error('start must be < end when doing increments');\n }\n const compareFn = direction === 'positive' ? math.smallerEq : math.equal(e, end) ? math.largerEq : math.larger;\n const out = [];\n\n let next = start;\n while (compareFn(next, e)) {\n out.push(next);\n next = math.add(next, interval);\n }\n return out;\n};\n\nexport const zbrErrorMessage = (start, end) =>\n `Can only do a positive or negative range, but got: start: ${start} and end:${end}`;\n\nexport const zeroBasedRange = (start, end, interval) => {\n start = math.fraction(start);\n end = math.fraction(end);\n interval = math.fraction(interval);\n\n const length = math.abs(math.subtract(end, start));\n\n if (math.larger(length, math.abs(end))) {\n throw new Error(zbrErrorMessage(start, end));\n }\n const a = {\n start: math.abs(start),\n end: math.abs(end),\n interval: math.abs(interval),\n multiplier: math.smaller(interval, 0) ? -1 : 1,\n };\n\n const m = math.mod(a.start, a.interval);\n const s = math.larger(m, 0) ? math.add(math.subtract(a.start, m), a.interval) : a.start;\n\n const r = fractionRange(s, a.end, a.interval);\n const out = a.multiplier === -1 ? r.map((v) => math.multiply(v, -1)) : r;\n\n if (math.smaller(interval, 0)) {\n out.reverse();\n }\n return out;\n};\n\nconst fmin = (a, b) => {\n a = math.fraction(a);\n b = math.fraction(b);\n return math.smaller(a, b) ? a : b;\n};\n\nconst fmax = (a, b) => {\n a = math.fraction(a);\n b = math.fraction(b);\n return math.larger(a, b) ? a : b;\n};\n/**\n * the lodash range was causing too much variance in the rounding errors\n * such that it was hard to round the numbers.\n * This is a more simplistic version but makes rounding work.\n */\nexport const simpleRange = (start, end, interval) => {\n start = math.fraction(start);\n end = math.fraction(end);\n interval = math.fraction(interval);\n\n const positiveRange = math.larger(end, 0) ? zeroBasedRange(fmax(0, start), end, interval) : [];\n\n const negativeRange = math.smaller(start, 0) ? zeroBasedRange(fmin(0, end), start, math.multiply(interval, -1)) : [];\n let together = negativeRange.concat(positiveRange);\n\n const out = uniqWith(together, math.equal);\n return out;\n};\n\nexport const closeTo = (a, b, precision) => {\n precision = precision || 2;\n const expectedDiff = Math.pow(10, -precision) / 2;\n const receivedDiff = Math.abs(a - b);\n return receivedDiff < expectedDiff;\n};\n\nconst limit = (v, min, max) => {\n if (math.smaller(fraction(v), fraction(min))) {\n return min;\n }\n\n if (math.larger(fraction(v), fraction(max))) {\n return max;\n }\n\n return v;\n};\n\n/*\n * Function to get tick interval limits based on min, max and width entered by the user.\n * @param domain object containing max and min value.\n * @param width number represents width of number line.\n * */\nexport const getMinorLimits = (domain, width) => {\n const end = domain.max - domain.min;\n const min = math.number(math.multiply(10, math.divide(math.fraction(end), width)));\n const max = math.number(math.multiply(20, min));\n return {\n min: min,\n max: max,\n };\n};\n\nexport const isMultiple = (multiple, src) => {\n const mod = math.mod(multiple, src);\n return math.equal(mod, 0);\n};\n\n/**\n * Accepts a fraction object {n,d,s} or number.\n * @param {*} v\n * @return mathjs.fraction\n */\nexport const fraction = (v) => {\n if (isObject(v)) {\n return math.fraction(v.n * v.s, v.d);\n } else if (isNumber(v)) {\n return math.fraction(v);\n }\n};\n\nexport const normalizeTicks = (domain, width, ticks, opts) => {\n const useLimit = opts ? opts.limit !== false : true;\n const minorLimits = getMinorLimits(domain, width);\n\n const minor = useLimit ? limit(fraction(ticks.minor), minorLimits.min, minorLimits.max) : fraction(ticks.minor);\n const major = useLimit ? limit(fraction(ticks.major), minor, math.multiply(minor, 20)) : fraction(ticks.major);\n\n const isMajorMultiple = isMultiple(major, minor);\n\n if (!isMajorMultiple) {\n const multiplier = math.divide(major, minor);\n const multiplyBy = multiplier <= 2 ? 2 : Math.round(multiplier);\n\n // major must be a multiple of minor\n return { minor, major: math.multiply(minor, multiplyBy) };\n }\n\n return { major, minor };\n};\n\n/**\n * Build ticks as an array of mathjs Fractions\n */\nexport const buildTickDataAsFractions = (domain, width, ticks, opts) => {\n ticks = normalizeTicks(domain, width, ticks, opts);\n const rng = simpleRange(domain.min, domain.max, ticks.minor);\n\n const o = rng\n .filter((x) => math.smallerEq(x, math.fraction(domain.max)))\n .map((x) => {\n let type = 'minor';\n const modulo = math.mod(x, ticks.major);\n\n if (closeTo(math.number(modulo), 0)) {\n type = 'major';\n }\n\n return { x, type };\n });\n\n return o;\n};\n\n/*\n * This function will generate tick interval values based on min and max limits of ticks.\n * @param minorLimits object containing min and max values\n * @return out object containing three arrays 1. fraction values, 2. decimal values,\n * */\nexport const generateMinorValues = (minorLimits) => {\n let out = { fraction: [], decimal: [] };\n decimalTickValues.forEach((value) => {\n if (value >= minorLimits.min && value <= minorLimits.max) {\n out.decimal.push(value);\n }\n });\n fractionTickValues.forEach((value) => {\n let decimalValue = math.number(math.fraction(value));\n if (decimalValue >= minorLimits.min && decimalValue <= minorLimits.max) {\n out.fraction.push(value);\n }\n });\n return out;\n};\n\n/*\n * This function will generate label interval values for provided tick interval value.\n * @param minor number representing tick interval value.\n * @param domain object containing min and max values.\n * @param width number representing width of number line.\n * @return out object containing three arrays 1. fraction values, 2. decimal values,\n * */\nexport const generateMajorValuesForMinor = (minor, domain, width) => {\n let out = { decimal: [], fraction: [] };\n let fraction = math.fraction(math.number(math.number(minor)));\n let n = fraction.n;\n let d = fraction.d;\n if (n >= 1 && d === 1) {\n for (let i = 1; i <= 10; i++) {\n let num = math.number(math.multiply(n, i));\n //Here we check if this major value can plot at least 2 points on number line.\n let ticksData = { minor: minor, major: num };\n let output = tickUtils.buildTickData(domain, width, ticksData, { fraction: undefined });\n if (output.filter((x) => x.type === 'major').length > 1) {\n out.fraction.push(num.toString());\n out.decimal.push(num);\n }\n }\n } else {\n for (const multiplierKey in labelMultiplier[d]) {\n let num = math.multiply(math.fraction(n, d), labelMultiplier[d][multiplierKey]);\n //Here we check if this major value can plot at least 2 points on number line.\n let ticksData = { minor: minor, major: math.number(num) };\n let output = tickUtils.buildTickData(domain, width, ticksData, { fraction: undefined });\n if (output.filter((x) => x.type === 'major').length > 1) {\n if (num.d !== 1) {\n out.fraction.push(num.n + '/' + num.d);\n } else {\n out.fraction.push(num.n.toString());\n }\n out.decimal.push(math.number(num));\n }\n }\n }\n return out;\n};\n\nexport const buildTickData = (domain, width, ticks, opts) => {\n const result = buildTickDataAsFractions(domain, width, ticks, opts);\n\n const out = result.map((o) => (opts.fraction ? o : { ...o, x: math.number(o.x) || 0 }));\n\n return out;\n};\n\nexport const snapElements = (domain, ticks, elements) => {\n return elements.map((e) => {\n const size = Number.isFinite(e.size) ? snapTo(0, e.size, ticks.minor, e.size) : undefined;\n const domainPosition = snapTo(domain.min, domain.max, ticks.minor, e.domainPosition);\n const out = { ...e, domainPosition };\n\n if (Number.isFinite(size)) {\n out.size = size;\n }\n\n return out;\n });\n};\n\nexport const testSharedFunction = (param) =>{\n return 'test' + param;\n};\n"],"file":"tick-utils.js"}
1
+ {"version":3,"sources":["../../../src/number-line/graph/tick-utils.js"],"names":["decimalTickValues","fractionTickValues","labelMultiplier","fractionRange","start","end","interval","m","math","mod","abs","equal","Error","e","subtract","direction","larger","largerEq","smallerEq","compareFn","out","next","push","add","zbrErrorMessage","zeroBasedRange","fraction","length","a","multiplier","smaller","s","r","map","v","multiply","reverse","fmin","b","fmax","simpleRange","positiveRange","negativeRange","together","concat","closeTo","precision","expectedDiff","Math","pow","receivedDiff","limit","min","max","getMinorLimits","domain","width","number","divide","isMultiple","multiple","src","n","d","normalizeTicks","ticks","opts","useLimit","minorLimits","minor","major","isMajorMultiple","multiplyBy","round","buildTickDataAsFractions","rng","o","filter","x","type","modulo","generateMinorValues","decimal","forEach","value","decimalValue","generateMajorValuesForMinor","i","num","ticksData","output","buildTickData","undefined","toString","multiplierKey","result","fractionSnapTo","half","div","sub","fn","fn2","snapTo","snapElements","elements","size","Number","isFinite","domainPosition"],"mappings":"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","sourcesContent":["import * as math from 'mathjs';\nimport uniqWith from 'lodash/uniqWith';\nimport isObject from 'lodash/isObject';\nimport isNumber from 'lodash/isNumber';\n\n// All these functions are duplicated in controller/src/tickUtils\n\n/*This will store the possible decimal tick values*/\nexport const decimalTickValues = [0.001, 0.01, 0.02, 0.04, 0.05, 0.1, 0.125, 0.2, 0.25, 0.5];\n\n/*This will store the possible fraction tick values*/\nexport const fractionTickValues = [\n '1/1000',\n '1/100',\n '1/64',\n '1/50',\n '1/32',\n '1/25',\n '1/20',\n '1/16',\n '1/15',\n '1/12',\n '1/10',\n '1/9',\n '1/8',\n '1/7',\n '1/6',\n '1/5',\n '1/4',\n '1/3',\n '1/2',\n];\n\n/*This const will store possible multiplier for label interval that needs to be multiplied\nwith tick interval with denominator represented with object key.*/\nexport const labelMultiplier = {\n 1: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],\n 2: [1, 2, 4, 6, 8, 10],\n 3: [1, 3, 6, 9],\n 4: [1, 2, 4, 8],\n 5: [1, 5, 10],\n 6: [1, 2, 3, 6],\n 7: [1, 7],\n 8: [1, 2, 4, 8],\n 9: [1, 3, 9],\n 10: [1, 2, 5, 10],\n 12: [1, 2, 3, 4, 6],\n 15: [1, 3, 5],\n 16: [1, 2, 4, 8],\n 20: [1, 2, 4, 5, 10],\n 25: [1, 5],\n 32: [1, 2, 4, 8],\n 50: [1, 2, 5, 10],\n 64: [1, 2, 4, 8],\n 100: [1, 2, 4, 5, 10],\n 1000: [1, 2, 4, 5, 8, 10],\n};\n\nexport const fractionRange = (start, end, interval) => {\n const m = math.mod(math.abs(start), math.abs(interval));\n if (!math.equal(m, 0)) {\n throw new Error('start point must be divisible by interval');\n }\n\n if (math.equal(start, end)) {\n return [];\n }\n\n const e = math.subtract(end, math.mod(end, math.abs(interval)));\n\n const direction = math.larger(interval, 0) ? 'positive' : 'negative';\n\n if (direction === 'negative' && math.largerEq(end, start)) {\n throw new Error('start must be > than end when doing a negative decrement');\n }\n if (direction === 'positive' && math.smallerEq(end, start)) {\n throw new Error('start must be < end when doing increments');\n }\n const compareFn = direction === 'positive' ? math.smallerEq : math.equal(e, end) ? math.largerEq : math.larger;\n const out = [];\n\n let next = start;\n while (compareFn(next, e)) {\n out.push(next);\n next = math.add(next, interval);\n }\n return out;\n};\n\nexport const zbrErrorMessage = (start, end) =>\n `Can only do a positive or negative range, but got: start: ${start} and end:${end}`;\n\nexport const zeroBasedRange = (start, end, interval) => {\n start = math.fraction(start);\n end = math.fraction(end);\n interval = math.fraction(interval);\n\n const length = math.abs(math.subtract(end, start));\n\n if (math.larger(length, math.abs(end))) {\n throw new Error(zbrErrorMessage(start, end));\n }\n const a = {\n start: math.abs(start),\n end: math.abs(end),\n interval: math.abs(interval),\n multiplier: math.smaller(interval, 0) ? -1 : 1,\n };\n\n const m = math.mod(a.start, a.interval);\n const s = math.larger(m, 0) ? math.add(math.subtract(a.start, m), a.interval) : a.start;\n\n const r = fractionRange(s, a.end, a.interval);\n const out = a.multiplier === -1 ? r.map((v) => math.multiply(v, -1)) : r;\n\n if (math.smaller(interval, 0)) {\n out.reverse();\n }\n return out;\n};\n\nconst fmin = (a, b) => {\n a = math.fraction(a);\n b = math.fraction(b);\n return math.smaller(a, b) ? a : b;\n};\n\nconst fmax = (a, b) => {\n a = math.fraction(a);\n b = math.fraction(b);\n return math.larger(a, b) ? a : b;\n};\n/**\n * the lodash range was causing too much variance in the rounding errors\n * such that it was hard to round the numbers.\n * This is a more simplistic version but makes rounding work.\n */\nexport const simpleRange = (start, end, interval) => {\n start = math.fraction(start);\n end = math.fraction(end);\n interval = math.fraction(interval);\n\n const positiveRange = math.larger(end, 0) ? zeroBasedRange(fmax(0, start), end, interval) : [];\n\n const negativeRange = math.smaller(start, 0) ? zeroBasedRange(fmin(0, end), start, math.multiply(interval, -1)) : [];\n let together = negativeRange.concat(positiveRange);\n\n const out = uniqWith(together, math.equal);\n return out;\n};\n\nexport const closeTo = (a, b, precision) => {\n precision = precision || 2;\n const expectedDiff = Math.pow(10, -precision) / 2;\n const receivedDiff = Math.abs(a - b);\n return receivedDiff < expectedDiff;\n};\n\nconst limit = (v, min, max) => {\n if (math.smaller(fraction(v), fraction(min))) {\n return min;\n }\n\n if (math.larger(fraction(v), fraction(max))) {\n return max;\n }\n\n return v;\n};\n\n/*\n * Function to get tick interval limits based on min, max and width entered by the user.\n * @param domain object containing max and min value.\n * @param width number represents width of number line.\n * */\nexport const getMinorLimits = (domain, width) => {\n const end = domain.max - domain.min;\n const min = math.number(math.multiply(10, math.divide(math.fraction(end), width)));\n const max = math.number(math.multiply(20, min));\n return {\n min: min,\n max: max,\n };\n};\n\nexport const isMultiple = (multiple, src) => {\n const mod = math.mod(multiple, src);\n return math.equal(mod, 0);\n};\n\n/**\n * Accepts a fraction object {n,d,s} or number.\n * @param {*} v\n * @return mathjs.fraction\n */\nexport const fraction = (v) => {\n if (isObject(v)) {\n return math.fraction(v.n * v.s, v.d);\n } else if (isNumber(v)) {\n return math.fraction(v);\n }\n};\n\nexport const normalizeTicks = (domain, width, ticks, opts) => {\n const useLimit = opts ? opts.limit !== false : true;\n const minorLimits = getMinorLimits(domain, width);\n\n const minor = useLimit ? limit(fraction(ticks.minor), minorLimits.min, minorLimits.max) : fraction(ticks.minor);\n const major = useLimit ? limit(fraction(ticks.major), minor, math.multiply(minor, 20)) : fraction(ticks.major);\n\n const isMajorMultiple = isMultiple(major, minor);\n\n if (!isMajorMultiple) {\n const multiplier = math.divide(major, minor);\n const multiplyBy = multiplier <= 2 ? 2 : Math.round(multiplier);\n\n // major must be a multiple of minor\n return { minor, major: math.multiply(minor, multiplyBy) };\n }\n\n return { major, minor };\n};\n\n/**\n * Build ticks as an array of mathjs Fractions\n */\nexport const buildTickDataAsFractions = (domain, width, ticks, opts) => {\n ticks = normalizeTicks(domain, width, ticks, opts);\n const rng = simpleRange(domain.min, domain.max, ticks.minor);\n\n const o = rng\n .filter((x) => math.smallerEq(x, math.fraction(domain.max)))\n .map((x) => {\n let type = 'minor';\n const modulo = math.mod(x, ticks.major);\n\n if (closeTo(math.number(modulo), 0)) {\n type = 'major';\n }\n\n return { x, type };\n });\n\n return o;\n};\n\n/*\n * This function will generate tick interval values based on min and max limits of ticks.\n * @param minorLimits object containing min and max values\n * @return out object containing three arrays 1. fraction values, 2. decimal values,\n * */\nexport const generateMinorValues = (minorLimits) => {\n let out = { fraction: [], decimal: [] };\n decimalTickValues.forEach((value) => {\n if (value >= minorLimits.min && value <= minorLimits.max) {\n out.decimal.push(value);\n }\n });\n fractionTickValues.forEach((value) => {\n let decimalValue = math.number(math.fraction(value));\n if (decimalValue >= minorLimits.min && decimalValue <= minorLimits.max) {\n out.fraction.push(value);\n }\n });\n return out;\n};\n\n/*\n * This function will generate label interval values for provided tick interval value.\n * @param minor number representing tick interval value.\n * @param domain object containing min and max values.\n * @param width number representing width of number line.\n * @return out object containing three arrays 1. fraction values, 2. decimal values,\n * */\nexport const generateMajorValuesForMinor = (minor, domain, width) => {\n let out = { decimal: [], fraction: [] };\n let fraction = math.fraction(math.number(math.number(minor)));\n let n = fraction.n;\n let d = fraction.d;\n if (n >= 1 && d === 1) {\n for (let i = 1; i <= 10; i++) {\n let num = math.number(math.multiply(n, i));\n //Here we check if this major value can plot at least 2 points on number line.\n let ticksData = { minor: minor, major: num };\n let output = buildTickData(domain, width, ticksData, { fraction: undefined });\n if (output.filter((x) => x.type === 'major').length > 1) {\n out.fraction.push(num.toString());\n out.decimal.push(num);\n }\n }\n } else {\n for (const multiplierKey in labelMultiplier[d]) {\n let num = math.multiply(math.fraction(n, d), labelMultiplier[d][multiplierKey]);\n //Here we check if this major value can plot at least 2 points on number line.\n let ticksData = { minor: minor, major: math.number(num) };\n let output = buildTickData(domain, width, ticksData, { fraction: undefined });\n if (output.filter((x) => x.type === 'major').length > 1) {\n if (num.d !== 1) {\n out.fraction.push(num.n + '/' + num.d);\n } else {\n out.fraction.push(num.n.toString());\n }\n out.decimal.push(math.number(num));\n }\n }\n }\n return out;\n};\n\nexport const buildTickData = (domain, width, ticks, opts) => {\n const result = buildTickDataAsFractions(domain, width, ticks, opts);\n\n const out = result.map((o) => (opts.fraction ? o : { ...o, x: math.number(o.x) || 0 }));\n\n return out;\n};\n\nexport const fractionSnapTo = (min, max, interval, value) => {\n value = fmax(fmin(value, max), min);\n const mod = value.mod(interval);\n let v;\n\n const half = interval.div(2);\n if (math.largerEq(math.abs(mod), half)) {\n const d = interval.sub(math.abs(mod));\n const fn = math.largerEq(value, 0) ? 'add' : 'sub';\n v = value[fn](d);\n } else {\n const fn2 = math.largerEq(value, 0) ? 'sub' : 'add';\n v = value[fn2](math.abs(mod));\n }\n return v;\n};\n\nexport const snapTo = (min, max, interval, value) => {\n const out = fractionSnapTo(math.fraction(min), math.fraction(max), math.fraction(interval), math.fraction(value));\n return math.number(out);\n};\n\nexport const snapElements = (domain, ticks, elements) => {\n return elements.map((e) => {\n const size = Number.isFinite(e.size) ? snapTo(0, e.size, ticks.minor, e.size) : undefined;\n const domainPosition = snapTo(domain.min, domain.max, ticks.minor, e.domainPosition);\n const out = { ...e, domainPosition };\n\n if (Number.isFinite(size)) {\n out.size = size;\n }\n\n return out;\n });\n};\n"],"file":"tick-utils.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pie-element/number-line",
3
- "version": "9.6.1-next.9+458317808",
3
+ "version": "9.6.2-next.0+36369e2f4",
4
4
  "repository": "pie-framework/pie-elements",
5
5
  "description": "",
6
6
  "publishConfig": {
@@ -8,7 +8,7 @@
8
8
  },
9
9
  "dependencies": {
10
10
  "@material-ui/core": "^3.9.2",
11
- "@pie-lib/pie-toolbox": "2.13.0",
11
+ "@pie-lib/pie-toolbox": "2.14.0",
12
12
  "classnames": "^2.2.5",
13
13
  "d3-scale": "^3.2.1",
14
14
  "d3-selection": "^1.4.1",
@@ -23,7 +23,7 @@
23
23
  },
24
24
  "author": "pie framework developers",
25
25
  "license": "ISC",
26
- "gitHead": "458317808d155fe2af9adf323ab842594882bfd9",
26
+ "gitHead": "36369e2f472709d1603462a2214474e4d38e4e47",
27
27
  "scripts": {
28
28
  "postpublish": "../../scripts/postpublish"
29
29
  },