@holoscript/std 3.1.1 → 7.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 (142) hide show
  1. package/LICENSE +21 -0
  2. package/dist/__tests__/EconomicPrimitives.test.d.ts +2 -0
  3. package/dist/__tests__/EconomicTraits.test.d.ts +2 -0
  4. package/dist/__tests__/SimulationLabPrimitives.test.d.ts +2 -0
  5. package/dist/__tests__/collections.test.d.ts +2 -0
  6. package/dist/__tests__/events.test.d.ts +2 -0
  7. package/dist/__tests__/index.test.d.ts +2 -0
  8. package/dist/__tests__/index.test.d.ts.map +1 -0
  9. package/dist/__tests__/materials.test.d.ts +2 -0
  10. package/dist/__tests__/math.test.d.ts +2 -0
  11. package/dist/__tests__/physics.test.d.ts +2 -0
  12. package/dist/__tests__/spatial.test.d.ts +2 -0
  13. package/dist/__tests__/standard-library-fundamentals.test.d.ts +2 -0
  14. package/dist/__tests__/standard-library-fundamentals.test.d.ts.map +1 -0
  15. package/dist/__tests__/string-and-time-utilities.test.d.ts +2 -0
  16. package/dist/__tests__/string-and-time-utilities.test.d.ts.map +1 -0
  17. package/dist/__tests__/string-decoupled.test.d.ts +2 -0
  18. package/dist/__tests__/string.test.d.ts +2 -0
  19. package/dist/__tests__/time.test.d.ts +2 -0
  20. package/dist/chunk-DZHAVOCH.js +686 -0
  21. package/dist/chunk-DZHAVOCH.js.map +1 -0
  22. package/dist/chunk-P4O3WNG2.js +287 -0
  23. package/dist/chunk-P4O3WNG2.js.map +1 -0
  24. package/dist/chunk-PFX2JM4X.js +683 -0
  25. package/dist/chunk-PFX2JM4X.js.map +1 -0
  26. package/dist/chunk-PR4QN5HX.js +43 -0
  27. package/dist/chunk-PR4QN5HX.js.map +1 -0
  28. package/dist/chunk-WS6W35YC.js +443 -0
  29. package/dist/chunk-WS6W35YC.js.map +1 -0
  30. package/dist/chunk-XBA4ARST.js +9313 -0
  31. package/dist/chunk-XBA4ARST.js.map +1 -0
  32. package/dist/chunk-XJIFG7G3.js +348 -0
  33. package/dist/chunk-XJIFG7G3.js.map +1 -0
  34. package/dist/chunk-ZXVZAQCZ.js +470 -0
  35. package/dist/chunk-ZXVZAQCZ.js.map +1 -0
  36. package/dist/collections.cjs +715 -0
  37. package/dist/collections.cjs.map +1 -0
  38. package/dist/collections.d.ts +177 -0
  39. package/dist/collections.js +18 -0
  40. package/dist/collections.js.map +1 -0
  41. package/dist/events.d.ts +32 -0
  42. package/dist/fs/__tests__/file-watch-system.test.d.ts +2 -0
  43. package/dist/fs/__tests__/file-watch-system.test.d.ts.map +1 -0
  44. package/dist/fs/__tests__/path-utilities.test.d.ts +2 -0
  45. package/dist/fs/__tests__/path-utilities.test.d.ts.map +1 -0
  46. package/dist/fs/__tests__/path.test.d.ts +2 -0
  47. package/dist/fs/__tests__/path.test.d.ts.map +1 -0
  48. package/dist/fs/fs.d.ts +288 -0
  49. package/dist/fs/fs.d.ts.map +1 -0
  50. package/dist/fs/index.cjs +9338 -0
  51. package/dist/fs/index.cjs.map +1 -0
  52. package/dist/fs/index.d.ts +51 -0
  53. package/dist/fs/index.d.ts.map +1 -0
  54. package/dist/fs/index.js +204 -0
  55. package/dist/fs/index.js.map +1 -0
  56. package/dist/fs/path.d.ts +135 -0
  57. package/dist/fs/path.d.ts.map +1 -0
  58. package/dist/fs/watch.d.ts +133 -0
  59. package/dist/fs/watch.d.ts.map +1 -0
  60. package/dist/index.cjs +13326 -0
  61. package/dist/index.cjs.map +1 -0
  62. package/dist/index.d.ts +102 -0
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +1275 -190
  65. package/dist/index.js.map +1 -0
  66. package/dist/materials.d.ts +50 -0
  67. package/dist/math.cjs +595 -0
  68. package/dist/math.cjs.map +1 -0
  69. package/dist/math.d.ts +162 -0
  70. package/dist/math.js +54 -0
  71. package/dist/math.js.map +1 -0
  72. package/dist/physics.d.ts +59 -0
  73. package/dist/spatial.d.ts +82 -0
  74. package/dist/string.basic.test.d.ts +5 -0
  75. package/dist/string.basic.test.d.ts.map +1 -0
  76. package/dist/string.cjs +422 -0
  77. package/dist/string.cjs.map +1 -0
  78. package/dist/string.d.ts +212 -0
  79. package/dist/string.d.ts.map +1 -1
  80. package/dist/string.js +108 -0
  81. package/dist/string.js.map +1 -0
  82. package/dist/string.test.d.ts +5 -0
  83. package/dist/string.test.d.ts.map +1 -0
  84. package/dist/time.cjs +512 -0
  85. package/dist/time.cjs.map +1 -0
  86. package/dist/time.d.ts +215 -0
  87. package/dist/time.js +44 -0
  88. package/dist/time.js.map +1 -0
  89. package/dist/traits/ARTraits.d.ts +14 -0
  90. package/dist/traits/EconomicPrimitives.cjs +335 -0
  91. package/dist/traits/EconomicPrimitives.cjs.map +1 -0
  92. package/dist/traits/EconomicPrimitives.d.ts +345 -0
  93. package/dist/traits/EconomicPrimitives.js +56 -0
  94. package/dist/traits/EconomicPrimitives.js.map +1 -0
  95. package/dist/traits/EconomicTraits.cjs +471 -0
  96. package/dist/traits/EconomicTraits.cjs.map +1 -0
  97. package/dist/traits/EconomicTraits.d.ts +71 -0
  98. package/dist/traits/EconomicTraits.js +18 -0
  99. package/dist/traits/EconomicTraits.js.map +1 -0
  100. package/dist/traits/IoTTraits.d.ts +14 -0
  101. package/dist/traits/SimulationLabPrimitives.d.ts +187 -0
  102. package/dist/traits/SimulationLabTraits.d.ts +42 -0
  103. package/dist/traits/VRRTraits.d.ts +150 -0
  104. package/dist/traits/__tests__/ARTraits.test.d.ts +2 -0
  105. package/dist/traits/__tests__/ARTraits.test.d.ts.map +1 -0
  106. package/dist/traits/__tests__/EconomicPrimitives.test.d.ts +2 -0
  107. package/dist/traits/__tests__/EconomicPrimitives.test.d.ts.map +1 -0
  108. package/dist/traits/__tests__/EconomicTraits.test.d.ts +2 -0
  109. package/dist/traits/__tests__/EconomicTraits.test.d.ts.map +1 -0
  110. package/dist/types.d.ts +202 -0
  111. package/dist/types.d.ts.map +1 -1
  112. package/error-utf8.log +6 -0
  113. package/error.log +0 -0
  114. package/package.json +35 -18
  115. package/src/__tests__/index.test.ts +14 -0
  116. package/src/__tests__/{Sprint33.test.ts → standard-library-fundamentals.test.ts} +91 -74
  117. package/src/__tests__/{Sprint56.test.ts → string-and-time-utilities.test.ts} +64 -64
  118. package/src/__tests__/string-decoupled.test.ts +6 -9
  119. package/src/fs/__tests__/file-watch-system.test.ts +675 -0
  120. package/src/fs/__tests__/path-utilities.test.ts +375 -0
  121. package/src/fs/__tests__/path.test.ts +287 -0
  122. package/src/fs/fs.ts +692 -0
  123. package/src/fs/index.ts +194 -0
  124. package/src/fs/path.ts +310 -0
  125. package/src/fs/watch.ts +413 -0
  126. package/src/index.ts +3 -1
  127. package/src/math.ts +1 -1
  128. package/src/string.basic.test.ts +1 -1
  129. package/src/string.test.ts +4 -4
  130. package/src/string.ts +32 -17
  131. package/src/time.ts +1 -1
  132. package/src/traits/ARTraits.ts +2 -2
  133. package/src/traits/IoTTraits.ts +2 -2
  134. package/src/traits/VRRTraits.ts +2 -2
  135. package/src/traits/__tests__/ARTraits.test.ts +8 -0
  136. package/src/traits/__tests__/EconomicPrimitives.test.ts +14 -0
  137. package/src/traits/__tests__/EconomicTraits.test.ts +16 -0
  138. package/src/types.ts +10 -3
  139. package/std_error.log +5 -0
  140. package/tsup.config.ts +20 -0
  141. package/dist/__tests__/Sprint33.test.d.ts.map +0 -1
  142. package/dist/__tests__/Sprint56.test.d.ts.map +0 -1
package/dist/math.cjs ADDED
@@ -0,0 +1,595 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod2) => __copyProps(__defProp({}, "__esModule", { value: true }), mod2);
19
+
20
+ // src/math.ts
21
+ var math_exports = {};
22
+ __export(math_exports, {
23
+ DEG_TO_RAD: () => DEG_TO_RAD,
24
+ EPSILON: () => EPSILON,
25
+ HALF_PI: () => HALF_PI,
26
+ PI: () => PI,
27
+ RAD_TO_DEG: () => RAD_TO_DEG,
28
+ TAU: () => TAU,
29
+ aabbMath: () => aabbMath,
30
+ clamp: () => clamp,
31
+ degToRad: () => degToRad,
32
+ fract: () => fract,
33
+ inverseLerp: () => inverseLerp,
34
+ lerp: () => lerp,
35
+ mod: () => mod,
36
+ noise: () => noise,
37
+ quatMath: () => quatMath,
38
+ radToDeg: () => radToDeg,
39
+ random: () => random,
40
+ remap: () => remap,
41
+ sign: () => sign,
42
+ smootherstep: () => smootherstep,
43
+ smoothstep: () => smoothstep,
44
+ step: () => step,
45
+ vec2Math: () => vec2Math,
46
+ vec3Math: () => vec3Math
47
+ });
48
+ module.exports = __toCommonJS(math_exports);
49
+
50
+ // src/types.ts
51
+ function vec3(x = 0, y = 0, z = 0) {
52
+ const v = [x, y, z];
53
+ Object.defineProperty(v, "x", { value: x, writable: true, enumerable: false, configurable: true });
54
+ Object.defineProperty(v, "y", { value: y, writable: true, enumerable: false, configurable: true });
55
+ Object.defineProperty(v, "z", { value: z, writable: true, enumerable: false, configurable: true });
56
+ return v;
57
+ }
58
+ function quat(x = 0, y = 0, z = 0, w = 1) {
59
+ return { x, y, z, w };
60
+ }
61
+
62
+ // src/math.ts
63
+ var PI = Math.PI;
64
+ var TAU = Math.PI * 2;
65
+ var HALF_PI = Math.PI / 2;
66
+ var DEG_TO_RAD = Math.PI / 180;
67
+ var RAD_TO_DEG = 180 / Math.PI;
68
+ var EPSILON = 1e-6;
69
+ function clamp(value, min, max) {
70
+ return Math.max(min, Math.min(max, value));
71
+ }
72
+ function lerp(a, b, t) {
73
+ return a + (b - a) * t;
74
+ }
75
+ function inverseLerp(a, b, value) {
76
+ return (value - a) / (b - a);
77
+ }
78
+ function remap(value, inMin, inMax, outMin, outMax) {
79
+ return lerp(outMin, outMax, inverseLerp(inMin, inMax, value));
80
+ }
81
+ function smoothstep(edge0, edge1, x) {
82
+ const t = clamp((x - edge0) / (edge1 - edge0), 0, 1);
83
+ return t * t * (3 - 2 * t);
84
+ }
85
+ function smootherstep(edge0, edge1, x) {
86
+ const t = clamp((x - edge0) / (edge1 - edge0), 0, 1);
87
+ return t * t * t * (t * (t * 6 - 15) + 10);
88
+ }
89
+ function degToRad(degrees) {
90
+ return degrees * DEG_TO_RAD;
91
+ }
92
+ function radToDeg(radians) {
93
+ return radians * RAD_TO_DEG;
94
+ }
95
+ function mod(n, m) {
96
+ return (n % m + m) % m;
97
+ }
98
+ function fract(x) {
99
+ return x - Math.floor(x);
100
+ }
101
+ function sign(x) {
102
+ return x > 0 ? 1 : x < 0 ? -1 : 0;
103
+ }
104
+ function step(edge, x) {
105
+ return x < edge ? 0 : 1;
106
+ }
107
+ var vec2Math = {
108
+ add: (a, b) => ({ x: a.x + b.x, y: a.y + b.y }),
109
+ sub: (a, b) => ({ x: a.x - b.x, y: a.y - b.y }),
110
+ mul: (a, s) => ({ x: a.x * s, y: a.y * s }),
111
+ div: (a, s) => ({ x: a.x / s, y: a.y / s }),
112
+ dot: (a, b) => a.x * b.x + a.y * b.y,
113
+ length: (v) => Math.sqrt(v.x * v.x + v.y * v.y),
114
+ lengthSq: (v) => v.x * v.x + v.y * v.y,
115
+ normalize: (v) => {
116
+ const len = vec2Math.length(v);
117
+ return len > 0 ? vec2Math.div(v, len) : { x: 0, y: 0 };
118
+ },
119
+ distance: (a, b) => vec2Math.length(vec2Math.sub(a, b)),
120
+ lerp: (a, b, t) => ({
121
+ x: lerp(a.x, b.x, t),
122
+ y: lerp(a.y, b.y, t)
123
+ }),
124
+ rotate: (v, angle) => {
125
+ const c = Math.cos(angle);
126
+ const s = Math.sin(angle);
127
+ return { x: v.x * c - v.y * s, y: v.x * s + v.y * c };
128
+ },
129
+ angle: (v) => Math.atan2(v.y, v.x),
130
+ angleBetween: (a, b) => {
131
+ return Math.acos(clamp(vec2Math.dot(vec2Math.normalize(a), vec2Math.normalize(b)), -1, 1));
132
+ }
133
+ };
134
+ var vec3Math = {
135
+ zero: () => vec3(0, 0, 0),
136
+ one: () => vec3(1, 1, 1),
137
+ up: () => vec3(0, 1, 0),
138
+ down: () => vec3(0, -1, 0),
139
+ forward: () => vec3(0, 0, -1),
140
+ back: () => vec3(0, 0, 1),
141
+ left: () => vec3(-1, 0, 0),
142
+ right: () => vec3(1, 0, 0),
143
+ add: (a, b) => vec3(a.x + b.x, a.y + b.y, a.z + b.z),
144
+ sub: (a, b) => ({ x: a.x - b.x, y: a.y - b.y, z: a.z - b.z }),
145
+ mul: (a, s) => ({ x: a.x * s, y: a.y * s, z: a.z * s }),
146
+ div: (a, s) => ({ x: a.x / s, y: a.y / s, z: a.z / s }),
147
+ mulVec: (a, b) => ({ x: a.x * b.x, y: a.y * b.y, z: a.z * b.z }),
148
+ dot: (a, b) => a.x * b.x + a.y * b.y + a.z * b.z,
149
+ cross: (a, b) => ({
150
+ x: a.y * b.z - a.z * b.y,
151
+ y: a.z * b.x - a.x * b.z,
152
+ z: a.x * b.y - a.y * b.x
153
+ }),
154
+ length: (v) => Math.sqrt(v.x * v.x + v.y * v.y + v.z * v.z),
155
+ lengthSq: (v) => v.x * v.x + v.y * v.y + v.z * v.z,
156
+ normalize: (v) => {
157
+ const len = vec3Math.length(v);
158
+ return len > EPSILON ? vec3Math.div(v, len) : vec3(0, 0, 0);
159
+ },
160
+ distance: (a, b) => vec3Math.length(vec3Math.sub(a, b)),
161
+ distanceSq: (a, b) => vec3Math.lengthSq(vec3Math.sub(a, b)),
162
+ lerp: (a, b, t) => ({
163
+ x: lerp(a.x, b.x, t),
164
+ y: lerp(a.y, b.y, t),
165
+ z: lerp(a.z, b.z, t)
166
+ }),
167
+ slerp: (a, b, t) => {
168
+ const dot = clamp(vec3Math.dot(a, b), -1, 1);
169
+ const theta = Math.acos(dot) * t;
170
+ const relative = vec3Math.normalize(vec3Math.sub(b, vec3Math.mul(a, dot)));
171
+ return vec3Math.add(vec3Math.mul(a, Math.cos(theta)), vec3Math.mul(relative, Math.sin(theta)));
172
+ },
173
+ negate: (v) => ({ x: -v.x, y: -v.y, z: -v.z }),
174
+ abs: (v) => ({ x: Math.abs(v.x), y: Math.abs(v.y), z: Math.abs(v.z) }),
175
+ min: (a, b) => ({
176
+ x: Math.min(a.x, b.x),
177
+ y: Math.min(a.y, b.y),
178
+ z: Math.min(a.z, b.z)
179
+ }),
180
+ max: (a, b) => ({
181
+ x: Math.max(a.x, b.x),
182
+ y: Math.max(a.y, b.y),
183
+ z: Math.max(a.z, b.z)
184
+ }),
185
+ clamp: (v, min, max) => ({
186
+ x: clamp(v.x, min.x, max.x),
187
+ y: clamp(v.y, min.y, max.y),
188
+ z: clamp(v.z, min.z, max.z)
189
+ }),
190
+ floor: (v) => ({
191
+ x: Math.floor(v.x),
192
+ y: Math.floor(v.y),
193
+ z: Math.floor(v.z)
194
+ }),
195
+ ceil: (v) => ({
196
+ x: Math.ceil(v.x),
197
+ y: Math.ceil(v.y),
198
+ z: Math.ceil(v.z)
199
+ }),
200
+ round: (v) => ({
201
+ x: Math.round(v.x),
202
+ y: Math.round(v.y),
203
+ z: Math.round(v.z)
204
+ }),
205
+ reflect: (v, normal) => {
206
+ const dot = vec3Math.dot(v, normal);
207
+ return vec3Math.sub(v, vec3Math.mul(normal, 2 * dot));
208
+ },
209
+ project: (v, onto) => {
210
+ const dot = vec3Math.dot(v, onto);
211
+ const lenSq = vec3Math.lengthSq(onto);
212
+ return vec3Math.mul(onto, dot / lenSq);
213
+ },
214
+ angle: (a, b) => {
215
+ const dot = vec3Math.dot(vec3Math.normalize(a), vec3Math.normalize(b));
216
+ return Math.acos(clamp(dot, -1, 1));
217
+ },
218
+ equals: (a, b, epsilon = EPSILON) => {
219
+ return Math.abs(a.x - b.x) < epsilon && Math.abs(a.y - b.y) < epsilon && Math.abs(a.z - b.z) < epsilon;
220
+ }
221
+ };
222
+ var quatMath = {
223
+ identity: () => quat(0, 0, 0, 1),
224
+ fromAxisAngle: (axis, angle) => {
225
+ const halfAngle = angle / 2;
226
+ const s = Math.sin(halfAngle);
227
+ const normalized = vec3Math.normalize(axis);
228
+ return {
229
+ x: normalized.x * s,
230
+ y: normalized.y * s,
231
+ z: normalized.z * s,
232
+ w: Math.cos(halfAngle)
233
+ };
234
+ },
235
+ fromEuler: (euler) => {
236
+ const { x, y, z } = euler;
237
+ const c1 = Math.cos(degToRad(x) / 2);
238
+ const c2 = Math.cos(degToRad(y) / 2);
239
+ const c3 = Math.cos(degToRad(z) / 2);
240
+ const s1 = Math.sin(degToRad(x) / 2);
241
+ const s2 = Math.sin(degToRad(y) / 2);
242
+ const s3 = Math.sin(degToRad(z) / 2);
243
+ return {
244
+ x: s1 * c2 * c3 + c1 * s2 * s3,
245
+ y: c1 * s2 * c3 - s1 * c2 * s3,
246
+ z: c1 * c2 * s3 + s1 * s2 * c3,
247
+ w: c1 * c2 * c3 - s1 * s2 * s3
248
+ };
249
+ },
250
+ toEuler: (q) => {
251
+ const sinr_cosp = 2 * (q.w * q.x + q.y * q.z);
252
+ const cosr_cosp = 1 - 2 * (q.x * q.x + q.y * q.y);
253
+ const x = Math.atan2(sinr_cosp, cosr_cosp);
254
+ const sinp = 2 * (q.w * q.y - q.z * q.x);
255
+ let y;
256
+ if (Math.abs(sinp) >= 1) {
257
+ y = Math.PI / 2 * Math.sign(sinp);
258
+ } else {
259
+ y = Math.asin(sinp);
260
+ }
261
+ const siny_cosp = 2 * (q.w * q.z + q.x * q.y);
262
+ const cosy_cosp = 1 - 2 * (q.y * q.y + q.z * q.z);
263
+ const z = Math.atan2(siny_cosp, cosy_cosp);
264
+ return {
265
+ x: radToDeg(x),
266
+ y: radToDeg(y),
267
+ z: radToDeg(z)
268
+ };
269
+ },
270
+ multiply: (a, b) => ({
271
+ x: a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y,
272
+ y: a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x,
273
+ z: a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w,
274
+ w: a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z
275
+ }),
276
+ conjugate: (q) => ({ x: -q.x, y: -q.y, z: -q.z, w: q.w }),
277
+ inverse: (q) => {
278
+ const lenSq = q.x * q.x + q.y * q.y + q.z * q.z + q.w * q.w;
279
+ return {
280
+ x: -q.x / lenSq,
281
+ y: -q.y / lenSq,
282
+ z: -q.z / lenSq,
283
+ w: q.w / lenSq
284
+ };
285
+ },
286
+ normalize: (q) => {
287
+ const len = Math.sqrt(q.x * q.x + q.y * q.y + q.z * q.z + q.w * q.w);
288
+ return { x: q.x / len, y: q.y / len, z: q.z / len, w: q.w / len };
289
+ },
290
+ dot: (a, b) => a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w,
291
+ slerp: (a, b, t) => {
292
+ let dot = quatMath.dot(a, b);
293
+ let bAdjusted = b;
294
+ if (dot < 0) {
295
+ bAdjusted = { x: -b.x, y: -b.y, z: -b.z, w: -b.w };
296
+ dot = -dot;
297
+ }
298
+ if (dot > 0.9995) {
299
+ return quatMath.normalize({
300
+ x: lerp(a.x, bAdjusted.x, t),
301
+ y: lerp(a.y, bAdjusted.y, t),
302
+ z: lerp(a.z, bAdjusted.z, t),
303
+ w: lerp(a.w, bAdjusted.w, t)
304
+ });
305
+ }
306
+ const theta0 = Math.acos(dot);
307
+ const theta = theta0 * t;
308
+ const sinTheta = Math.sin(theta);
309
+ const sinTheta0 = Math.sin(theta0);
310
+ const s0 = Math.cos(theta) - dot * sinTheta / sinTheta0;
311
+ const s1 = sinTheta / sinTheta0;
312
+ return {
313
+ x: a.x * s0 + bAdjusted.x * s1,
314
+ y: a.y * s0 + bAdjusted.y * s1,
315
+ z: a.z * s0 + bAdjusted.z * s1,
316
+ w: a.w * s0 + bAdjusted.w * s1
317
+ };
318
+ },
319
+ rotateVec3: (q, v) => {
320
+ const qv = { x: q.x, y: q.y, z: q.z };
321
+ const uv = vec3Math.cross(qv, v);
322
+ const uuv = vec3Math.cross(qv, uv);
323
+ return vec3Math.add(v, vec3Math.add(vec3Math.mul(uv, 2 * q.w), vec3Math.mul(uuv, 2)));
324
+ },
325
+ lookAt: (forward, up = vec3(0, 1, 0)) => {
326
+ const f = vec3Math.normalize(forward);
327
+ const r = vec3Math.normalize(vec3Math.cross(up, f));
328
+ const u = vec3Math.cross(f, r);
329
+ const trace = r.x + u.y + f.z;
330
+ let q;
331
+ if (trace > 0) {
332
+ const s = 0.5 / Math.sqrt(trace + 1);
333
+ q = {
334
+ w: 0.25 / s,
335
+ x: (u.z - f.y) * s,
336
+ y: (f.x - r.z) * s,
337
+ z: (r.y - u.x) * s
338
+ };
339
+ } else if (r.x > u.y && r.x > f.z) {
340
+ const s = 2 * Math.sqrt(1 + r.x - u.y - f.z);
341
+ q = {
342
+ w: (u.z - f.y) / s,
343
+ x: 0.25 * s,
344
+ y: (u.x + r.y) / s,
345
+ z: (f.x + r.z) / s
346
+ };
347
+ } else if (u.y > f.z) {
348
+ const s = 2 * Math.sqrt(1 + u.y - r.x - f.z);
349
+ q = {
350
+ w: (f.x - r.z) / s,
351
+ x: (u.x + r.y) / s,
352
+ y: 0.25 * s,
353
+ z: (f.y + u.z) / s
354
+ };
355
+ } else {
356
+ const s = 2 * Math.sqrt(1 + f.z - r.x - u.y);
357
+ q = {
358
+ w: (r.y - u.x) / s,
359
+ x: (f.x + r.z) / s,
360
+ y: (f.y + u.z) / s,
361
+ z: 0.25 * s
362
+ };
363
+ }
364
+ return quatMath.normalize(q);
365
+ }
366
+ };
367
+ var aabbMath = {
368
+ contains: (aabb, point) => {
369
+ return point.x >= aabb.min.x && point.x <= aabb.max.x && point.y >= aabb.min.y && point.y <= aabb.max.y && point.z >= aabb.min.z && point.z <= aabb.max.z;
370
+ },
371
+ intersects: (a, b) => {
372
+ return a.min.x <= b.max.x && a.max.x >= b.min.x && a.min.y <= b.max.y && a.max.y >= b.min.y && a.min.z <= b.max.z && a.max.z >= b.min.z;
373
+ },
374
+ center: (aabb) => vec3Math.mul(vec3Math.add(aabb.min, aabb.max), 0.5),
375
+ size: (aabb) => vec3Math.sub(aabb.max, aabb.min),
376
+ expand: (aabb, point) => ({
377
+ min: vec3Math.min(aabb.min, point),
378
+ max: vec3Math.max(aabb.max, point)
379
+ }),
380
+ merge: (a, b) => ({
381
+ min: vec3Math.min(a.min, b.min),
382
+ max: vec3Math.max(a.max, b.max)
383
+ })
384
+ };
385
+ var perm = new Uint8Array(512);
386
+ for (let i = 0; i < 256; i++) perm[i] = perm[i + 256] = i;
387
+ for (let i = 255; i > 0; i--) {
388
+ const j = Math.floor(Math.random() * (i + 1));
389
+ [perm[i], perm[j]] = [perm[j], perm[i]];
390
+ perm[i + 256] = perm[i];
391
+ }
392
+ function fade(t) {
393
+ return t * t * t * (t * (t * 6 - 15) + 10);
394
+ }
395
+ function grad(hash, x, y, z) {
396
+ const h = hash & 15;
397
+ const u = h < 8 ? x : y;
398
+ const v = h < 4 ? y : h === 12 || h === 14 ? x : z;
399
+ return ((h & 1) === 0 ? u : -u) + ((h & 2) === 0 ? v : -v);
400
+ }
401
+ var noise = {
402
+ /**
403
+ * 3D Perlin noise (-1 to 1)
404
+ */
405
+ perlin3d: (x, y, z) => {
406
+ const X = Math.floor(x) & 255;
407
+ const Y = Math.floor(y) & 255;
408
+ const Z = Math.floor(z) & 255;
409
+ x -= Math.floor(x);
410
+ y -= Math.floor(y);
411
+ z -= Math.floor(z);
412
+ const u = fade(x);
413
+ const v = fade(y);
414
+ const w = fade(z);
415
+ const A = perm[X] + Y;
416
+ const AA = perm[A] + Z;
417
+ const AB = perm[A + 1] + Z;
418
+ const B = perm[X + 1] + Y;
419
+ const BA = perm[B] + Z;
420
+ const BB = perm[B + 1] + Z;
421
+ return lerp(
422
+ lerp(
423
+ lerp(grad(perm[AA], x, y, z), grad(perm[BA], x - 1, y, z), u),
424
+ lerp(grad(perm[AB], x, y - 1, z), grad(perm[BB], x - 1, y - 1, z), u),
425
+ v
426
+ ),
427
+ lerp(
428
+ lerp(grad(perm[AA + 1], x, y, z - 1), grad(perm[BA + 1], x - 1, y, z - 1), u),
429
+ lerp(grad(perm[AB + 1], x, y - 1, z - 1), grad(perm[BB + 1], x - 1, y - 1, z - 1), u),
430
+ v
431
+ ),
432
+ w
433
+ );
434
+ },
435
+ /**
436
+ * 2D Perlin noise (-1 to 1)
437
+ */
438
+ perlin2d: (x, y) => {
439
+ return noise.perlin3d(x, y, 0);
440
+ },
441
+ /**
442
+ * Fractal Brownian Motion (fBm)
443
+ */
444
+ fbm: (x, y, z, octaves = 6, lacunarity = 2, gain = 0.5) => {
445
+ let value = 0;
446
+ let amplitude = 1;
447
+ let frequency = 1;
448
+ let maxValue = 0;
449
+ for (let i = 0; i < octaves; i++) {
450
+ value += amplitude * noise.perlin3d(x * frequency, y * frequency, z * frequency);
451
+ maxValue += amplitude;
452
+ amplitude *= gain;
453
+ frequency *= lacunarity;
454
+ }
455
+ return value / maxValue;
456
+ },
457
+ /**
458
+ * Simplex-like noise (approximation using perlin)
459
+ */
460
+ simplex: (x, y) => {
461
+ return noise.perlin2d(x * 1.2, y * 1.2);
462
+ },
463
+ /**
464
+ * Worley/Cellular noise
465
+ */
466
+ worley: (x, y, z) => {
467
+ const xi = Math.floor(x);
468
+ const yi = Math.floor(y);
469
+ const zi = Math.floor(z);
470
+ let minDist = Infinity;
471
+ for (let i = -1; i <= 1; i++) {
472
+ for (let j = -1; j <= 1; j++) {
473
+ for (let k = -1; k <= 1; k++) {
474
+ const cellX = xi + i;
475
+ const cellY = yi + j;
476
+ const cellZ = zi + k;
477
+ const hash = perm[perm[perm[cellX & 255] + cellY & 255] + cellZ & 255];
478
+ const px = cellX + hash / 255;
479
+ const py = cellY + hash * 7 % 255 / 255;
480
+ const pz = cellZ + hash * 13 % 255 / 255;
481
+ const dist = (x - px) * (x - px) + (y - py) * (y - py) + (z - pz) * (z - pz);
482
+ minDist = Math.min(minDist, dist);
483
+ }
484
+ }
485
+ }
486
+ return Math.sqrt(minDist);
487
+ }
488
+ };
489
+ var random = {
490
+ /**
491
+ * Random float between 0 and 1
492
+ */
493
+ float: () => Math.random(),
494
+ /**
495
+ * Random float in range [min, max)
496
+ */
497
+ range: (min, max) => min + Math.random() * (max - min),
498
+ /**
499
+ * Random integer in range [min, max]
500
+ */
501
+ int: (min, max) => Math.floor(min + Math.random() * (max - min + 1)),
502
+ /**
503
+ * Random boolean with probability
504
+ */
505
+ bool: (probability = 0.5) => Math.random() < probability,
506
+ /**
507
+ * Random element from array
508
+ */
509
+ pick: (array) => array[Math.floor(Math.random() * array.length)],
510
+ /**
511
+ * Shuffle array (Fisher-Yates)
512
+ */
513
+ shuffle: (array) => {
514
+ const result = [...array];
515
+ for (let i = result.length - 1; i > 0; i--) {
516
+ const j = Math.floor(Math.random() * (i + 1));
517
+ [result[i], result[j]] = [result[j], result[i]];
518
+ }
519
+ return result;
520
+ },
521
+ /**
522
+ * Random Vec3 in unit sphere
523
+ */
524
+ insideUnitSphere: () => {
525
+ const theta = Math.random() * TAU;
526
+ const phi = Math.acos(2 * Math.random() - 1);
527
+ const r = Math.cbrt(Math.random());
528
+ return {
529
+ x: r * Math.sin(phi) * Math.cos(theta),
530
+ y: r * Math.sin(phi) * Math.sin(theta),
531
+ z: r * Math.cos(phi)
532
+ };
533
+ },
534
+ /**
535
+ * Random Vec3 on unit sphere surface
536
+ */
537
+ onUnitSphere: () => {
538
+ const theta = Math.random() * TAU;
539
+ const phi = Math.acos(2 * Math.random() - 1);
540
+ return {
541
+ x: Math.sin(phi) * Math.cos(theta),
542
+ y: Math.sin(phi) * Math.sin(theta),
543
+ z: Math.cos(phi)
544
+ };
545
+ },
546
+ /**
547
+ * Random Vec2 in unit circle
548
+ */
549
+ insideUnitCircle: () => {
550
+ const theta = Math.random() * TAU;
551
+ const r = Math.sqrt(Math.random());
552
+ return {
553
+ x: r * Math.cos(theta),
554
+ y: r * Math.sin(theta)
555
+ };
556
+ },
557
+ /**
558
+ * Seeded random number generator
559
+ */
560
+ seeded: (seed) => {
561
+ let s = seed;
562
+ return () => {
563
+ s = s * 1103515245 + 12345 & 2147483647;
564
+ return s / 2147483647;
565
+ };
566
+ }
567
+ };
568
+ // Annotate the CommonJS export names for ESM import in node:
569
+ 0 && (module.exports = {
570
+ DEG_TO_RAD,
571
+ EPSILON,
572
+ HALF_PI,
573
+ PI,
574
+ RAD_TO_DEG,
575
+ TAU,
576
+ aabbMath,
577
+ clamp,
578
+ degToRad,
579
+ fract,
580
+ inverseLerp,
581
+ lerp,
582
+ mod,
583
+ noise,
584
+ quatMath,
585
+ radToDeg,
586
+ random,
587
+ remap,
588
+ sign,
589
+ smootherstep,
590
+ smoothstep,
591
+ step,
592
+ vec2Math,
593
+ vec3Math
594
+ });
595
+ //# sourceMappingURL=math.cjs.map