curvy 1.0.9 → 2.0.0-alpha.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.
Files changed (173) hide show
  1. package/dist/characteristic/index.d.mts +88 -0
  2. package/dist/characteristic/index.mjs +2 -0
  3. package/dist/curve/index.d.mts +2 -0
  4. package/dist/curve/index.mjs +2 -0
  5. package/dist/interval/index.d.mts +3 -0
  6. package/dist/interval/index.mjs +3 -0
  7. package/dist/matrix/index.d.mts +2 -0
  8. package/dist/matrix/index.mjs +267 -0
  9. package/dist/matrix/index.mjs.map +1 -0
  10. package/dist/number.d.mts +280 -0
  11. package/dist/number.mjs +140 -0
  12. package/dist/number.mjs.map +1 -0
  13. package/dist/path/index.d.mts +261 -0
  14. package/dist/path/index.mjs +325 -0
  15. package/dist/path/index.mjs.map +1 -0
  16. package/dist/polynomial/index.d.mts +2 -0
  17. package/dist/polynomial/index.mjs +3 -0
  18. package/dist/shared/characteristic-B9nCh_cx.mjs +104 -0
  19. package/dist/shared/characteristic-B9nCh_cx.mjs.map +1 -0
  20. package/dist/shared/chunk-25Hzd3z8.mjs +13 -0
  21. package/dist/shared/cubic-BajUY0JT.d.mts +1100 -0
  22. package/dist/shared/cubic-CpHAx8cC.mjs +479 -0
  23. package/dist/shared/cubic-CpHAx8cC.mjs.map +1 -0
  24. package/dist/shared/interval-05CR6eBf.mjs +421 -0
  25. package/dist/shared/interval-05CR6eBf.mjs.map +1 -0
  26. package/dist/shared/interval-Dy-RMEE3.d.mts +533 -0
  27. package/dist/shared/interval2d-8IBZnUOq.mjs +108 -0
  28. package/dist/shared/interval2d-8IBZnUOq.mjs.map +1 -0
  29. package/dist/shared/interval2d-C2id9u31.d.mts +172 -0
  30. package/dist/shared/matrix4x4-Ck2WROK-.mjs +440 -0
  31. package/dist/shared/matrix4x4-Ck2WROK-.mjs.map +1 -0
  32. package/dist/shared/matrix4x4-Dm_tSiH1.d.mts +1183 -0
  33. package/dist/shared/quadratic-CamozcFc.mjs +330 -0
  34. package/dist/shared/quadratic-CamozcFc.mjs.map +1 -0
  35. package/dist/shared/rationalCubic2d-B6g97ryJ.d.mts +308 -0
  36. package/dist/shared/rationalCubic2d-BEgUGSFf.mjs +295 -0
  37. package/dist/shared/rationalCubic2d-BEgUGSFf.mjs.map +1 -0
  38. package/dist/shared/rationalCubic2d-Bys2Uory.mjs +695 -0
  39. package/dist/shared/rationalCubic2d-Bys2Uory.mjs.map +1 -0
  40. package/dist/shared/rationalCubic2d-DlQfBURs.d.mts +818 -0
  41. package/dist/shared/solution-CrtLfqEq.mjs +306 -0
  42. package/dist/shared/solution-CrtLfqEq.mjs.map +1 -0
  43. package/dist/shared/solution-sNQ-ZVhN.d.mts +251 -0
  44. package/dist/{pipe.d.mts → shared/utils-MCckigYk.d.mts} +44 -26
  45. package/dist/shared/vector2-CL1HDdPr.mjs +187 -0
  46. package/dist/shared/vector2-CL1HDdPr.mjs.map +1 -0
  47. package/dist/shared/vector2-DPUY3_eA.d.mts +470 -0
  48. package/dist/shared/vector2.internal-DU_E808S.mjs +97 -0
  49. package/dist/shared/vector2.internal-DU_E808S.mjs.map +1 -0
  50. package/dist/shared/vector3-D-tv_aKL.mjs +204 -0
  51. package/dist/shared/vector3-D-tv_aKL.mjs.map +1 -0
  52. package/dist/shared/vector3-DqeOZtOB.d.mts +703 -0
  53. package/dist/shared/vector4-5KbjoHVj.mjs +109 -0
  54. package/dist/shared/vector4-5KbjoHVj.mjs.map +1 -0
  55. package/dist/shared/vector4.internal-5XcaX12X.mjs +163 -0
  56. package/dist/shared/vector4.internal-5XcaX12X.mjs.map +1 -0
  57. package/dist/solution/index.d.mts +2 -0
  58. package/dist/solution/index.mjs +2 -0
  59. package/dist/splines/index.d.mts +701 -0
  60. package/dist/splines/index.mjs +734 -0
  61. package/dist/splines/index.mjs.map +1 -0
  62. package/dist/utils.d.mts +2 -205
  63. package/dist/utils.mjs +88 -52
  64. package/dist/utils.mjs.map +1 -1
  65. package/dist/vector/index.d.mts +3 -0
  66. package/dist/vector/index.mjs +4 -0
  67. package/package.json +49 -92
  68. package/dist/curve/cubic2d.d.mts +0 -109
  69. package/dist/curve/cubic2d.d.ts +0 -109
  70. package/dist/curve/cubic2d.mjs +0 -80
  71. package/dist/curve/cubic2d.mjs.map +0 -1
  72. package/dist/curve/linear2d.d.mts +0 -94
  73. package/dist/curve/linear2d.d.ts +0 -94
  74. package/dist/curve/linear2d.mjs +0 -46
  75. package/dist/curve/linear2d.mjs.map +0 -1
  76. package/dist/curve/quadratic2d.d.mts +0 -117
  77. package/dist/curve/quadratic2d.d.ts +0 -117
  78. package/dist/curve/quadratic2d.mjs +0 -82
  79. package/dist/curve/quadratic2d.mjs.map +0 -1
  80. package/dist/interval.d.mts +0 -251
  81. package/dist/interval.d.ts +0 -251
  82. package/dist/interval.mjs +0 -86
  83. package/dist/interval.mjs.map +0 -1
  84. package/dist/matrix/matrix2x2.d.mts +0 -320
  85. package/dist/matrix/matrix2x2.d.ts +0 -320
  86. package/dist/matrix/matrix2x2.mjs +0 -25
  87. package/dist/matrix/matrix2x2.mjs.map +0 -1
  88. package/dist/matrix/matrix3x3.d.mts +0 -370
  89. package/dist/matrix/matrix3x3.d.ts +0 -370
  90. package/dist/matrix/matrix3x3.mjs +0 -28
  91. package/dist/matrix/matrix3x3.mjs.map +0 -1
  92. package/dist/matrix/matrix4x4.d.mts +0 -381
  93. package/dist/matrix/matrix4x4.d.ts +0 -381
  94. package/dist/matrix/matrix4x4.mjs +0 -178
  95. package/dist/matrix/matrix4x4.mjs.map +0 -1
  96. package/dist/path/cubic2d.d.mts +0 -95
  97. package/dist/path/cubic2d.d.ts +0 -95
  98. package/dist/path/cubic2d.mjs +0 -60
  99. package/dist/path/cubic2d.mjs.map +0 -1
  100. package/dist/path/linear2d.d.mts +0 -95
  101. package/dist/path/linear2d.d.ts +0 -95
  102. package/dist/path/linear2d.mjs +0 -53
  103. package/dist/path/linear2d.mjs.map +0 -1
  104. package/dist/path/quadratic2d.d.mts +0 -95
  105. package/dist/path/quadratic2d.d.ts +0 -95
  106. package/dist/path/quadratic2d.mjs +0 -57
  107. package/dist/path/quadratic2d.mjs.map +0 -1
  108. package/dist/pipe.d.ts +0 -58
  109. package/dist/pipe.mjs +0 -92
  110. package/dist/pipe.mjs.map +0 -1
  111. package/dist/polynomial/cubic.d.mts +0 -7
  112. package/dist/polynomial/cubic.d.ts +0 -7
  113. package/dist/polynomial/cubic.mjs +0 -133
  114. package/dist/polynomial/cubic.mjs.map +0 -1
  115. package/dist/polynomial/linear.d.mts +0 -7
  116. package/dist/polynomial/linear.d.ts +0 -7
  117. package/dist/polynomial/linear.mjs +0 -24
  118. package/dist/polynomial/linear.mjs.map +0 -1
  119. package/dist/polynomial/quadratic.d.mts +0 -7
  120. package/dist/polynomial/quadratic.d.ts +0 -7
  121. package/dist/polynomial/quadratic.mjs +0 -27
  122. package/dist/polynomial/quadratic.mjs.map +0 -1
  123. package/dist/shared/curvy.Bf5TIk31.d.mts +0 -22
  124. package/dist/shared/curvy.Bf5TIk31.d.ts +0 -22
  125. package/dist/shared/curvy.BkkW8Tx9.mjs +0 -102
  126. package/dist/shared/curvy.BkkW8Tx9.mjs.map +0 -1
  127. package/dist/shared/curvy.BxdGW9he.mjs +0 -116
  128. package/dist/shared/curvy.BxdGW9he.mjs.map +0 -1
  129. package/dist/shared/curvy.C_sCeg9J.mjs +0 -66
  130. package/dist/shared/curvy.C_sCeg9J.mjs.map +0 -1
  131. package/dist/shared/curvy.Cg8lZVUz.d.ts +0 -688
  132. package/dist/shared/curvy.DCt1gGII.mjs +0 -147
  133. package/dist/shared/curvy.DCt1gGII.mjs.map +0 -1
  134. package/dist/shared/curvy.DJ4xO0al.mjs +0 -63
  135. package/dist/shared/curvy.DJ4xO0al.mjs.map +0 -1
  136. package/dist/shared/curvy.DmVFTi0N.mjs +0 -35
  137. package/dist/shared/curvy.DmVFTi0N.mjs.map +0 -1
  138. package/dist/shared/curvy.FDaj5rlj.d.mts +0 -688
  139. package/dist/shared/curvy.lktriTpx.mjs +0 -101
  140. package/dist/shared/curvy.lktriTpx.mjs.map +0 -1
  141. package/dist/shared/curvy.mLFprrGm.mjs +0 -85
  142. package/dist/shared/curvy.mLFprrGm.mjs.map +0 -1
  143. package/dist/shared/curvy.r6f1j287.mjs +0 -76
  144. package/dist/shared/curvy.r6f1j287.mjs.map +0 -1
  145. package/dist/splines/basis2d.d.mts +0 -130
  146. package/dist/splines/basis2d.d.ts +0 -130
  147. package/dist/splines/basis2d.mjs +0 -90
  148. package/dist/splines/basis2d.mjs.map +0 -1
  149. package/dist/splines/bezier2d.d.mts +0 -182
  150. package/dist/splines/bezier2d.d.ts +0 -182
  151. package/dist/splines/bezier2d.mjs +0 -23
  152. package/dist/splines/bezier2d.mjs.map +0 -1
  153. package/dist/splines/cardinal2d.d.mts +0 -178
  154. package/dist/splines/cardinal2d.d.ts +0 -178
  155. package/dist/splines/cardinal2d.mjs +0 -114
  156. package/dist/splines/cardinal2d.mjs.map +0 -1
  157. package/dist/splines/hermite2d.d.mts +0 -124
  158. package/dist/splines/hermite2d.d.ts +0 -124
  159. package/dist/splines/hermite2d.mjs +0 -63
  160. package/dist/splines/hermite2d.mjs.map +0 -1
  161. package/dist/utils.d.ts +0 -205
  162. package/dist/vector/vector2.d.mts +0 -324
  163. package/dist/vector/vector2.d.ts +0 -324
  164. package/dist/vector/vector2.mjs +0 -30
  165. package/dist/vector/vector2.mjs.map +0 -1
  166. package/dist/vector/vector3.d.mts +0 -417
  167. package/dist/vector/vector3.d.ts +0 -417
  168. package/dist/vector/vector3.mjs +0 -38
  169. package/dist/vector/vector3.mjs.map +0 -1
  170. package/dist/vector/vector4.d.mts +0 -205
  171. package/dist/vector/vector4.d.ts +0 -205
  172. package/dist/vector/vector4.mjs +0 -20
  173. package/dist/vector/vector4.mjs.map +0 -1
@@ -0,0 +1,172 @@
1
+ import { t as Vector2 } from "./vector2-DPUY3_eA.mjs";
2
+ import { t as Pipeable } from "./utils-MCckigYk.mjs";
3
+ import { n as Closed, r as Interval, t as Bounds } from "./interval-Dy-RMEE3.mjs";
4
+
5
+ //#region src/interval/interval2d.internal.d.ts
6
+ declare const Interval2dTypeId: unique symbol;
7
+ type Interval2dTypeId = typeof Interval2dTypeId;
8
+ declare namespace interval2d_d_exports {
9
+ export { Bounds2d, Interval2d, containsInterval2d, containsVector, equals, fromCorners, fromVectors, isInterval2d, make, size, union };
10
+ }
11
+ /**
12
+ * An axis-aligned 2D interval — the Cartesian product of two 1D intervals.
13
+ * Used as a bounding box for curves and paths, and as a region for
14
+ * containment tests.
15
+ *
16
+ * The two type parameters carry the per-axis interval subtype so that a value
17
+ * built from closed intervals stays `Interval2d<Closed, Closed>` and a value
18
+ * with mixed openness preserves that information at the type level.
19
+ *
20
+ * All fields are readonly and immutable, and all operations create new instances.
21
+ *
22
+ * @since 2.1.0
23
+ */
24
+ interface Interval2d<X extends Interval = Interval, Y extends Interval = Interval> extends Pipeable {
25
+ readonly [Interval2dTypeId]: Interval2dTypeId;
26
+ readonly x: X;
27
+ readonly y: Y;
28
+ }
29
+ /**
30
+ * The structural minimum: any value with `x` and `y` fields shaped like
31
+ * {@link Bounds}. Operations that don't read endpoint inclusivity (e.g.
32
+ * {@link size}) accept `Bounds2d` so the signature itself documents what the
33
+ * operation depends on. Mirrors the {@link Bounds}/{@link Interval} split in 1D.
34
+ *
35
+ * @since 2.1.0
36
+ */
37
+ interface Bounds2d {
38
+ readonly x: Bounds;
39
+ readonly y: Bounds;
40
+ }
41
+ /**
42
+ * Checks if a value is an `Interval2d`.
43
+ *
44
+ * @param v - The value to check.
45
+ * @returns `true` if the value is an `Interval2d`, `false` otherwise.
46
+ * @since 2.1.0
47
+ */
48
+ declare const isInterval2d: (v: unknown) => v is Interval2d;
49
+ /**
50
+ * Creates a new `Interval2d` from two intervals — one for the x axis, one
51
+ * for the y axis. Preserves both interval subtypes at the type level.
52
+ *
53
+ * @param x - The x-axis interval.
54
+ * @param y - The y-axis interval.
55
+ * @returns A new `Interval2d` instance.
56
+ * @since 2.1.0
57
+ */
58
+ declare const make: <X extends Interval, Y extends Interval>(x: X, y: Y) => Interval2d<X, Y>;
59
+ /**
60
+ * Creates a closed `Interval2d` from two corner points. The corners can be in
61
+ * any order — each axis is built from the min and max of the coordinate.
62
+ *
63
+ * @param p0 - The first corner.
64
+ * @param p1 - The second corner.
65
+ * @returns A new `Interval2d<Closed, Closed>` enclosing both corners.
66
+ * @since 2.1.0
67
+ */
68
+ declare const fromCorners: (p0: Vector2, p1: Vector2) => Interval2d<Closed, Closed>;
69
+ /**
70
+ * Creates the smallest closed `Interval2d` enclosing the given points. Useful
71
+ * for computing a bounding box from sampled points.
72
+ *
73
+ * @param points - One or more points to enclose.
74
+ * @returns A new `Interval2d<Closed, Closed>` enclosing all input points.
75
+ * @throws When called with zero points.
76
+ * @since 2.1.0
77
+ */
78
+ declare const fromVectors: (...points: ReadonlyArray<Vector2>) => Interval2d<Closed, Closed>;
79
+ declare const containsVector: {
80
+ /**
81
+ * Checks if a vector lies within the 2D interval. Per-axis endpoint
82
+ * inclusivity follows each axis interval's `kind`.
83
+ *
84
+ * @param box - The 2D interval to test against.
85
+ * @param v - The vector to test.
86
+ * @returns `true` when the vector lies within the box on both axes.
87
+ * @since 2.1.0
88
+ */
89
+ (box: Interval2d, v: Vector2): boolean;
90
+ /**
91
+ * @param v - The vector to test.
92
+ * @returns A function that takes a 2D interval and returns the containment result.
93
+ * @since 2.1.0
94
+ */
95
+ (v: Vector2): (box: Interval2d) => boolean;
96
+ };
97
+ declare const containsInterval2d: {
98
+ /**
99
+ * Checks if `inner` is a subset of `outer`. The check is per-axis interval
100
+ * containment — for each axis, every point of the inner interval must also
101
+ * be in the outer interval, respecting endpoint inclusivity on both sides.
102
+ *
103
+ * @param outer - The enclosing 2D interval.
104
+ * @param inner - The candidate inner 2D interval.
105
+ * @returns `true` when every point of `inner` is also in `outer`.
106
+ * @since 2.1.0
107
+ */
108
+ (outer: Interval2d, inner: Interval2d): boolean;
109
+ /**
110
+ * @param inner - The candidate inner 2D interval.
111
+ * @returns A function that takes the outer 2D interval and returns the containment result.
112
+ * @since 2.1.0
113
+ */
114
+ (inner: Interval2d): (outer: Interval2d) => boolean;
115
+ };
116
+ /**
117
+ * Returns the size as a vector `(width, height)`. Accepts the broader
118
+ * {@link Bounds2d} type because size does not depend on endpoint inclusivity.
119
+ *
120
+ * @param box - The 2D interval (or bounds-shaped value) to measure.
121
+ * @returns The size as a `Vector2`.
122
+ * @since 2.1.0
123
+ */
124
+ declare const size: (box: Bounds2d) => Vector2;
125
+ declare const union: {
126
+ /**
127
+ * Returns the smallest 2D interval enclosing both inputs.
128
+ *
129
+ * The per-axis return kind is determined by which input's endpoint wins on
130
+ * each side, with the contributor's openness preserved (or unioned to
131
+ * "closed" when endpoints are numerically equal and either is closed at
132
+ * that point).
133
+ *
134
+ * When both inputs share the same kind on an axis, the result collapses
135
+ * back to that kind. Otherwise the axis falls back to the open
136
+ * {@link Interval} type since the runtime kind depends on the values.
137
+ *
138
+ * @param a - The first 2D interval.
139
+ * @param b - The second 2D interval.
140
+ * @returns A new `Interval2d` enclosing both inputs.
141
+ * @since 2.1.0
142
+ */
143
+ <AX extends Interval, AY extends Interval, BX extends Interval, BY extends Interval>(a: Interval2d<AX, AY>, b: Interval2d<BX, BY>): Interval2d<AX extends BX ? (BX extends AX ? AX : Interval) : Interval, AY extends BY ? (BY extends AY ? AY : Interval) : Interval>;
144
+ /**
145
+ * @param b - The second 2D interval.
146
+ * @returns A function that takes the first 2D interval and returns the union.
147
+ * @since 2.1.0
148
+ */
149
+ <BX extends Interval, BY extends Interval>(b: Interval2d<BX, BY>): <AX extends Interval, AY extends Interval>(a: Interval2d<AX, AY>) => Interval2d<AX extends BX ? (BX extends AX ? AX : Interval) : Interval, AY extends BY ? (BY extends AY ? AY : Interval) : Interval>;
150
+ };
151
+ declare const equals: {
152
+ /**
153
+ * Checks if two `Interval2d` values are approximately equal within the
154
+ * default absolute tolerance ({@link EPSILON}). Both the numeric endpoints
155
+ * AND the per-axis kinds must match.
156
+ *
157
+ * @param a - The first 2D interval.
158
+ * @param b - The second 2D interval.
159
+ * @returns `true` when both axes are equal.
160
+ * @since 2.1.0
161
+ */
162
+ (a: Interval2d, b: Interval2d): boolean;
163
+ /**
164
+ * @param b - The second 2D interval.
165
+ * @returns A function that takes the first 2D interval and returns the comparison result.
166
+ * @since 2.1.0
167
+ */
168
+ (b: Interval2d): (a: Interval2d) => boolean;
169
+ };
170
+ //#endregion
171
+ export { interval2d_d_exports as n, Interval2d as t };
172
+ //# sourceMappingURL=interval2d-C2id9u31.d.mts.map
@@ -0,0 +1,440 @@
1
+ import { t as __exportAll } from "./chunk-25Hzd3z8.mjs";
2
+ import { Pipeable, dual, invariant } from "../utils.mjs";
3
+ import { epsEquals } from "../number.mjs";
4
+ import { i as dot, m as make$4 } from "./vector2.internal-DU_E808S.mjs";
5
+ import { O as make$5, _ as dot$1, c as make$6, h as components, n as components$1, r as dot$2 } from "./vector4.internal-5XcaX12X.mjs";
6
+ //#region src/dimensions.ts
7
+ function toIndex(input) {
8
+ if (typeof input === "number") {
9
+ invariant(input >= 0 && input <= 3, "Index out of bounds");
10
+ return input;
11
+ }
12
+ if (input === "x") return 0;
13
+ if (input === "y") return 1;
14
+ if (input === "z") return 2;
15
+ if (input === "w") return 3;
16
+ invariant(false, "Invalid component");
17
+ }
18
+ const toTwoDimensionalIndex = toIndex;
19
+ const toThreeDimensionalIndex = toIndex;
20
+ const toFourDimensionalIndex = toIndex;
21
+ //#endregion
22
+ //#region src/matrix/matrix2x2.internal.ts
23
+ const Matrix2x2TypeId = Symbol.for("curvy/matrix2x2");
24
+ var Matrix2x2Impl = class extends Pipeable {
25
+ [Matrix2x2TypeId] = Matrix2x2TypeId;
26
+ m00;
27
+ m01;
28
+ m10;
29
+ m11;
30
+ constructor(m00 = 0, m01 = 0, m10 = 0, m11 = 0) {
31
+ super();
32
+ this.m00 = m00;
33
+ this.m01 = m01;
34
+ this.m10 = m10;
35
+ this.m11 = m11;
36
+ }
37
+ get [Symbol.toStringTag]() {
38
+ return `Matrix2x2(${this.m00}, ${this.m01}, ${this.m10}, ${this.m11})`;
39
+ }
40
+ get [Symbol.for("nodejs.util.inspect.custom")]() {
41
+ return `Matrix2x2(${this.m00}, ${this.m01}, ${this.m10}, ${this.m11})`;
42
+ }
43
+ [Symbol.hasInstance](m) {
44
+ return isMatrix2x2(m);
45
+ }
46
+ };
47
+ const isMatrix2x2 = (m) => typeof m === "object" && m !== null && Matrix2x2TypeId in m;
48
+ const equals$3 = dual(2, (a, b) => epsEquals(a.m00, b.m00) && epsEquals(a.m01, b.m01) && epsEquals(a.m10, b.m10) && epsEquals(a.m11, b.m11));
49
+ const make$3 = (m00 = 0, m01 = m00, m10 = m01, m11 = m10) => new Matrix2x2Impl(m00, m01, m10, m11);
50
+ const fromRows$3 = (v0, v1) => new Matrix2x2Impl(v0.x, v0.y, v1.x, v1.y);
51
+ const fromColumns$3 = (v0, v1) => new Matrix2x2Impl(v0.x, v1.x, v0.y, v1.y);
52
+ const setRow$3 = dual(3, (m, row, v) => fromRows$3(...toRows$3(m).with(toTwoDimensionalIndex(row), v)));
53
+ const setColumn$3 = dual(3, (m, column, v) => fromColumns$3(...toColumns$3(m).with(toTwoDimensionalIndex(column), v)));
54
+ const determinant$3 = (m) => m.m00 * m.m11 - m.m01 * m.m10;
55
+ const vectorProductLeft$3 = dual(2, (m, v) => make$4(dot(rowVector$3(m, 0), v), dot(rowVector$3(m, 1), v)));
56
+ const vectorProductRight$3 = dual(2, (m, v) => make$4(dot(columnVector$3(m, 0), v), dot(columnVector$3(m, 1), v)));
57
+ const solveSystem$3 = dual(2, (m, v) => {
58
+ const inverseDeterminant = 1 / determinant$3(m);
59
+ invariant(Number.isFinite(inverseDeterminant), "cannot solve system when coefficient matrix determinant is zero");
60
+ return make$4(determinant$3(setColumn$3(m, 0, v)) * inverseDeterminant, determinant$3(setColumn$3(m, 1, v)) * inverseDeterminant);
61
+ });
62
+ const toRows$3 = (m) => [make$4(m.m00, m.m01), make$4(m.m10, m.m11)];
63
+ const toColumns$3 = (m) => [make$4(m.m00, m.m10), make$4(m.m01, m.m11)];
64
+ const rowVector$3 = dual(2, (m, row) => toRows$3(m)[toTwoDimensionalIndex(row)]);
65
+ const columnVector$3 = dual(2, (m, column) => toColumns$3(m)[toTwoDimensionalIndex(column)]);
66
+ const transpose$3 = (m) => fromColumns$3(...toRows$3(m));
67
+ const reverseRows$3 = (m) => {
68
+ const [r0, r1] = toRows$3(m);
69
+ return fromRows$3(r1, r0);
70
+ };
71
+ const reverseColumns$3 = (m) => {
72
+ const [c0, c1] = toColumns$3(m);
73
+ return fromColumns$3(c1, c0);
74
+ };
75
+ //#endregion
76
+ //#region src/matrix/matrix3x3.internal.ts
77
+ const Matrix3x3TypeId = Symbol.for("curvy/matrix3x3");
78
+ var Matrix3x3Impl = class extends Pipeable {
79
+ [Matrix3x3TypeId] = Matrix3x3TypeId;
80
+ m00;
81
+ m01;
82
+ m02;
83
+ m10;
84
+ m11;
85
+ m12;
86
+ m20;
87
+ m21;
88
+ m22;
89
+ constructor(m00 = 0, m01 = 0, m02 = 0, m10 = 0, m11 = 0, m12 = 0, m20 = 0, m21 = 0, m22 = 0) {
90
+ super();
91
+ this.m00 = m00;
92
+ this.m01 = m01;
93
+ this.m02 = m02;
94
+ this.m10 = m10;
95
+ this.m11 = m11;
96
+ this.m12 = m12;
97
+ this.m20 = m20;
98
+ this.m21 = m21;
99
+ this.m22 = m22;
100
+ }
101
+ get [Symbol.toStringTag]() {
102
+ return `Matrix3x3(${this.m00}, ${this.m01}, ${this.m02}, ${this.m10}, ${this.m11}, ${this.m12}, ${this.m20}, ${this.m21}, ${this.m22})`;
103
+ }
104
+ get [Symbol.for("nodejs.util.inspect.custom")]() {
105
+ return `Matrix3x3(${this.m00}, ${this.m01}, ${this.m02}, ${this.m10}, ${this.m11}, ${this.m12}, ${this.m20}, ${this.m21}, ${this.m22})`;
106
+ }
107
+ [Symbol.hasInstance](m) {
108
+ return isMatrix3x3(m);
109
+ }
110
+ };
111
+ const isMatrix3x3 = (m) => typeof m === "object" && m !== null && Matrix3x3TypeId in m;
112
+ const equals$2 = dual(2, (a, b) => epsEquals(a.m00, b.m00) && epsEquals(a.m01, b.m01) && epsEquals(a.m02, b.m02) && epsEquals(a.m10, b.m10) && epsEquals(a.m11, b.m11) && epsEquals(a.m12, b.m12) && epsEquals(a.m20, b.m20) && epsEquals(a.m21, b.m21) && epsEquals(a.m22, b.m22));
113
+ const make$2 = (m00 = 0, m01 = m00, m02 = m01, m10 = m02, m11 = m10, m12 = m11, m20 = m12, m21 = m20, m22 = m21) => {
114
+ return new Matrix3x3Impl(m00, m01, m02, m10, m11, m12, m20, m21, m22);
115
+ };
116
+ const fromRows$2 = (v0, v1, v2) => new Matrix3x3Impl(v0.x, v0.y, v0.z, v1.x, v1.y, v1.z, v2.x, v2.y, v2.z);
117
+ const fromColumns$2 = (v0, v1, v2) => new Matrix3x3Impl(v0.x, v1.x, v2.x, v0.y, v1.y, v2.y, v0.z, v1.z, v2.z);
118
+ const setRow$2 = dual(3, (m, row, v) => fromRows$2(...toRows$2(m).with(toThreeDimensionalIndex(row), v)));
119
+ const setColumn$2 = dual(3, (m, column, v) => fromColumns$2(...toColumns$2(m).with(toThreeDimensionalIndex(column), v)));
120
+ const determinant$2 = (m) => m.m00 * determinant$3(minor$2(m, 0, 0)) - m.m01 * determinant$3(minor$2(m, 0, 1)) + m.m02 * determinant$3(minor$2(m, 0, 2));
121
+ const minor$2 = dual(3, (m, row, column) => {
122
+ const [v0, v1] = toRows$2(m).toSpliced(toThreeDimensionalIndex(row), 1);
123
+ const columnIndex = toThreeDimensionalIndex(column);
124
+ const [m00, m01] = components(v0).toSpliced(columnIndex, 1);
125
+ const [m10, m11] = components(v1).toSpliced(columnIndex, 1);
126
+ return make$3(m00, m01, m10, m11);
127
+ });
128
+ const vectorProductLeft$2 = dual(2, (m, v) => {
129
+ const [v0, v1, v2] = toRows$2(m);
130
+ return make$5(dot$1(v0, v), dot$1(v1, v), dot$1(v2, v));
131
+ });
132
+ const vectorProductRight$2 = dual(2, (m, v) => {
133
+ const [v0, v1, v2] = toColumns$2(m);
134
+ return make$5(dot$1(v, v0), dot$1(v, v1), dot$1(v, v2));
135
+ });
136
+ const solveSystem$2 = dual(2, (m, v) => {
137
+ const inverseDeterminant = 1 / determinant$2(m);
138
+ invariant(Number.isFinite(inverseDeterminant), "cannot solve system when coefficient matrix determinant is zero");
139
+ return make$5(determinant$2(setColumn$2(m, 0, v)) * inverseDeterminant, determinant$2(setColumn$2(m, 1, v)) * inverseDeterminant, determinant$2(setColumn$2(m, 2, v)) * inverseDeterminant);
140
+ });
141
+ const toRows$2 = (m) => [
142
+ make$5(m.m00, m.m01, m.m02),
143
+ make$5(m.m10, m.m11, m.m12),
144
+ make$5(m.m20, m.m21, m.m22)
145
+ ];
146
+ const toColumns$2 = (m) => [
147
+ make$5(m.m00, m.m10, m.m20),
148
+ make$5(m.m01, m.m11, m.m21),
149
+ make$5(m.m02, m.m12, m.m22)
150
+ ];
151
+ const rowVector$2 = dual(2, (m, row) => toRows$2(m)[toThreeDimensionalIndex(row)]);
152
+ const columnVector$2 = dual(2, (m, column) => toColumns$2(m)[toThreeDimensionalIndex(column)]);
153
+ const transpose$2 = (m) => fromColumns$2(...toRows$2(m));
154
+ const reverseRows$2 = (m) => {
155
+ const [v0, v1, v2] = toRows$2(m);
156
+ return fromRows$2(v2, v1, v0);
157
+ };
158
+ const reverseColumns$2 = (m) => {
159
+ const [v0, v1, v2] = toColumns$2(m);
160
+ return fromColumns$2(v2, v1, v0);
161
+ };
162
+ //#endregion
163
+ //#region src/matrix/matrix4x4.internal.ts
164
+ const Matrix4x4TypeId = Symbol.for("curvy/matrix4x4");
165
+ var Matrix4x4Impl = class extends Pipeable {
166
+ [Matrix4x4TypeId] = Matrix4x4TypeId;
167
+ m00;
168
+ m01;
169
+ m02;
170
+ m03;
171
+ m10;
172
+ m11;
173
+ m12;
174
+ m13;
175
+ m20;
176
+ m21;
177
+ m22;
178
+ m23;
179
+ m30;
180
+ m31;
181
+ m32;
182
+ m33;
183
+ constructor(m00 = 0, m01 = m00, m02 = m01, m03 = m02, m10 = m00, m11 = m01, m12 = m02, m13 = m03, m20 = m00, m21 = m01, m22 = m02, m23 = m03, m30 = m00, m31 = m01, m32 = m02, m33 = m03) {
184
+ super();
185
+ this.m00 = m00;
186
+ this.m01 = m01;
187
+ this.m02 = m02;
188
+ this.m03 = m03;
189
+ this.m10 = m10;
190
+ this.m11 = m11;
191
+ this.m12 = m12;
192
+ this.m13 = m13;
193
+ this.m20 = m20;
194
+ this.m21 = m21;
195
+ this.m22 = m22;
196
+ this.m23 = m23;
197
+ this.m30 = m30;
198
+ this.m31 = m31;
199
+ this.m32 = m32;
200
+ this.m33 = m33;
201
+ }
202
+ get [Symbol.toStringTag]() {
203
+ return `Matrix4x4(${this.m00}, ${this.m01}, ${this.m02}, ${this.m03}, ${this.m10}, ${this.m11}, ${this.m12}, ${this.m13}, ${this.m20}, ${this.m21}, ${this.m22}, ${this.m23}, ${this.m30}, ${this.m31}, ${this.m32}, ${this.m33})`;
204
+ }
205
+ get [Symbol.for("nodejs.util.inspect.custom")]() {
206
+ return `Matrix4x4(${this.m00}, ${this.m01}, ${this.m02}, ${this.m03}, ${this.m10}, ${this.m11}, ${this.m12}, ${this.m13}, ${this.m20}, ${this.m21}, ${this.m22}, ${this.m23}, ${this.m30}, ${this.m31}, ${this.m32}, ${this.m33})`;
207
+ }
208
+ [Symbol.hasInstance](m) {
209
+ return isMatrix4x4$1(m);
210
+ }
211
+ };
212
+ const isMatrix4x4$1 = (m) => typeof m === "object" && m !== null && Matrix4x4TypeId in m;
213
+ const equals$1 = dual(2, (a, b) => epsEquals(a.m00, b.m00) && epsEquals(a.m01, b.m01) && epsEquals(a.m02, b.m02) && epsEquals(a.m03, b.m03) && epsEquals(a.m10, b.m10) && epsEquals(a.m11, b.m11) && epsEquals(a.m12, b.m12) && epsEquals(a.m13, b.m13) && epsEquals(a.m20, b.m20) && epsEquals(a.m21, b.m21) && epsEquals(a.m22, b.m22) && epsEquals(a.m23, b.m23) && epsEquals(a.m30, b.m30) && epsEquals(a.m31, b.m31) && epsEquals(a.m32, b.m32) && epsEquals(a.m33, b.m33));
214
+ /**
215
+ * The 4x4 identity matrix.
216
+ */
217
+ const identity$1 = new Matrix4x4Impl(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
218
+ const make$1 = (m00 = 0, m01 = m00, m02 = m01, m03 = m02, m10 = m00, m11 = m01, m12 = m02, m13 = m03, m20 = m00, m21 = m01, m22 = m02, m23 = m03, m30 = m00, m31 = m01, m32 = m02, m33 = m03) => new Matrix4x4Impl(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33);
219
+ const fromRows$1 = (v0, v1, v2, v3) => new Matrix4x4Impl(v0.x, v0.y, v0.z, v0.w, v1.x, v1.y, v1.z, v1.w, v2.x, v2.y, v2.z, v2.w, v3.x, v3.y, v3.z, v3.w);
220
+ const fromColumns$1 = (v0, v1, v2, v3) => new Matrix4x4Impl(v0.x, v1.x, v2.x, v3.x, v0.y, v1.y, v2.y, v3.y, v0.z, v1.z, v2.z, v3.z, v0.w, v1.w, v2.w, v3.w);
221
+ const setRow$1 = dual(3, (m, row, v) => fromRows$1(...toRows$1(m).with(toFourDimensionalIndex(row), v)));
222
+ const setColumn$1 = dual(3, (m, column, v) => fromColumns$1(...toColumns$1(m).with(toFourDimensionalIndex(column), v)));
223
+ const determinant$1 = (m) => m.m00 * determinant$2(minor$1(m, 0, 0)) - m.m01 * determinant$2(minor$1(m, 0, 1)) + m.m02 * determinant$2(minor$1(m, 0, 2)) - m.m03 * determinant$2(minor$1(m, 0, 3));
224
+ const minor$1 = dual(3, (m, row, column) => {
225
+ const [v0, v1, v2] = toRows$1(m).toSpliced(toFourDimensionalIndex(row), 1);
226
+ const columnIndex = toFourDimensionalIndex(column);
227
+ const [m00, m01, m02] = components$1(v0).toSpliced(columnIndex, 1);
228
+ const [m10, m11, m12] = components$1(v1).toSpliced(columnIndex, 1);
229
+ const [m20, m21, m22] = components$1(v2).toSpliced(columnIndex, 1);
230
+ return make$2(m00, m01, m02, m10, m11, m12, m20, m21, m22);
231
+ });
232
+ const vectorProductLeft$1 = dual(2, (m, v) => {
233
+ const [v0, v1, v2, v3] = toRows$1(m);
234
+ return make$6(dot$2(v0, v), dot$2(v1, v), dot$2(v2, v), dot$2(v3, v));
235
+ });
236
+ const vectorProductRight$1 = dual(2, (m, v) => {
237
+ const [v0, v1, v2, v3] = toColumns$1(m);
238
+ return make$6(dot$2(v, v0), dot$2(v, v1), dot$2(v, v2), dot$2(v, v3));
239
+ });
240
+ const multiply$1 = dual(2, (a, b) => new Matrix4x4Impl(a.m00 * b.m00 + a.m01 * b.m10 + a.m02 * b.m20 + a.m03 * b.m30, a.m00 * b.m01 + a.m01 * b.m11 + a.m02 * b.m21 + a.m03 * b.m31, a.m00 * b.m02 + a.m01 * b.m12 + a.m02 * b.m22 + a.m03 * b.m32, a.m00 * b.m03 + a.m01 * b.m13 + a.m02 * b.m23 + a.m03 * b.m33, a.m10 * b.m00 + a.m11 * b.m10 + a.m12 * b.m20 + a.m13 * b.m30, a.m10 * b.m01 + a.m11 * b.m11 + a.m12 * b.m21 + a.m13 * b.m31, a.m10 * b.m02 + a.m11 * b.m12 + a.m12 * b.m22 + a.m13 * b.m32, a.m10 * b.m03 + a.m11 * b.m13 + a.m12 * b.m23 + a.m13 * b.m33, a.m20 * b.m00 + a.m21 * b.m10 + a.m22 * b.m20 + a.m23 * b.m30, a.m20 * b.m01 + a.m21 * b.m11 + a.m22 * b.m21 + a.m23 * b.m31, a.m20 * b.m02 + a.m21 * b.m12 + a.m22 * b.m22 + a.m23 * b.m32, a.m20 * b.m03 + a.m21 * b.m13 + a.m22 * b.m23 + a.m23 * b.m33, a.m30 * b.m00 + a.m31 * b.m10 + a.m32 * b.m20 + a.m33 * b.m30, a.m30 * b.m01 + a.m31 * b.m11 + a.m32 * b.m21 + a.m33 * b.m31, a.m30 * b.m02 + a.m31 * b.m12 + a.m32 * b.m22 + a.m33 * b.m32, a.m30 * b.m03 + a.m31 * b.m13 + a.m32 * b.m23 + a.m33 * b.m33));
241
+ const inverse$1 = (m) => {
242
+ const det = determinant$1(m);
243
+ invariant(det !== 0, "cannot invert singular matrix");
244
+ const inv = 1 / det;
245
+ const cof = (row, col) => {
246
+ return ((row + col) % 2 === 0 ? 1 : -1) * determinant$2(minor$1(m, row, col)) * inv;
247
+ };
248
+ return new Matrix4x4Impl(cof(0, 0), cof(1, 0), cof(2, 0), cof(3, 0), cof(0, 1), cof(1, 1), cof(2, 1), cof(3, 1), cof(0, 2), cof(1, 2), cof(2, 2), cof(3, 2), cof(0, 3), cof(1, 3), cof(2, 3), cof(3, 3));
249
+ };
250
+ const solveSystem$1 = dual(2, (m, v) => {
251
+ const inverseDeterminant = 1 / determinant$1(m);
252
+ invariant(Number.isFinite(inverseDeterminant), "cannot solve system when coefficient matrix determinant is zero");
253
+ return make$6(determinant$1(setColumn$1(m, 0, v)) * inverseDeterminant, determinant$1(setColumn$1(m, 1, v)) * inverseDeterminant, determinant$1(setColumn$1(m, 2, v)) * inverseDeterminant, determinant$1(setColumn$1(m, 3, v)) * inverseDeterminant);
254
+ });
255
+ const toRows$1 = (m) => [
256
+ make$6(m.m00, m.m01, m.m02, m.m03),
257
+ make$6(m.m10, m.m11, m.m12, m.m13),
258
+ make$6(m.m20, m.m21, m.m22, m.m23),
259
+ make$6(m.m30, m.m31, m.m32, m.m33)
260
+ ];
261
+ const toColumns$1 = (m) => [
262
+ make$6(m.m00, m.m10, m.m20, m.m30),
263
+ make$6(m.m01, m.m11, m.m21, m.m31),
264
+ make$6(m.m02, m.m12, m.m22, m.m32),
265
+ make$6(m.m03, m.m13, m.m23, m.m33)
266
+ ];
267
+ const rowVector$1 = dual(2, (m, row) => toRows$1(m)[toFourDimensionalIndex(row)]);
268
+ const columnVector$1 = dual(2, (m, column) => toColumns$1(m)[toFourDimensionalIndex(column)]);
269
+ const transpose$1 = (m) => fromColumns$1(...toRows$1(m));
270
+ const reverseRows$1 = (m) => {
271
+ const [v0, v1, v2, v3] = toRows$1(m);
272
+ return fromRows$1(v3, v2, v1, v0);
273
+ };
274
+ const reverseColumns$1 = (m) => {
275
+ const [v0, v1, v2, v3] = toColumns$1(m);
276
+ return fromColumns$1(v3, v2, v1, v0);
277
+ };
278
+ //#endregion
279
+ //#region src/matrix/matrix4x4.ts
280
+ var matrix4x4_exports = /* @__PURE__ */ __exportAll({
281
+ columnVector: () => columnVector,
282
+ determinant: () => determinant,
283
+ equals: () => equals,
284
+ fromColumns: () => fromColumns,
285
+ fromRows: () => fromRows,
286
+ identity: () => identity,
287
+ inverse: () => inverse,
288
+ isMatrix4x4: () => isMatrix4x4,
289
+ make: () => make,
290
+ minor: () => minor,
291
+ multiply: () => multiply,
292
+ reverseColumns: () => reverseColumns,
293
+ reverseRows: () => reverseRows,
294
+ rowVector: () => rowVector,
295
+ setColumn: () => setColumn,
296
+ setRow: () => setRow,
297
+ solveSystem: () => solveSystem,
298
+ toColumns: () => toColumns,
299
+ toRows: () => toRows,
300
+ transpose: () => transpose,
301
+ vectorProductLeft: () => vectorProductLeft,
302
+ vectorProductRight: () => vectorProductRight
303
+ });
304
+ /**
305
+ * Checks if a value is a `Matrix4x4`.
306
+ *
307
+ * @param m - The value to check.
308
+ * @returns `true` if the value is a `Matrix4x4`, `false` otherwise.
309
+ * @since 1.0.0
310
+ */
311
+ const isMatrix4x4 = isMatrix4x4$1;
312
+ /**
313
+ * The 4x4 identity matrix.
314
+ *
315
+ * @since 1.1.0
316
+ */
317
+ const identity = identity$1;
318
+ const equals = equals$1;
319
+ /**
320
+ * Creates a new `Matrix4x4` instance.
321
+ *
322
+ * @param m00 - The value of the first row and first column.
323
+ * @param m01 - The value of the first row and second column.
324
+ * @param m02 - The value of the first row and third column.
325
+ * @param m03 - The value of the first row and fourth column.
326
+ * @param m10 - The value of the second row and first column.
327
+ * @param m11 - The value of the second row and second column.
328
+ * @param m12 - The value of the second row and third column.
329
+ * @param m13 - The value of the second row and fourth column.
330
+ * @param m20 - The value of the third row and first column.
331
+ * @param m21 - The value of the third row and second column.
332
+ * @param m22 - The value of the third row and third column.
333
+ * @param m23 - The value of the third row and fourth column.
334
+ * @param m30 - The value of the fourth row and first column.
335
+ * @param m31 - The value of the fourth row and second column.
336
+ * @param m32 - The value of the fourth row and third column.
337
+ * @param m33 - The value of the fourth row and fourth column.
338
+ * @returns A new `Matrix4x4` instance.
339
+ * @since 1.0.0
340
+ */
341
+ const make = make$1;
342
+ /**
343
+ * Creates a new `Matrix4x4` instance from four row vectors.
344
+ *
345
+ * @param v0 - The first row vector.
346
+ * @param v1 - The second row vector.
347
+ * @param v2 - The third row vector.
348
+ * @param v3 - The fourth row vector.
349
+ * @returns A new `Matrix4x4` instance.
350
+ * @since 1.0.0
351
+ */
352
+ const fromRows = fromRows$1;
353
+ /**
354
+ * Creates a new `Matrix4x4` instance from four column vectors.
355
+ *
356
+ * @param v0 - The first column vector.
357
+ * @param v1 - The second column vector.
358
+ * @param v2 - The third column vector.
359
+ * @param v3 - The fourth column vector.
360
+ */
361
+ const fromColumns = fromColumns$1;
362
+ const setRow = setRow$1;
363
+ const setColumn = setColumn$1;
364
+ /**
365
+ * Calculates the determinant of a `Matrix4x4`.
366
+ *
367
+ * @param m - The matrix to calculate the determinant of.
368
+ * @returns The determinant of the matrix.
369
+ * @since 1.0.0
370
+ */
371
+ const determinant = determinant$1;
372
+ /**
373
+ * Calculates the minor of a `Matrix4x4` at a given row and column.
374
+ *
375
+ * @param m - The matrix to calculate the minor of.
376
+ * @param row - The row to exclude.
377
+ * @param column - The column to exclude.
378
+ * @returns The minor of the matrix at the given row and column.
379
+ */
380
+ const minor = minor$1;
381
+ const vectorProductLeft = vectorProductLeft$1;
382
+ const vectorProductRight = vectorProductRight$1;
383
+ const multiply = multiply$1;
384
+ /**
385
+ * Returns the inverse of a `Matrix4x4`.
386
+ *
387
+ * Throws when the matrix is singular (determinant is zero).
388
+ *
389
+ * @param m - The matrix to invert.
390
+ * @returns The inverse matrix.
391
+ * @since 1.1.0
392
+ */
393
+ const inverse = inverse$1;
394
+ const solveSystem = solveSystem$1;
395
+ /**
396
+ * Returns the rows of a `Matrix4x4` as an array of vectors.
397
+ *
398
+ * @param m - The matrix to convert.
399
+ * @returns An array of vectors representing the rows of the matrix.
400
+ * @since 1.0.0
401
+ */
402
+ const toRows = toRows$1;
403
+ /**
404
+ * Returns the columns of a `Matrix4x4` as an array of vectors.
405
+ *
406
+ * @param m - The matrix to convert.
407
+ * @returns An array of vectors representing the columns of the matrix.
408
+ * @since 1.0.0
409
+ */
410
+ const toColumns = toColumns$1;
411
+ const rowVector = rowVector$1;
412
+ const columnVector = columnVector$1;
413
+ /**
414
+ * Transposes a `Matrix4x4`.
415
+ *
416
+ * @param m - The matrix to transpose.
417
+ * @returns The transposed matrix.
418
+ * @since 1.0.0
419
+ */
420
+ const transpose = transpose$1;
421
+ /**
422
+ * Reverses the rows of a `Matrix4x4`.
423
+ *
424
+ * @param m - The matrix to reverse the rows of.
425
+ * @returns The matrix with the rows reversed.
426
+ * @since 1.0.0
427
+ */
428
+ const reverseRows = reverseRows$1;
429
+ /**
430
+ * Reverses the columns of a `Matrix4x4`.
431
+ *
432
+ * @param m - The matrix to reverse the columns of.
433
+ * @returns The matrix with the columns reversed.
434
+ * @since 1.0.0
435
+ */
436
+ const reverseColumns = reverseColumns$1;
437
+ //#endregion
438
+ export { isMatrix2x2 as A, transpose$3 as B, vectorProductLeft$2 as C, equals$3 as D, determinant$3 as E, setColumn$3 as F, vectorProductRight$3 as H, setRow$3 as I, solveSystem$3 as L, reverseColumns$3 as M, reverseRows$3 as N, fromColumns$3 as O, rowVector$3 as P, toColumns$3 as R, transpose$2 as S, columnVector$3 as T, vectorProductLeft$3 as V, setColumn$2 as _, vectorProductLeft as a, toColumns$2 as b, equals$2 as c, isMatrix3x3 as d, make$2 as f, rowVector$2 as g, reverseRows$2 as h, multiply as i, make$3 as j, fromRows$3 as k, fromColumns$2 as l, reverseColumns$2 as m, make as n, columnVector$2 as o, minor$2 as p, matrix4x4_exports as r, determinant$2 as s, inverse as t, fromRows$2 as u, setRow$2 as v, vectorProductRight$2 as w, toRows$2 as x, solveSystem$2 as y, toRows$3 as z };
439
+
440
+ //# sourceMappingURL=matrix4x4-Ck2WROK-.mjs.map