linearly 0.36.1 → 0.37.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/lib/cjs/scalar.js DELETED
@@ -1,728 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.scalar = void 0;
37
- const Common = __importStar(require("./common"));
38
- /**
39
- * Functions for working with scalar values.
40
- * @category Modules
41
- */
42
- var scalar;
43
- (function (scalar) {
44
- /**
45
- * Adds the given values
46
- */
47
- function add(...vs) {
48
- return vs.reduce((a, b) => a + b, 0);
49
- }
50
- scalar.add = add;
51
- /**
52
- * Subtracts the given values. When the argument is a single value, it negates it. Otherwise, it subtracts from left to right.
53
- *
54
- * @shorthands
55
- * - {@link sub}
56
- */
57
- function subtract(...vs) {
58
- if (vs.length === 0) {
59
- return 0;
60
- }
61
- else if (vs.length === 1) {
62
- return -vs[0];
63
- }
64
- return vs.reduce((a, b) => a - b);
65
- }
66
- scalar.subtract = subtract;
67
- /**
68
- * Alias for {@link subtract}
69
- * @category Shorthands
70
- */
71
- scalar.sub = subtract;
72
- /**
73
- * Subtracts a from b
74
- */
75
- function delta(a, b) {
76
- return b - a;
77
- }
78
- scalar.delta = delta;
79
- /**
80
- * Multiplies the given values
81
- *
82
- * @shorthands
83
- * - {@link mul}
84
- */
85
- function multiply(...vs) {
86
- return vs.reduce((a, b) => a * b, 1);
87
- }
88
- scalar.multiply = multiply;
89
- /**
90
- * Alias for {@link multiply}
91
- * @category Shorthands
92
- */
93
- scalar.mul = multiply;
94
- /**
95
- * Divides the given values. When the argument is a single value, it returns its reciprocal. Otherwise, it divides from left to right.
96
- *
97
- * @shorthands
98
- * - {@link div}
99
- */
100
- function divide(...vs) {
101
- if (vs.length === 0) {
102
- return 1;
103
- }
104
- else if (vs.length === 1) {
105
- return 1 / vs[0];
106
- }
107
- return vs.reduce((a, b) => a / b);
108
- }
109
- scalar.divide = divide;
110
- /**
111
- * Alias for {@link divide}
112
- * @category Shorthands
113
- */
114
- scalar.div = divide;
115
- /**
116
- * Symmetric round the given number
117
- */
118
- scalar.round = Common.round;
119
- /**
120
- * Returns the smallest integer greater than or equal to the input
121
- */
122
- scalar.ceil = Math.ceil;
123
- /**
124
- * Returns the largest integer less than or equal to the input
125
- */
126
- scalar.floor = Math.floor;
127
- /**
128
- * Returns the sign of the input (-1, 0, or 1)
129
- */
130
- scalar.sign = Math.sign;
131
- /**
132
- * Returns the absolute value of the input
133
- */
134
- scalar.abs = Math.abs;
135
- /**
136
- * Removes the fractional part
137
- * @see https://www.sidefx.com/docs/houdini/vex/functions/trunc.html
138
- */
139
- function trunc(v) {
140
- return v < 0 ? Math.ceil(v) : Math.floor(v);
141
- }
142
- scalar.trunc = trunc;
143
- /**
144
- * Computes the fractional part of the argument
145
- * @see https://registry.khronos.org/OpenGL-Refpages/gl4/html/fract.xhtml
146
- */
147
- function fract(v) {
148
- return v - scalar.floor(v);
149
- }
150
- scalar.fract = fract;
151
- /**
152
- * Computes the value of one parameter modulo another. This is computed as x - y * floor(x/y). Unlike JavaScript's `%` operator, the sign of result always matches to `b`.
153
- * @see https://thebookofshaders.com/glossary/?search=mod
154
- */
155
- function mod(a, b) {
156
- return a - b * scalar.floor(a / b);
157
- }
158
- scalar.mod = mod;
159
- /**
160
- * Quantize a value to a given step and offset. If the step is 0, the value is returned unchanged.
161
- * @param v The value to quantize
162
- * @param step The step size
163
- * @param offset The offset
164
- * @returns The quantized value
165
- */
166
- function quantize(v, step, offset = 0) {
167
- if (step === 0)
168
- return v;
169
- return Math.round((v - offset) / step) * step + offset;
170
- }
171
- scalar.quantize = quantize;
172
- /**
173
- * Returns the minimum of the given values
174
- */
175
- scalar.min = Math.min;
176
- /**
177
- * Returns the maximum of the given values
178
- */
179
- scalar.max = Math.max;
180
- /**
181
- * Constrain a value to lie between two further values
182
- * @see https://thebookofshaders.com/glossary/?search=clamp
183
- * @param v the value to constrain
184
- * @param min the lower end of the range into which to constrain `s`
185
- * @param max the upper end of the range into which to constrain `s`
186
- */
187
- function clamp(v, min, max) {
188
- return Math.max(min, Math.min(max, v));
189
- }
190
- scalar.clamp = clamp;
191
- /**
192
- * Clamps the value to [0, 1]. Equivalent to {@link saturate}.
193
- */
194
- function clamp01(value) {
195
- return clamp(value, 0, 1);
196
- }
197
- scalar.clamp01 = clamp01;
198
- /**
199
- * Clamps the value to [-1, 1]
200
- */
201
- function clamp11(value) {
202
- return clamp(value, -1, 1);
203
- }
204
- scalar.clamp11 = clamp11;
205
- /**
206
- * Multiplies two values
207
- */
208
- function scale(a, b) {
209
- return a * b;
210
- }
211
- scalar.scale = scale;
212
- /**
213
- * Returns the average value of the input(s)
214
- * @see https://www.sidefx.com/docs/houdini/vex/functions/avg.html
215
- *
216
- * @shorthands
217
- * - {@link avg}
218
- */
219
- function average(...vs) {
220
- let x = 0;
221
- const len = vs.length || 1;
222
- for (const v of vs) {
223
- x += v;
224
- }
225
- return x / len;
226
- }
227
- scalar.average = average;
228
- /**
229
- * Alias for {@link average}
230
- * @category Shorthands
231
- */
232
- scalar.avg = average;
233
- /**
234
- * Adds two values after scaling the second operand by a scalar value
235
- */
236
- function scaleAndAdd(a, b, s) {
237
- return a + b * s;
238
- }
239
- scalar.scaleAndAdd = scaleAndAdd;
240
- /**
241
- * Calculates the distance between two values
242
- *
243
- * @shorthands
244
- * - {@link dist}
245
- */
246
- function distance(a, b) {
247
- return Math.abs(a - b);
248
- }
249
- scalar.distance = distance;
250
- /**
251
- * Alias for {@link distance}
252
- * @category Shorthands
253
- */
254
- scalar.dist = distance;
255
- /**
256
- * Returns the absolute difference between two numbers
257
- *
258
- * @shorthands
259
- * - {@link diff}
260
- */
261
- function difference(a, b) {
262
- return Math.abs(b - a);
263
- }
264
- scalar.difference = difference;
265
- /**
266
- * Alias for {@link difference}
267
- * @category Shorthands
268
- */
269
- scalar.diff = difference;
270
- /**
271
- * Returns the squared difference between two numbers
272
- *
273
- * @shorthands
274
- * - {@link sqrDist}
275
- */
276
- function squaredDistance(a, b) {
277
- return (a - b) ** 2;
278
- }
279
- scalar.squaredDistance = squaredDistance;
280
- /**
281
- * Alias for {@link squaredDistance}
282
- * @category Shorthands
283
- */
284
- scalar.sqrDist = squaredDistance;
285
- /**
286
- * Returns the absolute difference between two numbers
287
- *
288
- * @shorthands
289
- * - {@link len}
290
- */
291
- scalar.length = Math.abs;
292
- /**
293
- * Alias for {@link length}
294
- * @category Shorthands
295
- */
296
- scalar.len = scalar.length;
297
- /**
298
- * Returns the squared value of the input
299
- *
300
- * @shorthands
301
- * - {@link sqrLen}
302
- */
303
- function squaredLength(a) {
304
- return a ** 2;
305
- }
306
- scalar.squaredLength = squaredLength;
307
- /**
308
- * Alias for {@link squaredLength}
309
- * @category Shorthands
310
- */
311
- scalar.sqrLen = squaredLength;
312
- /**
313
- * Negates a value
314
- */
315
- function negate(a) {
316
- return -a;
317
- }
318
- scalar.negate = negate;
319
- /**
320
- * Returns the reciprocal of a value (1/a)
321
- */
322
- function invert(a) {
323
- return 1 / a;
324
- }
325
- scalar.invert = invert;
326
- /**
327
- * Returns the result of `1 - a`.
328
- */
329
- function oneMinus(a) {
330
- return 1 - a;
331
- }
332
- scalar.oneMinus = oneMinus;
333
- /**
334
- * Normalizes a value to -1, 0, or 1. Equivalent to `Math.sign`.
335
- */
336
- scalar.normalize = Math.sign;
337
- /**
338
- * Linearly interpolates between two values. Same as GLSL's built-in `mix` function.
339
- * @see https://registry.khronos.org/OpenGL-Refpages/gl4/html/mix.xhtml
340
- *
341
- * @shorthands
342
- * - {@link mix}
343
- */
344
- function lerp(a, b, t) {
345
- return a + (b - a) * t;
346
- }
347
- scalar.lerp = lerp;
348
- /**
349
- * Alias for {@link lerp}
350
- * @see https://registry.khronos.org/OpenGL-Refpages/gl4/html/mix.xhtml
351
- * @category Shorthands
352
- */
353
- scalar.mix = lerp;
354
- /**
355
- * Returns the amount to mix `min` and `max` to generate the input value `t`. This is the inverse of the `lerp` function. If `min` and `max` are equal, the mixing value is `0.5`.
356
- * @see https://docs.unity3d.com/Packages/com.unity.shadergraph@6.9/manual/Inverse-Lerp-Node.html
357
- * @see https://www.sidefx.com/docs/houdini/vex/functions/invlerp.html
358
- *
359
- * @shorthands
360
- * - {@link invlerp}
361
- */
362
- function inverseLerp(a, b, t) {
363
- if (a === b)
364
- return 0.5;
365
- return (t - a) / (b - a);
366
- }
367
- scalar.inverseLerp = inverseLerp;
368
- /**
369
- * Alias for {@link inverseLerp}
370
- * @category Shorthands
371
- */
372
- scalar.invlerp = inverseLerp;
373
- /**
374
- * Takes the value in the range `(omin, omax)` and shifts it to the corresponding value in the new range `(nmin, nmax)`. The function clamps the given value the range `(omin, omax)` before fitting, so the resulting value will be guaranteed to be in the range `(nmin, nmax)`. To avoid clamping use {@link efit} instead. If `omin` and `omax` are the same, the function returns the average of `nmin` and `nmax`.
375
- * @see https://www.sidefx.com/docs/houdini/vex/functions/fit.html
376
- * @param value
377
- * @param omin
378
- * @param omax
379
- * @param nmin
380
- * @param nmax
381
- * @returns
382
- */
383
- function fit(value, omin, omax, nmin, nmax) {
384
- if (omax === omin) {
385
- return lerp(nmin, nmax, 0.5);
386
- }
387
- const t = clamp((value - omin) / (omax - omin), 0, 1);
388
- return lerp(nmin, nmax, t);
389
- }
390
- scalar.fit = fit;
391
- /**
392
- * Takes the value in the range `(omin, omax)` and shifts it to the corresponding value in the new range `(nmin, nmax)`. Unlike `fit`, this function does not clamp values to the given range. If `omin` and `omax` are the same, the function returns the average of `nmin` and `nmax`.
393
- * @see https://www.sidefx.com/docs/houdini/vex/functions/fit.html
394
- * @param value
395
- * @param omin
396
- * @param omax
397
- * @param nmin
398
- * @param nmax
399
- * @returns
400
- */
401
- function efit(value, omin, omax, nmin, nmax) {
402
- if (omax === omin) {
403
- return lerp(nmin, nmax, 0.5);
404
- }
405
- const t = (value - omin) / (omax - omin);
406
- return lerp(nmin, nmax, t);
407
- }
408
- scalar.efit = efit;
409
- /**
410
- * Takes the value in the range `(0, 1)` and shifts it to the corresponding value in the new range `(nmin, nmax)`.
411
- * @see https://www.sidefx.com/docs/houdini/vex/functions/fit01.html
412
- */
413
- function fit01(value, nmin, nmax) {
414
- return fit(value, 0, 1, nmin, nmax);
415
- }
416
- scalar.fit01 = fit01;
417
- /**
418
- * Takes the value in the range `(-1, 1)` and shifts it to the corresponding value in the new range `(nmin, nmax)`.
419
- * @see https://www.sidefx.com/docs/houdini/vex/functions/fit11.html
420
- */
421
- function fit11(value, nmin, nmax) {
422
- return fit(value, -1, 1, nmin, nmax);
423
- }
424
- scalar.fit11 = fit11;
425
- /**
426
- * Apply a step function by comparing two values
427
- * @see https://registry.khronos.org/OpenGL-Refpages/gl4/html/step.xhtml
428
- * @param edge The location of the edge of the step function.
429
- * @param x The value to be used to generate the step function.
430
- * @returns
431
- */
432
- function step(edge, x) {
433
- return x < edge ? 0 : 1;
434
- }
435
- scalar.step = step;
436
- /**
437
- * Perform Hermite interpolation between two values.
438
- * @see https://registry.khronos.org/OpenGL-Refpages/gl4/html/smoothstep.xhtml
439
- * @param edge0 Lower edge of the Hermite function.
440
- * @param edge1 Upper edge of the Hermite function.
441
- * @param x Source value for interpolation.
442
- * @returns
443
- */
444
- function smoothstep(edge0, edge1, x) {
445
- const t = clamp((x - edge0) / (edge1 - edge0), 0, 1);
446
- return t * t * (3 - 2 * t);
447
- }
448
- scalar.smoothstep = smoothstep;
449
- /**
450
- * Converts a number from radians to degrees
451
- * @param rad A number in radians
452
- * @returns The degrees equivalent of the input
453
- *
454
- * @shorthands
455
- * - {@link deg}
456
- */
457
- function degrees(rad) {
458
- return (rad * 180) / Math.PI;
459
- }
460
- scalar.degrees = degrees;
461
- /**
462
- * Alias for {@link degrees}
463
- * @category Shorthands
464
- */
465
- scalar.deg = degrees;
466
- /**
467
- * Converts a number from degrees to radians
468
- * @param deg A number in degrees
469
- * @returns The radians equivalent of the input
470
- *
471
- * @shorthands
472
- * - {@link rad}
473
- */
474
- function radians(deg) {
475
- return (deg * Math.PI) / 180;
476
- }
477
- scalar.radians = radians;
478
- /**
479
- * Alias for {@link radians}
480
- * @category Shorthands
481
- */
482
- scalar.rad = radians;
483
- /**
484
- * Returns the sine of an angle in degrees
485
- * @param deg An angle in degrees
486
- */
487
- function sin(deg) {
488
- return Math.sin(deg * Common.DEG2RAD);
489
- }
490
- scalar.sin = sin;
491
- /**
492
- * Returns the cosine of an angle in degrees
493
- * @param deg An angle in degrees
494
- */
495
- function cos(deg) {
496
- return Math.cos(deg * Common.DEG2RAD);
497
- }
498
- scalar.cos = cos;
499
- /**
500
- * Returns the tangent of an angle in degrees
501
- * @param deg An angle in degrees
502
- */
503
- function tan(deg) {
504
- return Math.tan(deg * Common.DEG2RAD);
505
- }
506
- scalar.tan = tan;
507
- /**
508
- * Returns the arcsine of a value, in degrees
509
- * @param x A numeric expression
510
- * @returns The angle in degrees
511
- */
512
- function asin(x) {
513
- return Math.asin(x) * Common.RAD2DEG;
514
- }
515
- scalar.asin = asin;
516
- /**
517
- * Returns the arc cosine of a value, in degrees
518
- * @param x A numeric expression
519
- * @returns The angle in degrees
520
- */
521
- function acos(x) {
522
- return Math.acos(x) * Common.RAD2DEG;
523
- }
524
- scalar.acos = acos;
525
- /**
526
- * Returns the arc-tangent of the parameters. If `x` is not provided, `y` is regarded as a value of `y/x`.
527
- * @see https://thebookofshaders.com/glossary/?search=atan
528
- * @param y the value of the y-coordinate
529
- * @param x the value of the x-coordinate
530
- * @returns the angle in degrees
531
- */
532
- function atan(y, x) {
533
- if (x === undefined) {
534
- return Math.atan(y) * Common.RAD2DEG;
535
- }
536
- else {
537
- return Math.atan2(y, x) * Common.RAD2DEG;
538
- }
539
- }
540
- scalar.atan = atan;
541
- /**
542
- * Returns the arc-tangent of the parameters.
543
- * @see https://thebookofshaders.com/glossary/?search=atan
544
- * @param y the value of the y-coordinate
545
- * @param x the value of the x-coordinate
546
- * @returns the angle in degrees
547
- */
548
- function atan2(y, x) {
549
- return Math.atan2(y, x) * Common.RAD2DEG;
550
- }
551
- scalar.atan2 = atan2;
552
- /**
553
- * Returns the base to the exponent power
554
- */
555
- scalar.pow = Math.pow;
556
- /**
557
- * Returns e raised to the power of the input
558
- */
559
- scalar.exp = Math.exp;
560
- /**
561
- * Returns the natural logarithm of the input
562
- */
563
- scalar.log = Math.log;
564
- /**
565
- * Returns 2 raised to the power of the parameter
566
- * @param v the value of the power to which 2 will be raised
567
- */
568
- function exp2(v) {
569
- return 2 ** v;
570
- }
571
- scalar.exp2 = exp2;
572
- /**
573
- * Returns the base-2 logarithm of the input
574
- */
575
- scalar.log2 = Math.log2;
576
- /**
577
- * Returns the square root of the input
578
- */
579
- scalar.sqrt = Math.sqrt;
580
- /**
581
- * Returns the inverse of the square root of the parameter
582
- * @param v the value of which to take the inverse of the square root
583
- * @see https://thebookofshaders.com/glossary/?search=inversesqrt
584
- */
585
- function inverseSqrt(v) {
586
- return 1 / Math.sqrt(v);
587
- }
588
- scalar.inverseSqrt = inverseSqrt;
589
- /**
590
- * Alias for {@link inverseSqrt}
591
- * @category Shorthands
592
- */
593
- scalar.invsqrt = inverseSqrt;
594
- /**
595
- * Returns the hyperbolic sine of the input
596
- */
597
- scalar.sinh = Math.sinh;
598
- /**
599
- * Returns the hyperbolic cosine of the input
600
- */
601
- scalar.cosh = Math.cosh;
602
- /**
603
- * Returns the hyperbolic tangent of the input
604
- */
605
- scalar.tanh = Math.tanh;
606
- /**
607
- * Returns the inverse hyperbolic sine of the input
608
- */
609
- scalar.asinh = Math.asinh;
610
- /**
611
- * Returns the inverse hyperbolic cosine of the input
612
- */
613
- scalar.acosh = Math.acosh;
614
- /**
615
- * Returns the inverse hyperbolic tangent of the input
616
- */
617
- scalar.atanh = Math.atanh;
618
- /**
619
- * Clamps the value to [0, 1]. Equivalent to HLSL's `saturate`.
620
- */
621
- function saturate(v) {
622
- return Math.max(0, Math.min(1, v));
623
- }
624
- scalar.saturate = saturate;
625
- /**
626
- * Returns a sawtooth wave with the given period. Basically, the output will be the input value modulo `period`, but returns 1 when the phase is 1. The shape of the wave will be continuous for the negative ranges, so when phase is negative integer, the output will be 0, else if phase is negative float, the output will be 1 - fractional part of phase.
627
- * @see https://www.geogebra.org/calculator/d3grfqqe
628
- *
629
- * @param x the input value
630
- * @param period the period of the wave
631
- * @category Periodic Functions
632
- *
633
- * @shorthands
634
- * - {@link ramp}
635
- *
636
- */
637
- function sawtooth(x, period = 1) {
638
- x /= period;
639
- if (x === 1)
640
- return 1;
641
- if (x < 0)
642
- return (1 + (x % 1)) % 1;
643
- return x % 1;
644
- }
645
- scalar.sawtooth = sawtooth;
646
- /**
647
- * Alias for {@link sawtooth}
648
- * @category Shorthands
649
- */
650
- scalar.ramp = sawtooth;
651
- /**
652
- * Returns a triangle wave with the given period. The output ranges from 0 to 1.
653
- * @see https://www.geogebra.org/calculator/d3grfqqe
654
- *
655
- * @param x The input value
656
- * @param period The period of the wave
657
- * @category Periodic Functions
658
- */
659
- function triangle(x, period = 1) {
660
- x /= period;
661
- return 1 - Math.abs(1 - 2 * (Math.abs(x) % 1));
662
- }
663
- scalar.triangle = triangle;
664
- /**
665
- * Returns a cosine wave with the given period. The output ranges from 0 to 1, and y = 0 when x = 0.
666
- *
667
- * @see https://www.geogebra.org/calculator/d3grfqqe
668
- * @param v the input value
669
- * @param period the period of the wave
670
- * @category Periodic Functions
671
- */
672
- function coswave(v, period = 1) {
673
- v = (v * Math.PI * 2) / period;
674
- return (-Math.cos(v) + 1) / 2;
675
- }
676
- scalar.coswave = coswave;
677
- /**
678
- * Returns a sine wave with the given period. The output ranges from 0 to 1, and y = 0 when x = 0.
679
- *
680
- * @see https://www.geogebra.org/calculator/d3grfqqe
681
- * @param v the input value
682
- * @param period the period of the wave
683
- * @category Periodic Functions
684
- */
685
- function sinwave(v, period = 1) {
686
- v = (v * Math.PI * 2) / period;
687
- return (-Math.sin(v) + 1) / 2;
688
- }
689
- scalar.sinwave = sinwave;
690
- /**
691
- * Returns a square wave with the given period. The output is 0 for the first half and 1 for the second half of each period.
692
- * @see https://www.geogebra.org/calculator/d3grfqqe
693
- *
694
- * @param x the input value
695
- * @param period the period of the wave
696
- * @category Periodic Functions
697
- */
698
- function square(x, period = 1) {
699
- x /= period;
700
- const phase = ((x % 1) + 1) % 1;
701
- return phase < 0.5 ? 0 : 1;
702
- }
703
- scalar.square = square;
704
- /**
705
- * Returns whether or not two numbers are approximately equal.
706
- *
707
- * @shorthands
708
- * - {@link approx}
709
- * - {@link equals}
710
- */
711
- function approxEquals(a, b) {
712
- return (Math.abs(a - b) <=
713
- Common.EPSILON * Math.max(1.0, Math.abs(a), Math.abs(b)));
714
- }
715
- scalar.approxEquals = approxEquals;
716
- /**
717
- * Alias for {@link approxEquals}
718
- * @category Shorthands
719
- */
720
- scalar.approx = approxEquals;
721
- /**
722
- * Alias for {@link approxEquals}. This is provided for compatibility with gl-matrix.
723
- * @category Shorthands
724
- * @deprecated Use {@link approxEquals} instead
725
- */
726
- scalar.equals = approxEquals;
727
- })(scalar || (exports.scalar = scalar = {}));
728
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NhbGFyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjYWxhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBa0M7QUFFbEM7OztHQUdHO0FBQ0gsSUFBaUIsTUFBTSxDQTJ0QnRCO0FBM3RCRCxXQUFpQixNQUFNO0lBQ3RCOztPQUVHO0lBQ0gsU0FBZ0IsR0FBRyxDQUFDLEdBQUcsRUFBWTtRQUNsQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQ3JDLENBQUM7SUFGZSxVQUFHLE1BRWxCLENBQUE7SUFFRDs7Ozs7T0FLRztJQUNILFNBQWdCLFFBQVEsQ0FBQyxHQUFHLEVBQVk7UUFDdkMsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sQ0FBQyxDQUFBO1FBQ1QsQ0FBQzthQUFNLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM1QixPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2QsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBUGUsZUFBUSxXQU92QixDQUFBO0lBRUQ7OztPQUdHO0lBQ1UsVUFBRyxHQUFHLFFBQVEsQ0FBQTtJQUUzQjs7T0FFRztJQUNILFNBQWdCLEtBQUssQ0FBQyxDQUFTLEVBQUUsQ0FBUztRQUN6QyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDYixDQUFDO0lBRmUsWUFBSyxRQUVwQixDQUFBO0lBRUQ7Ozs7O09BS0c7SUFDSCxTQUFnQixRQUFR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