@pawells/math-extended 1.0.5 → 2.0.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.
Files changed (106) hide show
  1. package/README.md +5 -5
  2. package/build/angles.d.ts +43 -3
  3. package/build/angles.d.ts.map +1 -1
  4. package/build/angles.js +61 -34
  5. package/build/angles.js.map +1 -1
  6. package/build/clamp.d.ts +5 -3
  7. package/build/clamp.d.ts.map +1 -1
  8. package/build/clamp.js +5 -3
  9. package/build/clamp.js.map +1 -1
  10. package/build/interpolation.d.ts +444 -67
  11. package/build/interpolation.d.ts.map +1 -1
  12. package/build/interpolation.js +444 -67
  13. package/build/interpolation.js.map +1 -1
  14. package/build/matrices/_exports.d.ts +13 -0
  15. package/build/matrices/_exports.d.ts.map +1 -0
  16. package/build/matrices/_exports.js +13 -0
  17. package/build/matrices/_exports.js.map +1 -0
  18. package/build/matrices/arithmetic.d.ts +170 -181
  19. package/build/matrices/arithmetic.d.ts.map +1 -1
  20. package/build/matrices/arithmetic.js +192 -202
  21. package/build/matrices/arithmetic.js.map +1 -1
  22. package/build/matrices/asserts.d.ts +244 -116
  23. package/build/matrices/asserts.d.ts.map +1 -1
  24. package/build/matrices/asserts.js +291 -94
  25. package/build/matrices/asserts.js.map +1 -1
  26. package/build/matrices/core.d.ts +40 -41
  27. package/build/matrices/core.d.ts.map +1 -1
  28. package/build/matrices/core.js +12 -13
  29. package/build/matrices/core.js.map +1 -1
  30. package/build/matrices/decompositions.d.ts +121 -124
  31. package/build/matrices/decompositions.d.ts.map +1 -1
  32. package/build/matrices/decompositions.js +168 -226
  33. package/build/matrices/decompositions.js.map +1 -1
  34. package/build/matrices/index.d.ts +3 -2
  35. package/build/matrices/index.d.ts.map +1 -1
  36. package/build/matrices/index.js +5 -2
  37. package/build/matrices/index.js.map +1 -1
  38. package/build/matrices/linear-algebra.d.ts +18 -13
  39. package/build/matrices/linear-algebra.d.ts.map +1 -1
  40. package/build/matrices/linear-algebra.js +58 -23
  41. package/build/matrices/linear-algebra.js.map +1 -1
  42. package/build/matrices/normalization.d.ts +8 -8
  43. package/build/matrices/transformations.d.ts +184 -168
  44. package/build/matrices/transformations.d.ts.map +1 -1
  45. package/build/matrices/transformations.js +99 -83
  46. package/build/matrices/transformations.js.map +1 -1
  47. package/build/matrices/types.d.ts +12 -12
  48. package/build/matrices/types.d.ts.map +1 -1
  49. package/build/quaternions/_exports.d.ts +11 -0
  50. package/build/quaternions/_exports.d.ts.map +1 -0
  51. package/build/quaternions/_exports.js +11 -0
  52. package/build/quaternions/_exports.js.map +1 -0
  53. package/build/quaternions/asserts.d.ts +115 -7
  54. package/build/quaternions/asserts.d.ts.map +1 -1
  55. package/build/quaternions/asserts.js +162 -8
  56. package/build/quaternions/asserts.js.map +1 -1
  57. package/build/quaternions/conversions.d.ts +31 -21
  58. package/build/quaternions/conversions.d.ts.map +1 -1
  59. package/build/quaternions/conversions.js +28 -18
  60. package/build/quaternions/conversions.js.map +1 -1
  61. package/build/quaternions/core.d.ts +73 -41
  62. package/build/quaternions/core.d.ts.map +1 -1
  63. package/build/quaternions/core.js +84 -49
  64. package/build/quaternions/core.js.map +1 -1
  65. package/build/quaternions/index.d.ts +3 -2
  66. package/build/quaternions/index.d.ts.map +1 -1
  67. package/build/quaternions/index.js +5 -2
  68. package/build/quaternions/index.js.map +1 -1
  69. package/build/quaternions/interpolation.d.ts +15 -9
  70. package/build/quaternions/interpolation.d.ts.map +1 -1
  71. package/build/quaternions/interpolation.js +15 -9
  72. package/build/quaternions/interpolation.js.map +1 -1
  73. package/build/quaternions/predefined.d.ts +9 -3
  74. package/build/quaternions/predefined.d.ts.map +1 -1
  75. package/build/quaternions/predefined.js +9 -3
  76. package/build/quaternions/predefined.js.map +1 -1
  77. package/build/quaternions/types.d.ts +3 -3
  78. package/build/random.d.ts +5 -2
  79. package/build/random.d.ts.map +1 -1
  80. package/build/random.js +20 -17
  81. package/build/random.js.map +1 -1
  82. package/build/vectors/_exports.d.ts +10 -0
  83. package/build/vectors/_exports.d.ts.map +1 -0
  84. package/build/vectors/_exports.js +10 -0
  85. package/build/vectors/_exports.js.map +1 -0
  86. package/build/vectors/asserts.d.ts +153 -49
  87. package/build/vectors/asserts.d.ts.map +1 -1
  88. package/build/vectors/asserts.js +202 -52
  89. package/build/vectors/asserts.js.map +1 -1
  90. package/build/vectors/core.d.ts +216 -137
  91. package/build/vectors/core.d.ts.map +1 -1
  92. package/build/vectors/core.js +217 -158
  93. package/build/vectors/core.js.map +1 -1
  94. package/build/vectors/index.d.ts +1 -0
  95. package/build/vectors/index.d.ts.map +1 -1
  96. package/build/vectors/index.js +3 -0
  97. package/build/vectors/index.js.map +1 -1
  98. package/build/vectors/interpolation.d.ts +39 -27
  99. package/build/vectors/interpolation.d.ts.map +1 -1
  100. package/build/vectors/interpolation.js +39 -27
  101. package/build/vectors/interpolation.js.map +1 -1
  102. package/build/vectors/predefined.d.ts +48 -24
  103. package/build/vectors/predefined.d.ts.map +1 -1
  104. package/build/vectors/predefined.js +38 -18
  105. package/build/vectors/predefined.js.map +1 -1
  106. package/package.json +12 -15
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  [![npm](https://img.shields.io/npm/v/@pawells/math-extended)](https://www.npmjs.com/package/@pawells/math-extended)
4
4
  [![GitHub Release](https://img.shields.io/github/v/release/PhillipAWells/math-extended)](https://github.com/PhillipAWells/math-extended/releases)
5
5
  [![CI](https://github.com/PhillipAWells/math-extended/actions/workflows/ci.yml/badge.svg)](https://github.com/PhillipAWells/math-extended/actions/workflows/ci.yml)
6
- [![Node](https://img.shields.io/badge/node-%3E%3D24-brightgreen)](https://nodejs.org)
6
+ [![Node](https://img.shields.io/badge/node-%3E%3D22-brightgreen)](https://nodejs.org)
7
7
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./LICENSE)
8
8
  [![GitHub Sponsors](https://img.shields.io/github/sponsors/PhillipAWells?style=social)](https://github.com/sponsors/PhillipAWells)
9
9
 
@@ -88,7 +88,7 @@ QuaternionUtils.QuaternionSLERP(q1, q2, 0.5);
88
88
  |--------|-------------|
89
89
  | `RandomInt(min, max)` | Random integer in `[min, max]` |
90
90
  | `RandomFloat(min, max)` | Random float in `[min, max)` |
91
- | `RandomBool(probability?)` | Random boolean with optional probability |
91
+ | `RandomBool(probability?)` | Random boolean with optional probability; throws `RangeError` if probability is outside `[0, 1]` |
92
92
  | `RandomNormal(mean?, stdDev?)` | Normal-distributed random number |
93
93
  | `RandomChoice(array)` | Random element from an array |
94
94
  | `RandomSample(array, count)` | `count` unique random elements |
@@ -226,7 +226,7 @@ Matrices are `number[][]` arrays (`IMatrix`, `IMatrix1`–`IMatrix4`). All opera
226
226
 
227
227
  | Export | Description |
228
228
  |--------|-------------|
229
- | `MatrixLU(m)` | LU decomposition `{ L, U }` |
229
+ | `MatrixLU(m)` | LU decomposition with partial pivoting `{ L, U, P }` |
230
230
  | `MatrixQR(m)` | QR decomposition `{ Q, R }` |
231
231
  | `MatrixCholesky(m)` | Cholesky decomposition `L` |
232
232
  | `MatrixEigen(m)` | Eigenvalue decomposition `{ eigenvalues, eigenvectors }` |
@@ -328,14 +328,14 @@ yarn watch # Watch mode
328
328
  yarn typecheck # Type check without building
329
329
  yarn lint # ESLint
330
330
  yarn lint:fix # ESLint with auto-fix
331
- yarn test # Run tests (1077 tests)
331
+ yarn test # Run tests (1080 tests)
332
332
  yarn test:ui # Interactive Vitest UI
333
333
  yarn test:coverage # Tests with coverage report
334
334
  ```
335
335
 
336
336
  ## Requirements
337
337
 
338
- - Node.js >= 24.0.0
338
+ - Node.js >= 22.0.0
339
339
 
340
340
  ## License
341
341
 
package/build/angles.d.ts CHANGED
@@ -2,30 +2,70 @@
2
2
  * Converts degrees to radians
3
3
  * @param degrees - Angle in degrees
4
4
  * @returns Angle in radians
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * DegreesToRadians(180) // Math.PI
9
+ * DegreesToRadians(90) // Math.PI / 2
10
+ * DegreesToRadians(0) // 0
11
+ * ```
5
12
  */
6
13
  export declare function DegreesToRadians(degrees: number): number;
7
14
  /**
8
15
  * Converts radians to degrees
9
16
  * @param radians - Angle in radians
10
17
  * @returns Angle in degrees
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * RadiansToDegrees(Math.PI) // 180
22
+ * RadiansToDegrees(Math.PI / 2) // 90
23
+ * RadiansToDegrees(0) // 0
24
+ * ```
11
25
  */
12
26
  export declare function RadiansToDegrees(radians: number): number;
13
27
  /**
14
28
  * Formats an angle in radians to a string representation in terms of π
15
29
  * @param radians - Angle in radians
16
30
  * @returns String representation of the angle
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * FormatRadians(0) // '0'
35
+ * FormatRadians(Math.PI) // 'π'
36
+ * FormatRadians(Math.PI / 2) // 'π/2'
37
+ * FormatRadians(Math.PI / 4) // 'π/4'
38
+ * FormatRadians(-Math.PI) // '-π'
39
+ * ```
17
40
  */
18
41
  export declare function FormatRadians(radians: number): string;
19
42
  /**
20
43
  * Normalizes an angle in radians to be between 0 and 2π
21
44
  * @param radians - Angle in radians
22
- * @returns Normalized angle in radians (0 to 2π)
45
+ * @returns Normalized angle in radians in the range [0, 2π)
46
+ *
47
+ * @example
48
+ * ```typescript
49
+ * NormalizeRadians(3 * Math.PI) // Math.PI (wraps around)
50
+ * NormalizeRadians(-Math.PI) // Math.PI (negative angles normalized)
51
+ * NormalizeRadians(0) // 0
52
+ * ```
23
53
  */
24
54
  export declare function NormalizeRadians(radians: number): number;
25
55
  /**
26
- * Normalizes an angle in degrees to be between 0 and 360
56
+ * Normalizes an angle in degrees to be between 0 and 360.
57
+ * Applies a floating-point epsilon cleanup so values within `1e-10` of 0 or 360
58
+ * are snapped to exactly 0, matching the behaviour of `NormalizeRadians`.
27
59
  * @param degrees - Angle in degrees
28
- * @returns Normalized angle in degrees (0 to 360)
60
+ * @returns Normalized angle in degrees in the range [0°, 360°)
61
+ *
62
+ * @example
63
+ * ```typescript
64
+ * NormalizeDegrees(450) // 90 (wraps around 360°)
65
+ * NormalizeDegrees(-90) // 270 (negative angles normalized)
66
+ * NormalizeDegrees(0) // 0
67
+ * NormalizeDegrees(360 - 1e-11) // 0 (boundary epsilon snap)
68
+ * ```
29
69
  */
30
70
  export declare function NormalizeDegrees(degrees: number): number;
31
71
  //# sourceMappingURL=angles.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"angles.d.ts","sourceRoot":"","sources":["../src/angles.ts"],"names":[],"mappings":"AAUA;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAsCrD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMxD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAExD"}
1
+ {"version":3,"file":"angles.d.ts","sourceRoot":"","sources":["../src/angles.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAuBrD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMxD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKxD"}
package/build/angles.js CHANGED
@@ -1,9 +1,5 @@
1
1
  const DEGREES_PER_HALF_REVOLUTION = 180;
2
2
  const DEGREES_PER_FULL_REVOLUTION = 360;
3
- const ANGLE_FRACTION_DENOMINATOR_3 = 3;
4
- const ANGLE_FRACTION_DENOMINATOR_6 = 6;
5
- const ANGLE_FRACTION_QUARTER = 0.25;
6
- const ANGLE_FRACTION_THREE_QUARTERS = 0.75;
7
3
  const ANGLE_FRACTION_TOLERANCE = 0.0001;
8
4
  const ANGLE_MAX_DENOMINATOR = 12;
9
5
  const NORMALIZE_EPSILON = 1e-10; // Epsilon for floating-point boundary cleanup
@@ -11,6 +7,13 @@ const NORMALIZE_EPSILON = 1e-10; // Epsilon for floating-point boundary cleanup
11
7
  * Converts degrees to radians
12
8
  * @param degrees - Angle in degrees
13
9
  * @returns Angle in radians
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * DegreesToRadians(180) // Math.PI
14
+ * DegreesToRadians(90) // Math.PI / 2
15
+ * DegreesToRadians(0) // 0
16
+ * ```
14
17
  */
15
18
  export function DegreesToRadians(degrees) {
16
19
  return (degrees * Math.PI) / DEGREES_PER_HALF_REVOLUTION;
@@ -19,6 +22,13 @@ export function DegreesToRadians(degrees) {
19
22
  * Converts radians to degrees
20
23
  * @param radians - Angle in radians
21
24
  * @returns Angle in degrees
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * RadiansToDegrees(Math.PI) // 180
29
+ * RadiansToDegrees(Math.PI / 2) // 90
30
+ * RadiansToDegrees(0) // 0
31
+ * ```
22
32
  */
23
33
  export function RadiansToDegrees(radians) {
24
34
  return (radians * DEGREES_PER_HALF_REVOLUTION) / Math.PI;
@@ -27,6 +37,15 @@ export function RadiansToDegrees(radians) {
27
37
  * Formats an angle in radians to a string representation in terms of π
28
38
  * @param radians - Angle in radians
29
39
  * @returns String representation of the angle
40
+ *
41
+ * @example
42
+ * ```typescript
43
+ * FormatRadians(0) // '0'
44
+ * FormatRadians(Math.PI) // 'π'
45
+ * FormatRadians(Math.PI / 2) // 'π/2'
46
+ * FormatRadians(Math.PI / 4) // 'π/4'
47
+ * FormatRadians(-Math.PI) // '-π'
48
+ * ```
30
49
  */
31
50
  export function FormatRadians(radians) {
32
51
  const r = radians / Math.PI;
@@ -36,32 +55,19 @@ export function FormatRadians(radians) {
36
55
  return 'π';
37
56
  if (r === -1)
38
57
  return '-π';
39
- // Handle common fractions of π
40
- const fractions = [
41
- { value: 1 / 2, str: 'π/2' },
42
- { value: ANGLE_FRACTION_QUARTER, str: 'π/4' },
43
- { value: ANGLE_FRACTION_THREE_QUARTERS, str: '3π/4' },
44
- { value: 1 / ANGLE_FRACTION_DENOMINATOR_6, str: 'π/6' },
45
- { value: 1 / ANGLE_FRACTION_DENOMINATOR_3, str: 'π/3' },
46
- { value: 2 / ANGLE_FRACTION_DENOMINATOR_3, str: '2π/3' },
47
- ];
48
- for (const fraction of fractions) {
49
- if (Math.abs(r - fraction.value) < ANGLE_FRACTION_TOLERANCE)
50
- return fraction.str;
51
- if (Math.abs(r + fraction.value) < ANGLE_FRACTION_TOLERANCE)
52
- return '-' + fraction.str;
53
- }
54
- // Try to find a simple fraction representation
55
- const tolerance = ANGLE_FRACTION_TOLERANCE;
56
- for (let denominator = 2; denominator <= ANGLE_MAX_DENOMINATOR; denominator++) {
57
- for (let numerator = 1; numerator < denominator; numerator++) {
58
- const frac = numerator / denominator;
59
- if (Math.abs(r - frac) < tolerance) {
60
- return `${numerator === 1 ? '' : numerator}π/${denominator}`;
61
- }
62
- if (Math.abs(r + frac) < tolerance) {
63
- return `-${numerator === 1 ? '' : numerator}π/${denominator}`;
64
- }
58
+ const absR = Math.abs(r);
59
+ const sign = r < 0 ? '-' : '';
60
+ // Try to express |r| as n/d for d in [2, ANGLE_MAX_DENOMINATOR].
61
+ // Iterating from the smallest denominator first ensures reduced fractions
62
+ // are returned (e.g., π/2 is found at d=2 before 2π/4 would be at d=4).
63
+ for (let d = 2; d <= ANGLE_MAX_DENOMINATOR; d++) {
64
+ const n = Math.round(absR * d);
65
+ if (n === 0)
66
+ continue; // zero already handled
67
+ if (n % d === 0)
68
+ continue; // integer multiple of π — fall through to fallback
69
+ if (Math.abs(absR - n / d) < ANGLE_FRACTION_TOLERANCE) {
70
+ return n === 1 ? `${sign}π/${d}` : `${sign}${n}π/${d}`;
65
71
  }
66
72
  }
67
73
  return `${r}π`;
@@ -69,7 +75,14 @@ export function FormatRadians(radians) {
69
75
  /**
70
76
  * Normalizes an angle in radians to be between 0 and 2π
71
77
  * @param radians - Angle in radians
72
- * @returns Normalized angle in radians (0 to 2π)
78
+ * @returns Normalized angle in radians in the range [0, 2π)
79
+ *
80
+ * @example
81
+ * ```typescript
82
+ * NormalizeRadians(3 * Math.PI) // Math.PI (wraps around)
83
+ * NormalizeRadians(-Math.PI) // Math.PI (negative angles normalized)
84
+ * NormalizeRadians(0) // 0
85
+ * ```
73
86
  */
74
87
  export function NormalizeRadians(radians) {
75
88
  const twoPi = 2 * Math.PI;
@@ -80,11 +93,25 @@ export function NormalizeRadians(radians) {
80
93
  return result;
81
94
  }
82
95
  /**
83
- * Normalizes an angle in degrees to be between 0 and 360
96
+ * Normalizes an angle in degrees to be between 0 and 360.
97
+ * Applies a floating-point epsilon cleanup so values within `1e-10` of 0 or 360
98
+ * are snapped to exactly 0, matching the behaviour of `NormalizeRadians`.
84
99
  * @param degrees - Angle in degrees
85
- * @returns Normalized angle in degrees (0 to 360)
100
+ * @returns Normalized angle in degrees in the range [0°, 360°)
101
+ *
102
+ * @example
103
+ * ```typescript
104
+ * NormalizeDegrees(450) // 90 (wraps around 360°)
105
+ * NormalizeDegrees(-90) // 270 (negative angles normalized)
106
+ * NormalizeDegrees(0) // 0
107
+ * NormalizeDegrees(360 - 1e-11) // 0 (boundary epsilon snap)
108
+ * ```
86
109
  */
87
110
  export function NormalizeDegrees(degrees) {
88
- return ((degrees % DEGREES_PER_FULL_REVOLUTION) + DEGREES_PER_FULL_REVOLUTION) % DEGREES_PER_FULL_REVOLUTION;
111
+ const result = ((degrees % DEGREES_PER_FULL_REVOLUTION) + DEGREES_PER_FULL_REVOLUTION) % DEGREES_PER_FULL_REVOLUTION;
112
+ // Epsilon cleanup for floating-point precision at boundaries (mirrors NormalizeRadians)
113
+ if (result < NORMALIZE_EPSILON || result > DEGREES_PER_FULL_REVOLUTION - NORMALIZE_EPSILON)
114
+ return 0;
115
+ return result;
89
116
  }
90
117
  //# sourceMappingURL=angles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"angles.js","sourceRoot":"","sources":["../src/angles.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"angles.js","sourceRoot":"","sources":["../src/angles.ts"],"names":[],"mappings":"AAAA,MAAM,2BAA2B,GAAG,GAAG,CAAC;AACxC,MAAM,2BAA2B,GAAG,GAAG,CAAC;AACxC,MAAM,wBAAwB,GAAG,MAAM,CAAC;AACxC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACjC,MAAM,iBAAiB,GAAG,KAAK,CAAC,CAAC,8CAA8C;AAE/E;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC/C,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,2BAA2B,CAAC;AAC1D,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC/C,OAAO,CAAC,OAAO,GAAG,2BAA2B,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;AAC1D,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe;IAC5C,MAAM,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC;IAE5B,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IACxB,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IACxB,IAAI,CAAC,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAE1B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9B,iEAAiE;IACjE,0EAA0E;IAC1E,wEAAwE;IACxE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,qBAAqB,EAAE,CAAC,EAAE,EAAE,CAAC;QACjD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC;YAAE,SAAS,CAAQ,uBAAuB;QACrD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,SAAS,CAAI,mDAAmD;QACjF,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,wBAAwB,EAAE,CAAC;YACvD,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACxD,CAAC;IACF,CAAC;IAED,OAAO,GAAG,CAAC,GAAG,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC/C,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC;IACnD,6DAA6D;IAC7D,IAAI,MAAM,GAAG,iBAAiB,IAAI,MAAM,GAAG,KAAK,GAAG,iBAAiB;QAAE,OAAO,CAAC,CAAC;IAC/E,OAAO,MAAM,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC/C,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,GAAG,2BAA2B,CAAC,GAAG,2BAA2B,CAAC,GAAG,2BAA2B,CAAC;IACrH,wFAAwF;IACxF,IAAI,MAAM,GAAG,iBAAiB,IAAI,MAAM,GAAG,2BAA2B,GAAG,iBAAiB;QAAE,OAAO,CAAC,CAAC;IACrG,OAAO,MAAM,CAAC;AACf,CAAC"}
package/build/clamp.d.ts CHANGED
@@ -9,9 +9,11 @@
9
9
  * @returns The clamped value in the range [min, max]
10
10
  *
11
11
  * @example
12
- * Clamp(5, 0, 10) // 5 (within range)
13
- * Clamp(-3, 0, 10) // 0 (below min)
14
- * Clamp(15, 0, 10) // 10 (above max)
12
+ * ```typescript
13
+ * Clamp(5, 0, 10) // 5 (within range)
14
+ * Clamp(-3, 0, 10) // 0 (below min)
15
+ * Clamp(15, 0, 10) // 10 (above max)
16
+ * ```
15
17
  */
16
18
  export declare function Clamp(x: number, min: number, max: number): number;
17
19
  //# sourceMappingURL=clamp.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"clamp.d.ts","sourceRoot":"","sources":["../src/clamp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEjE"}
1
+ {"version":3,"file":"clamp.d.ts","sourceRoot":"","sources":["../src/clamp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEjE"}
package/build/clamp.js CHANGED
@@ -9,9 +9,11 @@
9
9
  * @returns The clamped value in the range [min, max]
10
10
  *
11
11
  * @example
12
- * Clamp(5, 0, 10) // 5 (within range)
13
- * Clamp(-3, 0, 10) // 0 (below min)
14
- * Clamp(15, 0, 10) // 10 (above max)
12
+ * ```typescript
13
+ * Clamp(5, 0, 10) // 5 (within range)
14
+ * Clamp(-3, 0, 10) // 0 (below min)
15
+ * Clamp(15, 0, 10) // 10 (above max)
16
+ * ```
15
17
  */
16
18
  export function Clamp(x, min, max) {
17
19
  return Math.max(min, Math.min(x, max));
@@ -1 +1 @@
1
- {"version":3,"file":"clamp.js","sourceRoot":"","sources":["../src/clamp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,KAAK,CAAC,CAAS,EAAE,GAAW,EAAE,GAAW;IACxD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACxC,CAAC"}
1
+ {"version":3,"file":"clamp.js","sourceRoot":"","sources":["../src/clamp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,KAAK,CAAC,CAAS,EAAE,GAAW,EAAE,GAAW;IACxD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACxC,CAAC"}