@pie-element/number-line 8.2.0 → 8.2.1-next.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/configure/package.json +1 -1
  2. package/controller/package.json +1 -1
  3. package/package.json +3 -3
  4. package/configure/lib/arrows.js +0 -124
  5. package/configure/lib/arrows.js.map +0 -1
  6. package/configure/lib/card-bar.js +0 -78
  7. package/configure/lib/card-bar.js.map +0 -1
  8. package/configure/lib/defaults.js +0 -144
  9. package/configure/lib/defaults.js.map +0 -1
  10. package/configure/lib/domain.js +0 -140
  11. package/configure/lib/domain.js.map +0 -1
  12. package/configure/lib/index.js +0 -224
  13. package/configure/lib/index.js.map +0 -1
  14. package/configure/lib/main.js +0 -866
  15. package/configure/lib/main.js.map +0 -1
  16. package/configure/lib/number-text-field.js +0 -97
  17. package/configure/lib/number-text-field.js.map +0 -1
  18. package/configure/lib/point-config.js +0 -144
  19. package/configure/lib/point-config.js.map +0 -1
  20. package/configure/lib/size.js +0 -100
  21. package/configure/lib/size.js.map +0 -1
  22. package/configure/lib/ticks.js +0 -288
  23. package/configure/lib/ticks.js.map +0 -1
  24. package/configure/lib/utils.js +0 -14
  25. package/configure/lib/utils.js.map +0 -1
  26. package/controller/lib/defaults.js +0 -47
  27. package/controller/lib/defaults.js.map +0 -1
  28. package/controller/lib/index.js +0 -468
  29. package/controller/lib/index.js.map +0 -1
  30. package/lib/data-converter.js +0 -100
  31. package/lib/data-converter.js.map +0 -1
  32. package/lib/draggable/index.js +0 -53
  33. package/lib/draggable/index.js.map +0 -1
  34. package/lib/index.js +0 -241
  35. package/lib/index.js.map +0 -1
  36. package/lib/number-line/colors.js +0 -21
  37. package/lib/number-line/colors.js.map +0 -1
  38. package/lib/number-line/feedback.js +0 -108
  39. package/lib/number-line/feedback.js.map +0 -1
  40. package/lib/number-line/graph/arrow.js +0 -63
  41. package/lib/number-line/graph/arrow.js.map +0 -1
  42. package/lib/number-line/graph/elements/base.js +0 -26
  43. package/lib/number-line/graph/elements/base.js.map +0 -1
  44. package/lib/number-line/graph/elements/builder.js +0 -38
  45. package/lib/number-line/graph/elements/builder.js.map +0 -1
  46. package/lib/number-line/graph/elements/line.js +0 -317
  47. package/lib/number-line/graph/elements/line.js.map +0 -1
  48. package/lib/number-line/graph/elements/point.js +0 -233
  49. package/lib/number-line/graph/elements/point.js.map +0 -1
  50. package/lib/number-line/graph/elements/ray.js +0 -227
  51. package/lib/number-line/graph/elements/ray.js.map +0 -1
  52. package/lib/number-line/graph/index.js +0 -328
  53. package/lib/number-line/graph/index.js.map +0 -1
  54. package/lib/number-line/graph/line.js +0 -48
  55. package/lib/number-line/graph/line.js.map +0 -1
  56. package/lib/number-line/graph/stacks.js +0 -101
  57. package/lib/number-line/graph/stacks.js.map +0 -1
  58. package/lib/number-line/graph/tick-utils.js +0 -440
  59. package/lib/number-line/graph/tick-utils.js.map +0 -1
  60. package/lib/number-line/graph/ticks.js +0 -239
  61. package/lib/number-line/graph/ticks.js.map +0 -1
  62. package/lib/number-line/index.js +0 -422
  63. package/lib/number-line/index.js.map +0 -1
  64. package/lib/number-line/point-chooser/button.js +0 -74
  65. package/lib/number-line/point-chooser/button.js.map +0 -1
  66. package/lib/number-line/point-chooser/img.js +0 -9
  67. package/lib/number-line/point-chooser/img.js.map +0 -1
  68. package/lib/number-line/point-chooser/index.js +0 -193
  69. package/lib/number-line/point-chooser/index.js.map +0 -1
  70. package/lib/number-line/point-chooser/styles.js +0 -100
  71. package/lib/number-line/point-chooser/styles.js.map +0 -1
  72. package/lib/number-line/transitions/fade.js +0 -67
  73. package/lib/number-line/transitions/fade.js.map +0 -1
  74. package/lib/number-line/transitions/index.js +0 -16
  75. package/lib/number-line/transitions/index.js.map +0 -1
@@ -1,101 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.Stack = Stack;
7
- exports["default"] = Stacks;
8
-
9
- function Stacks(domain) {
10
- var stacks = [new Stack(domain)];
11
-
12
- this.add = function (el) {
13
- var stack = stacks.find(function (s) {
14
- return s.add(el);
15
- });
16
-
17
- if (stacks.indexOf(stack) === -1) {
18
- stack = new Stack(domain);
19
- stacks.push(stack);
20
- stack.add(el);
21
- }
22
-
23
- return stacks.indexOf(stack);
24
- };
25
- }
26
-
27
- function Stack(domain) {
28
- var elements = [];
29
- /**
30
- * Try to add the element to the stack.
31
- * @return boolean true if added, else false
32
- */
33
-
34
- this.add = function (el)
35
- /*boolean*/
36
- {
37
- var elementRange = getRange(el);
38
-
39
- if (elementRange.left < domain.min || elementRange.right > domain.max) {
40
- return false;
41
- }
42
-
43
- var touchesExisting = elements.some(function (e) {
44
- return touchesRange(e, elementRange);
45
- });
46
-
47
- if (touchesExisting) {
48
- return false;
49
- } else {
50
- elements.push(el);
51
- return true;
52
- }
53
- };
54
-
55
- this.elements = function () {
56
- return elements;
57
- };
58
-
59
- var touchesRange = function touchesRange(el, candidate) {
60
- var existing = getRange(el);
61
- var leftOf = candidate.left < existing.left && candidate.right < existing.left;
62
- var rightOf = candidate.left > existing.right && candidate.right > existing.right;
63
- return !(leftOf || rightOf);
64
- };
65
-
66
- var getRange = function getRange(el) {
67
- var type = el.type,
68
- position = el.position;
69
-
70
- switch (type) {
71
- case 'point':
72
- {
73
- return {
74
- left: position,
75
- right: position
76
- };
77
- }
78
-
79
- case 'line':
80
- {
81
- return position;
82
- }
83
-
84
- case 'ray':
85
- {
86
- if (el.direction === 'positive') {
87
- return {
88
- left: position,
89
- right: domain.max
90
- };
91
- } else {
92
- return {
93
- left: domain.min,
94
- right: position
95
- };
96
- }
97
- }
98
- }
99
- };
100
- }
101
- //# sourceMappingURL=stacks.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/number-line/graph/stacks.js"],"names":["Stacks","domain","stacks","Stack","add","el","stack","find","s","indexOf","push","elements","elementRange","getRange","left","min","right","max","touchesExisting","some","e","touchesRange","candidate","existing","leftOf","rightOf","type","position","direction"],"mappings":"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","sourcesContent":["export default function Stacks(domain) {\n let stacks = [new Stack(domain)];\n\n this.add = function (el) {\n let stack = stacks.find((s) => s.add(el));\n if (stacks.indexOf(stack) === -1) {\n stack = new Stack(domain);\n stacks.push(stack);\n stack.add(el);\n }\n return stacks.indexOf(stack);\n };\n}\n\nexport function Stack(domain) {\n let elements = [];\n /**\n * Try to add the element to the stack.\n * @return boolean true if added, else false\n */\n this.add = function (el) /*boolean*/ {\n let elementRange = getRange(el);\n if (elementRange.left < domain.min || elementRange.right > domain.max) {\n return false;\n }\n\n let touchesExisting = elements.some((e) => touchesRange(e, elementRange));\n\n if (touchesExisting) {\n return false;\n } else {\n elements.push(el);\n return true;\n }\n };\n\n this.elements = function () {\n return elements;\n };\n\n let touchesRange = (el, candidate) => {\n let existing = getRange(el);\n let leftOf = candidate.left < existing.left && candidate.right < existing.left;\n let rightOf = candidate.left > existing.right && candidate.right > existing.right;\n return !(leftOf || rightOf);\n };\n\n let getRange = (el) => {\n let { type, position } = el;\n\n switch (type) {\n case 'point': {\n return { left: position, right: position };\n }\n case 'line': {\n return position;\n }\n case 'ray': {\n if (el.direction === 'positive') {\n return {\n left: position,\n right: domain.max,\n };\n } else {\n return {\n left: domain.min,\n right: position,\n };\n }\n }\n }\n };\n}\n"],"file":"stacks.js"}
@@ -1,440 +0,0 @@
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.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
-
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
- var _index = require("../../index");
23
-
24
- 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
-
26
- 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; }
27
-
28
- 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; }
29
-
30
- 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; }
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
- exports.decimalTickValues = decimalTickValues;
37
- 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'];
38
- /*This const will store possible multiplier for label interval that needs to be multiplied
39
- with tick interval with denominator represented with object key.*/
40
-
41
- exports.fractionTickValues = fractionTickValues;
42
- var labelMultiplier = {
43
- 1: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
44
- 2: [1, 2, 4, 6, 8, 10],
45
- 3: [1, 3, 6, 9],
46
- 4: [1, 2, 4, 8],
47
- 5: [1, 5, 10],
48
- 6: [1, 2, 3, 6],
49
- 7: [1, 7],
50
- 8: [1, 2, 4, 8],
51
- 9: [1, 3, 9],
52
- 10: [1, 2, 5, 10],
53
- 12: [1, 2, 3, 4, 6],
54
- 15: [1, 3, 5],
55
- 16: [1, 2, 4, 8],
56
- 20: [1, 2, 4, 5, 10],
57
- 25: [1, 5],
58
- 32: [1, 2, 4, 8],
59
- 50: [1, 2, 5, 10],
60
- 64: [1, 2, 4, 8],
61
- 100: [1, 2, 4, 5, 10],
62
- 1000: [1, 2, 4, 5, 8, 10]
63
- };
64
- exports.labelMultiplier = labelMultiplier;
65
-
66
- var fractionSnapTo = function fractionSnapTo(min, max, interval, value) {
67
- value = fmax(fmin(value, max), min);
68
- var mod = value.mod(interval);
69
- var v;
70
- var half = interval.div(2);
71
-
72
- if (math.largerEq(math.abs(mod), half)) {
73
- var d = interval.sub(math.abs(mod));
74
- var fn = math.largerEq(value, 0) ? 'add' : 'sub';
75
- v = value[fn](d);
76
- } else {
77
- var fn2 = math.largerEq(value, 0) ? 'sub' : 'add';
78
- v = value[fn2](math.abs(mod));
79
- }
80
-
81
- return v;
82
- };
83
-
84
- exports.fractionSnapTo = fractionSnapTo;
85
-
86
- var snapTo = function snapTo(min, max, interval, value) {
87
- var out = fractionSnapTo(math.fraction(min), math.fraction(max), math.fraction(interval), math.fraction(value));
88
- return math.number(out);
89
- };
90
-
91
- exports.snapTo = snapTo;
92
-
93
- var fractionRange = function fractionRange(start, end, interval) {
94
- var m = math.mod(math.abs(start), math.abs(interval));
95
-
96
- if (!math.equal(m, 0)) {
97
- throw new Error('start point must be divisible by interval');
98
- }
99
-
100
- if (math.equal(start, end)) {
101
- return [];
102
- }
103
-
104
- var e = math.subtract(end, math.mod(end, math.abs(interval)));
105
- var direction = math.larger(interval, 0) ? 'positive' : 'negative';
106
-
107
- if (direction === 'negative' && math.largerEq(end, start)) {
108
- throw new Error('start must be > than end when doing a negative decrement');
109
- }
110
-
111
- if (direction === 'positive' && math.smallerEq(end, start)) {
112
- throw new Error('start must be < end when doing increments');
113
- }
114
-
115
- var compareFn = direction === 'positive' ? math.smallerEq : math.equal(e, end) ? math.largerEq : math.larger;
116
- var out = [];
117
- var next = start;
118
-
119
- while (compareFn(next, e)) {
120
- out.push(next);
121
- next = math.add(next, interval);
122
- }
123
-
124
- return out;
125
- };
126
-
127
- exports.fractionRange = fractionRange;
128
-
129
- var zbrErrorMessage = function zbrErrorMessage(start, end) {
130
- return "Can only do a positive or negative range, but got: start: ".concat(start, " and end:").concat(end);
131
- };
132
-
133
- exports.zbrErrorMessage = zbrErrorMessage;
134
-
135
- var zeroBasedRange = function zeroBasedRange(start, end, interval) {
136
- start = math.fraction(start);
137
- end = math.fraction(end);
138
- interval = math.fraction(interval);
139
- var length = math.abs(math.subtract(end, start));
140
-
141
- if (math.larger(length, math.abs(end))) {
142
- throw new Error(zbrErrorMessage(start, end));
143
- }
144
-
145
- var a = {
146
- start: math.abs(start),
147
- end: math.abs(end),
148
- interval: math.abs(interval),
149
- multiplier: math.smaller(interval, 0) ? -1 : 1
150
- };
151
- var m = math.mod(a.start, a.interval);
152
- var s = math.larger(m, 0) ? math.add(math.subtract(a.start, m), a.interval) : a.start;
153
- var r = fractionRange(s, a.end, a.interval);
154
- var out = a.multiplier === -1 ? r.map(function (v) {
155
- return math.multiply(v, -1);
156
- }) : r;
157
-
158
- if (math.smaller(interval, 0)) {
159
- out.reverse();
160
- }
161
-
162
- return out;
163
- };
164
-
165
- exports.zeroBasedRange = zeroBasedRange;
166
-
167
- var fmin = function fmin(a, b) {
168
- a = math.fraction(a);
169
- b = math.fraction(b);
170
- return math.smaller(a, b) ? a : b;
171
- };
172
-
173
- var fmax = function fmax(a, b) {
174
- a = math.fraction(a);
175
- b = math.fraction(b);
176
- return math.larger(a, b) ? a : b;
177
- };
178
- /**
179
- * the lodash range was causing too much variance in the rounding errors
180
- * such that it was hard to round the numbers.
181
- * This is a more simplistic version but makes rounding work.
182
- */
183
-
184
-
185
- var simpleRange = function simpleRange(start, end, interval) {
186
- start = math.fraction(start);
187
- end = math.fraction(end);
188
- interval = math.fraction(interval);
189
- var positiveRange = math.larger(end, 0) ? zeroBasedRange(fmax(0, start), end, interval) : [];
190
- var negativeRange = math.smaller(start, 0) ? zeroBasedRange(fmin(0, end), start, math.multiply(interval, -1)) : [];
191
- var together = negativeRange.concat(positiveRange);
192
- var out = (0, _uniqWith["default"])(together, math.equal);
193
- return out;
194
- };
195
-
196
- exports.simpleRange = simpleRange;
197
-
198
- var closeTo = function closeTo(a, b, precision) {
199
- precision = precision || 2;
200
- var expectedDiff = Math.pow(10, -precision) / 2;
201
- var receivedDiff = Math.abs(a - b);
202
- return receivedDiff < expectedDiff;
203
- };
204
-
205
- exports.closeTo = closeTo;
206
-
207
- var limit = function limit(v, min, max) {
208
- if (math.smaller(fraction(v), fraction(min))) {
209
- return min;
210
- }
211
-
212
- if (math.larger(fraction(v), fraction(max))) {
213
- return max;
214
- }
215
-
216
- return v;
217
- };
218
- /*
219
- * Function to get tick interval limits based on min, max and width entered by the user.
220
- * @param domain object containing max and min value.
221
- * @param width number represents width of number line.
222
- * */
223
-
224
-
225
- var getMinorLimits = function getMinorLimits(domain, width) {
226
- var end = domain.max - domain.min;
227
- var min = math.number(math.multiply(10, math.divide(math.fraction(end), width)));
228
- var max = math.number(math.multiply(20, min));
229
- return {
230
- min: min,
231
- max: max
232
- };
233
- };
234
-
235
- exports.getMinorLimits = getMinorLimits;
236
-
237
- var isMultiple = function isMultiple(multiple, src) {
238
- var mod = math.mod(multiple, src);
239
- return math.equal(mod, 0);
240
- };
241
- /**
242
- * Accepts a fraction object {n,d,s} or number.
243
- * @param {*} v
244
- * @return mathjs.fraction
245
- */
246
-
247
-
248
- exports.isMultiple = isMultiple;
249
-
250
- var fraction = function fraction(v) {
251
- if ((0, _isObject["default"])(v)) {
252
- return math.fraction(v.n * v.s, v.d);
253
- } else if ((0, _isNumber["default"])(v)) {
254
- return math.fraction(v);
255
- }
256
- };
257
-
258
- exports.fraction = fraction;
259
-
260
- var normalizeTicks = function normalizeTicks(domain, width, ticks, opts) {
261
- var useLimit = opts ? opts.limit !== false : true;
262
- var minorLimits = getMinorLimits(domain, width);
263
- var minor = useLimit ? limit(fraction(ticks.minor), minorLimits.min, minorLimits.max) : fraction(ticks.minor);
264
- var major = useLimit ? limit(fraction(ticks.major), minor, math.multiply(minor, 20)) : fraction(ticks.major);
265
- var isMajorMultiple = isMultiple(major, minor);
266
-
267
- if (!isMajorMultiple) {
268
- var multiplier = math.divide(major, minor);
269
- var multiplyBy = multiplier <= 2 ? 2 : Math.round(multiplier); // major must be a multiple of minor
270
-
271
- return {
272
- minor: minor,
273
- major: math.multiply(minor, multiplyBy)
274
- };
275
- }
276
-
277
- return {
278
- major: major,
279
- minor: minor
280
- };
281
- };
282
- /**
283
- * Build ticks as an array of mathjs Fractions
284
- */
285
-
286
-
287
- exports.normalizeTicks = normalizeTicks;
288
-
289
- var buildTickDataAsFractions = function buildTickDataAsFractions(domain, width, ticks, opts) {
290
- ticks = normalizeTicks(domain, width, ticks, opts);
291
- var rng = simpleRange(domain.min, domain.max, ticks.minor);
292
- var o = rng.filter(function (x) {
293
- return math.smallerEq(x, math.fraction(domain.max));
294
- }).map(function (x) {
295
- var type = 'minor';
296
- var modulo = math.mod(x, ticks.major);
297
-
298
- if (closeTo(math.number(modulo), 0)) {
299
- type = 'major';
300
- }
301
-
302
- return {
303
- x: x,
304
- type: type
305
- };
306
- });
307
- return o;
308
- };
309
- /*
310
- * This function will generate tick interval values based on min and max limits of ticks.
311
- * @param minorLimits object containing min and max values
312
- * @return out object containing three arrays 1. fraction values, 2. decimal values,
313
- * */
314
-
315
-
316
- exports.buildTickDataAsFractions = buildTickDataAsFractions;
317
-
318
- var generateMinorValues = function generateMinorValues(minorLimits) {
319
- var out = {
320
- fraction: [],
321
- decimal: []
322
- };
323
- decimalTickValues.forEach(function (value) {
324
- if (value >= minorLimits.min && value <= minorLimits.max) {
325
- out.decimal.push(value);
326
- }
327
- });
328
- fractionTickValues.forEach(function (value) {
329
- var decimalValue = math.number(math.fraction(value));
330
-
331
- if (decimalValue >= minorLimits.min && decimalValue <= minorLimits.max) {
332
- out.fraction.push(value);
333
- }
334
- });
335
- return out;
336
- };
337
- /*
338
- * This function will generate label interval values for provided tick interval value.
339
- * @param minor number representing tick interval value.
340
- * @param domain object containing min and max values.
341
- * @param width number representing width of number line.
342
- * @return out object containing three arrays 1. fraction values, 2. decimal values,
343
- * */
344
-
345
-
346
- exports.generateMinorValues = generateMinorValues;
347
-
348
- var generateMajorValuesForMinor = function generateMajorValuesForMinor(minor, domain, width) {
349
- var out = {
350
- decimal: [],
351
- fraction: []
352
- };
353
- var fraction = math.fraction(math.number(math.number(minor)));
354
- var n = fraction.n;
355
- var d = fraction.d;
356
-
357
- if (n >= 1 && d === 1) {
358
- for (var i = 1; i <= 10; i++) {
359
- var num = math.number(math.multiply(n, i)); //Here we check if this major value can plot at least 2 points on number line.
360
-
361
- var ticksData = {
362
- minor: minor,
363
- major: num
364
- };
365
-
366
- var output = _index.tickUtils.buildTickData(domain, width, ticksData, {
367
- fraction: undefined
368
- });
369
-
370
- if (output.filter(function (x) {
371
- return x.type === 'major';
372
- }).length > 1) {
373
- out.fraction.push(num.toString());
374
- out.decimal.push(num);
375
- }
376
- }
377
- } else {
378
- for (var multiplierKey in labelMultiplier[d]) {
379
- 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.
380
-
381
-
382
- var _ticksData = {
383
- minor: minor,
384
- major: math.number(_num)
385
- };
386
-
387
- var _output = _index.tickUtils.buildTickData(domain, width, _ticksData, {
388
- fraction: undefined
389
- });
390
-
391
- if (_output.filter(function (x) {
392
- return x.type === 'major';
393
- }).length > 1) {
394
- if (_num.d !== 1) {
395
- out.fraction.push(_num.n + '/' + _num.d);
396
- } else {
397
- out.fraction.push(_num.n.toString());
398
- }
399
-
400
- out.decimal.push(math.number(_num));
401
- }
402
- }
403
- }
404
-
405
- return out;
406
- };
407
-
408
- exports.generateMajorValuesForMinor = generateMajorValuesForMinor;
409
-
410
- var buildTickData = function buildTickData(domain, width, ticks, opts) {
411
- var result = buildTickDataAsFractions(domain, width, ticks, opts);
412
- var out = result.map(function (o) {
413
- return opts.fraction ? o : _objectSpread(_objectSpread({}, o), {}, {
414
- x: math.number(o.x) || 0
415
- });
416
- });
417
- return out;
418
- };
419
-
420
- exports.buildTickData = buildTickData;
421
-
422
- var snapElements = function snapElements(domain, ticks, elements) {
423
- return elements.map(function (e) {
424
- var size = Number.isFinite(e.size) ? snapTo(0, e.size, ticks.minor, e.size) : undefined;
425
- var domainPosition = snapTo(domain.min, domain.max, ticks.minor, e.domainPosition);
426
-
427
- var out = _objectSpread(_objectSpread({}, e), {}, {
428
- domainPosition: domainPosition
429
- });
430
-
431
- if (Number.isFinite(size)) {
432
- out.size = size;
433
- }
434
-
435
- return out;
436
- });
437
- };
438
-
439
- exports.snapElements = snapElements;
440
- //# sourceMappingURL=tick-utils.js.map
@@ -1 +0,0 @@
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"],"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/*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"],"file":"tick-utils.js"}