@pie-element/number-line 8.10.2-next.2 → 8.10.2

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.
@@ -0,0 +1,370 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.getMinorLimits = exports.generateMinorValues = exports.generateMajorValuesForMinor = void 0;
11
+
12
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
+
14
+ var math = _interopRequireWildcard(require("mathjs"));
15
+
16
+ var _uniqWith = _interopRequireDefault(require("lodash/uniqWith"));
17
+
18
+ var _isObject = _interopRequireDefault(require("lodash/isObject"));
19
+
20
+ var _isNumber = _interopRequireDefault(require("lodash/isNumber"));
21
+
22
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
23
+
24
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
25
+
26
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
27
+
28
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
29
+
30
+ // All these functions are duplicated in src/number-line/graph/tick-utils
31
+
32
+ /*This will store the possible decimal tick values*/
33
+ var decimalTickValues = [0.001, 0.01, 0.02, 0.04, 0.05, 0.1, 0.125, 0.2, 0.25, 0.5];
34
+ /*This will store the possible fraction tick values*/
35
+
36
+ var fractionTickValues = ['1/1000', '1/100', '1/64', '1/50', '1/32', '1/25', '1/20', '1/16', '1/15', '1/12', '1/10', '1/9', '1/8', '1/7', '1/6', '1/5', '1/4', '1/3', '1/2'];
37
+ /*This const will store possible multiplier for label interval that needs to be multiplied
38
+ with tick interval with denominator represented with object key.*/
39
+
40
+ var labelMultiplier = {
41
+ 1: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
42
+ 2: [1, 2, 4, 6, 8, 10],
43
+ 3: [1, 3, 6, 9],
44
+ 4: [1, 2, 4, 8],
45
+ 5: [1, 5, 10],
46
+ 6: [1, 2, 3, 6],
47
+ 7: [1, 7],
48
+ 8: [1, 2, 4, 8],
49
+ 9: [1, 3, 9],
50
+ 10: [1, 2, 5, 10],
51
+ 12: [1, 2, 3, 4, 6],
52
+ 15: [1, 3, 5],
53
+ 16: [1, 2, 4, 8],
54
+ 20: [1, 2, 4, 5, 10],
55
+ 25: [1, 5],
56
+ 32: [1, 2, 4, 8],
57
+ 50: [1, 2, 5, 10],
58
+ 64: [1, 2, 4, 8],
59
+ 100: [1, 2, 4, 5, 10],
60
+ 1000: [1, 2, 4, 5, 8, 10]
61
+ };
62
+
63
+ var fractionRange = function fractionRange(start, end, interval) {
64
+ var m = math.mod(math.abs(start), math.abs(interval));
65
+
66
+ if (!math.equal(m, 0)) {
67
+ throw new Error('start point must be divisible by interval');
68
+ }
69
+
70
+ if (math.equal(start, end)) {
71
+ return [];
72
+ }
73
+
74
+ var e = math.subtract(end, math.mod(end, math.abs(interval)));
75
+ var direction = math.larger(interval, 0) ? 'positive' : 'negative';
76
+
77
+ if (direction === 'negative' && math.largerEq(end, start)) {
78
+ throw new Error('start must be > than end when doing a negative decrement');
79
+ }
80
+
81
+ if (direction === 'positive' && math.smallerEq(end, start)) {
82
+ throw new Error('start must be < end when doing increments');
83
+ }
84
+
85
+ var compareFn = direction === 'positive' ? math.smallerEq : math.equal(e, end) ? math.largerEq : math.larger;
86
+ var out = [];
87
+ var next = start;
88
+
89
+ while (compareFn(next, e)) {
90
+ out.push(next);
91
+ next = math.add(next, interval);
92
+ }
93
+
94
+ return out;
95
+ };
96
+
97
+ var zbrErrorMessage = function zbrErrorMessage(start, end) {
98
+ return "Can only do a positive or negative range, but got: start: ".concat(start, " and end:").concat(end);
99
+ };
100
+
101
+ var zeroBasedRange = function zeroBasedRange(start, end, interval) {
102
+ start = math.fraction(start);
103
+ end = math.fraction(end);
104
+ interval = math.fraction(interval);
105
+ var length = math.abs(math.subtract(end, start));
106
+
107
+ if (math.larger(length, math.abs(end))) {
108
+ throw new Error(zbrErrorMessage(start, end));
109
+ }
110
+
111
+ var a = {
112
+ start: math.abs(start),
113
+ end: math.abs(end),
114
+ interval: math.abs(interval),
115
+ multiplier: math.smaller(interval, 0) ? -1 : 1
116
+ };
117
+ var m = math.mod(a.start, a.interval);
118
+ var s = math.larger(m, 0) ? math.add(math.subtract(a.start, m), a.interval) : a.start;
119
+ var r = fractionRange(s, a.end, a.interval);
120
+ var out = a.multiplier === -1 ? r.map(function (v) {
121
+ return math.multiply(v, -1);
122
+ }) : r;
123
+
124
+ if (math.smaller(interval, 0)) {
125
+ out.reverse();
126
+ }
127
+
128
+ return out;
129
+ };
130
+
131
+ var fmin = function fmin(a, b) {
132
+ a = math.fraction(a);
133
+ b = math.fraction(b);
134
+ return math.smaller(a, b) ? a : b;
135
+ };
136
+
137
+ var fmax = function fmax(a, b) {
138
+ a = math.fraction(a);
139
+ b = math.fraction(b);
140
+ return math.larger(a, b) ? a : b;
141
+ };
142
+ /**
143
+ * the lodash range was causing too much variance in the rounding errors
144
+ * such that it was hard to round the numbers.
145
+ * This is a more simplistic version but makes rounding work.
146
+ */
147
+
148
+
149
+ var simpleRange = function simpleRange(start, end, interval) {
150
+ start = math.fraction(start);
151
+ end = math.fraction(end);
152
+ interval = math.fraction(interval);
153
+ var positiveRange = math.larger(end, 0) ? zeroBasedRange(fmax(0, start), end, interval) : [];
154
+ var negativeRange = math.smaller(start, 0) ? zeroBasedRange(fmin(0, end), start, math.multiply(interval, -1)) : [];
155
+ var together = negativeRange.concat(positiveRange);
156
+ var out = (0, _uniqWith["default"])(together, math.equal);
157
+ return out;
158
+ };
159
+
160
+ var closeTo = function closeTo(a, b, precision) {
161
+ precision = precision || 2;
162
+ var expectedDiff = Math.pow(10, -precision) / 2;
163
+ var receivedDiff = Math.abs(a - b);
164
+ return receivedDiff < expectedDiff;
165
+ };
166
+
167
+ var limit = function limit(v, min, max) {
168
+ if (math.smaller(fraction(v), fraction(min))) {
169
+ return min;
170
+ }
171
+
172
+ if (math.larger(fraction(v), fraction(max))) {
173
+ return max;
174
+ }
175
+
176
+ return v;
177
+ };
178
+
179
+ var isMultiple = function isMultiple(multiple, src) {
180
+ var mod = math.mod(multiple, src);
181
+ return math.equal(mod, 0);
182
+ };
183
+ /**
184
+ * Accepts a fraction object {n,d,s} or number.
185
+ * @param {*} v
186
+ * @return mathjs.fraction
187
+ */
188
+
189
+
190
+ var fraction = function fraction(v) {
191
+ if ((0, _isObject["default"])(v)) {
192
+ return math.fraction(v.n * v.s, v.d);
193
+ } else if ((0, _isNumber["default"])(v)) {
194
+ return math.fraction(v);
195
+ }
196
+ };
197
+
198
+ var normalizeTicks = function normalizeTicks(domain, width, ticks, opts) {
199
+ var useLimit = opts ? opts.limit !== false : true;
200
+ var minorLimits = getMinorLimits(domain, width);
201
+ var minor = useLimit ? limit(fraction(ticks.minor), minorLimits.min, minorLimits.max) : fraction(ticks.minor);
202
+ var major = useLimit ? limit(fraction(ticks.major), minor, math.multiply(minor, 20)) : fraction(ticks.major);
203
+ var isMajorMultiple = isMultiple(major, minor);
204
+
205
+ if (!isMajorMultiple) {
206
+ var multiplier = math.divide(major, minor);
207
+ var multiplyBy = multiplier <= 2 ? 2 : Math.round(multiplier); // major must be a multiple of minor
208
+
209
+ return {
210
+ minor: minor,
211
+ major: math.multiply(minor, multiplyBy)
212
+ };
213
+ }
214
+
215
+ return {
216
+ major: major,
217
+ minor: minor
218
+ };
219
+ };
220
+ /**
221
+ * Build ticks as an array of mathjs Fractions
222
+ */
223
+
224
+
225
+ var buildTickDataAsFractions = function buildTickDataAsFractions(domain, width, ticks, opts) {
226
+ ticks = normalizeTicks(domain, width, ticks, opts);
227
+ var rng = simpleRange(domain.min, domain.max, ticks.minor);
228
+ var o = rng.filter(function (x) {
229
+ return math.smallerEq(x, math.fraction(domain.max));
230
+ }).map(function (x) {
231
+ var type = 'minor';
232
+ var modulo = math.mod(x, ticks.major);
233
+
234
+ if (closeTo(math.number(modulo), 0)) {
235
+ type = 'major';
236
+ }
237
+
238
+ return {
239
+ x: x,
240
+ type: type
241
+ };
242
+ });
243
+ return o;
244
+ };
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
+ /*
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.
259
+ * */
260
+
261
+
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
269
+ };
270
+ };
271
+ /*
272
+ * This function will generate label interval values for provided tick interval value.
273
+ * @param minor number representing tick interval value.
274
+ * @param domain object containing min and max values.
275
+ * @param width number representing width of number line.
276
+ * @return out object containing three arrays 1. fraction values, 2. decimal values,
277
+ * */
278
+
279
+
280
+ exports.getMinorLimits = getMinorLimits;
281
+
282
+ var generateMajorValuesForMinor = function generateMajorValuesForMinor(minor, domain, width) {
283
+ var out = {
284
+ decimal: [],
285
+ fraction: []
286
+ };
287
+ var fraction = math.fraction(math.number(math.number(minor)));
288
+ var n = fraction.n;
289
+ var d = fraction.d;
290
+
291
+ if (n >= 1 && d === 1) {
292
+ for (var i = 1; i <= 10; i++) {
293
+ var num = math.number(math.multiply(n, i)); //Here we check if this major value can plot at least 2 points on number line.
294
+
295
+ var ticksData = {
296
+ minor: minor,
297
+ major: num
298
+ };
299
+ var output = buildTickData(domain, width, ticksData, {
300
+ fraction: undefined
301
+ });
302
+
303
+ if (output.filter(function (x) {
304
+ return x.type === 'major';
305
+ }).length > 1) {
306
+ out.fraction.push(num.toString());
307
+ out.decimal.push(num);
308
+ }
309
+ }
310
+ } else {
311
+ for (var multiplierKey in labelMultiplier[d]) {
312
+ var _num = math.multiply(math.fraction(n, d), labelMultiplier[d][multiplierKey]); //Here we check if this major value can plot at least 2 points on number line.
313
+
314
+
315
+ var _ticksData = {
316
+ minor: minor,
317
+ major: math.number(_num)
318
+ };
319
+
320
+ var _output = buildTickData(domain, width, _ticksData, {
321
+ fraction: undefined
322
+ });
323
+
324
+ if (_output.filter(function (x) {
325
+ return x.type === 'major';
326
+ }).length > 1) {
327
+ if (_num.d !== 1) {
328
+ out.fraction.push(_num.n + '/' + _num.d);
329
+ } else {
330
+ out.fraction.push(_num.n.toString());
331
+ }
332
+
333
+ out.decimal.push(math.number(_num));
334
+ }
335
+ }
336
+ }
337
+
338
+ return out;
339
+ };
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
+
347
+ exports.generateMajorValuesForMinor = generateMajorValuesForMinor;
348
+
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
+ }
365
+ });
366
+ return out;
367
+ };
368
+
369
+ exports.generateMinorValues = generateMinorValues;
370
+ //# sourceMappingURL=tickUtils.js.map
@@ -0,0 +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"}
@@ -0,0 +1,201 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.reloadTicksData = void 0;
11
+
12
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
+
14
+ var math = _interopRequireWildcard(require("mathjs"));
15
+
16
+ var _tickUtils = require("./tickUtils");
17
+
18
+ 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); }
19
+
20
+ 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; }
21
+
22
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
23
+
24
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
25
+
26
+ /*
27
+ * This function is duplicated in configure/main.js
28
+ * This function will update major value whenever minor value is changed or tick type is changed
29
+ * @param graph object containing domain, ticks and width value
30
+ * @return graph object with updated ticks values
31
+ * */
32
+ var updateMajorValue = function updateMajorValue(graph) {
33
+ var domain = graph.domain,
34
+ ticks = graph.ticks,
35
+ width = graph.width;
36
+ var majorValues = (0, _tickUtils.generateMajorValuesForMinor)(ticks.minor, domain, width);
37
+
38
+ if (majorValues.decimal.indexOf(ticks.major) === -1) {
39
+ var currIndex = 0;
40
+
41
+ if (ticks.tickIntervalType === 'Integer') {
42
+ currIndex = majorValues.decimal.length > 4 ? 4 : majorValues.decimal.length - 1;
43
+ } else {
44
+ currIndex = majorValues.decimal.length - 1;
45
+ }
46
+
47
+ ticks.major = majorValues.decimal[currIndex];
48
+ }
49
+
50
+ graph.fraction = ticks.tickIntervalType === 'Fraction' && ticks.major < 1;
51
+ return _objectSpread(_objectSpread({}, graph), {}, {
52
+ ticks: ticks
53
+ });
54
+ };
55
+ /*
56
+ * This function is duplicated in configure/main.js
57
+ * This function will reload ticks data whenever graph object is changed and also sets required tick object
58
+ * for rendering Ticks Components.
59
+ * @param graph object containing domain, ticks and width value
60
+ * @return graph object with updated ticks values
61
+ * */
62
+
63
+
64
+ var reloadTicksData = function reloadTicksData(graph) {
65
+ var domain = graph.domain,
66
+ _graph$ticks = graph.ticks,
67
+ ticks = _graph$ticks === void 0 ? {} : _graph$ticks,
68
+ width = graph.width; //Set tick interval type if not present for legacy number line models depending upon minor value
69
+
70
+ if (!ticks.tickIntervalType) {
71
+ if (ticks.minor > 0.5) {
72
+ ticks.tickIntervalType = 'Integer';
73
+ } else {
74
+ ticks.tickIntervalType = 'Decimal';
75
+ }
76
+ } // This section will calculate minor and major values array and assign respective value
77
+ // to different tick types object
78
+
79
+
80
+ var minorLimits = (0, _tickUtils.getMinorLimits)(domain, width);
81
+
82
+ if (minorLimits.min >= 1) {
83
+ /*
84
+ * In this scenario only integer tick will be enabled
85
+ * */
86
+ ticks.tickIntervalType = 'Integer';
87
+ ticks.minor = ticks.minor < 1 ? math.number(math.ceil(minorLimits.min)) : ticks.minor >= math.number(math.ceil(minorLimits.min)) && ticks.minor <= math.number(math.floor(minorLimits.max)) ? ticks.minor : math.number(math.ceil(minorLimits.min));
88
+ ticks.integerTick = ticks.minor;
89
+ var minorValues = {
90
+ decimal: [],
91
+ fraction: []
92
+ };
93
+ ticks.fractionTick = '0';
94
+ ticks.decimalTick = 0;
95
+ } else if (minorLimits.min >= 0 && minorLimits.max < 1) {
96
+ /*
97
+ * In this scenario only decimal or fraction tick will be enabled
98
+ * */
99
+ if (ticks.tickIntervalType === 'Integer') {
100
+ ticks.tickIntervalType = 'Fraction';
101
+ }
102
+
103
+ var _minorValues = (0, _tickUtils.generateMinorValues)(minorLimits);
104
+
105
+ var minValue = math.number(math.fraction(_minorValues.fraction[0]));
106
+ var maxValue = math.number(math.fraction(_minorValues.fraction[_minorValues.fraction.length - 1]));
107
+
108
+ if (ticks.minor < minValue || ticks.minor > maxValue) {
109
+ switch (ticks.tickIntervalType) {
110
+ case 'Fraction':
111
+ ticks.minor = math.number(math.fraction(_minorValues.fraction[_minorValues.fraction.length - 1]));
112
+ ticks.fractionTick = _minorValues.fraction[_minorValues.fraction.length - 1];
113
+ ticks.decimalTick = _minorValues.decimal[0];
114
+ break;
115
+
116
+ case 'Decimal':
117
+ case 'Integer':
118
+ ticks.minor = _minorValues.decimal[_minorValues.decimal.length - 1];
119
+ ticks.decimalTick = _minorValues.decimal[_minorValues.decimal.length - 1];
120
+ ticks.fractionTick = _minorValues.fraction[0];
121
+ }
122
+ } else {
123
+ switch (ticks.tickIntervalType) {
124
+ case 'Fraction':
125
+ var fraction = math.fraction(math.number(ticks.minor));
126
+ ticks.fractionTick = fraction.n + '/' + fraction.d;
127
+ ticks.decimalTick = ticks.decimalTick ? ticks.decimalTick : _minorValues.decimal[0];
128
+ break;
129
+
130
+ case 'Decimal':
131
+ case 'Integer':
132
+ ticks.decimalTick = ticks.minor;
133
+ ticks.fractionTick = ticks.fractionTick ? ticks.fractionTick : _minorValues.fraction[0];
134
+ }
135
+ }
136
+
137
+ ticks.integerTick = 1;
138
+ } else if (minorLimits.min < 1 && minorLimits.max >= 1) {
139
+ /*
140
+ * In this scenario all integer, decimal or fraction tick will be enabled
141
+ * */
142
+ var _minorValues2 = (0, _tickUtils.generateMinorValues)(minorLimits);
143
+
144
+ if (!(ticks.minor >= minorLimits.min && ticks.minor <= minorLimits.max)) {
145
+ if (minorLimits.min > 0.5) {
146
+ ticks.tickIntervalType = 'Integer';
147
+ }
148
+
149
+ switch (ticks.tickIntervalType) {
150
+ case 'Integer':
151
+ ticks.minor = math.number(math.ceil(minorLimits.min));
152
+ ticks.integerTick = ticks.minor;
153
+ ticks.decimalTick = minorLimits.min > 0.5 ? 0 : _minorValues2.decimal[0];
154
+ ticks.fractionTick = minorLimits.min > 0.5 ? '0' : _minorValues2.fraction[0];
155
+ break;
156
+
157
+ case 'Decimal':
158
+ ticks.minor = _minorValues2.decimal[0];
159
+ ticks.integerTick = 1;
160
+ ticks.decimalTick = ticks.minor;
161
+ ticks.fractionTick = _minorValues2.fraction[0];
162
+ break;
163
+
164
+ case 'Fraction':
165
+ ticks.minor = math.number(math.fraction(_minorValues2.fraction[0]));
166
+ ticks.integerTick = 1;
167
+ ticks.decimalTick = _minorValues2.decimal[0];
168
+ ticks.fractionTick = _minorValues2.fraction[0];
169
+ }
170
+ } else {
171
+ switch (ticks.tickIntervalType) {
172
+ case 'Integer':
173
+ ticks.integerTick = ticks.minor;
174
+ ticks.decimalTick = minorLimits.min > 0.5 ? 0 : _minorValues2.decimal[0];
175
+ ticks.fractionTick = minorLimits.min > 0.5 ? '0' : _minorValues2.fraction[0];
176
+ break;
177
+
178
+ case 'Decimal':
179
+ ticks.integerTick = 1;
180
+ ticks.decimalTick = ticks.minor;
181
+ ticks.fractionTick = _minorValues2.fraction[0];
182
+ break;
183
+
184
+ case 'Fraction':
185
+ ticks.integerTick = 1;
186
+ ticks.decimalTick = _minorValues2.decimal[0];
187
+
188
+ var _fraction = math.fraction(math.number(ticks.minor));
189
+
190
+ ticks.fractionTick = _fraction.n + '/' + _fraction.d;
191
+ }
192
+ }
193
+ }
194
+
195
+ return updateMajorValue(_objectSpread(_objectSpread({}, graph), {}, {
196
+ ticks: ticks
197
+ }));
198
+ };
199
+
200
+ exports.reloadTicksData = reloadTicksData;
201
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils.js"],"names":["updateMajorValue","graph","domain","ticks","width","majorValues","minor","decimal","indexOf","major","currIndex","tickIntervalType","length","fraction","reloadTicksData","minorLimits","min","math","number","ceil","floor","max","integerTick","minorValues","fractionTick","decimalTick","minValue","maxValue","n","d"],"mappings":"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","sourcesContent":["import * as math from 'mathjs';\nimport { generateMajorValuesForMinor, generateMinorValues, getMinorLimits } from './tickUtils';\n\n/*\n * This function is duplicated in configure/main.js\n * This function will update major value whenever minor value is changed or tick type is changed\n * @param graph object containing domain, ticks and width value\n * @return graph object with updated ticks values\n * */\nconst updateMajorValue = (graph) => {\n const { domain, ticks, width } = graph;\n const majorValues = generateMajorValuesForMinor(ticks.minor, domain, width);\n if (majorValues.decimal.indexOf(ticks.major) === -1) {\n let currIndex = 0;\n if (ticks.tickIntervalType === 'Integer') {\n currIndex = majorValues.decimal.length > 4 ? 4 : majorValues.decimal.length - 1;\n } else {\n currIndex = majorValues.decimal.length - 1;\n }\n ticks.major = majorValues.decimal[currIndex];\n }\n graph.fraction = ticks.tickIntervalType === 'Fraction' && ticks.major < 1;\n return { ...graph, ticks };\n};\n\n/*\n * This function is duplicated in configure/main.js\n * This function will reload ticks data whenever graph object is changed and also sets required tick object\n * for rendering Ticks Components.\n * @param graph object containing domain, ticks and width value\n * @return graph object with updated ticks values\n * */\n\nexport const reloadTicksData = (graph) => {\n const { domain, ticks = {}, width } = graph;\n //Set tick interval type if not present for legacy number line models depending upon minor value\n if (!ticks.tickIntervalType) {\n if (ticks.minor > 0.5) {\n ticks.tickIntervalType = 'Integer';\n } else {\n ticks.tickIntervalType = 'Decimal';\n }\n }\n // This section will calculate minor and major values array and assign respective value\n // to different tick types object\n const minorLimits = getMinorLimits(domain, width);\n if (minorLimits.min >= 1) {\n /*\n * In this scenario only integer tick will be enabled\n * */\n ticks.tickIntervalType = 'Integer';\n ticks.minor =\n ticks.minor < 1\n ? math.number(math.ceil(minorLimits.min))\n : ticks.minor >= math.number(math.ceil(minorLimits.min)) &&\n ticks.minor <= math.number(math.floor(minorLimits.max))\n ? ticks.minor\n : math.number(math.ceil(minorLimits.min));\n ticks.integerTick = ticks.minor;\n const minorValues = { decimal: [], fraction: [] };\n ticks.fractionTick = '0';\n ticks.decimalTick = 0;\n } else if (minorLimits.min >= 0 && minorLimits.max < 1) {\n /*\n * In this scenario only decimal or fraction tick will be enabled\n * */\n if (ticks.tickIntervalType === 'Integer') {\n ticks.tickIntervalType = 'Fraction';\n }\n const minorValues = generateMinorValues(minorLimits);\n let minValue = math.number(math.fraction(minorValues.fraction[0]));\n let maxValue = math.number(math.fraction(minorValues.fraction[minorValues.fraction.length - 1]));\n if (ticks.minor < minValue || ticks.minor > maxValue) {\n switch (ticks.tickIntervalType) {\n case 'Fraction':\n ticks.minor = math.number(math.fraction(minorValues.fraction[minorValues.fraction.length - 1]));\n ticks.fractionTick = minorValues.fraction[minorValues.fraction.length - 1];\n ticks.decimalTick = minorValues.decimal[0];\n break;\n case 'Decimal':\n case 'Integer':\n ticks.minor = minorValues.decimal[minorValues.decimal.length - 1];\n ticks.decimalTick = minorValues.decimal[minorValues.decimal.length - 1];\n ticks.fractionTick = minorValues.fraction[0];\n }\n } else {\n switch (ticks.tickIntervalType) {\n case 'Fraction':\n let fraction = math.fraction(math.number(ticks.minor));\n ticks.fractionTick = fraction.n + '/' + fraction.d;\n ticks.decimalTick = ticks.decimalTick ? ticks.decimalTick : minorValues.decimal[0];\n break;\n case 'Decimal':\n case 'Integer':\n ticks.decimalTick = ticks.minor;\n ticks.fractionTick = ticks.fractionTick ? ticks.fractionTick : minorValues.fraction[0];\n }\n }\n ticks.integerTick = 1;\n } else if (minorLimits.min < 1 && minorLimits.max >= 1) {\n /*\n * In this scenario all integer, decimal or fraction tick will be enabled\n * */\n const minorValues = generateMinorValues(minorLimits);\n if (!(ticks.minor >= minorLimits.min && ticks.minor <= minorLimits.max)) {\n if (minorLimits.min > 0.5) {\n ticks.tickIntervalType = 'Integer';\n }\n switch (ticks.tickIntervalType) {\n case 'Integer':\n ticks.minor = math.number(math.ceil(minorLimits.min));\n ticks.integerTick = ticks.minor;\n ticks.decimalTick = minorLimits.min > 0.5 ? 0 : minorValues.decimal[0];\n ticks.fractionTick = minorLimits.min > 0.5 ? '0' : minorValues.fraction[0];\n break;\n case 'Decimal':\n ticks.minor = minorValues.decimal[0];\n ticks.integerTick = 1;\n ticks.decimalTick = ticks.minor;\n ticks.fractionTick = minorValues.fraction[0];\n break;\n case 'Fraction':\n ticks.minor = math.number(math.fraction(minorValues.fraction[0]));\n ticks.integerTick = 1;\n ticks.decimalTick = minorValues.decimal[0];\n ticks.fractionTick = minorValues.fraction[0];\n }\n } else {\n switch (ticks.tickIntervalType) {\n case 'Integer':\n ticks.integerTick = ticks.minor;\n ticks.decimalTick = minorLimits.min > 0.5 ? 0 : minorValues.decimal[0];\n ticks.fractionTick = minorLimits.min > 0.5 ? '0' : minorValues.fraction[0];\n break;\n case 'Decimal':\n ticks.integerTick = 1;\n ticks.decimalTick = ticks.minor;\n ticks.fractionTick = minorValues.fraction[0];\n break;\n case 'Fraction':\n ticks.integerTick = 1;\n ticks.decimalTick = minorValues.decimal[0];\n let fraction = math.fraction(math.number(ticks.minor));\n ticks.fractionTick = fraction.n + '/' + fraction.d;\n }\n }\n }\n return updateMajorValue({ ...graph, ticks });\n};\n"],"file":"utils.js"}