@forgeax/engine-math 0.1.21 → 0.1.24
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/README.md +6 -5
- package/dist/color.d.ts +12 -3
- package/dist/color.d.ts.map +1 -1
- package/dist/index.mjs +169 -9
- package/dist/index.mjs.map +1 -1
- package/dist/mat4.d.ts +6 -6
- package/dist/mat4.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/color.ts +222 -14
- package/src/index.ts +1 -1
- package/src/mat4.ts +6 -6
- package/dist/.tsbuildinfo +0 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/box2.ts","../src/box3.ts","../src/circle2.ts","../src/color.ts","../src/easing.ts","../src/_internal/scalar.ts","../src/euler.ts","../src/quat.ts","../src/_internal/epsilon.ts","../src/f32-to-f16-bytes.ts","../src/frustum.ts","../src/mat3.ts","../src/mat4.ts","../src/vec3.ts","../src/noise.ts","../src/ray.ts","../src/ray2.ts","../src/sphere.ts","../src/vec2.ts","../src/vec4.ts"],"names":["center","halfSize","radius","containsPoint","create","fromPoints","intersectsBox","closestPoint","intersectsCircle","merge","distanceSq","scale","distance","min","max","clone","fromRotationMatrix","up","identity","invert","multiply","equals","fromQuat","transformVec3","transpose","dot","length","lengthSq","lerp","normalize","set","right","getDirection","getOrigin","rayAabbIntersects","setDirection","setOrigin","expandByPoint","add","catmullRom","copy","negate","smoothDamp","sub"],"mappings":"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A;AAAA,EAAM,EAAA;AAAA,EAAM,CAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAC1F,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAC1F,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAC1F,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAC1F,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,CAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,CAAA;AAAA,EAAM,EAAA;AAAA,EAC1F,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,CAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,CAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,CAAA;AAAA,EAC1F,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAM,GAAA;AAA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","file":"index.mjs","sourcesContent":["// box2.ts — 2D axis-aligned bounding box namespace (P12 / bounding_2d).\n//\n// Storage layout: Float32Array length 4 [minX, minY, maxX, maxY]. The surface\n// mirrors box3 so an AI can transfer broad-phase code between dimensions without\n// learning a second object model.\n\nimport type { Circle2Like } from './circle2';\nimport type { Vec2, Vec2Like } from './types';\n\n/** 2D AABB storage: [minX, minY, maxX, maxY]. */\nexport type Box2 = Float32Array & { readonly __box2: void };\n\n/** Readable 2D AABB input. */\nexport type Box2Like = ArrayLike<number>;\n\n/** Create a 2D AABB. The default is the inverted-infinity empty box. */\nexport function create(\n minX = Number.POSITIVE_INFINITY,\n minY = Number.POSITIVE_INFINITY,\n maxX = Number.NEGATIVE_INFINITY,\n maxY = Number.NEGATIVE_INFINITY,\n): Box2 {\n return Float32Array.of(minX, minY, maxX, maxY) as Box2;\n}\n\n/** Create an AABB from its center and non-negative half-size. */\nexport function fromCenter(out: Box2, center: Vec2Like, halfSize: Vec2Like): Box2 {\n const cx = center[0] as number;\n const cy = center[1] as number;\n const hx = Math.abs(halfSize[0] as number);\n const hy = Math.abs(halfSize[1] as number);\n out[0] = cx - hx;\n out[1] = cy - hy;\n out[2] = cx + hx;\n out[3] = cy + hy;\n return out;\n}\n\n/** Build the tightest AABB containing the given points. */\nexport function fromPoints(out: Box2, points: readonly Vec2Like[]): Box2 {\n out[0] = Number.POSITIVE_INFINITY;\n out[1] = Number.POSITIVE_INFINITY;\n out[2] = Number.NEGATIVE_INFINITY;\n out[3] = Number.NEGATIVE_INFINITY;\n for (let i = 0; i < points.length; i++) {\n const point = points[i] as Vec2Like;\n const x = point[0] as number;\n const y = point[1] as number;\n if (x < (out[0] as number)) out[0] = x;\n if (y < (out[1] as number)) out[1] = y;\n if (x > (out[2] as number)) out[2] = x;\n if (y > (out[3] as number)) out[3] = y;\n }\n return out;\n}\n\n/** Write the box center to out. Empty boxes produce non-finite values. */\nexport function center(out: Vec2, box: Box2Like): Vec2 {\n out[0] = ((box[0] as number) + (box[2] as number)) * 0.5;\n out[1] = ((box[1] as number) + (box[3] as number)) * 0.5;\n return out;\n}\n\n/** Write the box half-size to out. */\nexport function halfSize(out: Vec2, box: Box2Like): Vec2 {\n out[0] = ((box[2] as number) - (box[0] as number)) * 0.5;\n out[1] = ((box[3] as number) - (box[1] as number)) * 0.5;\n return out;\n}\n\n/** Write the closest point in the box to point. */\nexport function closestPoint(out: Vec2, box: Box2Like, point: Vec2Like): Vec2 {\n const x = point[0] as number;\n const y = point[1] as number;\n const minX = box[0] as number;\n const minY = box[1] as number;\n const maxX = box[2] as number;\n const maxY = box[3] as number;\n out[0] = x < minX ? minX : x > maxX ? maxX : x;\n out[1] = y < minY ? minY : y > maxY ? maxY : y;\n return out;\n}\n\n/** True when point is inside the box, including its boundary. */\nexport function containsPoint(box: Box2Like, point: Vec2Like): boolean {\n const x = point[0] as number;\n const y = point[1] as number;\n return (\n x >= (box[0] as number) &&\n x <= (box[2] as number) &&\n y >= (box[1] as number) &&\n y <= (box[3] as number)\n );\n}\n\n/** True when the box completely contains other, including touching edges. */\nexport function containsBox(box: Box2Like, other: Box2Like): boolean {\n return (\n (other[0] as number) >= (box[0] as number) &&\n (other[1] as number) >= (box[1] as number) &&\n (other[2] as number) <= (box[2] as number) &&\n (other[3] as number) <= (box[3] as number)\n );\n}\n\n/** True when two boxes overlap, including touching edges. */\nexport function intersectsBox(a: Box2Like, b: Box2Like): boolean {\n return (\n (a[2] as number) >= (b[0] as number) &&\n (a[0] as number) <= (b[2] as number) &&\n (a[3] as number) >= (b[1] as number) &&\n (a[1] as number) <= (b[3] as number)\n );\n}\n\n/** True when a box and a circle overlap, including tangent contact. */\nexport function intersectsCircle(box: Box2Like, circle: Circle2Like): boolean {\n const cx = circle[0] as number;\n const cy = circle[1] as number;\n const radius = circle[2] as number;\n if (radius < 0) return false;\n const closestX =\n cx < (box[0] as number)\n ? (box[0] as number)\n : cx > (box[2] as number)\n ? (box[2] as number)\n : cx;\n const closestY =\n cy < (box[1] as number)\n ? (box[1] as number)\n : cy > (box[3] as number)\n ? (box[3] as number)\n : cy;\n const dx = cx - closestX;\n const dy = cy - closestY;\n return dx * dx + dy * dy <= radius * radius;\n}\n\n/** Return the smallest box containing a and b. */\nexport function merge(out: Box2, a: Box2Like, b: Box2Like): Box2 {\n out[0] = Math.min(a[0] as number, b[0] as number);\n out[1] = Math.min(a[1] as number, b[1] as number);\n out[2] = Math.max(a[2] as number, b[2] as number);\n out[3] = Math.max(a[3] as number, b[3] as number);\n return out;\n}\n\n/** Grow the box by a non-negative amount on each side. */\nexport function grow(out: Box2, box: Box2Like, amount: Vec2Like): Box2 {\n const x = Math.abs(amount[0] as number);\n const y = Math.abs(amount[1] as number);\n out[0] = (box[0] as number) - x;\n out[1] = (box[1] as number) - y;\n out[2] = (box[2] as number) + x;\n out[3] = (box[3] as number) + y;\n return out;\n}\n\n/** Shrink the box by a non-negative amount on each side. */\nexport function shrink(out: Box2, box: Box2Like, amount: Vec2Like): Box2 {\n const x = Math.abs(amount[0] as number);\n const y = Math.abs(amount[1] as number);\n out[0] = (box[0] as number) + x;\n out[1] = (box[1] as number) + y;\n out[2] = (box[2] as number) - x;\n out[3] = (box[3] as number) - y;\n return out;\n}\n","// box3.ts — axis-aligned bounding box namespace (M3 / w7).\n//\n// 5-function surface (plan-tasks.json w7): create / expandByPoint / containsPoint / intersectsBox / fromPoints.\n//\n// Storage layout: Float32Array length 6 [minX, minY, minZ, maxX, maxY, maxZ].\n// Default state is \"empty box\" using the standard inverted-infinity convention\n// (min = +Infinity, max = -Infinity) so `expandByPoint` on any finite point\n// collapses to a zero-volume box containing exactly that point; this mirrors\n// three.js Box3.makeEmpty + glam/wgpu-matrix conventions (research knowledge-base\n// gl-matrix-overview §degenerate-anchor equivalent for AABB).\n//\n// Design locks:\n// - branded `Box3` Float32Array local to this module; cast funneled through `create`\n// - pure-function / out-param style consistent with vec3 / mat4;\n// - `expandByPoint` / `fromPoints` write to `out` in place and return it (aliasing-safe);\n// - `containsPoint` / `intersectsBox` are boundary-inclusive (standard AABB semantics).\n//\n// Related: requirements §AC-16 (Box3 / Sphere pure functions);\n// plan-strategy M3 range + D-P5 procedural geometry (Box3 backs future frustum culling);\n// plan-tasks.json w7 acceptanceCheck.\n\nimport type { Mat4Like, Vec3Like } from './types';\n\n/**\n * Box3 storage: Float32Array length 6 [minX, minY, minZ, maxX, maxY, maxZ].\n * Local brand (not part of the seven-piece SSOT because bounding volumes are\n * neither linear-algebra primitives nor ECS POD carriers; types.ts SSOT is\n * reserved for vec/mat/quat/color).\n */\nexport type Box3 = Float32Array & { readonly __box3: void };\n\n/**\n * Box3 readable input: ArrayLike<number> of length 6 (ordering identical to Box3).\n */\nexport type Box3Like = ArrayLike<number>;\n\n/**\n * Create a Box3. Defaults to the \"empty\" box (min=+Inf, max=-Inf) so the first\n * `expandByPoint` call collapses to a zero-volume box at the input point.\n */\nexport function create(\n minX: number = Number.POSITIVE_INFINITY,\n minY: number = Number.POSITIVE_INFINITY,\n minZ: number = Number.POSITIVE_INFINITY,\n maxX: number = Number.NEGATIVE_INFINITY,\n maxY: number = Number.NEGATIVE_INFINITY,\n maxZ: number = Number.NEGATIVE_INFINITY,\n): Box3 {\n return Float32Array.of(minX, minY, minZ, maxX, maxY, maxZ) as Box3;\n}\n\n/**\n * out ∪= point: grow min / max so `point` lies inside (boundary inclusive). Returns out.\n * Works correctly from the default empty box (inverted-infinity) — the first call\n * collapses both min and max to `point`.\n */\nexport function expandByPoint(out: Box3, point: Vec3Like): Box3 {\n const px = point[0] as number;\n const py = point[1] as number;\n const pz = point[2] as number;\n if (px < (out[0] as number)) out[0] = px;\n if (py < (out[1] as number)) out[1] = py;\n if (pz < (out[2] as number)) out[2] = pz;\n if (px > (out[3] as number)) out[3] = px;\n if (py > (out[4] as number)) out[4] = py;\n if (pz > (out[5] as number)) out[5] = pz;\n return out;\n}\n\n/**\n * True when `point` is inside `box` (boundary inclusive). An empty box\n * (min > max on any axis) contains no points.\n */\nexport function containsPoint(box: Box3Like, point: Vec3Like): boolean {\n const px = point[0] as number;\n const py = point[1] as number;\n const pz = point[2] as number;\n return (\n px >= (box[0] as number) &&\n px <= (box[3] as number) &&\n py >= (box[1] as number) &&\n py <= (box[4] as number) &&\n pz >= (box[2] as number) &&\n pz <= (box[5] as number)\n );\n}\n\n/**\n * True when `a` and `b` overlap on every axis (boundary inclusive — touching\n * faces intersect). Two empty boxes do not intersect.\n */\nexport function intersectsBox(a: Box3Like, b: Box3Like): boolean {\n return (\n (a[3] as number) >= (b[0] as number) &&\n (a[0] as number) <= (b[3] as number) &&\n (a[4] as number) >= (b[1] as number) &&\n (a[1] as number) <= (b[4] as number) &&\n (a[5] as number) >= (b[2] as number) &&\n (a[2] as number) <= (b[5] as number)\n );\n}\n\n/**\n * Build the tightest AABB enclosing `points`. Writes to `out` in place and\n * returns it. Empty `points` leaves `out` as the inverted-infinity empty box.\n */\nexport function fromPoints(out: Box3, points: readonly Vec3Like[]): Box3 {\n out[0] = Number.POSITIVE_INFINITY;\n out[1] = Number.POSITIVE_INFINITY;\n out[2] = Number.POSITIVE_INFINITY;\n out[3] = Number.NEGATIVE_INFINITY;\n out[4] = Number.NEGATIVE_INFINITY;\n out[5] = Number.NEGATIVE_INFINITY;\n for (let i = 0; i < points.length; i++) {\n const p = points[i] as Vec3Like;\n const px = p[0] as number;\n const py = p[1] as number;\n const pz = p[2] as number;\n if (px < (out[0] as number)) out[0] = px;\n if (py < (out[1] as number)) out[1] = py;\n if (pz < (out[2] as number)) out[2] = pz;\n if (px > (out[3] as number)) out[3] = px;\n if (py > (out[4] as number)) out[4] = py;\n if (pz > (out[5] as number)) out[5] = pz;\n }\n return out;\n}\n\n/**\n * Build the tightest AABB enclosing flattened xyz `positions` (tight-packed,\n * 3 floats per vertex). Writes to `out` in place and returns it.\n *\n * `positions` must have at least 3 elements to produce a non-empty box.\n * Fewer than 3 elements leaves `out` as the inverted-infinity empty box\n * (identical to `create()` default).\n *\n * Trailing elements beyond the last complete triplet are read verbatim\n * (undefined → NaN), matching the legacy `aabbFromPositions` behaviour\n * this function replaces.\n *\n * Related: `fromPoints` for `Vec3Like[]` input.\n */\nexport function fromPositions(out: Box3, positions: ArrayLike<number>): Box3 {\n out[0] = Number.POSITIVE_INFINITY;\n out[1] = Number.POSITIVE_INFINITY;\n out[2] = Number.POSITIVE_INFINITY;\n out[3] = Number.NEGATIVE_INFINITY;\n out[4] = Number.NEGATIVE_INFINITY;\n out[5] = Number.NEGATIVE_INFINITY;\n if (positions.length < 3) return out;\n let minX = positions[0] as number;\n let minY = positions[1] as number;\n let minZ = positions[2] as number;\n let maxX = minX;\n let maxY = minY;\n let maxZ = minZ;\n for (let i = 3; i < positions.length; i += 3) {\n const x = positions[i] as number;\n const y = positions[i + 1] as number;\n const z = positions[i + 2] as number;\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (z < minZ) minZ = z;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n if (z > maxZ) maxZ = z;\n }\n out[0] = minX;\n out[1] = minY;\n out[2] = minZ;\n out[3] = maxX;\n out[4] = maxY;\n out[5] = maxZ;\n return out;\n}\n\n/**\n * Transform an AABB by a 4x4 matrix using the conservative 8-corner method.\n *\n * Each of the 8 corners (all min/max combinations) is transformed by `m` as a\n * homogeneous point (w=1), then a new AABB is computed that tightly encloses\n * all 8 transformed points. This is always conservative — the output AABB is\n * guaranteed to contain the true transformed volume (no false culling).\n *\n * Returns `out`. Aliasing-safe: `box` and `out` may be the same reference.\n *\n * @example\n * ```ts\n * import { box3, mat4 } from '@forgeax/engine-math';\n * const box = box3.create(-1, -1, -1, 1, 1, 1);\n * const xform = mat4.create();\n * mat4.fromTranslation(xform, [5, 0, 0]);\n * box3.transformBox3(box, box, xform);\n * ```\n */\nexport function transformBox3(out: Box3, box: Box3Like, m: Mat4Like): Box3 {\n const bx = box[0] as number;\n const by = box[1] as number;\n const bz = box[2] as number;\n const bX = box[3] as number;\n const bY = box[4] as number;\n const bZ = box[5] as number;\n\n const m00 = m[0] as number;\n const m01 = m[1] as number;\n const m02 = m[2] as number;\n const m03 = m[3] as number;\n const m10 = m[4] as number;\n const m11 = m[5] as number;\n const m12 = m[6] as number;\n const m13 = m[7] as number;\n const m20 = m[8] as number;\n const m21 = m[9] as number;\n const m22 = m[10] as number;\n const m23 = m[11] as number;\n const m30 = m[12] as number;\n const m31 = m[13] as number;\n const m32 = m[14] as number;\n const m33 = m[15] as number;\n\n // Corner 0: (bx, by, bz)\n let x = m00 * bx + m10 * by + m20 * bz + m30;\n let y = m01 * bx + m11 * by + m21 * bz + m31;\n let z = m02 * bx + m12 * by + m22 * bz + m32;\n let w = m03 * bx + m13 * by + m23 * bz + m33;\n if (w !== 0) {\n const iw = 1 / w;\n x *= iw;\n y *= iw;\n z *= iw;\n }\n let minX = x,\n maxX = x,\n minY = y,\n maxY = y,\n minZ = z,\n maxZ = z;\n\n // Corner 1: (bX, by, bz)\n x = m00 * bX + m10 * by + m20 * bz + m30;\n y = m01 * bX + m11 * by + m21 * bz + m31;\n z = m02 * bX + m12 * by + m22 * bz + m32;\n w = m03 * bX + m13 * by + m23 * bz + m33;\n if (w !== 0) {\n const iw = 1 / w;\n x *= iw;\n y *= iw;\n z *= iw;\n }\n if (x < minX) minX = x;\n if (x > maxX) maxX = x;\n if (y < minY) minY = y;\n if (y > maxY) maxY = y;\n if (z < minZ) minZ = z;\n if (z > maxZ) maxZ = z;\n\n // Corner 2: (bx, bY, bz)\n x = m00 * bx + m10 * bY + m20 * bz + m30;\n y = m01 * bx + m11 * bY + m21 * bz + m31;\n z = m02 * bx + m12 * bY + m22 * bz + m32;\n w = m03 * bx + m13 * bY + m23 * bz + m33;\n if (w !== 0) {\n const iw = 1 / w;\n x *= iw;\n y *= iw;\n z *= iw;\n }\n if (x < minX) minX = x;\n if (x > maxX) maxX = x;\n if (y < minY) minY = y;\n if (y > maxY) maxY = y;\n if (z < minZ) minZ = z;\n if (z > maxZ) maxZ = z;\n\n // Corner 3: (bX, bY, bz)\n x = m00 * bX + m10 * bY + m20 * bz + m30;\n y = m01 * bX + m11 * bY + m21 * bz + m31;\n z = m02 * bX + m12 * bY + m22 * bz + m32;\n w = m03 * bX + m13 * bY + m23 * bz + m33;\n if (w !== 0) {\n const iw = 1 / w;\n x *= iw;\n y *= iw;\n z *= iw;\n }\n if (x < minX) minX = x;\n if (x > maxX) maxX = x;\n if (y < minY) minY = y;\n if (y > maxY) maxY = y;\n if (z < minZ) minZ = z;\n if (z > maxZ) maxZ = z;\n\n // Corner 4: (bx, by, bZ)\n x = m00 * bx + m10 * by + m20 * bZ + m30;\n y = m01 * bx + m11 * by + m21 * bZ + m31;\n z = m02 * bx + m12 * by + m22 * bZ + m32;\n w = m03 * bx + m13 * by + m23 * bZ + m33;\n if (w !== 0) {\n const iw = 1 / w;\n x *= iw;\n y *= iw;\n z *= iw;\n }\n if (x < minX) minX = x;\n if (x > maxX) maxX = x;\n if (y < minY) minY = y;\n if (y > maxY) maxY = y;\n if (z < minZ) minZ = z;\n if (z > maxZ) maxZ = z;\n\n // Corner 5: (bX, by, bZ)\n x = m00 * bX + m10 * by + m20 * bZ + m30;\n y = m01 * bX + m11 * by + m21 * bZ + m31;\n z = m02 * bX + m12 * by + m22 * bZ + m32;\n w = m03 * bX + m13 * by + m23 * bZ + m33;\n if (w !== 0) {\n const iw = 1 / w;\n x *= iw;\n y *= iw;\n z *= iw;\n }\n if (x < minX) minX = x;\n if (x > maxX) maxX = x;\n if (y < minY) minY = y;\n if (y > maxY) maxY = y;\n if (z < minZ) minZ = z;\n if (z > maxZ) maxZ = z;\n\n // Corner 6: (bx, bY, bZ)\n x = m00 * bx + m10 * bY + m20 * bZ + m30;\n y = m01 * bx + m11 * bY + m21 * bZ + m31;\n z = m02 * bx + m12 * bY + m22 * bZ + m32;\n w = m03 * bx + m13 * bY + m23 * bZ + m33;\n if (w !== 0) {\n const iw = 1 / w;\n x *= iw;\n y *= iw;\n z *= iw;\n }\n if (x < minX) minX = x;\n if (x > maxX) maxX = x;\n if (y < minY) minY = y;\n if (y > maxY) maxY = y;\n if (z < minZ) minZ = z;\n if (z > maxZ) maxZ = z;\n\n // Corner 7: (bX, bY, bZ)\n x = m00 * bX + m10 * bY + m20 * bZ + m30;\n y = m01 * bX + m11 * bY + m21 * bZ + m31;\n z = m02 * bX + m12 * bY + m22 * bZ + m32;\n w = m03 * bX + m13 * bY + m23 * bZ + m33;\n if (w !== 0) {\n const iw = 1 / w;\n x *= iw;\n y *= iw;\n z *= iw;\n }\n if (x < minX) minX = x;\n if (x > maxX) maxX = x;\n if (y < minY) minY = y;\n if (y > maxY) maxY = y;\n if (z < minZ) minZ = z;\n if (z > maxZ) maxZ = z;\n\n out[0] = minX;\n out[1] = minY;\n out[2] = minZ;\n out[3] = maxX;\n out[4] = maxY;\n out[5] = maxZ;\n return out;\n}\n","// circle2.ts — 2D bounding-circle namespace (P12 / bounding_2d).\n\nimport * as box2 from './box2';\nimport type { Vec2, Vec2Like } from './types';\n\n/** 2D bounding circle storage: Float32Array [centerX, centerY, radius]. */\nexport type Circle2 = Float32Array & { readonly __circle2: void };\n\n/** Readable 2D bounding-circle input. */\nexport type Circle2Like = ArrayLike<number>;\n\n/** Create a bounding circle. Negative radius is clamped to zero. */\nexport function create(cx = 0, cy = 0, radius = 0): Circle2 {\n return Float32Array.of(cx, cy, radius < 0 ? 0 : radius) as Circle2;\n}\n\n/** Build a circle centered at the point-cloud AABB center and enclosing all points. */\nexport function fromPoints(out: Circle2, points: readonly Vec2Like[]): Circle2 {\n if (points.length === 0) {\n out[0] = 0;\n out[1] = 0;\n out[2] = -1;\n return out;\n }\n const bounds = box2.create();\n box2.fromPoints(bounds, points);\n const cx = ((bounds[0] as number) + (bounds[2] as number)) * 0.5;\n const cy = ((bounds[1] as number) + (bounds[3] as number)) * 0.5;\n let radiusSq = 0;\n for (let i = 0; i < points.length; i++) {\n const point = points[i] as Vec2Like;\n const dx = (point[0] as number) - cx;\n const dy = (point[1] as number) - cy;\n const distanceSq = dx * dx + dy * dy;\n if (distanceSq > radiusSq) radiusSq = distanceSq;\n }\n out[0] = cx;\n out[1] = cy;\n out[2] = Math.sqrt(radiusSq);\n return out;\n}\n\n/** Build the smallest AABB containing the circle. */\nexport function toBox(out: box2.Box2, circle: Circle2Like): box2.Box2 {\n const cx = circle[0] as number;\n const cy = circle[1] as number;\n const radius = circle[2] as number;\n out[0] = cx - radius;\n out[1] = cy - radius;\n out[2] = cx + radius;\n out[3] = cy + radius;\n return out;\n}\n\n/** Write the circle center to out. */\nexport function center(out: Vec2, circle: Circle2Like): Vec2 {\n out[0] = circle[0] as number;\n out[1] = circle[1] as number;\n return out;\n}\n\n/** Return the circle radius. */\nexport function radius(circle: Circle2Like): number {\n return circle[2] as number;\n}\n\n/** Write the closest point in the circle to point. */\nexport function closestPoint(out: Vec2, circle: Circle2Like, point: Vec2Like): Vec2 {\n const dx = (point[0] as number) - (circle[0] as number);\n const dy = (point[1] as number) - (circle[1] as number);\n const distanceSq = dx * dx + dy * dy;\n const r = circle[2] as number;\n if (r < 0) {\n out[0] = circle[0] as number;\n out[1] = circle[1] as number;\n return out;\n }\n if (distanceSq <= r * r || distanceSq < 1e-12) {\n out[0] = point[0] as number;\n out[1] = point[1] as number;\n return out;\n }\n const scale = r / Math.sqrt(distanceSq);\n out[0] = (circle[0] as number) + dx * scale;\n out[1] = (circle[1] as number) + dy * scale;\n return out;\n}\n\n/** True when point is inside the circle, including its boundary. */\nexport function containsPoint(circle: Circle2Like, point: Vec2Like): boolean {\n const dx = (point[0] as number) - (circle[0] as number);\n const dy = (point[1] as number) - (circle[1] as number);\n const r = circle[2] as number;\n return r >= 0 && dx * dx + dy * dy <= r * r;\n}\n\n/** True when two circles overlap, including tangent contact. */\nexport function intersectsCircle(a: Circle2Like, b: Circle2Like): boolean {\n const dx = (a[0] as number) - (b[0] as number);\n const dy = (a[1] as number) - (b[1] as number);\n const radius = (a[2] as number) + (b[2] as number);\n return (a[2] as number) >= 0 && (b[2] as number) >= 0 && dx * dx + dy * dy <= radius * radius;\n}\n\n/** True when the circle overlaps the box, including tangent contact. */\nexport function intersectsBox(circle: Circle2Like, box: box2.Box2Like): boolean {\n return box2.intersectsCircle(box, circle);\n}\n\n/** Return the smallest circle containing both circles. */\nexport function merge(out: Circle2, a: Circle2Like, b: Circle2Like): Circle2 {\n const ax = a[0] as number;\n const ay = a[1] as number;\n const ar = a[2] as number;\n const bx = b[0] as number;\n const by = b[1] as number;\n const br = b[2] as number;\n const dx = bx - ax;\n const dy = by - ay;\n const distance = Math.sqrt(dx * dx + dy * dy);\n if (ar >= distance + br) return createInto(out, ax, ay, ar);\n if (br >= distance + ar) return createInto(out, bx, by, br);\n if (distance < 1e-12) return createInto(out, ax, ay, Math.max(ar, br));\n const nextRadius = (distance + ar + br) * 0.5;\n const shift = (nextRadius - ar) / distance;\n return createInto(out, ax + dx * shift, ay + dy * shift, nextRadius);\n}\n\nfunction createInto(out: Circle2, cx: number, cy: number, r: number): Circle2 {\n out[0] = cx;\n out[1] = cy;\n out[2] = r;\n return out;\n}\n","// color.ts — RGBA color namespace (M5 / T-032)\n//\n// 6-function surface: create / clone / srgbToLinear / linearToSrgb / fromHex / toHex\n//\n// Design anchors:\n// - branded Float32Array length 4 [r, g, b, a]; `as Color` casts are funneled inside factories (D-P15)\n// - sRGB ↔ linear: IEC 61966-2-1 piecewise gamma; RGB channels only, alpha pass-through\n// - srgbToLinear: cutoff 0.04045 / linear segment v/12.92 / power segment ((v+0.055)/1.055)^2.4\n// - linearToSrgb: cutoff 0.0031308 / linear segment 12.92*v / power segment 1.055*v^(1/2.4) - 0.055\n// - negatives / NaN returned verbatim (HDR-friendly + IEEE-754 NaN propagation)\n// - fromHex (D-P7): only `#RRGGBB` (7 chars) and `#RRGGBBAA` (9 chars); illegal inputs silently fall\n// back to (0, 0, 0, 1) without throwing (D-P12 degenerate family / AC-06)\n// - #RGB / #RGBA short forms are not supported (stricter than bevy_color::Srgba::hex; less ambiguous\n// in practice; wiki/sources/2026-05-05-bevy-0-19-math-transform-color §Srgba::hex mentions short\n// forms but D-P7 actively tightens the contract)\n// - toHex: alpha=1 → `#rrggbb`; alpha<1 → `#rrggbbaa`; components are clamped to [0, 1] then\n// multiplied by 255 and rounded; output is lowercase, symmetric with fromHex's tolerant input\n//\n// Related: requirements §Surface color lower bound 6 + AC-06 silent fall-back (never raises);\n// plan-strategy D-P7 / D-P12 / §appendix A degenerate registry #14-#16;\n// wiki/sources/2026-05-05-bevy-0-19-math-transform-color §sRGB piecewise gamma;\n// wiki/glam-rs-overview §LinearRgba.\n\nimport type { Color, ColorLike } from './types';\n\nexport type { Color, ColorLike };\n\n// === create / copy ===\n\n/** Create a Color (default RGBA = (0, 0, 0, 1) = opaque black). */\nexport function create(r = 0, g = 0, b = 0, a = 1): Color {\n return Float32Array.of(r, g, b, a) as Color;\n}\n\n/** Allocate a new Color copy. */\nexport function clone(c: ColorLike): Color {\n return Float32Array.of(c[0] as number, c[1] as number, c[2] as number, c[3] as number) as Color;\n}\n\n// === sRGB ↔ linear (IEC 61966-2-1 piecewise gamma) ===\n\n/**\n * Single-channel sRGB → linear (component-level helper).\n *\n * @degrade NaN input → NaN output (IEEE-754 arithmetic propagation); negatives returned verbatim\n * to preserve HDR / specialized rendering needs (same convention as bevy_color::gamma_function;\n * wiki/sources bevy-0-19-color §gamma_function).\n *\n * @example\n * ```ts\n * srgbChannelToLinear(NaN); // → NaN (IEEE-754 propagation)\n * srgbChannelToLinear(-0.1); // → -0.1 (HDR / negative kept verbatim)\n * ```\n */\nfunction srgbChannelToLinear(v: number): number {\n if (Number.isNaN(v)) return Number.NaN;\n if (v <= 0) return v;\n if (v <= 0.04045) return v / 12.92;\n return ((v + 0.055) / 1.055) ** 2.4;\n}\n\n/** Single-channel linear → sRGB (component-level helper). */\nfunction linearChannelToSrgb(v: number): number {\n if (Number.isNaN(v)) return Number.NaN;\n if (v <= 0) return v;\n if (v <= 0.0031308) return v * 12.92;\n return 1.055 * v ** (1 / 2.4) - 0.055;\n}\n\n/**\n * out = sRGB → linear conversion (RGB channels only; alpha passed through).\n *\n * @degrade NaN propagation / negatives returned verbatim (HDR-friendly); alpha is strictly untouched.\n *\n * @example\n * ```ts\n * color.srgbToLinear(out, color.create(NaN, -0.1, 0.5, 0.8));\n * // → out = (NaN, -0.1, ~0.214, 0.8); alpha 0.8 passed through unchanged.\n * ```\n */\nexport function srgbToLinear(out: Color, c: ColorLike): Color {\n out[0] = srgbChannelToLinear(c[0] as number);\n out[1] = srgbChannelToLinear(c[1] as number);\n out[2] = srgbChannelToLinear(c[2] as number);\n out[3] = c[3] as number;\n return out;\n}\n\n/**\n * out = linear → sRGB conversion (RGB channels only; alpha passed through).\n *\n * @degrade NaN propagation / negatives returned verbatim; alpha is strictly untouched.\n *\n * @example\n * ```ts\n * color.linearToSrgb(out, color.create(NaN, -0.05, 0.5, 1));\n * // → out = (NaN, -0.05, ~0.735, 1); alpha is strictly untouched.\n * ```\n */\nexport function linearToSrgb(out: Color, c: ColorLike): Color {\n out[0] = linearChannelToSrgb(c[0] as number);\n out[1] = linearChannelToSrgb(c[1] as number);\n out[2] = linearChannelToSrgb(c[2] as number);\n out[3] = c[3] as number;\n return out;\n}\n\n// === Hex parse / serialize ===\n\nconst HEX_PATTERN = /^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})?$/;\n\n/**\n * Write a Color from a hex string.\n *\n * Only supports the two forms `#RRGGBB` (7 chars) and `#RRGGBBAA` (9 chars) (D-P7);\n * the CSS-style `#RGB` / `#RGBA` short forms are not supported.\n *\n * @degrade Any illegal input (short form / non-hex chars / missing # / wrong length / empty string,\n * etc.) silently falls back to (0, 0, 0, 1); never throws (D-P12 / AC-06).\n *\n * @example\n * ```ts\n * color.fromHex(out, '#ff8000'); // → (1, 0.502, 0, 1)\n * color.fromHex(out, '#ff800080'); // → (1, 0.502, 0, 0.502)\n * color.fromHex(out, '#fff'); // → (0, 0, 0, 1) short form unsupported → silent fall-back\n * ```\n */\nexport function fromHex(out: Color, hex: string): Color {\n const match = typeof hex === 'string' ? HEX_PATTERN.exec(hex) : null;\n if (match === null) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n return out;\n }\n out[0] = Number.parseInt(match[1] as string, 16) / 255;\n out[1] = Number.parseInt(match[2] as string, 16) / 255;\n out[2] = Number.parseInt(match[3] as string, 16) / 255;\n out[3] = match[4] !== undefined ? Number.parseInt(match[4], 16) / 255 : 1;\n return out;\n}\n\n/** Per-component [0, 1] clamp + ×255 + round + 2-digit hex (lowercase). */\nfunction toHexByte(v: number): string {\n if (Number.isNaN(v)) return '00';\n const clamped = Math.max(0, Math.min(1, v));\n const byte = Math.round(clamped * 255);\n return byte.toString(16).padStart(2, '0');\n}\n\n/**\n * Serialize as hex string: alpha=1 → `#rrggbb`; alpha<1 → `#rrggbbaa`.\n *\n * @degrade Out-of-range components (HDR > 1 / negatives) are clamped to [0, 1] then rounded;\n * **truncated** rather than throwing (symmetric with fromHex's silent fall-back). NaN components →\n * literal '00' (same byte as 0.0; prevents the hex-string builder from throwing; alpha=NaN takes the\n * alpha=1 path, emitting the short `#rrggbb` form).\n *\n * @example\n * ```ts\n * color.toHex(color.create(2, -0.1, 0.5, 1)); // → '#ff0080' (HDR/negative clamp)\n * color.toHex(color.create(1, 0, 0, 0.5)); // → '#ff000080'\n * color.toHex(color.create(NaN, 0, 0, NaN)); // → '#000000' (NaN→'00', alpha=NaN takes short form)\n * ```\n */\nexport function toHex(c: ColorLike): string {\n const r = toHexByte(c[0] as number);\n const g = toHexByte(c[1] as number);\n const b = toHexByte(c[2] as number);\n const aValue = c[3] as number;\n if (aValue >= 1 || Number.isNaN(aValue)) {\n return `#${r}${g}${b}`;\n }\n const a = toHexByte(aValue);\n return `#${r}${g}${b}${a}`;\n}\n","// easing.ts — easing-function namespace (solo round 20260713-233409)\n//\n// 4-function surface: cubicInOut / smoothstep / smootherstep / elasticInOut\n// (GLSL `smoothstep`, Perlin's smootherstep; Bevy `EaseFunction::SmoothStep`/`SmootherStep`).\n// Scalar time-remaps t → number: take a normalized parameter and return an eased value. The\n// growable home for Bevy's `EaseFunction` family — further variants (sine / quad / bounce /\n// steps) land here add-only.\n//\n// Every function clamps the input to [0, 1] first (GLSL / Bevy semantics), so out-of-range t\n// saturates to the endpoints rather than extrapolating the curve.\n\nimport { clamp } from './_internal/scalar';\n\n/** Cubic ease-in-out: Bevy `EaseFunction::CubicInOut`, clamped to [0, 1]. */\nexport function cubicInOut(t: number): number {\n const x = clamp(t, 0, 1);\n return x < 0.5 ? 4 * x * x * x : 1 - (-2 * x + 2) ** 3 / 2;\n}\n\n/**\n * Smoothstep S-curve: `3t² − 2t³` on the clamped input. GLSL `smoothstep` (with edges 0/1),\n * Bevy `EaseFunction::SmoothStep`. f(0)=0, f(1)=1, f′(0)=f′(1)=0 (slow-in / slow-out).\n * Input clamped to [0, 1]. Use to ease a normalized time / lerp factor instead of a linear ramp.\n */\nexport function smoothstep(t: number): number {\n const x = clamp(t, 0, 1);\n return x * x * (3 - 2 * x);\n}\n\n/**\n * Smootherstep (Perlin) S-curve: `6t⁵ − 15t⁴ + 10t³` on the clamped input. Bevy\n * `EaseFunction::SmootherStep`. Like {@link smoothstep} but ALSO has zero 2nd derivatives at\n * the endpoints (f″(0)=f″(1)=0), so acceleration is continuous — a gentler, more natural ease.\n * Input clamped to [0, 1].\n */\nexport function smootherstep(t: number): number {\n const x = clamp(t, 0, 1);\n return x * x * x * (x * (x * 6 - 15) + 10);\n}\n\n/** Elastic ease-in-out: Bevy `EaseFunction::ElasticInOut`, clamped to [0, 1]. */\nexport function elasticInOut(t: number): number {\n const x = clamp(t, 0, 1);\n if (x === 0 || x === 1) return x;\n const c5 = (2 * Math.PI) / 4.5;\n return x < 0.5\n ? -(2 ** (20 * x - 10) * Math.sin((20 * x - 11.125) * c5)) / 2\n : (2 ** (-20 * x + 10) * Math.sin((20 * x - 11.125) * c5)) / 2 + 1;\n}\n","// _internal/scalar.ts — scalar helper SSOT (D-P13 not exported from package)\n//\n// Provides the scalar-layer building blocks reused across the vec/mat/quat namespaces;\n// avoids duplicate implementations.\n// Not exported through src/index.ts; indirectly covered by the public API tests of the dim files\n// (plan-strategy §4.1 exemption).\n//\n// Related: plan-strategy §1.1 file layering (_internal/scalar.ts) + D-P13 _internal not exported;\n// requirements §duplicate-code elimination strategy D mixed.\n\n/**\n * Scalar linear interpolation. t is not clamped (extrapolation semantics preserved,\n * matches glam Vec3.lerp / wgpu-matrix).\n */\nexport function lerp(a: number, b: number, t: number): number {\n return a + (b - a) * t;\n}\n\n/** Squared length of a four-component numeric value. */\nexport function lengthSq4(a: ArrayLike<number>): number {\n const x = a[0] as number;\n const y = a[1] as number;\n const z = a[2] as number;\n const w = a[3] as number;\n return x * x + y * y + z * z + w * w;\n}\n\n/** Normalize a four-component numeric value into a typed-array output. */\nexport function normalize4(out: Float32Array, a: ArrayLike<number>, epsilon: number): void {\n const lenSq = lengthSq4(a);\n if (lenSq < epsilon) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n return;\n }\n const inv = 1 / Math.sqrt(lenSq);\n out[0] = (a[0] as number) * inv;\n out[1] = (a[1] as number) * inv;\n out[2] = (a[2] as number) * inv;\n out[3] = (a[3] as number) * inv;\n}\n\n/**\n * Exponential-decay smoothing factor for frame-rate-INDEPENDENT damping:\n * `1 − exp(−decayRate · dt)`. The single value the vec `smoothDamp` helpers interpolate by.\n *\n * SSOT for the smooth-nudge semantics (Bevy `StableInterpolate::smooth_nudge`,\n * three.js `MathUtils.damp`): the returned factor composes multiplicatively over dt —\n * `exp(−k·(a+b)) = exp(−k·a)·exp(−k·b)` — so one step of dt equals two steps of dt/2, the\n * property a naive `rate·dt` factor violates. `dt=0` → 0 (no move); `decayRate·dt → ∞` → 1\n * (snap to target); `decayRate=0` → 0 (no effect). NaN propagates via Math.exp.\n */\nexport function smoothDecayFactor(decayRate: number, dt: number): number {\n return 1 - Math.exp(-decayRate * dt);\n}\n\n/**\n * Scalar Catmull-Rom spline value on the segment between `b` and `c`, with `a` / `d` the\n * neighbor control points that set the endpoint tangents. Tension 0.5 (the Catmull-Rom\n * special case of a Cardinal spline, and the Bevy default). SSOT for the vec `catmullRom`\n * helpers — the coefficient matrix lives here once (Bevy `CubicCardinalSpline::char_matrix`\n * with s=0.5):\n * c0 = b\n * c1 = 0.5 (c − a)\n * c2 = a − 2.5 b + 2 c − 0.5 d\n * c3 = −0.5 a + 1.5 b − 1.5 c + 0.5 d\n * value = c0 + c1 t + c2 t² + c3 t³\n * Interpolates the control points: t=0 → b, t=1 → c. `t` is not clamped (extrapolation\n * beyond the segment follows the same cubic, matching `lerp`'s unclamped semantics).\n */\nexport function catmullRomScalar(a: number, b: number, c: number, d: number, t: number): number {\n const c0 = b;\n const c1 = 0.5 * (c - a);\n const c2 = a - 2.5 * b + 2 * c - 0.5 * d;\n const c3 = -0.5 * a + 1.5 * b - 1.5 * c + 0.5 * d;\n const t2 = t * t;\n const t3 = t2 * t;\n return c0 + c1 * t + c2 * t2 + c3 * t3;\n}\n\n/**\n * Numeric clamp into the closed interval [min, max]. Returns NaN when v is NaN (NaN propagation).\n */\nexport function clamp(v: number, min: number, max: number): number {\n if (v < min) return min;\n if (v > max) return max;\n return v;\n}\n","// euler.ts — Euler angle namespace (M4 / T-028)\n//\n// 6-function surface (≥ 6 lower bound):\n// create / clone / set / fromQuat / toQuat / fromRotationMatrix\n//\n// Memory layout: plain object `{ x: number, y: number, z: number, order: EulerOrder }`\n// (not a Float32Array). Rationale:\n// - need to store length=3 plus a string order; strings cannot live inside a TypedArray\n// - performance-insensitive (euler is only used at the editor/IO boundary; runtime always converts to Quat)\n//\n// 6 orders (intrinsic rotation; literal order x → y → z):\n// XYZ / YXZ / ZXY / ZYX / YZX / XZY\n//\n// Degenerate convention (plan-strategy §appendix A degenerate registry #16):\n// - fromQuat(q, order) gimbal-lock (pitch ≈ ±π/2) → pick an equivalent branch; never throws\n// - fromRotationMatrix follows the same convention\n//\n// Related: requirements §Surface euler lower bound 6 + 6-order full support;\n// plan-strategy §1.1 euler.ts + §appendix A degenerate registry #16 + D-P19 EulerOrder union;\n// wiki/glam-rs-overview Hamilton convention +\n// Three.js Euler.setFromQuaternion / setFromRotationMatrix 6-order formulas.\n//\n// Degenerate-semantics registry (plan-strategy.md §appendix A; D-P16 dual promise:\n// runtime silent + JSDoc `@degrade` + `@example` guard pattern landing together):\n// #16 euler.fromQuat(q, order) gimbal-lock → pick equivalent branch (no throw)\n// #17 euler.fromRotationMatrix gimbal-lock → same as above\n\nimport * as quat from './quat';\nimport type { Euler, EulerOrder, Mat3Like, Quat, QuatLike } from './types';\n\nexport type { Euler, EulerOrder };\n\n/** Create an Euler, defaulting to (0, 0, 0, 'XYZ'). */\nexport function create(): Euler {\n return { x: 0, y: 0, z: 0, order: 'XYZ' };\n}\n\n/** Allocate a new Euler copy. */\nexport function clone(a: Euler): Euler {\n return { x: a.x, y: a.y, z: a.z, order: a.order };\n}\n\n/** out.x/y/z/order = inputs; returns out (in-place). */\nexport function set(out: Euler, x: number, y: number, z: number, order: EulerOrder): Euler {\n out.x = x;\n out.y = y;\n out.z = z;\n out.order = order;\n return out;\n}\n\n/**\n * out (Quat) = quaternion from euler. Returns out.\n *\n * Routes directly to quat.fromEuler (D-P2 + 6-order coverage already implemented inside quat).\n *\n * @example\n * ```ts\n * euler.toQuat(quatBuf, eulerInstance);\n * ```\n */\nexport function toQuat(out: Quat, e: Euler): Quat {\n return quat.fromEuler(out, e.x, e.y, e.z, e.order);\n}\n\n/**\n * out (Euler) = euler angles from quaternion in given order. Returns out.\n *\n * Implementation path: quat → 3x3 column-major rotation matrix → fromRotationMatrix(order).\n * This concentrates the 6-order formulas in fromRotationMatrix and avoids dual maintenance.\n *\n * @degrade gimbal lock (pitch ≈ ±π/2, sin/cos critical) → set yaw to 0 and let roll absorb the\n * full rotation (registry #16; same equivalent-branch semantics as Three.js; no throw).\n *\n * @example\n * ```ts\n * euler.fromQuat(out, q, 'XYZ');\n * ```\n */\nexport function fromQuat(out: Euler, q: QuatLike, order: EulerOrder): Euler {\n // Expand q into a 3x3 column-major rotation matrix (matching the index convention of quat.fromRotationMatrix)\n const x = q[0] as number;\n const y = q[1] as number;\n const z = q[2] as number;\n const w = q[3] as number;\n const xx = x * x;\n const xy = x * y;\n const xz = x * z;\n const yy = y * y;\n const yz = y * z;\n const zz = z * z;\n const wx = w * x;\n const wy = w * y;\n const wz = w * z;\n\n // mat3 column-major: m[col*3+row] → m00=col0row0, m01=col0row1, m10=col1row0...\n // R[row][col] maps to m[col*3+row]:\n // R[0][0]=m00,R[0][1]=m10,R[0][2]=m20\n // R[1][0]=m01,R[1][1]=m11,R[1][2]=m21\n // R[2][0]=m02,R[2][1]=m12,R[2][2]=m22\n const m = new Float32Array(9);\n m[0] = 1 - 2 * (yy + zz);\n m[1] = 2 * (xy + wz);\n m[2] = 2 * (xz - wy);\n m[3] = 2 * (xy - wz);\n m[4] = 1 - 2 * (xx + zz);\n m[5] = 2 * (yz + wx);\n m[6] = 2 * (xz + wy);\n m[7] = 2 * (yz - wx);\n m[8] = 1 - 2 * (xx + yy);\n\n return fromRotationMatrix(out, m, order);\n}\n\n/**\n * out (Euler) = euler from a 3x3 rotation matrix m (column-major, length 9) in `order`. Returns out.\n *\n * Uses the Three.js Euler.setFromRotationMatrix formulas (intrinsic rotation + Hamilton convention).\n * Each of the 6 orders has an analytic formula; near gimbal-lock (middle axis sin/cos near ±1)\n * an equivalent branch is selected.\n *\n * @degrade gimbal lock → middle axis is fixed at ±π/2; the remaining two axes degenerate\n * (one is set to 0; the other absorbs the rotation).\n *\n * @example\n * ```ts\n * euler.fromRotationMatrix(out, mat3InstanceColumnMajor, 'XYZ');\n * ```\n */\nexport function fromRotationMatrix(out: Euler, m: Mat3Like, order: EulerOrder): Euler {\n // Column-major indexing (matches quat.fromRotationMatrix):\n // m00 m01 m02 = column 0 (col=0)'s row=0/1/2\n // m10 m11 m12 = column 1 (col=1)'s row=0/1/2\n // m20 m21 m22 = column 2 (col=2)'s row=0/1/2\n // Mathematically R[row][col] = m[c*3 + r].\n // Thus, in the Three.js formulas, m11 (R[0][0]) corresponds to our m[0],\n // m12 (R[0][1]) corresponds to m[3],\n // m13 (R[0][2]) corresponds to m[6],\n // m21 (R[1][0]) corresponds to m[1], etc.\n // For readability and alignment with Three.js naming, alias (_ij denotes R[i-1][j-1]):\n const _11 = m[0] as number;\n const _21 = m[1] as number;\n const _31 = m[2] as number;\n const _12 = m[3] as number;\n const _22 = m[4] as number;\n const _32 = m[5] as number;\n const _13 = m[6] as number;\n const _23 = m[7] as number;\n const _33 = m[8] as number;\n\n out.order = order;\n switch (order) {\n case 'XYZ':\n out.y = Math.asin(clamp11(_13));\n if (Math.abs(_13) < 1 - 1e-7) {\n out.x = Math.atan2(-_23, _33);\n out.z = Math.atan2(-_12, _11);\n } else {\n // gimbal lock\n out.x = Math.atan2(_32, _22);\n out.z = 0;\n }\n break;\n case 'YXZ':\n out.x = Math.asin(-clamp11(_23));\n if (Math.abs(_23) < 1 - 1e-7) {\n out.y = Math.atan2(_13, _33);\n out.z = Math.atan2(_21, _22);\n } else {\n out.y = Math.atan2(-_31, _11);\n out.z = 0;\n }\n break;\n case 'ZXY':\n out.x = Math.asin(clamp11(_32));\n if (Math.abs(_32) < 1 - 1e-7) {\n out.y = Math.atan2(-_31, _33);\n out.z = Math.atan2(-_12, _22);\n } else {\n out.y = 0;\n out.z = Math.atan2(_21, _11);\n }\n break;\n case 'ZYX':\n out.y = Math.asin(-clamp11(_31));\n if (Math.abs(_31) < 1 - 1e-7) {\n out.x = Math.atan2(_32, _33);\n out.z = Math.atan2(_21, _11);\n } else {\n out.x = 0;\n out.z = Math.atan2(-_12, _22);\n }\n break;\n case 'YZX':\n out.z = Math.asin(clamp11(_21));\n if (Math.abs(_21) < 1 - 1e-7) {\n out.x = Math.atan2(-_23, _22);\n out.y = Math.atan2(-_31, _11);\n } else {\n out.x = 0;\n out.y = Math.atan2(_13, _33);\n }\n break;\n case 'XZY':\n out.z = Math.asin(-clamp11(_12));\n if (Math.abs(_12) < 1 - 1e-7) {\n out.x = Math.atan2(_32, _22);\n out.y = Math.atan2(_13, _11);\n } else {\n out.x = Math.atan2(-_23, _33);\n out.y = 0;\n }\n break;\n default:\n // Silent fallback to 'XYZ' (same convention as quat.fromEuler D-P2)\n out.y = Math.asin(clamp11(_13));\n if (Math.abs(_13) < 1 - 1e-7) {\n out.x = Math.atan2(-_23, _33);\n out.z = Math.atan2(-_12, _11);\n } else {\n out.x = Math.atan2(_32, _22);\n out.z = 0;\n }\n out.order = 'XYZ';\n break;\n }\n\n return out;\n}\n\n/**\n * Internal: clamp to [-1, 1] to keep asin from receiving out-of-range inputs (floating-point error\n * may make |x| slightly > 1; same guard as Three.js; not counted in the surface).\n */\nfunction clamp11(v: number): number {\n if (v < -1) return -1;\n if (v > 1) return 1;\n return v;\n}\n","// quat.ts — quaternion namespace (M4 / T-027)\n//\n// 23-function surface (≥ 16 lower bound):\n// create / clone / identity / fromAxisAngle / fromEuler / fromRotationMatrix /\n// fromLookAt / fromUnitVectors / multiply / rotateAxis / slerp / nlerp / invert /\n// conjugate / dot / length / lengthSq / transformVec3 / normalize / eulerY /\n// right / up / forward\n//\n// Memory layout lock: Float32Array length 4 [x, y, z, w], **Hamilton convention**\n// (graphics mainstream: glm / Three.js / wgpu-matrix / DirectXMath / glam are all Hamilton (x,y,z,w)).\n// Identity = [0, 0, 0, 1].\n//\n// Degenerate convention (plan-strategy §appendix A degenerate registry #8-#13):\n// - fromAxisAngle(0-axis, _) → identity (same convention as the M2 baseline)\n// - fromEuler(x, y, z, 'unknown') → silent fallback to 'XYZ' (D-P2 + AC-06 no throw)\n// - slerp(a, b, t) when dot(a,b) < -EPS_SLERP_DOT_LIMIT → negate b then slerp normally (D-P6)\n// - slerp(a, b, t) when |dot| > 1 - EPS_SLERP_DOT_LIMIT → falls back to nlerp (avoids acos blow-up)\n// - fromUnitVectors(v, -v) → pick perpendicular axis (prefer (0,1,0); fall back to (1,0,0) if\n// collinear with v) and 180° rotation (D-P18)\n// - fromUnitVectors(v, v) → identity\n// - normalize(zero quat) → out = zero (same convention as vec.normalize)\n//\n// Four ironclad rules (gl-matrix wiki / research §F1):\n// 1. Out-param first; 2. Aliasing-safe; 3. Module-as-namespace; 4. Float32Array by default.\n//\n// Related: requirements §Surface quat lower bound 16 + AC-06 no throw + AC-08 naming alignment +\n// AC-01 brand + boundary-case quat row;\n// plan-strategy §6 M4 + D-P2/D-P6/D-P18 + §appendix A degenerate registry #8-#13;\n// research §Finding 3 glam Hamilton + §fact-correction 4 fromEuler unknown silenced;\n// wiki/gl-matrix-overview §quat degenerate anchor + wiki/glam-rs-overview §Hamilton +\n// wiki/wgpu-matrix-overview §quat namespace.\n//\n// Degenerate-semantics registry (plan-strategy.md §appendix A; shares numbering with mat;\n// D-P16 dual promise: runtime silent + JSDoc `@degrade` + `@example` guard pattern landing together):\n// #8 quat.fromAxisAngle(0-axis, _) → out = identity\n// #9 quat.fromEuler(_, _, _, unknown) → silently computes as 'XYZ' (D-P2)\n// #10 quat.slerp(a, b, t) dot < -1+ε → negate b then slerp (D-P6)\n// #11 quat.slerp(a, b, t) |dot| > 1-ε → falls back to nlerp\n// #12 quat.fromUnitVectors(v, -v) → perpendicular-axis 180° rotation (D-P18)\n// #13 quat.fromUnitVectors(v, v) → out = identity\n\nimport { EPS_NORMALIZE, EPS_QUAT_PARALLEL, EPS_SLERP_DOT_LIMIT } from './_internal/epsilon';\nimport { lengthSq4, normalize4 } from './_internal/scalar';\nimport type { EulerOrder, Mat3Like, Quat, QuatLike, Vec3, Vec3Like } from './types';\n\nexport type { Quat, QuatLike };\n\n// Canonical axes for the local-basis accessors (right / up / forward). −Z is the\n// forward convention (RL-4), matching mat4.getForward and fromLookAt.\nconst UNIT_X = [1, 0, 0] as const;\nconst UNIT_Y = [0, 1, 0] as const;\nconst UNIT_NEG_Z = [0, 0, -1] as const;\n\n/** Create a Quat (default all zero; callers usually call identity() right after). */\nexport function create(): Quat {\n return new Float32Array(4) as Quat;\n}\n\n/** Allocate a new Quat copy. */\nexport function clone(a: QuatLike): Quat {\n return Float32Array.of(a[0] as number, a[1] as number, a[2] as number, a[3] as number) as Quat;\n}\n\n/** out = identity quaternion [0, 0, 0, 1]. Returns out. */\nexport function identity(out: Quat): Quat {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n return out;\n}\n\n/**\n * out = quaternion representing rotation by angleRadians around axis. Returns out.\n *\n * axis does not have to be pre-normalized; this function normalizes it internally.\n *\n * @degrade axis is the zero vector (lengthSq < EPS_NORMALIZE) → out = identity\n * (no throw, registry #8).\n *\n * @example\n * ```ts\n * quat.fromAxisAngle(out, [0, 1, 0], Math.PI / 2);\n * // Guard: if (vec3.lengthSq(axis) < EPS_NORMALIZE) skip;\n * ```\n */\nexport function fromAxisAngle(out: Quat, axis: Vec3Like, angleRadians: number): Quat {\n const ax = axis[0] as number;\n const ay = axis[1] as number;\n const az = axis[2] as number;\n const lenSq = ax * ax + ay * ay + az * az;\n if (lenSq < EPS_NORMALIZE) {\n return identity(out);\n }\n const inv = 1 / Math.sqrt(lenSq);\n const half = angleRadians / 2;\n const s = Math.sin(half);\n out[0] = ax * inv * s;\n out[1] = ay * inv * s;\n out[2] = az * inv * s;\n out[3] = Math.cos(half);\n return out;\n}\n\n/**\n * out = quaternion from intrinsic Euler angles (x, y, z, order). Returns out.\n *\n * Angle unit = **radians** (aligned with wgpu-matrix / Three.js; research §fact-correction 4\n * deviates from gl-matrix's degrees).\n * 6 orders: XYZ / YXZ / ZXY / ZYX / YZX / XZY (intrinsic rotation: literal order x → y → z).\n * Implementation: split each axis rotation into single-axis quaternions, then Hamilton-multiply\n * in `order`.\n *\n * @degrade order outside the EulerOrder union (only possible via `as any` cast) →\n * **silently computes as if 'XYZ'** (D-P2 + AC-06 no throw; registry #9).\n *\n * @example\n * ```ts\n * quat.fromEuler(out, 0.5, 0.3, 0.1, 'XYZ');\n * quat.fromEuler(out, 0.5, 0.3, 0.1, 'unknown' as any); // silently computed as 'XYZ'\n * // Guard: pass an EulerOrder union literal; the TS layer already blocks unknown strings.\n * ```\n */\nexport function fromEuler(out: Quat, x: number, y: number, z: number, order: EulerOrder): Quat {\n // Single-axis half-angle quat coefficients\n const c1 = Math.cos(x / 2);\n const c2 = Math.cos(y / 2);\n const c3 = Math.cos(z / 2);\n const s1 = Math.sin(x / 2);\n const s2 = Math.sin(y / 2);\n const s3 = Math.sin(z / 2);\n\n // Formulas from Three.js Quaternion.setFromEuler (intrinsic rotation, Hamilton convention).\n // 6 orders dispatched via switch; unknown silently falls back to XYZ (D-P2).\n switch (order) {\n case 'XYZ':\n out[0] = s1 * c2 * c3 + c1 * s2 * s3;\n out[1] = c1 * s2 * c3 - s1 * c2 * s3;\n out[2] = c1 * c2 * s3 + s1 * s2 * c3;\n out[3] = c1 * c2 * c3 - s1 * s2 * s3;\n break;\n case 'YXZ':\n out[0] = s1 * c2 * c3 + c1 * s2 * s3;\n out[1] = c1 * s2 * c3 - s1 * c2 * s3;\n out[2] = c1 * c2 * s3 - s1 * s2 * c3;\n out[3] = c1 * c2 * c3 + s1 * s2 * s3;\n break;\n case 'ZXY':\n out[0] = s1 * c2 * c3 - c1 * s2 * s3;\n out[1] = c1 * s2 * c3 + s1 * c2 * s3;\n out[2] = c1 * c2 * s3 + s1 * s2 * c3;\n out[3] = c1 * c2 * c3 - s1 * s2 * s3;\n break;\n case 'ZYX':\n out[0] = s1 * c2 * c3 - c1 * s2 * s3;\n out[1] = c1 * s2 * c3 + s1 * c2 * s3;\n out[2] = c1 * c2 * s3 - s1 * s2 * c3;\n out[3] = c1 * c2 * c3 + s1 * s2 * s3;\n break;\n case 'YZX':\n out[0] = s1 * c2 * c3 + c1 * s2 * s3;\n out[1] = c1 * s2 * c3 + s1 * c2 * s3;\n out[2] = c1 * c2 * s3 - s1 * s2 * c3;\n out[3] = c1 * c2 * c3 - s1 * s2 * s3;\n break;\n case 'XZY':\n out[0] = s1 * c2 * c3 - c1 * s2 * s3;\n out[1] = c1 * s2 * c3 - s1 * c2 * s3;\n out[2] = c1 * c2 * s3 + s1 * s2 * c3;\n out[3] = c1 * c2 * c3 + s1 * s2 * s3;\n break;\n default:\n // D-P2 + AC-06: unknown order silently falls back to 'XYZ' (no throw, no console.warn).\n out[0] = s1 * c2 * c3 + c1 * s2 * s3;\n out[1] = c1 * s2 * c3 - s1 * c2 * s3;\n out[2] = c1 * c2 * s3 + s1 * s2 * c3;\n out[3] = c1 * c2 * c3 - s1 * s2 * s3;\n break;\n }\n return out;\n}\n\n/**\n * out = quaternion from a 3x3 rotation matrix m (column-major, length 9). Returns out.\n *\n * Implementation: Shepperd's case-split (branch on trace / largest diagonal entry); numerically\n * more stable than the direct trace method (avoids sqrt(0) when trace ≈ -1).\n *\n * Assumption: m is a pure rotation matrix (|det|=1, columns orthogonal). If not, the result is\n * undefined but does not throw.\n *\n * @degrade m is not a pure rotation (contains shear / scale) → numerically undefined but does\n * not throw (AC-06 no throw; callers should normalize column vectors first or avoid\n * introducing non-pure-rotation matrices at the ECS-design layer).\n *\n * @example\n * ```ts\n * quat.fromRotationMatrix(out, mat3InstanceColumnMajor);\n * ```\n */\nexport function fromRotationMatrix(out: Quat, m: Mat3Like): Quat {\n const m00 = m[0] as number;\n const m01 = m[1] as number;\n const m02 = m[2] as number;\n const m10 = m[3] as number;\n const m11 = m[4] as number;\n const m12 = m[5] as number;\n const m20 = m[6] as number;\n const m21 = m[7] as number;\n const m22 = m[8] as number;\n\n // m is column-major: m[col*3+row] → m00 is col=0,row=0; m01 is col=0,row=1.\n // Rotation matrix R[row][col]:\n // R[0][0]=m00, R[1][0]=m01, R[2][0]=m02\n // R[0][1]=m10, R[1][1]=m11, R[2][1]=m12\n // R[0][2]=m20, R[1][2]=m21, R[2][2]=m22\n // Shepperd's formulas use R[i][j]; here the column-major indices are equivalent:\n // trace = R[0][0]+R[1][1]+R[2][2] = m00+m11+m22\n const trace = m00 + m11 + m22;\n if (trace > 0) {\n const s = 0.5 / Math.sqrt(trace + 1);\n out[0] = (m12 - m21) * s; // (R[2][1] - R[1][2])\n out[1] = (m20 - m02) * s; // (R[0][2] - R[2][0])\n out[2] = (m01 - m10) * s; // (R[1][0] - R[0][1])\n out[3] = 0.25 / s;\n } else if (m00 > m11 && m00 > m22) {\n const s = 2 * Math.sqrt(1 + m00 - m11 - m22);\n out[0] = 0.25 * s;\n out[1] = (m10 + m01) / s;\n out[2] = (m20 + m02) / s;\n out[3] = (m12 - m21) / s;\n } else if (m11 > m22) {\n const s = 2 * Math.sqrt(1 + m11 - m00 - m22);\n out[0] = (m10 + m01) / s;\n out[1] = 0.25 * s;\n out[2] = (m21 + m12) / s;\n out[3] = (m20 - m02) / s;\n } else {\n const s = 2 * Math.sqrt(1 + m22 - m00 - m11);\n out[0] = (m20 + m02) / s;\n out[1] = (m21 + m12) / s;\n out[2] = 0.25 * s;\n out[3] = (m01 - m10) / s;\n }\n return out;\n}\n\n/**\n * out = orientation quaternion for an object placed at `eye` and facing `target`. Returns out.\n *\n * This is the ergonomic camera/look-at helper: it yields the WORLD-space orientation an entity's\n * Transform.rotation needs so that its local -z axis points from `eye` toward `target` (the camera\n * convention, matching `mat4.lookAt`). Use it instead of hand-wiring\n * `mat4.lookAt → mat4.invert → mat3.fromMat4 → quat.fromRotationMatrix`; that chain is easy to get\n * wrong (notably `fromRotationMatrix` takes a mat3, but `Mat4Like`≡`Mat3Like`≡`ArrayLike<number>`,\n * so passing a mat4 typechecks and silently reads garbage → NaN → nothing renders).\n *\n * Convenience composition (like `mat4.computeViewProj`), not a primitive: it builds the same\n * right/newUp/forward basis as `mat4.lookAt` and reuses `fromRotationMatrix` for the extraction.\n *\n * @degrade eye ≈ target (|eye-target| < EPS_NORMALIZE) → out = identity (same convention as\n * `mat4.lookAt` degenerate #4; no throw, AC-06).\n * @degrade up collinear with the view direction → alternative up auto-selected (same as\n * `mat4.lookAt` #5).\n *\n * @example\n * ```ts\n * // aim a camera at the origin\n * const q = quat.fromLookAt(quat.create(), [-2.5, 4.5, 9], [0, 0, 0], [0, 1, 0]);\n * world.set(cameraEntity, Transform, { pos: [-2.5, 4.5, 9], rot: q });\n * ```\n */\nexport function fromLookAt(out: Quat, eye: Vec3Like, target: Vec3Like, up: Vec3Like): Quat {\n const ex = eye[0] as number;\n const ey = eye[1] as number;\n const ez = eye[2] as number;\n\n // forward = normalize(eye - target): the object's local -z points at the target, so +z = eye - target\n // (right-handed camera convention, identical to mat4.lookAt).\n let fx = ex - (target[0] as number);\n let fy = ey - (target[1] as number);\n let fz = ez - (target[2] as number);\n const fLenSq = fx * fx + fy * fy + fz * fz;\n if (fLenSq < EPS_NORMALIZE) {\n return identity(out);\n }\n const fInv = 1 / Math.sqrt(fLenSq);\n fx *= fInv;\n fy *= fInv;\n fz *= fInv;\n\n const upx = up[0] as number;\n const upy = up[1] as number;\n const upz = up[2] as number;\n\n // right = normalize(cross(up, forward)); degrade path mirrors mat4.lookAt (#5 alternative up).\n let rx = upy * fz - upz * fy;\n let ry = upz * fx - upx * fz;\n let rz = upx * fy - upy * fx;\n let rLenSq = rx * rx + ry * ry + rz * rz;\n if (rLenSq < EPS_NORMALIZE) {\n // up collinear with forward: pick alternative up = (0, 0, 1); if still collinear pick (0, 1, 0)\n rx = -fy;\n ry = fx;\n rz = 0;\n rLenSq = rx * rx + ry * ry + rz * rz;\n if (rLenSq < EPS_NORMALIZE) {\n rx = 0;\n ry = -fz;\n rz = fy;\n rLenSq = rx * rx + ry * ry + rz * rz;\n }\n }\n const rInv = 1 / Math.sqrt(rLenSq);\n rx *= rInv;\n ry *= rInv;\n rz *= rInv;\n\n // newUp = cross(forward, right)\n const ux = fy * rz - fz * ry;\n const uy = fz * rx - fx * rz;\n const uz = fx * ry - fy * rx;\n\n // World rotation columns are the basis vectors themselves (col0=right, col1=up, col2=forward) —\n // this is the transpose of mat4.lookAt's view rotation, i.e. the camera's world orientation.\n // Pack column-major into a length-9 mat3 for fromRotationMatrix (SSOT for the Shepperd extraction).\n // Per-call alloc mirrors mat4.computeViewProj's convenience-composition grain (camera orientation\n // is set rarely; no module-scoped mutable state to reason about).\n const m3 = new Float32Array(9);\n m3[0] = rx;\n m3[1] = ry;\n m3[2] = rz;\n m3[3] = ux;\n m3[4] = uy;\n m3[5] = uz;\n m3[6] = fx;\n m3[7] = fy;\n m3[8] = fz;\n return fromRotationMatrix(out, m3);\n}\n\n/**\n * out = quaternion that rotates the unit vector v to w (shortest arc). Returns out.\n *\n * Assumes v and w are normalized; if not, the caller is responsible.\n *\n * @degrade v ≈ w (dot > 1 - EPS_QUAT_PARALLEL) → out = identity (registry #13).\n * @degrade v ≈ -w (dot < -1 + EPS_QUAT_PARALLEL) → pick a perpendicular axis and do a 180°\n * rotation (prefer (0,1,0); fall back to (1,0,0) when collinear with v;\n * registry #12 + D-P18).\n *\n * @example\n * ```ts\n * quat.fromUnitVectors(out, [1,0,0], [0,1,0]); // 90° around Z\n * quat.fromUnitVectors(out, [1,0,0], [-1,0,0]); // 180° opposite: pick (0,1,0) axis\n * ```\n */\nexport function fromUnitVectors(out: Quat, v: Vec3Like, w: Vec3Like): Quat {\n const vx = v[0] as number;\n const vy = v[1] as number;\n const vz = v[2] as number;\n const wx = w[0] as number;\n const wy = w[1] as number;\n const wz = w[2] as number;\n\n const d = vx * wx + vy * wy + vz * wz;\n\n if (d > 1 - EPS_QUAT_PARALLEL) {\n // same direction: identity\n return identity(out);\n }\n\n if (d < -1 + EPS_QUAT_PARALLEL) {\n // opposite direction: pick a perpendicular axis (D-P18).\n // Prefer (0, 1, 0); when v is collinear with (0, 1, 0) (|vy| ~ 1) fall back to (1, 0, 0).\n let ax: number;\n let ay: number;\n let az: number;\n if (Math.abs(vy) < 1 - EPS_QUAT_PARALLEL) {\n // axis = normalize(cross(v, (0, 1, 0)))\n ax = -vz;\n ay = 0;\n az = vx;\n } else {\n // v is collinear with (0, 1, 0) → use (1, 0, 0)\n // axis = normalize(cross(v, (1, 0, 0)))\n ax = 0;\n ay = vz;\n az = -vy;\n }\n const axLen = Math.sqrt(ax * ax + ay * ay + az * az);\n if (axLen < EPS_NORMALIZE) {\n // extreme safety net (theoretically unreachable): write identity, no throw\n return identity(out);\n }\n const axInv = 1 / axLen;\n out[0] = ax * axInv;\n out[1] = ay * axInv;\n out[2] = az * axInv;\n out[3] = 0; // cos(PI/2) = 0\n return out;\n }\n\n // General case: half-vector method (numerically stable; consensus of wgpu-matrix / Three.js)\n // q = (cross(v, w), 1 + dot(v, w)), then normalize\n const cx = vy * wz - vz * wy;\n const cy = vz * wx - vx * wz;\n const cz = vx * wy - vy * wx;\n const sw = 1 + d;\n const len = Math.sqrt(cx * cx + cy * cy + cz * cz + sw * sw);\n const inv = 1 / len;\n out[0] = cx * inv;\n out[1] = cy * inv;\n out[2] = cz * inv;\n out[3] = sw * inv;\n return out;\n}\n\n/**\n * out = a * b (Hamilton product). Returns out.\n *\n * Aliasing-safe: reads all 8 source elements into locals first.\n */\nexport function multiply(out: Quat, a: QuatLike, b: QuatLike): Quat {\n const ax = a[0] as number;\n const ay = a[1] as number;\n const az = a[2] as number;\n const aw = a[3] as number;\n const bx = b[0] as number;\n const by = b[1] as number;\n const bz = b[2] as number;\n const bw = b[3] as number;\n out[0] = aw * bx + ax * bw + ay * bz - az * by;\n out[1] = aw * by - ax * bz + ay * bw + az * bx;\n out[2] = aw * bz + ax * by - ay * bx + az * bw;\n out[3] = aw * bw - ax * bx - ay * by - az * bz;\n return out;\n}\n\n/**\n * out = the orientation `q` after rotating a further `angleRadians` about world-space `axis`,\n * re-normalized. Returns out.\n *\n * This is the ergonomic *incremental rotate* helper — the per-frame spin/animation move. It folds\n * the three steps every rotating demo otherwise hand-wires: build the delta quaternion\n * (`fromAxisAngle`), **pre**-multiply it onto the current orientation (world-space axis, matching\n * **Bevy `Transform::rotate(r)` = `r * self.rotation`** / `rotate_y(θ)`), and — the step that is\n * silently omitted and makes the naive loop wrong — **normalize** to shed the floating-point error\n * that accumulates over thousands of frames into a non-unit quaternion (skew / scale artefacts).\n *\n * Prefer this over hand-writing `quat.multiply(q, delta, q)` in an update system: that loop drifts,\n * so demos work around it with an absolute-angle accumulator + `fromAxisAngle` (can't compose onto an\n * existing orientation) or raw `sin/cos` quaternion literals. `rotateAxis` composes safely.\n *\n * Convenience composition (like `fromLookAt`), not a primitive: same result as\n * `normalize(out, multiply(out, fromAxisAngle(tmp, axis, angleRadians), q))`, fused + aliasing-safe.\n *\n * @degrade `axis` zero-length → the delta is identity (degenerate registry #8), so out = normalize(q)\n * (no rotation applied; no throw, consistent with the sibling helpers).\n *\n * @example\n * ```ts\n * // in an Update system: spin a cube about +Y at `speed` rad/s using the frame delta\n * const dt = world.getResource(Time).delta;\n * const t = world.get(entity, Transform).unwrap();\n * quat.rotateAxis(t.quat, t.quat, [0, 1, 0], speed * dt); // in-place accumulate, no drift\n * world.set(entity, Transform, t);\n * ```\n */\nexport function rotateAxis(out: Quat, q: QuatLike, axis: Vec3Like, angleRadians: number): Quat {\n // Read q into locals first (aliasing-safe: rotateAxis(q, q, ...) is the common per-frame call).\n const qx = q[0] as number;\n const qy = q[1] as number;\n const qz = q[2] as number;\n const qw = q[3] as number;\n\n // Delta quaternion for `angleRadians` about `axis` (fromAxisAngle inline; 0-axis → identity, #8).\n const ax = axis[0] as number;\n const ay = axis[1] as number;\n const az = axis[2] as number;\n const axisLen = Math.sqrt(ax * ax + ay * ay + az * az);\n let dx = 0;\n let dy = 0;\n let dz = 0;\n let dw = 1;\n if (axisLen >= EPS_NORMALIZE) {\n const half = angleRadians * 0.5;\n const s = Math.sin(half) / axisLen;\n dx = ax * s;\n dy = ay * s;\n dz = az * s;\n dw = Math.cos(half);\n }\n\n // Pre-multiply: out = delta * q (world-space axis; matches Bevy Transform::rotate order).\n let rx = dw * qx + dx * qw + dy * qz - dz * qy;\n let ry = dw * qy - dx * qz + dy * qw + dz * qx;\n let rz = dw * qz + dx * qy - dy * qx + dz * qw;\n let rw = dw * qw - dx * qx - dy * qy - dz * qz;\n\n // Normalize to kill accumulation drift (the whole point of this helper).\n const len = Math.sqrt(rx * rx + ry * ry + rz * rz + rw * rw);\n if (len >= EPS_NORMALIZE) {\n const inv = 1 / len;\n rx *= inv;\n ry *= inv;\n rz *= inv;\n rw *= inv;\n }\n out[0] = rx;\n out[1] = ry;\n out[2] = rz;\n out[3] = rw;\n return out;\n}\n\n/**\n * out = spherical linear interpolation(a, b, t). Returns out.\n *\n * t is not clamped (extrapolation semantics matches vec.lerp).\n *\n * @degrade dot(a, b) < -EPS_SLERP_DOT_LIMIT (anti-parallel) → **negate b' = -b then slerp**\n * (D-P6; q and -q represent the same rotation; registry #10).\n * @degrade |dot(a, b)| > 1 - EPS_SLERP_DOT_LIMIT (endpoint coincidence or near-coincidence) →\n * falls back to nlerp (avoids acos blow-up; registry #11).\n *\n * @example\n * ```ts\n * quat.slerp(out, a, b, 0.5);\n * // Anti-parallel (dot ≈ -1): caller does not need to pre-process; the negation fall-back\n * // happens internally.\n * ```\n */\nexport function slerp(out: Quat, a: QuatLike, b: QuatLike, t: number): Quat {\n const ax = a[0] as number;\n const ay = a[1] as number;\n const az = a[2] as number;\n const aw = a[3] as number;\n let bx = b[0] as number;\n let by = b[1] as number;\n let bz = b[2] as number;\n let bw = b[3] as number;\n\n let cosTheta = ax * bx + ay * by + az * bz + aw * bw;\n\n // D-P6: anti-parallel → negate b then slerp (q and -q are the same rotation; shortest arc)\n if (cosTheta < 0) {\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n cosTheta = -cosTheta;\n }\n\n // Endpoint coincidence (|dot| → 1): nlerp fall-back avoids sin(0) division by zero\n if (cosTheta > 1 - EPS_SLERP_DOT_LIMIT) {\n return nlerp(out, a, b, t);\n }\n\n const theta = Math.acos(cosTheta);\n const sinTheta = Math.sin(theta);\n const wa = Math.sin((1 - t) * theta) / sinTheta;\n const wb = Math.sin(t * theta) / sinTheta;\n out[0] = wa * ax + wb * bx;\n out[1] = wa * ay + wb * by;\n out[2] = wa * az + wb * bz;\n out[3] = wa * aw + wb * bw;\n return out;\n}\n\n/**\n * out = normalized lerp(a, b, t). Returns out.\n *\n * Faster than slerp but the angular velocity is non-uniform; use it as a slerp substitute near endpoints.\n * Like slerp, automatically handles dot < 0 by negating b to keep the shortest arc.\n *\n * @degrade lerp result is near zero (very rare) → out = identity.\n *\n * @example\n * ```ts\n * quat.nlerp(out, qA, qB, 0.5);\n * // Very rare: lerp result lengthSq < EPS_NORMALIZE → out = (0, 0, 0, 1)\n * ```\n */\nexport function nlerp(out: Quat, a: QuatLike, b: QuatLike, t: number): Quat {\n const ax = a[0] as number;\n const ay = a[1] as number;\n const az = a[2] as number;\n const aw = a[3] as number;\n let bx = b[0] as number;\n let by = b[1] as number;\n let bz = b[2] as number;\n let bw = b[3] as number;\n\n // anti-parallel → negate b for the shortest arc (same convention as slerp)\n const cosTheta = ax * bx + ay * by + az * bz + aw * bw;\n if (cosTheta < 0) {\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n }\n\n out[0] = ax + t * (bx - ax);\n out[1] = ay + t * (by - ay);\n out[2] = az + t * (bz - az);\n out[3] = aw + t * (bw - aw);\n\n const lenSq =\n (out[0] as number) * (out[0] as number) +\n (out[1] as number) * (out[1] as number) +\n (out[2] as number) * (out[2] as number) +\n (out[3] as number) * (out[3] as number);\n if (lenSq < EPS_NORMALIZE) {\n return identity(out);\n }\n const inv = 1 / Math.sqrt(lenSq);\n out[0] = (out[0] as number) * inv;\n out[1] = (out[1] as number) * inv;\n out[2] = (out[2] as number) * inv;\n out[3] = (out[3] as number) * inv;\n return out;\n}\n\n/**\n * out = inverse of a (conjugate / lengthSq). Returns out.\n *\n * For unit quaternions, invert is equivalent to conjugate (and faster); this implementation uses\n * the general a/|a|² form to support non-unit inputs.\n *\n * @degrade lengthSq(a) < EPS_NORMALIZE (zero quaternion) → out = identity (does not return NaN;\n * same convention as mat invert).\n *\n * @example\n * ```ts\n * quat.invert(out, q);\n * quat.invert(out, quat.create(0, 0, 0, 0)); // → out = identity (0, 0, 0, 1), AC-06 no throw\n * ```\n */\nexport function invert(out: Quat, a: QuatLike): Quat {\n const ax = a[0] as number;\n const ay = a[1] as number;\n const az = a[2] as number;\n const aw = a[3] as number;\n const lenSq = ax * ax + ay * ay + az * az + aw * aw;\n if (lenSq < EPS_NORMALIZE) {\n return identity(out);\n }\n const inv = 1 / lenSq;\n out[0] = -ax * inv;\n out[1] = -ay * inv;\n out[2] = -az * inv;\n out[3] = aw * inv;\n return out;\n}\n\n/** out = conjugate quaternion [-x, -y, -z, w] (aliasing-safe). Returns out. */\nexport function conjugate(out: Quat, a: QuatLike): Quat {\n out[0] = -(a[0] as number);\n out[1] = -(a[1] as number);\n out[2] = -(a[2] as number);\n out[3] = a[3] as number;\n return out;\n}\n\n/** dot(a, b) = ax*bx + ay*by + az*bz + aw*bw (returns scalar). */\nexport function dot(a: QuatLike, b: QuatLike): number {\n return (\n (a[0] as number) * (b[0] as number) +\n (a[1] as number) * (b[1] as number) +\n (a[2] as number) * (b[2] as number) +\n (a[3] as number) * (b[3] as number)\n );\n}\n\n/** sqrt(x² + y² + z² + w²). Delegates to lengthSq + Math.sqrt (canonical pattern; see clone-5-quat-audit.md). */\nexport function length(a: QuatLike): number {\n return Math.sqrt(lengthSq(a));\n}\n\n/** x² + y² + z² + w² (no sqrt). */\nexport function lengthSq(a: QuatLike): number {\n return lengthSq4(a);\n}\n\n/**\n * out = q · v · q⁻¹ (rotate vec3 v by the unit quaternion q). Returns out.\n *\n * Rodrigues optimized form (research Finding 3, 18 mul + 12 add):\n * t = 2 · cross(q.xyz, v)\n * out = v + q.w · t + cross(q.xyz, t)\n *\n * 3-5× faster than going through mat4 (fromQuat → transformVec3); same shape as gl-matrix\n * `vec3.transformQuat` / Three.js `Vector3.applyQuaternion` (industry consensus).\n *\n * Aliasing-safe: reads v.xyz / q.xyzw into locals before writing out.\n *\n * @degrade q must be a unit-length quaternion. A non-unit q introduces implicit scaling\n * (D-4 silent convention; no throw; AI users always get unit-length q from\n * quat.fromAxisAngle / fromEuler / normalize / slerp, so this branch is not hit).\n * When q = (0,0,0,0), t = 0 → out = v (the natural result of the formula; matches\n * gl-matrix / Three.js; non-NaN, no throw).\n *\n * @example\n * ```ts\n * const q = quat.fromAxisAngle(quat.create(), [0, 1, 0], Math.PI / 2);\n * const out = vec3.create();\n * quat.transformVec3(out, q, [1, 0, 0]); // → out ≈ (0, 0, -1)\n * // Guard: q derived from the quat surface is always unit-length; callers do not need to normalize.\n * ```\n */\nexport function transformVec3(out: Vec3, q: QuatLike, v: Vec3Like): Vec3 {\n const qx = q[0] as number;\n const qy = q[1] as number;\n const qz = q[2] as number;\n const qw = q[3] as number;\n const vx = v[0] as number;\n const vy = v[1] as number;\n const vz = v[2] as number;\n // t = 2 * cross(q.xyz, v)\n const tx = 2 * (qy * vz - qz * vy);\n const ty = 2 * (qz * vx - qx * vz);\n const tz = 2 * (qx * vy - qy * vx);\n // out = v + q.w * t + cross(q.xyz, t)\n out[0] = vx + qw * tx + (qy * tz - qz * ty);\n out[1] = vy + qw * ty + (qz * tx - qx * tz);\n out[2] = vz + qw * tz + (qx * ty - qy * tx);\n return out;\n}\n\n/**\n * out = a / length(a). Returns out.\n *\n * @degrade lengthSq(a) < EPS_NORMALIZE → out = [0, 0, 0, 0] (same convention as vec.normalize;\n * does not write identity, preserving the \"zero quaternion\" semantics; if the caller\n * needs identity it should use fromAxisAngle with 0-axis).\n *\n * @example\n * ```ts\n * quat.normalize(out, q);\n * quat.normalize(out, quat.create(0, 0, 0, 0)); // → out = (0, 0, 0, 0); zero-quaternion semantics preserved\n * ```\n */\nexport function normalize(out: Quat, a: QuatLike): Quat {\n normalize4(out, a, EPS_NORMALIZE);\n return out;\n}\n\n/**\n * Convenience: quaternion representing rotation `theta` radians around the\n * Y axis. Equivalent to `quat.fromEuler(out, 0, theta, 0, 'YXZ')` but\n * allocates its own output `Quat`.\n *\n * Formula: `(0, sin(theta/2), 0, cos(theta/2))`.\n *\n * @degrade eulerY(0) → identity, eulerY(2pi) → identity within epsilon.\n *\n * @example\n * ```ts\n * const yaw45 = quat.eulerY(Math.PI / 4);\n * // yaw45 ≈ [0, 0.3826834, 0, 0.9238795]\n * ```\n *\n * @example Equivalent to the verbose form:\n * ```ts\n * const q1 = quat.eulerY(theta);\n * const q2 = quat.fromEuler(quat.create(), 0, theta, 0, 'YXZ');\n * // q1 === q2 (within epsilon)\n * ```\n */\nexport function eulerY(theta: number): Quat {\n const out = create();\n return fromEuler(out, 0, theta, 0, 'YXZ');\n}\n\n// ── Local basis accessors ─────────────────────────────────────────────────\n//\n// A rotation's three local basis vectors — the world-space directions its own\n// +X / +Y / −Z axes point after the rotation. They are exactly `q` applied to\n// the canonical axes: right = q·(1,0,0), up = q·(0,1,0), forward = q·(0,0,−1).\n//\n// The −Z forward convention matches `mat4.getForward` (RL-4) and the look\n// convention `fromLookAt` / `computeViewProj` use, so a camera/listener built\n// with `fromLookAt(eye, target)` has `forward(q)` ≈ normalize(target − eye).\n// These fold the transformVec3-with-a-magic-axis idiom (and the handedness a\n// caller would otherwise have to know) into a named accessor, mirroring the\n// mat4 getters so learning one basis form applies to both. Because `q` from the\n// quat surface is always unit-length, `transformVec3` returns a unit vector — no\n// separate normalize step (unlike the mat4 getters, which read possibly-scaled\n// basis columns and must normalize).\n\n/**\n * Local right axis: the world-space direction the rotation's own +X axis points.\n * `right(out, q) = quat.transformVec3(out, q, [1, 0, 0])`. Mirrors\n * `mat4.getRight`; matches Bevy `Transform::local_x` / `Transform::right`.\n *\n * @degrade q must be unit-length (guaranteed by the quat surface); a unit q\n * yields a unit result. q = (0,0,0,0) → out = (1,0,0) (the natural\n * transformVec3 result; non-NaN, no throw).\n *\n * @example\n * ```ts\n * const q = quat.eulerY(Math.PI / 2); // 90° about +Y\n * quat.right(vec3.create(), q); // → (0, 0, -1): +X yawed a quarter-turn\n * ```\n */\nexport function right(out: Vec3, q: QuatLike): Vec3 {\n return transformVec3(out, q, UNIT_X);\n}\n\n/**\n * Local up axis: the world-space direction the rotation's own +Y axis points.\n * `up(out, q) = quat.transformVec3(out, q, [0, 1, 0])`. Mirrors `mat4.getUp`;\n * matches Bevy `Transform::local_y` / `Transform::up`.\n *\n * @degrade q must be unit-length (guaranteed by the quat surface); a unit q\n * yields a unit result. q = (0,0,0,0) → out = (0,1,0).\n *\n * @example\n * ```ts\n * const q = quat.fromAxisAngle(quat.create(), [1, 0, 0], Math.PI / 2); // pitch 90°\n * quat.up(vec3.create(), q); // → (0, 0, 1): +Y pitched onto +Z\n * ```\n */\nexport function up(out: Vec3, q: QuatLike): Vec3 {\n return transformVec3(out, q, UNIT_Y);\n}\n\n/**\n * Local forward axis: the world-space direction the rotation's own −Z axis\n * points (−Z look convention, RL-4). `forward(out, q) =\n * quat.transformVec3(out, q, [0, 0, -1])`. Mirrors `mat4.getForward`; matches\n * Bevy `Transform::forward` (Bevy also uses −Z). A quat from `fromLookAt(eye,\n * target, up)` has `forward(q)` ≈ normalize(target − eye).\n *\n * @degrade q must be unit-length (guaranteed by the quat surface); a unit q\n * yields a unit result. q = (0,0,0,0) → out = (0,0,-1).\n *\n * @example\n * ```ts\n * const q = quat.eulerY(Math.PI / 2); // 90° about +Y\n * quat.forward(vec3.create(), q); // → (-1, 0, 0): -Z yawed a quarter-turn\n * ```\n */\nexport function forward(out: Vec3, q: QuatLike): Vec3 {\n return transformVec3(out, q, UNIT_NEG_Z);\n}\n","// _internal/epsilon.ts — EPS constant family SSOT (D-P14)\n//\n// Centralizes all numeric tolerances; prevents scattered hard-coded constants.\n// Not exported through src/index.ts (D-P13 _internal does not leave the package);\n// indirectly covered by the vec/mat/quat tests that consume it.\n//\n// Rationale:\n// - EPS_NORMALIZE: lengths below this are treated as zero vectors; normalize falls back to a zero\n// vector. 1e-12 follows the consensus of glam-rs and wgpu-matrix, avoiding single-precision\n// Float32 noise misjudgments.\n// - EPS_DET: threshold for declaring a determinant singular. 1e-8 leaves safe headroom over the\n// single-precision ULP near 1.0 (~1.19e-7) (research §Finding 4.2 ε-tolerance table).\n// - EPS_QUAT_PARALLEL: near-collinear input check for fromUnitVectors / slerp (D-P18).\n// - EPS_SLERP_DOT_LIMIT: slerp falls back to nlerp when |dot| ≥ 1-EPS, avoiding acos blowup (D-P6).\n//\n// Related: plan-strategy D-P14 EPS constants centralized; research §Finding 3 glam epsilon choice +\n// §Finding 4.2 ε-tolerance table.\n\n/** Vector lengths below this value are treated as zero (normalize fall-back). */\nexport const EPS_NORMALIZE = 1e-12;\n\n/** Matrix determinants below this value are treated as singular (invert falls back to identity, D-P1). */\nexport const EPS_DET = 1e-8;\n\n/** Threshold for treating two unit vectors as nearly collinear / opposite (fromUnitVectors / slerp inputs). */\nexport const EPS_QUAT_PARALLEL = 1e-6;\n\n/** In quat.slerp, |dot| above this value is treated as endpoint coincidence; falls back to nlerp (D-P6). */\nexport const EPS_SLERP_DOT_LIMIT = 1e-6;\n","// f32-to-f16-bytes.ts — IEEE 754 binary16 half-float conversion.\n//\n// Pure arithmetic codec extracted from runtime/render-resource-table.ts (D-3)\n// so build-time image-importer and runtime uploadCubemapFromEquirect share\n// a single SSOT. Takes a Uint8Array view over packed Float32 RGBA pixels\n// and returns a Uint8Array with half the byte length of the equivalent\n// binary16 interleaved pixels (little-endian).\n//\n// Out-of-range f32 values saturate to +/-inf, NaN propagates, and subnormals\n// round-to-zero (industry-standard f32->f16 path, semantic-preserving\n// extraction).\n//\n// Related: plan-strategy §2 D-3; research Finding 5 + C3; requirements C3;\n// w1 test file: packages/math/src/__tests__/f32-to-f16-bytes.test.ts.\n\n/**\n * Convert a packed float32 RGBA byte buffer into the equivalent float16 RGBA\n * byte buffer (IEEE 754 binary16, little-endian). The output length is\n * `src.byteLength / 2`.\n *\n * @param src A Uint8Array whose underlying buffer is an interleaved Float32Array.\n * @returns A Uint8Array of packed binary16 pixels, exactly half the length.\n */\nexport function f32ToF16Bytes(src: Uint8Array): Uint8Array {\n const f32 = new Float32Array(src.buffer, src.byteOffset, src.byteLength / 4);\n const out = new Uint8Array(f32.length * 2);\n const view = new DataView(out.buffer);\n const scratch = new ArrayBuffer(4);\n const scratchF = new Float32Array(scratch);\n const scratchU = new Uint32Array(scratch);\n for (let i = 0; i < f32.length; i++) {\n scratchF[0] = f32[i] ?? 0;\n const bits = scratchU[0] ?? 0;\n const sign = (bits >>> 31) & 0x1;\n const exp = (bits >>> 23) & 0xff;\n let mant = bits & 0x7fffff;\n let half: number;\n if (exp === 0xff) {\n half = (sign << 15) | 0x7c00 | (mant ? 0x200 : 0);\n } else if (exp === 0) {\n half = sign << 15;\n } else {\n const e = exp - 127 + 15;\n if (e >= 0x1f) {\n half = (sign << 15) | 0x7c00;\n } else if (e <= 0) {\n if (e < -10) {\n half = sign << 15;\n } else {\n mant = (mant | 0x800000) >> (1 - e);\n if (mant & 0x1000) mant += 0x2000;\n half = (sign << 15) | (mant >> 13);\n }\n } else {\n if (mant & 0x1000) {\n mant += 0x2000;\n if (mant & 0x800000) {\n mant = 0;\n half = (sign << 15) | ((e + 1) << 10);\n } else {\n half = (sign << 15) | (e << 10) | (mant >> 13);\n }\n } else {\n half = (sign << 15) | (e << 10) | (mant >> 13);\n }\n }\n }\n view.setUint16(i * 2, half & 0xffff, true);\n }\n return out;\n}\n","// frustum.ts — view-frustum plane extraction and intersection tests (M1 / w4).\n//\n// Frustum representation: Float32Array(24) — 6 planes × 4 floats (nx, ny, nz, d) each,\n// normalized. Plane equation: nx*x + ny*y + nz*z + d = 0, positive side = inside frustum.\n//\n// Planes are extracted from a combined view-projection matrix (column-major) by\n// combining rows per the Gribb/Hartmann method (Gribb/Hartmann 2001 \"Fast\n// Extraction of Viewing Frustum Planes from the World-View-Projection Matrix\").\n// Plane normalization is built into fromViewProjection internally (D-6).\n//\n// Surface: create / fromViewProjection / intersectsBox / intersectsSphere.\n//\n// Related: requirements §AC-01 (frustum function signatures + test coverage);\n// plan-strategy §D-6 (internal normalization).\n\nimport type { Box3Like } from './box3';\nimport type { Mat4Like, Vec3Like } from './types';\n\n/**\n * Frustum storage: Float32Array(24) — 6 planes × 4 floats each (nx, ny, nz, d).\n * Local brand (not part of the seven-piece SSOT; same rationale as Box3).\n */\nexport type Frustum = Float32Array & { readonly __frustum: void };\n\n/** Allocate a new Frustum (zero-initialized 6 planes). */\nexport function create(): Frustum {\n return new Float32Array(24) as Frustum;\n}\n\n/**\n * Extract 6 frustum planes (left, right, bottom, top, near, far) from a\n * combined view-projection matrix (column-major, right-handed).\n *\n * Uses Gribb/Hartmann method: each plane = sum or difference of VP rows,\n * then normalized so (nx, ny, nz) is a unit vector and d is the signed\n * distance from origin. Plane inside-half-space is nx*x + ny*y + nz*z + d > 0.\n *\n * Writes to `out` and returns it.\n *\n * @example\n * ```ts\n * const view = mat4.lookAt(mat4.create(), [0, 0, 5], [0, 0, 0], [0, 1, 0]);\n * const proj = mat4.perspective(mat4.create(), Math.PI / 2, 1, 0.1, 100);\n * const vp = mat4.create();\n * mat4.multiply(vp, proj, view);\n * const f = frustum.fromViewProjection(frustum.create(), vp);\n * ```\n */\nexport function fromViewProjection(out: Frustum, vp: Mat4Like): Frustum {\n const m0 = vp[0] as number;\n const m1 = vp[1] as number;\n const m2 = vp[2] as number;\n const m3 = vp[3] as number;\n const m4 = vp[4] as number;\n const m5 = vp[5] as number;\n const m6 = vp[6] as number;\n const m7 = vp[7] as number;\n const m8 = vp[8] as number;\n const m9 = vp[9] as number;\n const m10 = vp[10] as number;\n const m11 = vp[11] as number;\n const m12 = vp[12] as number;\n const m13 = vp[13] as number;\n const m14 = vp[14] as number;\n const m15 = vp[15] as number;\n\n // Left plane: row3 + row0\n let nx = m3 + m0,\n ny = m7 + m4,\n nz = m11 + m8,\n d = m15 + m12;\n let len = Math.sqrt(nx * nx + ny * ny + nz * nz);\n if (len > 0) {\n const il = 1 / len;\n nx *= il;\n ny *= il;\n nz *= il;\n d *= il;\n }\n out[0] = nx;\n out[1] = ny;\n out[2] = nz;\n out[3] = d;\n\n // Right plane: row3 - row0\n nx = m3 - m0;\n ny = m7 - m4;\n nz = m11 - m8;\n d = m15 - m12;\n len = Math.sqrt(nx * nx + ny * ny + nz * nz);\n if (len > 0) {\n const il = 1 / len;\n nx *= il;\n ny *= il;\n nz *= il;\n d *= il;\n }\n out[4] = nx;\n out[5] = ny;\n out[6] = nz;\n out[7] = d;\n\n // Bottom plane: row3 + row1\n nx = m3 + m1;\n ny = m7 + m5;\n nz = m11 + m9;\n d = m15 + m13;\n len = Math.sqrt(nx * nx + ny * ny + nz * nz);\n if (len > 0) {\n const il = 1 / len;\n nx *= il;\n ny *= il;\n nz *= il;\n d *= il;\n }\n out[8] = nx;\n out[9] = ny;\n out[10] = nz;\n out[11] = d;\n\n // Top plane: row3 - row1\n nx = m3 - m1;\n ny = m7 - m5;\n nz = m11 - m9;\n d = m15 - m13;\n len = Math.sqrt(nx * nx + ny * ny + nz * nz);\n if (len > 0) {\n const il = 1 / len;\n nx *= il;\n ny *= il;\n nz *= il;\n d *= il;\n }\n out[12] = nx;\n out[13] = ny;\n out[14] = nz;\n out[15] = d;\n\n // Near plane: row3 + row2\n nx = m3 + m2;\n ny = m7 + m6;\n nz = m11 + m10;\n d = m15 + m14;\n len = Math.sqrt(nx * nx + ny * ny + nz * nz);\n if (len > 0) {\n const il = 1 / len;\n nx *= il;\n ny *= il;\n nz *= il;\n d *= il;\n }\n out[16] = nx;\n out[17] = ny;\n out[18] = nz;\n out[19] = d;\n\n // Far plane: row3 - row2\n nx = m3 - m2;\n ny = m7 - m6;\n nz = m11 - m10;\n d = m15 - m14;\n len = Math.sqrt(nx * nx + ny * ny + nz * nz);\n if (len > 0) {\n const il = 1 / len;\n nx *= il;\n ny *= il;\n nz *= il;\n d *= il;\n }\n out[20] = nx;\n out[21] = ny;\n out[22] = nz;\n out[23] = d;\n\n return out;\n}\n\n/**\n * Test whether an AABB intersects the frustum. Conservative: returns `true` when\n * the box straddles a plane boundary, even if partially outside.\n *\n * For each plane, the signed distance of both the positive-most corner (p-vertex)\n * and negative-most corner (n-vertex) are tested. The box is outside only when\n * the p-vertex is on the negative side of any plane.\n */\nexport function intersectsBox(f: Frustum, box: Box3Like): boolean {\n const bx = box[0] as number;\n const by = box[1] as number;\n const bz = box[2] as number;\n const bX = box[3] as number;\n const bY = box[4] as number;\n const bZ = box[5] as number;\n\n // For each plane, compute the p-vertex (most positive along plane normal)\n // and test if it's on the negative side. If so, box is entirely outside.\n for (let i = 0; i < 6; i++) {\n const off = i * 4;\n const nx = f[off] as number;\n const ny = f[off + 1] as number;\n const nz = f[off + 2] as number;\n const d = f[off + 3] as number;\n\n // p-vertex: corner maximizing dot(normal, corner) = corner select via sign of normal\n const px = nx >= 0 ? bX : bx;\n const py = ny >= 0 ? bY : by;\n const pz = nz >= 0 ? bZ : bz;\n\n if (nx * px + ny * py + nz * pz + d < 0) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Test whether a sphere intersects the frustum. Conservative: returns `true`\n * when the sphere straddles a plane boundary.\n *\n * Computes signed distance from the sphere center to each plane;\n * outside when distance < -radius.\n */\nexport function intersectsSphere(f: Frustum, center: Vec3Like, radius: number): boolean {\n const cx = center[0] as number;\n const cy = center[1] as number;\n const cz = center[2] as number;\n\n for (let i = 0; i < 6; i++) {\n const off = i * 4;\n const nx = f[off] as number;\n const ny = f[off + 1] as number;\n const nz = f[off + 2] as number;\n const sd = f[off + 3] as number; // plane's d (signed distance from origin)\n\n const dist = nx * cx + ny * cy + nz * cz + sd;\n if (dist < -radius) {\n return false;\n }\n }\n return true;\n}\n","// mat3.ts — 3x3 matrix namespace (M3 / T-020)\n//\n// 10-function surface (≥ 10 lower bound):\n// create / clone / identity / equals / multiply / transpose / invert /\n// scale / fromMat4 / normalMatrix\n//\n// Memory layout lock (D-P4): 9 floats packed column-major; index mapping m[col*3 + row].\n// Primary use: CPU normal matrix (normalMatrix = transpose(invert(upper-left mat3 of mat4)));\n// callers that upload directly to a GPU UBO should pad to mat4 themselves\n// (see R4 + the reserved toGpuLayout hook).\n//\n// Degenerate convention (same as D-P1): invert(singular) → write identity into out, return out (does not return null).\n//\n// Four ironclad rules (gl-matrix wiki / research §F1):\n// 1. Out-param first (except for query functions, the first parameter = out, return out)\n// 2. Aliasing-safe (out may equal an input; read all source data into locals first)\n// 3. Module-as-namespace (pure functions; no class, no this)\n// 4. Float32Array by default (V8 elements-kinds consistency)\n//\n// Related: requirements §Surface mat3 lower bound 10 + AC-04 (normalMatrix);\n// plan-strategy D-P4 9-float lock + D-P1 invert writes identity;\n// wiki/gl-matrix-overview Out-param four ironclad rules;\n// wiki/typescript-branded-types §7.2 factory template.\n//\n// Degenerate-semantics registry (plan-strategy.md §appendix A; shares numbering #3 with mat4):\n// - mat3.invert(singular) → out = identity (same convention as D-P1)\n// - mat3.normalMatrix(singular) → out = identity (via the internal branch in mat3.invert)\n\nimport { EPS_DET } from './_internal/epsilon';\nimport type { Mat3, Mat3Like, Mat4Like, Vec3Like } from './types';\n\nexport type { Mat3, Mat3Like };\n\n/** Create a Mat3 (default all zero; callers usually call identity() right after). */\nexport function create(): Mat3 {\n return new Float32Array(9) as Mat3;\n}\n\n/** Allocate a new Mat3 copy. */\nexport function clone(a: Mat3Like): Mat3 {\n return Float32Array.of(\n a[0] as number,\n a[1] as number,\n a[2] as number,\n a[3] as number,\n a[4] as number,\n a[5] as number,\n a[6] as number,\n a[7] as number,\n a[8] as number,\n ) as Mat3;\n}\n\n/** out = 3x3 identity (column-major [1,0,0, 0,1,0, 0,0,1]). Returns out. */\nexport function identity(out: Mat3): Mat3 {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 1;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n}\n\n/** Approximate equality: each element differs by ≤ epsilon. NaN inputs always return false. */\nexport function equals(a: Mat3Like, b: Mat3Like, epsilon = 1e-6): boolean {\n for (let i = 0; i < 9; i++) {\n const av = a[i] as number;\n const bv = b[i] as number;\n if (Number.isNaN(av) || Number.isNaN(bv)) return false;\n if (Math.abs(av - bv) > epsilon) return false;\n }\n return true;\n}\n\n/**\n * out = a * b (column-major matrix multiply). Returns out.\n *\n * Aliasing-safe: out may equal a or b; reads all 18 source elements into locals first.\n */\nexport function multiply(out: Mat3, a: Mat3Like, b: Mat3Like): Mat3 {\n const a00 = a[0] as number;\n const a01 = a[1] as number;\n const a02 = a[2] as number;\n const a10 = a[3] as number;\n const a11 = a[4] as number;\n const a12 = a[5] as number;\n const a20 = a[6] as number;\n const a21 = a[7] as number;\n const a22 = a[8] as number;\n const b00 = b[0] as number;\n const b01 = b[1] as number;\n const b02 = b[2] as number;\n const b10 = b[3] as number;\n const b11 = b[4] as number;\n const b12 = b[5] as number;\n const b20 = b[6] as number;\n const b21 = b[7] as number;\n const b22 = b[8] as number;\n out[0] = a00 * b00 + a10 * b01 + a20 * b02;\n out[1] = a01 * b00 + a11 * b01 + a21 * b02;\n out[2] = a02 * b00 + a12 * b01 + a22 * b02;\n out[3] = a00 * b10 + a10 * b11 + a20 * b12;\n out[4] = a01 * b10 + a11 * b11 + a21 * b12;\n out[5] = a02 * b10 + a12 * b11 + a22 * b12;\n out[6] = a00 * b20 + a10 * b21 + a20 * b22;\n out[7] = a01 * b20 + a11 * b21 + a21 * b22;\n out[8] = a02 * b20 + a12 * b21 + a22 * b22;\n return out;\n}\n\n/**\n * out = transpose(a). Returns out.\n *\n * Aliasing-safe (transpose(m, m) is legal; reads the 6 off-diagonal elements into locals first).\n */\nexport function transpose(out: Mat3, a: Mat3Like): Mat3 {\n const a01 = a[1] as number;\n const a02 = a[2] as number;\n const a12 = a[5] as number;\n const a10 = a[3] as number;\n const a20 = a[6] as number;\n const a21 = a[7] as number;\n out[0] = a[0] as number;\n out[1] = a10;\n out[2] = a20;\n out[3] = a01;\n out[4] = a[4] as number;\n out[5] = a21;\n out[6] = a02;\n out[7] = a12;\n out[8] = a[8] as number;\n return out;\n}\n\n/**\n * out = invert(a). Returns out.\n *\n * @degrade a singular (|det| < EPS_DET) → out = identity (same convention as D-P1; does not return null).\n *\n * @example\n * ```ts\n * // Caller-side guard:\n * const det = mat3DetForGuard(m); // caller computes det to decide whether to invert\n * const inv = mat3.invert(mat3.create(), m);\n * // If m is singular, inv === identity (no NaN; safe to keep using).\n * ```\n */\nexport function invert(out: Mat3, a: Mat3Like): Mat3 {\n const a00 = a[0] as number;\n const a01 = a[1] as number;\n const a02 = a[2] as number;\n const a10 = a[3] as number;\n const a11 = a[4] as number;\n const a12 = a[5] as number;\n const a20 = a[6] as number;\n const a21 = a[7] as number;\n const a22 = a[8] as number;\n\n // cofactors (column-major → derive from row/col indices)\n const b01 = a22 * a11 - a12 * a21;\n const b11 = -a22 * a10 + a12 * a20;\n const b21 = a21 * a10 - a11 * a20;\n const det = a00 * b01 + a01 * b11 + a02 * b21;\n\n if (Math.abs(det) < EPS_DET) {\n return identity(out);\n }\n\n const invDet = 1 / det;\n out[0] = b01 * invDet;\n out[1] = (-a22 * a01 + a02 * a21) * invDet;\n out[2] = (a12 * a01 - a02 * a11) * invDet;\n out[3] = b11 * invDet;\n out[4] = (a22 * a00 - a02 * a20) * invDet;\n out[5] = (-a12 * a00 + a02 * a10) * invDet;\n out[6] = b21 * invDet;\n out[7] = (-a21 * a00 + a01 * a20) * invDet;\n out[8] = (a11 * a00 - a01 * a10) * invDet;\n return out;\n}\n\n/**\n * out = a * Scale(v) (per-column scale). Returns out.\n *\n * v takes the first 3 components (aligned with mat4.scale's vec3 input); mat3's third column is the z scale.\n */\nexport function scale(out: Mat3, a: Mat3Like, v: Vec3Like): Mat3 {\n const x = v[0] as number;\n const y = v[1] as number;\n const z = v[2] as number;\n out[0] = (a[0] as number) * x;\n out[1] = (a[1] as number) * x;\n out[2] = (a[2] as number) * x;\n out[3] = (a[3] as number) * y;\n out[4] = (a[4] as number) * y;\n out[5] = (a[5] as number) * y;\n out[6] = (a[6] as number) * z;\n out[7] = (a[7] as number) * z;\n out[8] = (a[8] as number) * z;\n return out;\n}\n\n/**\n * out = mat3 extracted from mat4's upper-left 3x3 (drop the 4th row and 4th column). Returns out.\n *\n * Column-major mapping: mat4 col0 [0..2] / col1 [4..6] / col2 [8..10] → mat3 col0/1/2.\n */\nexport function fromMat4(out: Mat3, m: Mat4Like): Mat3 {\n out[0] = m[0] as number;\n out[1] = m[1] as number;\n out[2] = m[2] as number;\n out[3] = m[4] as number;\n out[4] = m[5] as number;\n out[5] = m[6] as number;\n out[6] = m[8] as number;\n out[7] = m[9] as number;\n out[8] = m[10] as number;\n return out;\n}\n\n/**\n * out = transpose(invert(upper-left 3x3 of m)) (the normal-transform matrix). Returns out.\n *\n * Used to transform normals from model space to world / view space; when m has a non-uniform\n * scale, normals must use normalMatrix (the upper-left 3x3 of m alone is incorrect).\n *\n * Per-frame consumer: feat-20260518-pbr-direct-lighting-mvp M3 / w14 wires\n * `render-system-record.ts` to call this helper once per renderable per frame\n * (host-side computation; result lives in mesh SSBO `normalMatrix` slot at\n * byte offset 64 within each PER_ENTITY_STRIDE = 256 B slot, plan-strategy\n * D-5 + AC-08).\n *\n * @degrade upper-left 3x3 singular -> out = identity (same convention as D-P1, via mat3.invert).\n *\n * @example\n * ```ts\n * const N = mat3.normalMatrix(mat3.create(), modelViewMat);\n * // vertex shader: normal_view = N * normal_model\n * ```\n */\nexport function normalMatrix(out: Mat3, m: Mat4Like): Mat3 {\n // 1. extract the upper-left 3x3\n const m00 = m[0] as number;\n const m01 = m[1] as number;\n const m02 = m[2] as number;\n const m10 = m[4] as number;\n const m11 = m[5] as number;\n const m12 = m[6] as number;\n const m20 = m[8] as number;\n const m21 = m[9] as number;\n const m22 = m[10] as number;\n\n // 2. inline invert + transpose (combine the two steps; avoid a temporary allocation)\n const b01 = m22 * m11 - m12 * m21;\n const b11 = -m22 * m10 + m12 * m20;\n const b21 = m21 * m10 - m11 * m20;\n const det = m00 * b01 + m01 * b11 + m02 * b21;\n\n if (Math.abs(det) < EPS_DET) {\n return identity(out);\n }\n\n const invDet = 1 / det;\n // Elements of invert(upper-left), then transpose (swap rows/cols)\n // invert column-major:\n // inv[0]=b01*invDet inv[3]=b11*invDet inv[6]=b21*invDet\n // inv[1]=... inv[4]=... inv[7]=...\n // inv[2]=... inv[5]=... inv[8]=...\n // After transpose (i, j) = inv (j, i)\n // More directly: transposing the invert result = transpose(invert).\n // The transpose(invert) elements are written out below:\n out[0] = b01 * invDet;\n out[3] = (-m22 * m01 + m02 * m21) * invDet;\n out[6] = (m12 * m01 - m02 * m11) * invDet;\n out[1] = b11 * invDet;\n out[4] = (m22 * m00 - m02 * m20) * invDet;\n out[7] = (-m12 * m00 + m02 * m10) * invDet;\n out[2] = b21 * invDet;\n out[5] = (-m21 * m00 + m01 * m20) * invDet;\n out[8] = (m11 * m00 - m01 * m10) * invDet;\n return out;\n}\n","// mat4.ts — 4x4 matrix namespace (M3 / T-021 base + T-022 projection)\n//\n// Base functions (T-021): create / clone / identity / equals / multiply / transpose /\n// invert / scale / translate / rotate / lookAt / compose / decompose / fromQuat /\n// fromTranslation / fromScaling / fromRotation\n// Projection functions (T-022): perspective / perspectiveNO / perspectiveReverseZ /\n// orthographic / orthographicNO / orthographicReverseZ\n//\n// Surface: 23+ functions (≥ 22 lower bound).\n//\n// Memory layout: column-major 16 floats (compatible with WebGL/WebGPU shader uniforms);\n// index mapping m[col*4 + row]. translation lives in col 3 → indices 12, 13, 14.\n//\n// Naming convention (D-3):\n// - perspective / orthographic = WebGPU [0, 1] NDC (short names go to the primary target)\n// - perspectiveNO / orthographicNO = WebGL/OpenGL [-1, 1] NDC\n// - perspectiveReverseZ / orthographicReverseZ = reversed-Z (far→0, near→1)\n//\n// Degenerate convention:\n// - invert(singular) → out = identity (D-P1; returns out, not null)\n// - lookAt(eye=target) → out = identity (D-P17; same convention as D-P1)\n// - perspective(near>=far) / fovy<=0 / aspect<=0 → numerically undefined but does not throw\n//\n// Four ironclad rules (gl-matrix wiki / research §F1):\n// 1. Out-param first; 2. Aliasing-safe; 3. Module-as-namespace; 4. Float32Array by default.\n//\n// Related: requirements §Surface mat4 lower bound 22 + AC-04 three projection tiers complete +\n// AC-05 reversed-Z fixture + AC-06 never raises (silent degrade) + AC-08 invert returns out, not null;\n// plan-strategy §6 M3 + D-P1/D-P3/D-P17 + R-P1 aliasing-singular;\n// wiki/wgpu-matrix-overview.md / gl-matrix-overview.md / reversed-z-projection.md.\n//\n// Degenerate-semantics registry (plan-strategy.md §appendix A numbering; mat portion has 5 of the\n// AC-07 ≥ 8 hard lower-bound entries):\n// #3 mat4.invert(singular) → out = identity (D-P1)\n// #4 mat4.lookAt(eye=target) → out = identity (D-P17)\n// #5 mat4.lookAt(up // forward) → auto-select alternative up\n// #6 mat4.decompose(m with shear) → silent best-effort decomposition\n// #7 mat4.perspective(near>=far) etc. → numerically undefined but does not throw\n\nimport { EPS_DET, EPS_NORMALIZE } from './_internal/epsilon';\nimport type { Mat4, Mat4Like, Quat, QuatLike, Vec3, Vec3Like } from './types';\nimport * as vec3 from './vec3';\n\nexport type { Mat4, Mat4Like };\n\n/** Create a Mat4 (default all zero; callers usually call identity() right after). */\nexport function create(): Mat4 {\n return new Float32Array(16) as Mat4;\n}\n\n/** Allocate a new Mat4 copy. */\nexport function clone(a: Mat4Like): Mat4 {\n const r = new Float32Array(16) as Mat4;\n for (let i = 0; i < 16; i++) r[i] = a[i] as number;\n return r;\n}\n\n/** out = 4x4 identity. Returns out. */\nexport function identity(out: Mat4): Mat4 {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n\n/** Approximate equality: each element differs by ≤ epsilon. NaN inputs always return false. */\nexport function equals(a: Mat4Like, b: Mat4Like, epsilon = 1e-6): boolean {\n for (let i = 0; i < 16; i++) {\n const av = a[i] as number;\n const bv = b[i] as number;\n if (Number.isNaN(av) || Number.isNaN(bv)) return false;\n if (Math.abs(av - bv) > epsilon) return false;\n }\n return true;\n}\n\n/**\n * out = a * b (column-major matrix multiply). Returns out.\n *\n * Aliasing-safe: out may equal a or b; reads all 32 source elements into locals first.\n */\nexport function multiply(out: Mat4, a: Mat4Like, b: Mat4Like): Mat4 {\n const a00 = a[0] as number;\n const a01 = a[1] as number;\n const a02 = a[2] as number;\n const a03 = a[3] as number;\n const a10 = a[4] as number;\n const a11 = a[5] as number;\n const a12 = a[6] as number;\n const a13 = a[7] as number;\n const a20 = a[8] as number;\n const a21 = a[9] as number;\n const a22 = a[10] as number;\n const a23 = a[11] as number;\n const a30 = a[12] as number;\n const a31 = a[13] as number;\n const a32 = a[14] as number;\n const a33 = a[15] as number;\n const b00 = b[0] as number;\n const b01 = b[1] as number;\n const b02 = b[2] as number;\n const b03 = b[3] as number;\n const b10 = b[4] as number;\n const b11 = b[5] as number;\n const b12 = b[6] as number;\n const b13 = b[7] as number;\n const b20 = b[8] as number;\n const b21 = b[9] as number;\n const b22 = b[10] as number;\n const b23 = b[11] as number;\n const b30 = b[12] as number;\n const b31 = b[13] as number;\n const b32 = b[14] as number;\n const b33 = b[15] as number;\n out[0] = a00 * b00 + a10 * b01 + a20 * b02 + a30 * b03;\n out[1] = a01 * b00 + a11 * b01 + a21 * b02 + a31 * b03;\n out[2] = a02 * b00 + a12 * b01 + a22 * b02 + a32 * b03;\n out[3] = a03 * b00 + a13 * b01 + a23 * b02 + a33 * b03;\n out[4] = a00 * b10 + a10 * b11 + a20 * b12 + a30 * b13;\n out[5] = a01 * b10 + a11 * b11 + a21 * b12 + a31 * b13;\n out[6] = a02 * b10 + a12 * b11 + a22 * b12 + a32 * b13;\n out[7] = a03 * b10 + a13 * b11 + a23 * b12 + a33 * b13;\n out[8] = a00 * b20 + a10 * b21 + a20 * b22 + a30 * b23;\n out[9] = a01 * b20 + a11 * b21 + a21 * b22 + a31 * b23;\n out[10] = a02 * b20 + a12 * b21 + a22 * b22 + a32 * b23;\n out[11] = a03 * b20 + a13 * b21 + a23 * b22 + a33 * b23;\n out[12] = a00 * b30 + a10 * b31 + a20 * b32 + a30 * b33;\n out[13] = a01 * b30 + a11 * b31 + a21 * b32 + a31 * b33;\n out[14] = a02 * b30 + a12 * b31 + a22 * b32 + a32 * b33;\n out[15] = a03 * b30 + a13 * b31 + a23 * b32 + a33 * b33;\n return out;\n}\n\n/** out = transpose(a). Returns out. Aliasing-safe (transpose(m, m) is legal). */\nexport function transpose(out: Mat4, a: Mat4Like): Mat4 {\n const a01 = a[1] as number;\n const a02 = a[2] as number;\n const a03 = a[3] as number;\n const a12 = a[6] as number;\n const a13 = a[7] as number;\n const a23 = a[11] as number;\n const a10 = a[4] as number;\n const a20 = a[8] as number;\n const a30 = a[12] as number;\n const a21 = a[9] as number;\n const a31 = a[13] as number;\n const a32 = a[14] as number;\n out[0] = a[0] as number;\n out[1] = a10;\n out[2] = a20;\n out[3] = a30;\n out[4] = a01;\n out[5] = a[5] as number;\n out[6] = a21;\n out[7] = a31;\n out[8] = a02;\n out[9] = a12;\n out[10] = a[10] as number;\n out[11] = a32;\n out[12] = a03;\n out[13] = a13;\n out[14] = a23;\n out[15] = a[15] as number;\n return out;\n}\n\n/**\n * out = invert(a). Returns out.\n *\n * @degrade a singular (|det| < EPS_DET) → out = identity (D-P1; AC-08: returns out, not null).\n * @degrade aliasing invert(out, out) where out is singular → reads 16 elements into locals before\n * falling back; R-P1 pins the behavior so that out is overwritten with identity.\n *\n * @example\n * ```ts\n * import { mat4 } from '@forgeax/engine-math';\n *\n * const inv = mat4.invert(mat4.create(), m);\n * // If m is singular, inv === identity (no NaN, no null); callers may keep using it.\n * // For explicit diagnostics, the caller builds its own guard (the library never console.warns):\n * // const EPS = 1e-12;\n * // if (mat4.equals(inv, mat4.identity(mat4.create()))) console.warn('mat4.invert: singular input');\n * ```\n */\nexport function invert(out: Mat4, a: Mat4Like): Mat4 {\n const a00 = a[0] as number;\n const a01 = a[1] as number;\n const a02 = a[2] as number;\n const a03 = a[3] as number;\n const a10 = a[4] as number;\n const a11 = a[5] as number;\n const a12 = a[6] as number;\n const a13 = a[7] as number;\n const a20 = a[8] as number;\n const a21 = a[9] as number;\n const a22 = a[10] as number;\n const a23 = a[11] as number;\n const a30 = a[12] as number;\n const a31 = a[13] as number;\n const a32 = a[14] as number;\n const a33 = a[15] as number;\n\n const b00 = a00 * a11 - a01 * a10;\n const b01 = a00 * a12 - a02 * a10;\n const b02 = a00 * a13 - a03 * a10;\n const b03 = a01 * a12 - a02 * a11;\n const b04 = a01 * a13 - a03 * a11;\n const b05 = a02 * a13 - a03 * a12;\n const b06 = a20 * a31 - a21 * a30;\n const b07 = a20 * a32 - a22 * a30;\n const b08 = a20 * a33 - a23 * a30;\n const b09 = a21 * a32 - a22 * a31;\n const b10 = a21 * a33 - a23 * a31;\n const b11 = a22 * a33 - a23 * a32;\n\n const det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (Math.abs(det) < EPS_DET) {\n return identity(out);\n }\n\n const invDet = 1 / det;\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * invDet;\n out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * invDet;\n out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * invDet;\n out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * invDet;\n out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * invDet;\n out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * invDet;\n out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * invDet;\n out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * invDet;\n out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * invDet;\n out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * invDet;\n out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * invDet;\n out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * invDet;\n out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * invDet;\n out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * invDet;\n out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * invDet;\n out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * invDet;\n return out;\n}\n\n/**\n * out = a * Scale(v). Returns out. Aliasing-safe (reads the source diagonal columns into locals first).\n */\nexport function scale(out: Mat4, a: Mat4Like, v: Vec3Like): Mat4 {\n const x = v[0] as number;\n const y = v[1] as number;\n const z = v[2] as number;\n out[0] = (a[0] as number) * x;\n out[1] = (a[1] as number) * x;\n out[2] = (a[2] as number) * x;\n out[3] = (a[3] as number) * x;\n out[4] = (a[4] as number) * y;\n out[5] = (a[5] as number) * y;\n out[6] = (a[6] as number) * y;\n out[7] = (a[7] as number) * y;\n out[8] = (a[8] as number) * z;\n out[9] = (a[9] as number) * z;\n out[10] = (a[10] as number) * z;\n out[11] = (a[11] as number) * z;\n out[12] = a[12] as number;\n out[13] = a[13] as number;\n out[14] = a[14] as number;\n out[15] = a[15] as number;\n return out;\n}\n\n/**\n * out = a * Translate(v) (translate by v in a's local coordinates). Returns out. Aliasing-safe.\n */\nexport function translate(out: Mat4, a: Mat4Like, v: Vec3Like): Mat4 {\n const x = v[0] as number;\n const y = v[1] as number;\n const z = v[2] as number;\n if (a === out) {\n out[12] =\n (a[0] as number) * x + (a[4] as number) * y + (a[8] as number) * z + (a[12] as number);\n out[13] =\n (a[1] as number) * x + (a[5] as number) * y + (a[9] as number) * z + (a[13] as number);\n out[14] =\n (a[2] as number) * x + (a[6] as number) * y + (a[10] as number) * z + (a[14] as number);\n out[15] =\n (a[3] as number) * x + (a[7] as number) * y + (a[11] as number) * z + (a[15] as number);\n return out;\n }\n const a00 = a[0] as number;\n const a01 = a[1] as number;\n const a02 = a[2] as number;\n const a03 = a[3] as number;\n const a10 = a[4] as number;\n const a11 = a[5] as number;\n const a12 = a[6] as number;\n const a13 = a[7] as number;\n const a20 = a[8] as number;\n const a21 = a[9] as number;\n const a22 = a[10] as number;\n const a23 = a[11] as number;\n out[0] = a00;\n out[1] = a01;\n out[2] = a02;\n out[3] = a03;\n out[4] = a10;\n out[5] = a11;\n out[6] = a12;\n out[7] = a13;\n out[8] = a20;\n out[9] = a21;\n out[10] = a22;\n out[11] = a23;\n out[12] = a00 * x + a10 * y + a20 * z + (a[12] as number);\n out[13] = a01 * x + a11 * y + a21 * z + (a[13] as number);\n out[14] = a02 * x + a12 * y + a22 * z + (a[14] as number);\n out[15] = a03 * x + a13 * y + a23 * z + (a[15] as number);\n return out;\n}\n\n/**\n * out = a * Rotate(axis, rad) (build the rotation via the Rodrigues formula then right-multiply a).\n * Returns out.\n *\n * @degrade axis is the zero vector (lengthSq < EPS_NORMALIZE) → out = a (no rotation; identity behavior).\n *\n * @example\n * ```ts\n * mat4.rotate(out, mat4.identity(mat4.create()), [0, 1, 0], Math.PI / 2);\n * // Guard: if (vec3.lengthSq(axis) < EPS_NORMALIZE) skip;\n * ```\n */\nexport function rotate(out: Mat4, a: Mat4Like, axis: Vec3Like, rad: number): Mat4 {\n let x = axis[0] as number;\n let y = axis[1] as number;\n let z = axis[2] as number;\n const lenSq = x * x + y * y + z * z;\n if (lenSq < EPS_NORMALIZE) {\n // zero-axis degenerate: copy a to out (no rotation)\n if (out !== a) {\n for (let i = 0; i < 16; i++) out[i] = a[i] as number;\n }\n return out;\n }\n const invLen = 1 / Math.sqrt(lenSq);\n x *= invLen;\n y *= invLen;\n z *= invLen;\n const s = Math.sin(rad);\n const c = Math.cos(rad);\n const t = 1 - c;\n\n // rotation matrix R column-major (3x3 embedded into the upper-left of 4x4)\n const r00 = x * x * t + c;\n const r01 = y * x * t + z * s;\n const r02 = z * x * t - y * s;\n const r10 = x * y * t - z * s;\n const r11 = y * y * t + c;\n const r12 = z * y * t + x * s;\n const r20 = x * z * t + y * s;\n const r21 = y * z * t - x * s;\n const r22 = z * z * t + c;\n\n // out = a * R (read a then write out; aliasing-safe)\n const a00 = a[0] as number;\n const a01 = a[1] as number;\n const a02 = a[2] as number;\n const a03 = a[3] as number;\n const a10 = a[4] as number;\n const a11 = a[5] as number;\n const a12 = a[6] as number;\n const a13 = a[7] as number;\n const a20 = a[8] as number;\n const a21 = a[9] as number;\n const a22 = a[10] as number;\n const a23 = a[11] as number;\n\n out[0] = a00 * r00 + a10 * r01 + a20 * r02;\n out[1] = a01 * r00 + a11 * r01 + a21 * r02;\n out[2] = a02 * r00 + a12 * r01 + a22 * r02;\n out[3] = a03 * r00 + a13 * r01 + a23 * r02;\n out[4] = a00 * r10 + a10 * r11 + a20 * r12;\n out[5] = a01 * r10 + a11 * r11 + a21 * r12;\n out[6] = a02 * r10 + a12 * r11 + a22 * r12;\n out[7] = a03 * r10 + a13 * r11 + a23 * r12;\n out[8] = a00 * r20 + a10 * r21 + a20 * r22;\n out[9] = a01 * r20 + a11 * r21 + a21 * r22;\n out[10] = a02 * r20 + a12 * r21 + a22 * r22;\n out[11] = a03 * r20 + a13 * r21 + a23 * r22;\n out[12] = a[12] as number;\n out[13] = a[13] as number;\n out[14] = a[14] as number;\n out[15] = a[15] as number;\n return out;\n}\n\n/**\n * out = view matrix lookAt(eye, target, up) (right-handed; camera looks toward -z at target).\n * Returns out.\n *\n * @degrade eye === target (distanceSq < EPS_NORMALIZE) → out = identity (D-P17, same convention as D-P1).\n * @degrade up collinear with the view direction (cross degenerate) → auto-select an alternative up\n * (first (0,0,1), then (0,1,0)).\n *\n * @example\n * ```ts\n * mat4.lookAt(out, [0, 0, 5], [0, 0, 0], [0, 1, 0]);\n * // Guard: if (vec3.distanceSq(eye, target) < EPS_NORMALIZE) skip;\n * ```\n */\nexport function lookAt(out: Mat4, eye: Vec3Like, target: Vec3Like, up: Vec3Like): Mat4 {\n const ex = eye[0] as number;\n const ey = eye[1] as number;\n const ez = eye[2] as number;\n const tx = target[0] as number;\n const ty = target[1] as number;\n const tz = target[2] as number;\n const upx = up[0] as number;\n const upy = up[1] as number;\n const upz = up[2] as number;\n\n // forward = normalize(eye - target) (right-handed: camera looks toward -z, so the z axis = eye - target)\n let fx = ex - tx;\n let fy = ey - ty;\n let fz = ez - tz;\n const fLenSq = fx * fx + fy * fy + fz * fz;\n if (fLenSq < EPS_NORMALIZE) {\n return identity(out);\n }\n const fInv = 1 / Math.sqrt(fLenSq);\n fx *= fInv;\n fy *= fInv;\n fz *= fInv;\n\n // right = normalize(cross(up, forward))\n let rx = upy * fz - upz * fy;\n let ry = upz * fx - upx * fz;\n let rz = upx * fy - upy * fx;\n let rLenSq = rx * rx + ry * ry + rz * rz;\n if (rLenSq < EPS_NORMALIZE) {\n // up collinear with forward: pick alternative up = (0, 0, 1); if still collinear pick (0, 1, 0)\n rx = 0 * fz - 1 * fy;\n ry = 1 * fx - 0 * fz;\n rz = 0 * fy - 0 * fx;\n rLenSq = rx * rx + ry * ry + rz * rz;\n if (rLenSq < EPS_NORMALIZE) {\n rx = 0 * fz - 0 * fy;\n ry = 0 * fx - 1 * fz;\n rz = 1 * fy - 0 * fx;\n rLenSq = rx * rx + ry * ry + rz * rz;\n }\n }\n const rInv = 1 / Math.sqrt(rLenSq);\n rx *= rInv;\n ry *= rInv;\n rz *= rInv;\n\n // newUp = cross(forward, right)\n const ux = fy * rz - fz * ry;\n const uy = fz * rx - fx * rz;\n const uz = fx * ry - fy * rx;\n\n // column-major: col0 = right, col1 = newUp, col2 = forward, col3 = -view * eye\n out[0] = rx;\n out[1] = ux;\n out[2] = fx;\n out[3] = 0;\n out[4] = ry;\n out[5] = uy;\n out[6] = fy;\n out[7] = 0;\n out[8] = rz;\n out[9] = uz;\n out[10] = fz;\n out[11] = 0;\n out[12] = -(rx * ex + ry * ey + rz * ez);\n out[13] = -(ux * ex + uy * ey + uz * ez);\n out[14] = -(fx * ex + fy * ey + fz * ez);\n out[15] = 1;\n return out;\n}\n\n/**\n * out = T(translation) * R(rotation) * S(scale) (TRS affine composition). Returns out.\n */\nexport function compose(out: Mat4, t: Vec3Like, r: QuatLike, s: Vec3Like): Mat4 {\n // build R (from quat) first, then scale each column, finally write translation\n const x = r[0] as number;\n const y = r[1] as number;\n const z = r[2] as number;\n const w = r[3] as number;\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n const xx = x * x2;\n const xy = x * y2;\n const xz = x * z2;\n const yy = y * y2;\n const yz = y * z2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n const sx = s[0] as number;\n const sy = s[1] as number;\n const sz = s[2] as number;\n\n out[0] = (1 - (yy + zz)) * sx;\n out[1] = (xy + wz) * sx;\n out[2] = (xz - wy) * sx;\n out[3] = 0;\n out[4] = (xy - wz) * sy;\n out[5] = (1 - (xx + zz)) * sy;\n out[6] = (yz + wx) * sy;\n out[7] = 0;\n out[8] = (xz + wy) * sz;\n out[9] = (yz - wx) * sz;\n out[10] = (1 - (xx + yy)) * sz;\n out[11] = 0;\n out[12] = t[0] as number;\n out[13] = t[1] as number;\n out[14] = t[2] as number;\n out[15] = 1;\n return out;\n}\n\n/**\n * Decompose m into (translation, rotation quat, scale).\n *\n * @degrade m contains shear (non-pure affine) → silent best-effort decomposition (matches\n * Three.js behavior; does not throw).\n *\n * @example\n * ```ts\n * const t = vec3.create(); const r = quat.create(); const s = vec3.create();\n * mat4.decompose(t, r, s, m);\n * // Guard: callers should avoid introducing shear matrices at the ECS-design layer.\n * ```\n */\nexport function decompose(out_t: Vec3, out_r: Quat, out_s: Vec3, m: Mat4Like): void {\n // translation\n out_t[0] = m[12] as number;\n out_t[1] = m[13] as number;\n out_t[2] = m[14] as number;\n\n // length of each column = scale\n const sx = Math.hypot(m[0] as number, m[1] as number, m[2] as number);\n const sy = Math.hypot(m[4] as number, m[5] as number, m[6] as number);\n const sz = Math.hypot(m[8] as number, m[9] as number, m[10] as number);\n\n // handle the determinant sign: negative det → flip sx\n // simplified det check: use the upper-left 3x3 determinant\n const det =\n (m[0] as number) *\n ((m[5] as number) * (m[10] as number) - (m[6] as number) * (m[9] as number)) -\n (m[1] as number) *\n ((m[4] as number) * (m[10] as number) - (m[6] as number) * (m[8] as number)) +\n (m[2] as number) * ((m[4] as number) * (m[9] as number) - (m[5] as number) * (m[8] as number));\n const sxFinal = det < 0 ? -sx : sx;\n\n out_s[0] = sxFinal;\n out_s[1] = sy;\n out_s[2] = sz;\n\n // extract rotation: divide each column of m's upper-left 3x3 by scale to get the pure rotation matrix → convert to quat\n const invSx = sxFinal === 0 ? 0 : 1 / sxFinal;\n const invSy = sy === 0 ? 0 : 1 / sy;\n const invSz = sz === 0 ? 0 : 1 / sz;\n const r00 = (m[0] as number) * invSx;\n const r01 = (m[1] as number) * invSx;\n const r02 = (m[2] as number) * invSx;\n const r10 = (m[4] as number) * invSy;\n const r11 = (m[5] as number) * invSy;\n const r12 = (m[6] as number) * invSy;\n const r20 = (m[8] as number) * invSz;\n const r21 = (m[9] as number) * invSz;\n const r22 = (m[10] as number) * invSz;\n\n // rotation matrix → quat (Shoemake's method; case-split on the sign of trace)\n const trace = r00 + r11 + r22;\n if (trace > 0) {\n const s = 0.5 / Math.sqrt(trace + 1);\n out_r[0] = (r12 - r21) * s;\n out_r[1] = (r20 - r02) * s;\n out_r[2] = (r01 - r10) * s;\n out_r[3] = 0.25 / s;\n } else if (r00 > r11 && r00 > r22) {\n const s = 2 * Math.sqrt(1 + r00 - r11 - r22);\n out_r[0] = 0.25 * s;\n out_r[1] = (r10 + r01) / s;\n out_r[2] = (r20 + r02) / s;\n out_r[3] = (r12 - r21) / s;\n } else if (r11 > r22) {\n const s = 2 * Math.sqrt(1 + r11 - r00 - r22);\n out_r[0] = (r10 + r01) / s;\n out_r[1] = 0.25 * s;\n out_r[2] = (r21 + r12) / s;\n out_r[3] = (r20 - r02) / s;\n } else {\n const s = 2 * Math.sqrt(1 + r22 - r00 - r11);\n out_r[0] = (r20 + r02) / s;\n out_r[1] = (r21 + r12) / s;\n out_r[2] = 0.25 * s;\n out_r[3] = (r01 - r10) / s;\n }\n}\n\n/** out = 4x4 rotation matrix from quaternion (no translation, no scale). Returns out. */\nexport function fromQuat(out: Mat4, q: QuatLike): Mat4 {\n const x = q[0] as number;\n const y = q[1] as number;\n const z = q[2] as number;\n const w = q[3] as number;\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n const xx = x * x2;\n const xy = x * y2;\n const xz = x * z2;\n const yy = y * y2;\n const yz = y * z2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n out[0] = 1 - (yy + zz);\n out[1] = xy + wz;\n out[2] = xz - wy;\n out[3] = 0;\n out[4] = xy - wz;\n out[5] = 1 - (xx + zz);\n out[6] = yz + wx;\n out[7] = 0;\n out[8] = xz + wy;\n out[9] = yz - wx;\n out[10] = 1 - (xx + yy);\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n\n/** out = pure translation matrix (translation added to identity). Returns out. */\nexport function fromTranslation(out: Mat4, v: Vec3Like): Mat4 {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = v[0] as number;\n out[13] = v[1] as number;\n out[14] = v[2] as number;\n out[15] = 1;\n return out;\n}\n\n/** out = pure scaling matrix diag(v.x, v.y, v.z, 1). Returns out. */\nexport function fromScaling(out: Mat4, v: Vec3Like): Mat4 {\n out[0] = v[0] as number;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = v[1] as number;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = v[2] as number;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n\n/**\n * out = pure rotation matrix from axis-angle. Returns out.\n *\n * @degrade axis is the zero vector → out = identity (same convention as rotate).\n *\n * @example\n * ```ts\n * mat4.fromRotation(out, [0, 1, 0], Math.PI / 2);\n * mat4.fromRotation(out, [0, 0, 0], 1); // → identity (zero-axis degenerate, AC-06 no throw)\n * ```\n */\nexport function fromRotation(out: Mat4, axis: Vec3Like, rad: number): Mat4 {\n let x = axis[0] as number;\n let y = axis[1] as number;\n let z = axis[2] as number;\n const lenSq = x * x + y * y + z * z;\n if (lenSq < EPS_NORMALIZE) {\n return identity(out);\n }\n const invLen = 1 / Math.sqrt(lenSq);\n x *= invLen;\n y *= invLen;\n z *= invLen;\n const s = Math.sin(rad);\n const c = Math.cos(rad);\n const t = 1 - c;\n out[0] = x * x * t + c;\n out[1] = y * x * t + z * s;\n out[2] = z * x * t - y * s;\n out[3] = 0;\n out[4] = x * y * t - z * s;\n out[5] = y * y * t + c;\n out[6] = z * y * t + x * s;\n out[7] = 0;\n out[8] = x * z * t + y * s;\n out[9] = y * z * t - x * s;\n out[10] = z * z * t + c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n\n// ============================================================\n// Projection family (T-022) — three perspective tiers + three orthographic tiers\n// ============================================================\n//\n// Naming convention (D-3 + wiki/wgpu-matrix-overview / wiki/gl-matrix-overview):\n// `perspective` / `orthographic` = WebGPU [0, 1] NDC (short names borrowed from wgpu-matrix)\n// `perspectiveNO` / `orthographicNO` = WebGL/OpenGL [-1, 1] NDC (NO=Negative-One, borrowed from gl-matrix)\n// `perspectiveReverseZ` / `orthographicReverseZ` = reversed-Z (far→0, near→1; covers finite + infinite)\n//\n// AC-04 three projection tiers complete + AC-05 reversed-Z numeric fixture (error ≤ 1e-5)\n// + AC-06 never raises (silent degrade).\n// reversed-Z numeric correctness: see wiki/reversed-z-projection.md §7.2 / §7.3 / §7.4.\n\n/**\n * out = perspective projection (**WebGPU [0, 1] NDC** short name, D-3). Returns out.\n *\n * Right-handed; z_eye negative values lie in the frustum; near → ndc_z=0, far → ndc_z=1.\n * Naming borrowed from wgpu-matrix (short name for WebGPU), unlike gl-matrix (short name for WebGL).\n * Supports both finite far and infinite far (far=Infinity, aligned with wgpu-matrix\n * `m[10]=-1, m[14]=-near`).\n *\n * @degrade near >= far or fovy <= 0 or aspect <= 0 → numerically undefined but does not throw\n * (plan §appendix A #7).\n *\n * @example\n * ```ts\n * mat4.perspective(out, Math.PI / 4, canvas.width / canvas.height, 0.1, 1000);\n * mat4.perspective(out, Math.PI / 4, aspect, 0.1, Infinity); // infinite-far trick\n * // Guard: if (!(near < far && fovy > 0 && aspect > 0)) handleInvalid();\n * ```\n */\nexport function perspective(\n out: Mat4,\n fovYRadians: number,\n aspect: number,\n near: number,\n far: number,\n): Mat4 {\n const f = 1 / Math.tan(fovYRadians / 2);\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[15] = 0;\n\n if (far === Number.POSITIVE_INFINITY) {\n // infinite-far trick (aligned with wgpu-matrix): m[10]=-1, m[14]=-near\n out[10] = -1;\n out[14] = -near;\n } else {\n const nf = 1 / (near - far);\n out[10] = far * nf;\n out[14] = far * near * nf;\n }\n return out;\n}\n\n/**\n * out = perspective projection (**WebGL/OpenGL [-1, 1] NDC**; *NO* = Negative-One, borrowed from gl-matrix).\n *\n * Right-handed, near → ndc_z=-1, far → ndc_z=+1.\n *\n * @degrade Same as perspective.\n *\n * @example\n * ```ts\n * mat4.perspectiveNO(out, Math.PI / 4, canvas.width / canvas.height, 0.1, 1000);\n * mat4.perspectiveNO(out, Math.PI / 4, aspect, 0.1, Infinity); // infinite-far\n * // Guard: if (!(near < far && fovy > 0 && aspect > 0)) handleInvalid();\n * ```\n */\nexport function perspectiveNO(\n out: Mat4,\n fovYRadians: number,\n aspect: number,\n near: number,\n far: number,\n): Mat4 {\n const f = 1 / Math.tan(fovYRadians / 2);\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[15] = 0;\n\n if (far === Number.POSITIVE_INFINITY) {\n out[10] = -1;\n out[14] = -2 * near;\n } else {\n const nf = 1 / (near - far);\n out[10] = (far + near) * nf;\n out[14] = 2 * far * near * nf;\n }\n return out;\n}\n\n/**\n * out = reversed-Z perspective projection (**WebGPU [0, 1] NDC, near→1 far→0**). Returns out.\n *\n * Precision gain: matches the float dense region ([0, 0.01]) to the slowly-varying far end of 1/z.\n * Under the standard test conditions `near=0.1, far=10000`, NVIDIA reports a reversed-Z + float32\n * depth error rate of 0% (vs. high error rate for the standard mapping). See\n * `.forgeax-harness/knowledge-base/wiki/reversed-z-projection.md` §5.\n *\n * GPU-side companion switches (5 places must be flipped together):\n * 1. depthCompare: 'greater' (vs 'less')\n * 2. depthClearValue: 0.0 (vs 1.0)\n * 3. depth format: 'depth32float' (mandatory; fixed-point loses most of the gain)\n * 4. depth bias: inverted (avoid worsening z-fighting)\n * 5. multiple passes must share the reversed-Z convention\n *\n * Supports finite and infinite far (from wiki §3.3 / §4.2 derivations):\n * - finite: m[10]=near/(far-near), m[14]=near*far/(far-near)\n * - infinite (far=Infinity): m[10]=0, m[14]=near (lim f→∞ limit values)\n *\n * Numeric fixture (AC-05 error ≤ 1e-5): see __tests__/_fixtures.ts.\n *\n * @degrade Same as perspective.\n *\n * @example\n * ```ts\n * mat4.perspectiveReverseZ(out, Math.PI / 4, aspect, 0.1, 100);\n * mat4.perspectiveReverseZ(out, Math.PI / 4, aspect, 0.1, Infinity); // infinite far\n * // GPU companion: pipeline.depthCompare = 'greater'; passDesc.depthClearValue = 0.0;\n * ```\n */\nexport function perspectiveReverseZ(\n out: Mat4,\n fovYRadians: number,\n aspect: number,\n near: number,\n far: number,\n): Mat4 {\n const f = 1 / Math.tan(fovYRadians / 2);\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[15] = 0;\n\n if (far === Number.POSITIVE_INFINITY) {\n out[10] = 0;\n out[14] = near;\n } else {\n const fn = 1 / (far - near);\n out[10] = near * fn;\n out[14] = near * far * fn;\n }\n return out;\n}\n\n/**\n * out = orthographic projection (**WebGPU [0, 1] NDC** short name, D-3). Returns out.\n *\n * @degrade near >= far or left >= right or bottom >= top → numerically undefined but does not throw.\n *\n * @example\n * ```ts\n * mat4.orthographic(out, -10, 10, -10, 10, 0.1, 100);\n * // Guard: if (!(left < right && bottom < top && near < far)) handleInvalid();\n * ```\n */\nexport function orthographic(\n out: Mat4,\n left: number,\n right: number,\n bottom: number,\n top: number,\n near: number,\n far: number,\n): Mat4 {\n const lr = 1 / (left - right);\n const bt = 1 / (bottom - top);\n const nf = 1 / (near - far);\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = nf; // [0,1] NDC: near→0, far→1 → m[10] = 1/(near-far), m[14] = near/(near-far)\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = near * nf;\n out[15] = 1;\n return out;\n}\n\n/** out = orthographic projection (**WebGL/OpenGL [-1, 1] NDC**, *NO*). Returns out. */\nexport function orthographicNO(\n out: Mat4,\n left: number,\n right: number,\n bottom: number,\n top: number,\n near: number,\n far: number,\n): Mat4 {\n const lr = 1 / (left - right);\n const bt = 1 / (bottom - top);\n const nf = 1 / (near - far);\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 2 * nf; // [-1,1] NDC: near→-1, far→1\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = (near + far) * nf;\n out[15] = 1;\n return out;\n}\n\n/**\n * out = reversed-Z orthographic projection (**WebGPU [0, 1] NDC, near→1 far→0**;\n * D-P3 self-extension).\n *\n * Pairs with perspectiveReverseZ to form a symmetric three-tier surface; in orthographic\n * projection the reversed-Z precision gain is small (ortho is linear in z), but it is kept to\n * avoid LLM single-pass-scan cognitive load (charter proposition 1).\n * Note: this function is an @forgeax/engine-math self-extension; wgpu-matrix / gl-matrix have no matching\n * name (see plan-strategy D-P3 + README quick-ref table footnote).\n */\nexport function orthographicReverseZ(\n out: Mat4,\n left: number,\n right: number,\n bottom: number,\n top: number,\n near: number,\n far: number,\n): Mat4 {\n const lr = 1 / (left - right);\n const bt = 1 / (bottom - top);\n const fn = 1 / (far - near); // reversed-Z [0,1]: near→1, far→0\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n // Derivation: -m[10]*near + m[14] = 1, -m[10]*far + m[14] = 0\n // → m[10] = 1/(far-near), m[14] = far/(far-near)\n out[10] = fn;\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = far * fn;\n out[15] = 1;\n return out;\n}\n\n// ============================================================\n// Transform reverse surface (M1 / t6) — mat4 → vec3 cross-type transforms\n// ============================================================\n//\n// 3 functions / +3 surface (mat4 23 → 26 / total 115 → 119, AC-03):\n// - transformVec3: (x, y, z, 1) multiplied by 4×4 + perspective divide + w'=0 explicit guard (D-4 silent)\n// - transformPoint: ES alias of transformVec3 (OQ-1 / S-1, saves 16 LOC)\n// - transformDirection: takes m's upper-left 3×3 (no translation column) + vec3.normalize (OQ-2 / S-2)\n//\n// Degenerate convention (D-4 library-wide silent fall-back):\n// - transformVec3 / transformPoint: w' = 0 (perspective divide by zero) → out = (0, 0, 0)\n// - transformDirection: |out| = 0 → vec3.normalize silently falls back to (0, 0, 0)\n//\n// Related: requirements §3.1 mat4 rows 1/2/3 + §11 surface full table mat4 23→26;\n// research Finding 1 (alias evidence) + Finding 2 (take 3×3 + normalize) +\n// Finding 4 (w'=0 explicit guard stricter than upstreams);\n// plan-strategy §2 S-1 / S-2 + §3 R-1 countermeasure + §6 M1 scope section.\n\n/**\n * out = M * (v.x, v.y, v.z, 1) (with perspective divide by w'). Returns out.\n *\n * For affine m this is equivalent to transformPoint (treats v as a \"position\" that participates\n * in the transform, including translation).\n * Aliasing-safe: reads v.xyz into locals before writing out.\n *\n * @degrade w' = 0 (perspective divide by zero) → out = (0, 0, 0) (D-4 silent convention; avoids\n * NaN/Infinity propagation; stricter than the implicit 1/0 = Infinity behavior of\n * Three.js / gl-matrix).\n *\n * @example\n * ```ts\n * mat4.transformVec3(out, projViewModel, v);\n * // Guard: if (out[0] === 0 && out[1] === 0 && out[2] === 0 && wasNonZero(v)) {\n * // // w'=0 degenerate branch; the caller diagnoses as needed\n * // }\n * ```\n */\nexport function transformVec3(out: Vec3, m: Mat4Like, v: Vec3Like): Vec3 {\n const x = v[0] as number;\n const y = v[1] as number;\n const z = v[2] as number;\n const m00 = m[0] as number;\n const m01 = m[1] as number;\n const m02 = m[2] as number;\n const m03 = m[3] as number;\n const m10 = m[4] as number;\n const m11 = m[5] as number;\n const m12 = m[6] as number;\n const m13 = m[7] as number;\n const m20 = m[8] as number;\n const m21 = m[9] as number;\n const m22 = m[10] as number;\n const m23 = m[11] as number;\n const m30 = m[12] as number;\n const m31 = m[13] as number;\n const m32 = m[14] as number;\n const m33 = m[15] as number;\n\n const w = m03 * x + m13 * y + m23 * z + m33;\n if (w === 0) {\n // D-4 silent convention: perspective divide by zero → (0, 0, 0)\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n return out;\n }\n const invW = 1 / w;\n out[0] = (m00 * x + m10 * y + m20 * z + m30) * invW;\n out[1] = (m01 * x + m11 * y + m21 * z + m31) * invW;\n out[2] = (m02 * x + m12 * y + m22 * z + m32) * invW;\n return out;\n}\n\n/**\n * out = M * (v.x, v.y, v.z, 1) (with perspective divide by w'). Returns out.\n *\n * Treats v as a \"position\", including the translation column (shares the same function body as\n * transformVec3; OQ-1 / S-1).\n * Aliasing-safe; reference-equal with transformVec3: `mat4.transformPoint === mat4.transformVec3`.\n *\n * @degrade w' = 0 (perspective divide by zero) → out = (0, 0, 0) (D-4 silent convention;\n * same as transformVec3).\n *\n * @example\n * ```ts\n * mat4.transformPoint(out, modelMatrix, [1, 2, 3]);\n * // (1,2,3) → world-space position, including translation\n * ```\n */\nexport const transformPoint = transformVec3;\n\n/**\n * out = normalize(M_3x3 * v) (uses m's upper-left 3×3, no translation column). Returns out.\n *\n * Treats v as a \"direction\" and does **not** apply translation; the result is unit-normalized via\n * `vec3.normalize` (OQ-2 / S-2).\n * Aliasing-safe: reads v.xyz into locals before writing out.\n *\n * @degrade |out| = 0 (singular m + arbitrary v / m_3x3 maps v to the zero vector) → vec3.normalize\n * silently falls back to (0, 0, 0) (library-wide D-4 convention).\n *\n * @example\n * ```ts\n * const worldNormal = vec3.create();\n * mat4.transformDirection(worldNormal, modelMatrix, localNormal);\n * // Normal-vector transform: ignores translation; a unit-length input + orthogonal matrix\n * // guarantees a unit-length output.\n * ```\n */\nexport function transformDirection(out: Vec3, m: Mat4Like, v: Vec3Like): Vec3 {\n const x = v[0] as number;\n const y = v[1] as number;\n const z = v[2] as number;\n const m00 = m[0] as number;\n const m01 = m[1] as number;\n const m02 = m[2] as number;\n const m10 = m[4] as number;\n const m11 = m[5] as number;\n const m12 = m[6] as number;\n const m20 = m[8] as number;\n const m21 = m[9] as number;\n const m22 = m[10] as number;\n out[0] = m00 * x + m10 * y + m20 * z;\n out[1] = m01 * x + m11 * y + m21 * z;\n out[2] = m02 * x + m12 * y + m22 * z;\n // S-2: reuse vec3.normalize's silent convention (|out|=0 → out=(0,0,0)); do not inline copy.\n return vec3.normalize(out, out);\n}\n\n// ============================================================\n// world-mat4 basis / translation accessors\n// (feat-20260601-unify-transform-local-global-mat4-drop-globaltrans M1 w6)\n// ============================================================\n//\n// Decompose a world-space mat4 into its translation + the three orthonormal\n// basis directions. Placed adjacent to transformDirection because they share\n// the same normalization convention (vec3.normalize's |out|=0 → (0,0,0) D-4\n// fallback). The Transform world column (array<f32, 16>) is the producer; the\n// audio listener / camera-orientation consumers read forward/up via these.\n//\n// Layout (column-major, m[col*4 + row]):\n// col0 = m[0..2] = right col1 = m[4..6] = up\n// col2 = m[8..10] = forward col3 = m[12..14] = translation\n//\n// Sign (RL-4): getForward returns -normalize(col2) so it aligns with the\n// historical single-quaternion oracle quat.transformVec3(q, (0, 0, -1)) -- a\n// camera/listener looking down -Z in its local frame.\n\n/**\n * World-space translation = col 3 (m[12], m[13], m[14]). Read verbatim, not\n * normalized (translation has magnitude).\n */\nexport function getTranslation(out: Vec3, m: Mat4Like): Vec3 {\n out[0] = m[12] as number;\n out[1] = m[13] as number;\n out[2] = m[14] as number;\n return out;\n}\n\n/**\n * World-space forward = `-normalize(col2)` (RL-4: -Z look convention; matches\n * `quat.transformVec3(q, [0, 0, -1])`). Degenerate zero column → (0,0,0).\n */\nexport function getForward(out: Vec3, m: Mat4Like): Vec3 {\n out[0] = -(m[8] as number);\n out[1] = -(m[9] as number);\n out[2] = -(m[10] as number);\n return vec3.normalize(out, out);\n}\n\n/** World-space up = `normalize(col1)`. Degenerate zero column → (0,0,0). */\nexport function getUp(out: Vec3, m: Mat4Like): Vec3 {\n out[0] = m[4] as number;\n out[1] = m[5] as number;\n out[2] = m[6] as number;\n return vec3.normalize(out, out);\n}\n\n/** World-space right = `normalize(col0)`. Degenerate zero column → (0,0,0). */\nexport function getRight(out: Vec3, m: Mat4Like): Vec3 {\n out[0] = m[0] as number;\n out[1] = m[1] as number;\n out[2] = m[2] as number;\n return vec3.normalize(out, out);\n}\n\n// ============================================================\n// unproject (feat-20260529-picking-raycasting-screen-to-entity M2 w7)\n// ============================================================\n//\n// Map an NDC point back to world space via the inverse view-projection matrix.\n// Internally constructs vec4 (ndc.x, ndc.y, ndc.z, 1) and delegates to transformVec3,\n// which performs the 4×4 multiply + perspective divide by w'.\n//\n// WebGPU [0,1] NDC z convention (D-NDC / research Finding 6):\n// near plane → z=0, far plane → z=1\n//\n// Related: plan-tasks.json w7; requirements in-scope #3;\n// research Finding 3 (transformVec3 built-in w-divide).\n\n/**\n * Unproject an NDC point to world space.\n *\n * `ndcPoint` is in NDC space: x,y ∈ [-1,1], z ∈ [0,1] (WebGPU convention).\n * `invVP` is the inverse of the view-projection matrix.\n *\n * @example\n * ```ts\n * const worldPoint = vec3.create();\n * mat4.unproject(worldPoint, [0, 0, 0], invVP); // near-plane centre → world\n * mat4.unproject(worldPoint, [0, 0, 1], invVP); // far-plane centre → world\n * ```\n */\nexport function unproject(out: Vec3, ndcPoint: Vec3Like, invVP: Mat4Like): Vec3 {\n return transformVec3(out, invVP, ndcPoint);\n}\n\n// ============================================================\n// projectPoint — world → NDC dual of unproject\n// (roadmap 2026-06-15 game-demo-engine-gaps G-4: HUD anchor / worldToScreen)\n// ============================================================\n//\n// Map a world-space point to NDC via the view-projection matrix. Caller maps\n// NDC.xy ∈ [-1,1] to viewport pixels (DOM y-down → flip y), and inspects NDC.z\n// for \"behind camera\" / \"outside far plane\" culling.\n//\n// Pairs with unproject (NDC → world); both are intent-revealing aliases of\n// transformVec3 + perspective divide (D-4 silent w'=0 → out=(0,0,0) inherited).\n\n/**\n * Project a world-space point to NDC space through a view-projection matrix.\n *\n * `worldPos` is a position (treated with translation column, not a direction).\n * `viewProj` is `proj × view` (eye→clip composed with world→eye).\n * Output NDC is WebGPU convention: x,y ∈ [-1,1], z ∈ [0,1] (near=0 / far=1).\n *\n * To map NDC to viewport pixels (DOM y-down):\n * px = (ndc.x * 0.5 + 0.5) * vpWidth\n * py = (1 - (ndc.y * 0.5 + 0.5)) * vpHeight\n * `ndc.z < 0` or `ndc.z > 1` means the point is outside the depth range\n * (behind near or beyond far); callers typically skip drawing the HUD anchor.\n *\n * @degrade w' = 0 (point lies on the camera plane) → out = (0, 0, 0)\n * (D-4 silent convention; inherited from transformVec3).\n *\n * @example\n * ```ts\n * const ndc = vec3.create();\n * mat4.projectPoint(ndc, worldPos, viewProj);\n * if (ndc[2] >= 0 && ndc[2] <= 1) {\n * const px = (ndc[0] * 0.5 + 0.5) * canvas.width;\n * const py = (1 - (ndc[1] * 0.5 + 0.5)) * canvas.height;\n * // anchor DOM tooltip at (px, py)\n * }\n * ```\n */\nexport function projectPoint(out: Vec3, worldPos: Vec3Like, viewProj: Mat4Like): Vec3 {\n return transformVec3(out, viewProj, worldPos);\n}\n\n// ============================================================\n// computeViewProj (feat-20260617-host-engine-contract-and-video-cutscene M2 w6)\n// ============================================================\n//\n// Convenience composition: out = perspective(fov,aspect,near,far) * lookAt(eye,target,up).\n// Plain numeric / Vec3Like params only — keeps math zero-dep (plan-strategy D-1).\n//\n// Related: requirements AC-03; plan-strategy D-1; research Finding 4.\n\n/**\n * Compute a combined view-projection matrix from camera parameters.\n *\n * This is a convenience composition of `mat4.perspective * mat4.lookAt`, not a primitive.\n * All parameters are plain numbers / Vec3Like — no runtime POD types (math zero-dep).\n *\n * @param out Mat4 to write the result into.\n * @param eye Camera position in world space.\n * @param target Point the camera looks at.\n * @param up Approximate up direction.\n * @param fovYRadians Vertical field of view in radians.\n * @param aspect Aspect ratio (width / height).\n * @param near Near clip distance (positive).\n * @param far Far clip distance (positive, or Infinity for infinite-far).\n * @returns `out` (same Mat4 instance).\n */\nexport function computeViewProj(\n out: Mat4,\n eye: Vec3Like,\n target: Vec3Like,\n up: Vec3Like,\n fovYRadians: number,\n aspect: number,\n near: number,\n far: number,\n): Mat4 {\n const view = lookAt(create(), eye, target, up);\n const proj = perspective(create(), fovYRadians, aspect, near, far);\n return multiply(out, proj, view);\n}\n","// vec3.ts — 3D vector namespace (M2 / T-014, rewritten from the M1 baseline of 8 functions)\n//\n// 21-function surface (≥ 18 lower bound): vec2 base (without perp) + cross + distanceSq.\n// create / clone / copy / set / equals / add / sub / scale / negate /\n// dot / cross / lengthSq / length / distance / distanceSq /\n// normalize / lerp / smoothDamp / catmullRom / min / max\n//\n// Cross-type transforms are provided via the reverse surfaces of mat4 / quat (K-1/K-2 tore down\n// the Three.js-style promise; see plan-decisions §D-12): the three mat4 ns transform* functions\n// + quat.transformVec3 supersede the historical promise to \"hang cross-type methods on vec3 instances\".\n//\n// Design locks:\n// - branded Float32Array (types.ts SSOT); factory `as Vec3` casts are funneled.\n// - The legacy local Vec3 / Vec3Like type aliases are removed; mat4 / quat now `import './types'` Vec3Like.\n// - Out-param first + aliasing-safe (gl-matrix four ironclad rules, wiki/gl-matrix-overview).\n// - normalize(0-vec) → 0-vec silent fall-back (D-P12 / AC-06).\n// - mandatory `export function` (D-P10).\n//\n// Related: requirements §Surface vec3 lower bound 18 + AC-19 legacy 8-function removal (vec3 portion);\n// plan-strategy §6 M2 + §1.1 vec3.ts;\n// wiki/typescript-branded-types §7.2 factory template;\n// wiki/gl-matrix-overview Out-param four ironclad rules + degenerate anchor.\n//\n// Compatibility: this file still re-exports `Vec3Like` from ./types so mat4 / quat's existing imports\n// keep working (M2 does not force-update mat4 / quat import paths; that lands in M3).\n\nimport { EPS_NORMALIZE } from './_internal/epsilon';\nimport { catmullRomScalar, lerp as scalarLerp, smoothDecayFactor } from './_internal/scalar';\nimport type { Vec3, Vec3Like } from './types';\n\nexport type { Vec3, Vec3Like };\n\n/** Create a Vec3 (zero vector by default). */\nexport function create(x = 0, y = 0, z = 0): Vec3 {\n return Float32Array.of(x, y, z) as Vec3;\n}\n\n/** Allocate a new Vec3 copy. */\nexport function clone(a: Vec3Like): Vec3 {\n return Float32Array.of(a[0] as number, a[1] as number, a[2] as number) as Vec3;\n}\n\n/** out = a. aliasing-safe (copy(v, v) is a no-op). */\nexport function copy(out: Vec3, a: Vec3Like): Vec3 {\n out[0] = a[0] as number;\n out[1] = a[1] as number;\n out[2] = a[2] as number;\n return out;\n}\n\n/** Write the components and return out. */\nexport function set(out: Vec3, x: number, y: number, z: number): Vec3 {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\n\n/**\n * Approximate equality: every component differs by ≤ epsilon. NaN inputs always return false (IEEE 754).\n */\nexport function equals(a: Vec3Like, b: Vec3Like, epsilon = 1e-6): boolean {\n const ax = a[0] as number;\n const ay = a[1] as number;\n const az = a[2] as number;\n const bx = b[0] as number;\n const by = b[1] as number;\n const bz = b[2] as number;\n if (\n Number.isNaN(ax) ||\n Number.isNaN(ay) ||\n Number.isNaN(az) ||\n Number.isNaN(bx) ||\n Number.isNaN(by) ||\n Number.isNaN(bz)\n ) {\n return false;\n }\n return (\n Math.abs(ax - bx) <= epsilon && Math.abs(ay - by) <= epsilon && Math.abs(az - bz) <= epsilon\n );\n}\n\n/** out = a + b. aliasing-safe. */\nexport function add(out: Vec3, a: Vec3Like, b: Vec3Like): Vec3 {\n const ax = a[0] as number;\n const ay = a[1] as number;\n const az = a[2] as number;\n const bx = b[0] as number;\n const by = b[1] as number;\n const bz = b[2] as number;\n out[0] = ax + bx;\n out[1] = ay + by;\n out[2] = az + bz;\n return out;\n}\n\n/** out = a - b. aliasing-safe. */\nexport function sub(out: Vec3, a: Vec3Like, b: Vec3Like): Vec3 {\n const ax = a[0] as number;\n const ay = a[1] as number;\n const az = a[2] as number;\n const bx = b[0] as number;\n const by = b[1] as number;\n const bz = b[2] as number;\n out[0] = ax - bx;\n out[1] = ay - by;\n out[2] = az - bz;\n return out;\n}\n\n/** out = a * s. */\nexport function scale(out: Vec3, a: Vec3Like, s: number): Vec3 {\n out[0] = (a[0] as number) * s;\n out[1] = (a[1] as number) * s;\n out[2] = (a[2] as number) * s;\n return out;\n}\n\n/** out = -a. */\nexport function negate(out: Vec3, a: Vec3Like): Vec3 {\n out[0] = 0 - (a[0] as number);\n out[1] = 0 - (a[1] as number);\n out[2] = 0 - (a[2] as number);\n return out;\n}\n\n/** Dot product a · b. */\nexport function dot(a: Vec3Like, b: Vec3Like): number {\n return (\n (a[0] as number) * (b[0] as number) +\n (a[1] as number) * (b[1] as number) +\n (a[2] as number) * (b[2] as number)\n );\n}\n\n/** out = a × b (cross product). aliasing-safe (reads all 6 components into locals first). */\nexport function cross(out: Vec3, a: Vec3Like, b: Vec3Like): Vec3 {\n const ax = a[0] as number;\n const ay = a[1] as number;\n const az = a[2] as number;\n const bx = b[0] as number;\n const by = b[1] as number;\n const bz = b[2] as number;\n out[0] = ay * bz - az * by;\n out[1] = az * bx - ax * bz;\n out[2] = ax * by - ay * bx;\n return out;\n}\n\n/** Squared length |a|² (avoids sqrt overhead). */\nexport function lengthSq(a: Vec3Like): number {\n const x = a[0] as number;\n const y = a[1] as number;\n const z = a[2] as number;\n return x * x + y * y + z * z;\n}\n\n/** Euclidean length |a|. */\nexport function length(a: Vec3Like): number {\n const x = a[0] as number;\n const y = a[1] as number;\n const z = a[2] as number;\n return Math.sqrt(x * x + y * y + z * z);\n}\n\n/** Distance between two points |a - b|. */\nexport function distance(a: Vec3Like, b: Vec3Like): number {\n const dx = (a[0] as number) - (b[0] as number);\n const dy = (a[1] as number) - (b[1] as number);\n const dz = (a[2] as number) - (b[2] as number);\n return Math.sqrt(dx * dx + dy * dy + dz * dz);\n}\n\n/** Squared distance between two points |a - b|² (avoids sqrt overhead). */\nexport function distanceSq(a: Vec3Like, b: Vec3Like): number {\n const dx = (a[0] as number) - (b[0] as number);\n const dy = (a[1] as number) - (b[1] as number);\n const dz = (a[2] as number) - (b[2] as number);\n return dx * dx + dy * dy + dz * dz;\n}\n\n/**\n * out = a / |a| (unit-length).\n *\n * @degrade Zero vector (|a|² < EPS_NORMALIZE) silently falls back to the zero vector;\n * no NaN, no throw (gl-matrix style, AC-06 / D-P12).\n * @degrade NaN inputs → NaN outputs: when a component is NaN, lenSq=NaN; the `lenSq < EPS`\n * branch is false → goes through 1/sqrt(NaN)=NaN → output is all NaN (IEEE-754 NaN propagation;\n * still does not throw).\n *\n * @example\n * ```ts\n * vec3.normalize(out, [3, 0, 4]); // → (0.6, 0, 0.8)\n * vec3.normalize(out, [0, 0, 0]); // → (0, 0, 0) zero vector falls back (AC-06 no throw)\n * vec3.normalize(out, [NaN, 1, 0]); // → (NaN, NaN, NaN) IEEE-754 propagation\n * ```\n */\nexport function normalize(out: Vec3, a: Vec3Like): Vec3 {\n const x = a[0] as number;\n const y = a[1] as number;\n const z = a[2] as number;\n const lenSq = x * x + y * y + z * z;\n if (lenSq < EPS_NORMALIZE) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n return out;\n }\n const inv = 1 / Math.sqrt(lenSq);\n out[0] = x * inv;\n out[1] = y * inv;\n out[2] = z * inv;\n return out;\n}\n\n/** out = lerp(a, b, t). t is not clamped (extrapolation semantics). aliasing-safe. */\nexport function lerp(out: Vec3, a: Vec3Like, b: Vec3Like, t: number): Vec3 {\n const ax = a[0] as number;\n const ay = a[1] as number;\n const az = a[2] as number;\n const bx = b[0] as number;\n const by = b[1] as number;\n const bz = b[2] as number;\n out[0] = scalarLerp(ax, bx, t);\n out[1] = scalarLerp(ay, by, t);\n out[2] = scalarLerp(az, bz, t);\n return out;\n}\n\n/**\n * out = frame-rate-INDEPENDENT exponential smoothing of `current` toward `target`:\n * `lerp(current, target, 1 − exp(−decayRate · dt))`. Semantics match Bevy\n * `StableInterpolate::smooth_nudge` / three.js `MathUtils.damp` — NOT Unity `Vector3.SmoothDamp`\n * (which is a 2nd-order critically-damped spring needing a velocity ref; this is 1st-order decay).\n *\n * `decayRate` is the exponential decay constant (1/s), meant to stay fixed while `dt` is per-frame;\n * a good anchor is `decayRate = ln(2)/halfLife`. `dt=0` → out=current (no move); large `decayRate·dt`\n * → out≈target; `decayRate=0` → out=current. Frame-rate independent by construction: one step of `dt`\n * equals two composed steps of `dt/2` — unlike the naive `lerp(current, target, rate·dt)`, which\n * behaves differently per frame rate and overshoots when `rate·dt > 1`. aliasing-safe.\n */\nexport function smoothDamp(\n out: Vec3,\n current: Vec3Like,\n target: Vec3Like,\n decayRate: number,\n dt: number,\n): Vec3 {\n return lerp(out, current, target, smoothDecayFactor(decayRate, dt));\n}\n\n/**\n * out = Catmull-Rom spline point on the segment between `p1` and `p2`, with `p0` / `p3` the\n * neighbor control points setting the endpoint tangents (tension 0.5 — the Bevy\n * `CubicCardinalSpline::new_catmull_rom` / three.js `CatmullRomCurve3` default). Interpolates\n * the control points: `t=0` → `p1`, `t=1` → `p2`. Unlike `lerp` (a straight segment), this is\n * the smooth cubic through the points — use it for camera paths, animation ease paths, or\n * procedural curve geometry. To sample a whole polyline, loop the segments with a sliding\n * 4-point window `[pts[i-1], pts[i], pts[i+1], pts[i+2]]` (clamp/duplicate ends). `t` is not\n * clamped (extrapolation follows the same cubic). aliasing-safe.\n */\nexport function catmullRom(\n out: Vec3,\n p0: Vec3Like,\n p1: Vec3Like,\n p2: Vec3Like,\n p3: Vec3Like,\n t: number,\n): Vec3 {\n const x = catmullRomScalar(p0[0] as number, p1[0] as number, p2[0] as number, p3[0] as number, t);\n const y = catmullRomScalar(p0[1] as number, p1[1] as number, p2[1] as number, p3[1] as number, t);\n const z = catmullRomScalar(p0[2] as number, p1[2] as number, p2[2] as number, p3[2] as number, t);\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\n\n/** Component-wise min. */\nexport function min(out: Vec3, a: Vec3Like, b: Vec3Like): Vec3 {\n out[0] = Math.min(a[0] as number, b[0] as number);\n out[1] = Math.min(a[1] as number, b[1] as number);\n out[2] = Math.min(a[2] as number, b[2] as number);\n return out;\n}\n\n/** Component-wise max. */\nexport function max(out: Vec3, a: Vec3Like, b: Vec3Like): Vec3 {\n out[0] = Math.max(a[0] as number, b[0] as number);\n out[1] = Math.max(a[1] as number, b[1] as number);\n out[2] = Math.max(a[2] as number, b[2] as number);\n return out;\n}\n","// noise.ts — noise-function namespace (solo round 20260716-212942)\n//\n// 1-function surface: perlin1d — 1D Perlin noise returning [-1, 1]. The growable home for\n// further noise variants (2D Perlin, simplex, Worley, etc.).\n//\n// The permutation table is the canonical 256-entry table from Bevy's 2d_screen_shake example.\n// The fade function is the smootherstep polynomial (6t⁵−15t⁴+10t³), matching the Perlin\n// reference implementation — forgeax's own easing.smootherstep is the same polynomial but we\n// inline it here to keep the noise namespace self-contained (no cross-namespace dependency).\n\n// Canonical Perlin permutation table — a random sequence of 0-255.\nconst PERM: Readonly<Uint8Array> = new Uint8Array([\n 0x97, 0xa0, 0x89, 0x5b, 0x5a, 0x0f, 0x83, 0x0d, 0xc9, 0x5f, 0x60, 0x35, 0xc2, 0xe9, 0x07, 0xe1,\n 0x8c, 0x24, 0x67, 0x1e, 0x45, 0x8e, 0x08, 0x63, 0x25, 0xf0, 0x15, 0x0a, 0x17, 0xbe, 0x06, 0x94,\n 0xf7, 0x78, 0xea, 0x4b, 0x00, 0x1a, 0xc5, 0x3e, 0x5e, 0xfc, 0xdb, 0xcb, 0x75, 0x23, 0x0b, 0x20,\n 0x39, 0xb1, 0x21, 0x58, 0xed, 0x95, 0x38, 0x57, 0xae, 0x14, 0x7d, 0x88, 0xab, 0xa8, 0x44, 0xaf,\n 0x4a, 0xa5, 0x47, 0x86, 0x8b, 0x30, 0x1b, 0xa6, 0x4d, 0x92, 0x9e, 0xe7, 0x53, 0x6f, 0xe5, 0x7a,\n 0x3c, 0xd3, 0x85, 0xe6, 0xdc, 0x69, 0x5c, 0x29, 0x37, 0x2e, 0xf5, 0x28, 0xf4, 0x66, 0x8f, 0x36,\n 0x41, 0x19, 0x3f, 0xa1, 0x01, 0xd8, 0x50, 0x49, 0xd1, 0x4c, 0x84, 0xbb, 0xd0, 0x59, 0x12, 0xa9,\n 0xc8, 0xc4, 0x87, 0x82, 0x74, 0xbc, 0x9f, 0x56, 0xa4, 0x64, 0x6d, 0xc6, 0xad, 0xba, 0x03, 0x40,\n 0x34, 0xd9, 0xe2, 0xfa, 0x7c, 0x7b, 0x05, 0xca, 0x26, 0x93, 0x76, 0x7e, 0xff, 0x52, 0x55, 0xd4,\n 0xcf, 0xce, 0x3b, 0xe3, 0x2f, 0x10, 0x3a, 0x11, 0xb6, 0xbd, 0x1c, 0x2a, 0xdf, 0xb7, 0xaa, 0xd5,\n 0x77, 0xf8, 0x98, 0x02, 0x2c, 0x9a, 0xa3, 0x46, 0xdd, 0x99, 0x65, 0x9b, 0xa7, 0x2b, 0xac, 0x09,\n 0x81, 0x16, 0x27, 0xfd, 0x13, 0x62, 0x6c, 0x6e, 0x4f, 0x71, 0xe0, 0xe8, 0xb2, 0xb9, 0x70, 0x68,\n 0xda, 0xf6, 0x61, 0xe4, 0xfb, 0x22, 0xf2, 0xc1, 0xee, 0xd2, 0x90, 0x0c, 0xbf, 0xb3, 0xa2, 0xf1,\n 0x51, 0x33, 0x91, 0xeb, 0xf9, 0x0e, 0xef, 0x6b, 0x31, 0xc0, 0xd6, 0x1f, 0xb5, 0xc7, 0x6a, 0x9d,\n 0xb8, 0x54, 0xcc, 0xb0, 0x73, 0x79, 0x32, 0x2d, 0x7f, 0x04, 0x96, 0xfe, 0x8a, 0xec, 0xcd, 0x5d,\n 0xde, 0x72, 0x43, 0x1d, 0x18, 0x48, 0xf3, 0x8d, 0x80, 0xc3, 0x4e, 0x42, 0xd7, 0x3d, 0x9c, 0xb4,\n]);\n\n/**\n * Perlin smootherstep fade curve: `6t⁵ − 15t⁴ + 10t³`. The canonical Perlin fade — same\n * polynomial as {@link easing!smootherstep} but inlined so the noise namespace stays\n * self-contained. Input expected in [0, 1]; output is the smoothed value.\n */\nfunction fade(t: number): number {\n return t * t * t * (t * (t * 6.0 - 15.0) + 10.0);\n}\n\n/**\n * Dot product of a 1D gradient with the distance vector. The gradient is +1 or -1 based on\n * the lowest bit of the hash; the distance is the fractional offset from the integer lattice\n * point.\n */\nfunction dotGrad(hash: number, xf: number): number {\n return hash & 0x1 ? xf : -xf;\n}\n\n/**\n * 1D Perlin noise. Returns a value in [-1, 1] that varies smoothly with the input `x` —\n * small changes in `x` produce small changes in output (no wild jumps). Three separate calls\n * with different `x` offsets (e.g. `perlin1d(t)`, `perlin1d(t + 100)`, `perlin1d(t + 200)`)\n * produce three independent but individually smooth noise channels.\n *\n * This is the canonical Perlin noise algorithm with the 256-entry permutation table from\n * Bevy's `2d_screen_shake` example. Use for camera shake, procedural terrain, organic\n * motion, and any effect that needs smooth pseudo-random variation.\n */\nexport function perlin1d(x: number): number {\n const xFloor = Math.floor(x);\n const xi0 = xFloor & 0xff;\n const xi1 = (xFloor + 1) & 0xff;\n\n const xf0 = x - xFloor;\n const xf1 = xf0 - 1.0;\n\n const t = fade(xf0);\n\n const h0 = PERM[xi0] ?? 0;\n const h1 = PERM[xi1] ?? 0;\n\n const a = dotGrad(h0, xf0);\n const b = dotGrad(h1, xf1);\n\n // Linear interpolation between the two gradient dots.\n // Using the standard lerp: a + t * (b - a) where t is the faded xf0.\n return a + t * (b - a);\n}\n","// ray.ts — ray primitive namespace (feat-20260529-picking-raycasting-screen-to-entity M1 / w3 + M2 / w7).\n//\n// Storage layout: Float32Array length 6 [ox, oy, oz, dx, dy, dz], direction normalized.\n// default: origin=(0,0,0), direction=(0,0,-1).\n//\n// Surface: create / getOrigin / getDirection / setOrigin / setDirection /\n// rayAabbIntersects (slab method, 6 degenerate cases) /\n// screenToRay (M2 w7, two-point unproject with WebGPU [0,1] NDC z).\n//\n// Design locks:\n// - branded `Ray` Float32Array local to this module; cast funneled through `create`\n// - pure-function / out-param style consistent with box3 / vec3 / mat4;\n// - `rayAabbIntersects` uses the slab method with inv precomputation,\n// `inv[i] < 0` sign test (not direction test — avoids -0 pitfall),\n// NaN-safe edge/corner handling (Research Finding 2 #5).\n//\n// Related: requirements AC-01 / AC-02 / AC-03;\n// research Finding 2 (slab algorithm + 6 degenerate table);\n// research Finding 6 (WebGPU [0,1] NDC z);\n// plan-tasks.json w3 + w7 acceptanceChecks.\n\nimport type { Box3Like } from './box3';\nimport * as mat4 from './mat4';\nimport type { Mat4Like, Vec2, Vec3, Vec3Like } from './types';\n\n/**\n * Result of a ray-triangle intersection test (Moller-Trumbore).\n * `t` = ray parameter, `u`/`v` = barycentric coordinates.\n */\nexport interface RayTriResult {\n hit: boolean;\n t: number;\n u: number;\n v: number;\n}\n\n/**\n * Ray storage: Float32Array length 6 [ox, oy, oz, dx, dy, dz], direction normalized.\n * Local brand (not part of the seven-piece SSOT; same rationale as Box3).\n */\nexport type Ray = Float32Array & { readonly __ray: void };\n\n/**\n * Ray readable input: ArrayLike<number> of length 6 (ordering identical to Ray).\n */\nexport type RayLike = ArrayLike<number>;\n\n/**\n * Create a Ray. Defaults to origin=(0,0,0), direction=(0,0,-1) normalized.\n *\n * When `out` is not provided, a new Float32Array is allocated.\n * When `origin` / `direction` are provided, direction is normalized\n * (zero-length direction falls back to (0,0,0) per gl-matrix style).\n */\nexport function create(out?: Float32Array, origin?: Vec3Like, direction?: Vec3Like): Ray {\n const r = out ?? new Float32Array(6);\n if (origin) {\n r[0] = origin[0] as number;\n r[1] = origin[1] as number;\n r[2] = origin[2] as number;\n } else {\n r[0] = 0;\n r[1] = 0;\n r[2] = 0;\n }\n if (direction) {\n const dx = direction[0] as number;\n const dy = direction[1] as number;\n const dz = direction[2] as number;\n const lenSq = dx * dx + dy * dy + dz * dz;\n if (lenSq < 1e-12) {\n r[3] = 0;\n r[4] = 0;\n r[5] = 0;\n } else {\n const inv = 1 / Math.sqrt(lenSq);\n r[3] = dx * inv;\n r[4] = dy * inv;\n r[5] = dz * inv;\n }\n } else {\n r[3] = 0;\n r[4] = 0;\n r[5] = -1;\n }\n return r as Ray;\n}\n\n/**\n * Copy the origin of `r` into `out`. Returns `out`.\n */\nexport function getOrigin(out: Vec3, r: RayLike): Vec3 {\n out[0] = r[0] as number;\n out[1] = r[1] as number;\n out[2] = r[2] as number;\n return out;\n}\n\n/**\n * Copy the direction of `r` into `out`. Returns `out`.\n */\nexport function getDirection(out: Vec3, r: RayLike): Vec3 {\n out[0] = r[3] as number;\n out[1] = r[4] as number;\n out[2] = r[5] as number;\n return out;\n}\n\n/**\n * Overwrite the origin of `r` with `o`. Returns `r`.\n */\nexport function setOrigin(r: Ray, o: Vec3Like): Ray {\n r[0] = o[0] as number;\n r[1] = o[1] as number;\n r[2] = o[2] as number;\n return r;\n}\n\n/**\n * Overwrite the direction of `r` with `d` and normalize it.\n * Zero-length direction falls back to (0,0,0) (gl-matrix style).\n * Returns `r`.\n */\nexport function setDirection(r: Ray, d: Vec3Like): Ray {\n const dx = d[0] as number;\n const dy = d[1] as number;\n const dz = d[2] as number;\n const lenSq = dx * dx + dy * dy + dz * dz;\n if (lenSq < 1e-12) {\n r[3] = 0;\n r[4] = 0;\n r[5] = 0;\n } else {\n const inv = 1 / Math.sqrt(lenSq);\n r[3] = dx * inv;\n r[4] = dy * inv;\n r[5] = dz * inv;\n }\n return r;\n}\n\n/**\n * Result of a ray-AABB intersection test.\n */\nexport interface RayAabbResult {\n hit: boolean;\n /** Entry distance along the ray (clamped to 0 when origin is inside the box). */\n tmin: number;\n}\n\n/**\n * Test whether a ray intersects an axis-aligned bounding box using the\n * slab (Kay-Kajiya) method.\n *\n * Six degenerate cases per research Finding 2:\n * 1. hit from outside → `tmin > 0`\n * 2. hit from inside → `tmin = 0`\n * 3. miss (ray away) → `hit = false`\n * 4. parallel-axis miss → natural via ±Inf propagation\n * 5. edge/corner NaN-safe → guard `t1 > t2` NaN scenarios with `Number.isNaN`\n * 6. thin box (1D/2D) → correct via interval shrink\n *\n * Algorithm: precompute `inv = 1/D`, use `inv[i] < 0` (not direction[i] < 0)\n * to handle `-0` direction correctly. On each axis compute `(min - O)*inv` and\n * `(max - O)*inv`, swap when `inv < 0`, then accumulate `t_near = max(t_near, t1)`,\n * `t_far = min(t_far, t2)`. Hit when `t_far >= max(t_near, 0)`.\n *\n * Input: `r` (Ray with normalized direction) + `aabb` (Box3Like, 6 floats).\n * Output: `{ hit: boolean, tmin: number }`.\n */\nexport function rayAabbIntersects(r: RayLike, aabb: Box3Like): RayAabbResult {\n const ox = r[0] as number;\n const oy = r[1] as number;\n const oz = r[2] as number;\n const dx = r[3] as number;\n const dy = r[4] as number;\n const dz = r[5] as number;\n\n const minX = aabb[0] as number;\n const minY = aabb[1] as number;\n const minZ = aabb[2] as number;\n const maxX = aabb[3] as number;\n const maxY = aabb[4] as number;\n const maxZ = aabb[5] as number;\n\n // precomputed inverse (Research Finding 2 #2: IEEE 754 ±Inf for D_i = 0)\n const invX = 1 / dx;\n const invY = 1 / dy;\n const invZ = 1 / dz;\n\n // X axis\n let t1x = (minX - ox) * invX;\n let t2x = (maxX - ox) * invX;\n // sign test on inv, not direction — avoids -0 pitfall (Finding 2 #3)\n if (invX < 0) {\n const tmp = t1x;\n t1x = t2x;\n t2x = tmp;\n }\n // NaN-safe: when t1x or t2x is NaN (0*∞ from origin on face), skip this axis\n // for tnear accumulation (interval unbounded on this axis)\n let tnear = Number.isNaN(t1x) ? -Infinity : t1x;\n let tfar = Number.isNaN(t2x) ? Infinity : t2x;\n\n // Y axis\n let t1y = (minY - oy) * invY;\n let t2y = (maxY - oy) * invY;\n if (invY < 0) {\n const tmp = t1y;\n t1y = t2y;\n t2y = tmp;\n }\n if (!Number.isNaN(t1y) && t1y > tnear) tnear = t1y;\n if (!Number.isNaN(t2y) && t2y < tfar) tfar = t2y;\n\n // early out: interval already invalid\n if (tnear > tfar) return { hit: false, tmin: 0 };\n\n // Z axis\n let t1z = (minZ - oz) * invZ;\n let t2z = (maxZ - oz) * invZ;\n if (invZ < 0) {\n const tmp = t1z;\n t1z = t2z;\n t2z = tmp;\n }\n if (!Number.isNaN(t1z) && t1z > tnear) tnear = t1z;\n if (!Number.isNaN(t2z) && t2z < tfar) tfar = t2z;\n\n // Kay-Kajiya hit criterion: tfar >= max(tnear, 0) and tfar >= 0\n if (tfar >= 0 && tfar >= tnear) {\n return { hit: true, tmin: tnear > 0 ? tnear : 0 };\n }\n return { hit: false, tmin: 0 };\n}\n\n// ============================================================\n// screenToRay (feat-20260529-picking-raycasting-screen-to-entity M2 w7)\n// ============================================================\n//\n// Two-point unproject method: unproject near (z=0) and far (z=1) NDC points\n// through invVP, then ray.origin = nearWorld, ray.direction = normalize(farWorld - nearWorld).\n//\n// WebGPU [0,1] NDC z convention (D-NDC / research Finding 6):\n// near plane → ndc_z = 0, far plane → ndc_z = 1.\n//\n// y-flip: ndc_y = 1 - 2*screenY/viewportH (screen y-down → NDC y-up).\n//\n// Input sanitization: clamp screen coords to [0, vpW/vpH]; NaN/Inf inputs\n// fall back to centre (0,0,0,0,0,-1) to guarantee a defined Ray.\n//\n// Related: plan-tasks.json w7; requirements in-scope #3 + edge cases;\n// research Finding 6 (WebGPU z) + Finding 3 (y-flip formula).\n\nconst _nearNdC = new Float32Array(3);\nconst _farNdC = new Float32Array(3);\nconst _nearWorld = new Float32Array(3);\nconst _farWorld = new Float32Array(3);\nconst _tmpInvVP = new Float32Array(16);\n\n/**\n * Project a screen-space coordinate into a world-space Ray.\n *\n * `screenX` / `screenY` are in pixels relative to the top-left corner of the viewport\n * (DOM convention: y-down). They are clamped to `[0, vpWidth]` / `[0, vpHeight]` and\n * sanitized against NaN/Inf.\n *\n * `kind` discriminates the projection type so callers can branch on the result if needed;\n * both paths use the same two-point unproject algorithm.\n *\n * @param out The Ray to write into.\n * @param screenX Horizontal pixel coordinate (y-down origin, top-left).\n * @param screenY Vertical pixel coordinate.\n * @param vpWidth Viewport width in pixels.\n * @param vpHeight Viewport height in pixels.\n * @param view Camera view matrix (world→eye).\n * @param proj Camera projection matrix (eye→clip).\n * @param kind `'perspective'` or `'orthographic'`.\n * @returns `out` (same Ray instance).\n */\nexport function screenToRay(\n out: Ray,\n screenX: number,\n screenY: number,\n vpWidth: number,\n vpHeight: number,\n view: Mat4Like,\n proj: Mat4Like,\n _kind: 'perspective' | 'orthographic',\n): Ray {\n // --- input sanitization ---\n if (\n !Number.isFinite(screenX) ||\n !Number.isFinite(screenY) ||\n !Number.isFinite(vpWidth) ||\n !Number.isFinite(vpHeight) ||\n vpWidth <= 0 ||\n vpHeight <= 0\n ) {\n // Degenerate viewport or non-finite input: return a safe centre ray\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -1;\n return out;\n }\n\n // Clamp to viewport bounds\n const sx = screenX < 0 ? 0 : screenX > vpWidth ? vpWidth : screenX;\n const sy = screenY < 0 ? 0 : screenY > vpHeight ? vpHeight : screenY;\n\n // --- screen → NDC (y-flip) ---\n const ndcX = (2 * sx) / vpWidth - 1;\n const ndcY = 1 - (2 * sy) / vpHeight;\n\n // --- build invVP = invert(proj * view) ---\n mat4.multiply(_tmpInvVP as unknown as import('./types').Mat4, proj, view);\n mat4.invert(_tmpInvVP as unknown as import('./types').Mat4, _tmpInvVP);\n\n // --- unproject near (z=0) and far (z=1) ---\n _nearNdC[0] = ndcX;\n _nearNdC[1] = ndcY;\n _nearNdC[2] = 0;\n\n _farNdC[0] = ndcX;\n _farNdC[1] = ndcY;\n _farNdC[2] = 1;\n\n mat4.unproject(_nearWorld as unknown as Vec3, _nearNdC, _tmpInvVP as unknown as Mat4Like);\n mat4.unproject(_farWorld as unknown as Vec3, _farNdC, _tmpInvVP as unknown as Mat4Like);\n\n // --- write origin = nearWorld ---\n out[0] = _nearWorld[0] as number;\n out[1] = _nearWorld[1] as number;\n out[2] = _nearWorld[2] as number;\n\n // --- compute direction = normalize(far - near) ---\n const dx = (_farWorld[0] as number) - (_nearWorld[0] as number);\n const dy = (_farWorld[1] as number) - (_nearWorld[1] as number);\n const dz = (_farWorld[2] as number) - (_nearWorld[2] as number);\n const lenSq = dx * dx + dy * dy + dz * dz;\n if (lenSq < 1e-12) {\n // Degenerate: far == near (e.g. infinite-far projection, zero-depth frustum)\n // Fall back to camera forward direction\n out[3] = 0;\n out[4] = 0;\n out[5] = -1;\n } else {\n const inv = 1 / Math.sqrt(lenSq);\n out[3] = dx * inv;\n out[4] = dy * inv;\n out[5] = dz * inv;\n }\n\n return out;\n}\n\n// ============================================================\n// worldToScreen (feat-20260617-host-engine-contract-and-video-cutscene M2 w5)\n// ============================================================\n//\n// Self-contained mat4 * vec4 to get pre-divide w (do NOT wrap projectPoint — it discards w,\n// research Finding 3). behind = w<0; onScreen = NDC xyz all in [-1,1] for xy and [0,1] for z.\n// Pixel map y-down top-left: px=(ndc.x*0.5+0.5)*w, py=(1-(ndc.y*0.5+0.5))*h.\n// out-param writes Vec2; returns plain {onScreen, behind} flags (no allocation).\n//\n// Related: requirements AC-01; plan-strategy D-2; research Finding 3/5/6.\n\n/** Result of projecting a world-space point to screen-space pixel coordinates. */\nexport interface WorldToScreenResult {\n /** True if the NDC coordinates are within clip-space bounds. */\n onScreen: boolean;\n /** True if the original world-space point is behind the camera (w < 0).\n * When true, `out` is meaningless (requirements §7). */\n behind: boolean;\n}\n\n/**\n * Project a world-space point to screen-space pixel coordinates.\n *\n * Performs a full mat4 * vec4 internally to capture the pre-divide `w` component\n * (projectPoint discards `w`, so it cannot report `behind`).\n *\n * Pixel mapping: top-left origin, y-down (DOM convention).\n * px = (ndc.x * 0.5 + 0.5) * canvasW\n * py = (1 - (ndc.y * 0.5 + 0.5)) * canvasH\n *\n * Degenerate viewport (canvasW <= 0 || canvasH <= 0): returns { onScreen: false, behind: false },\n * leaves `out` untouched.\n *\n * @param out Vec2 to write pixel coordinates into (y-down, top-left origin).\n * @param worldPos World-space point (3 floats).\n * @param viewProj Combined view-projection matrix (proj * view, 16 floats).\n * @param canvasW Canvas width in pixels.\n * @param canvasH Canvas height in pixels.\n * @returns { onScreen: boolean, behind: boolean } — pure data flags, no allocation.\n */\nexport function worldToScreen(\n out: Vec2,\n worldPos: Vec3Like,\n viewProj: Mat4Like,\n canvasW: number,\n canvasH: number,\n): WorldToScreenResult {\n // Degenerate viewport: leave `out` untouched, report off-screen.\n if (!(canvasW > 0) || !(canvasH > 0)) {\n return { onScreen: false, behind: false };\n }\n\n const x = worldPos[0] as number;\n const y = worldPos[1] as number;\n const z = worldPos[2] as number;\n\n // clip = viewProj * [x, y, z, 1] (column-major: m[col*4 + row])\n const clipX =\n (viewProj[0] as number) * x +\n (viewProj[4] as number) * y +\n (viewProj[8] as number) * z +\n (viewProj[12] as number);\n const clipY =\n (viewProj[1] as number) * x +\n (viewProj[5] as number) * y +\n (viewProj[9] as number) * z +\n (viewProj[13] as number);\n const clipZ =\n (viewProj[2] as number) * x +\n (viewProj[6] as number) * y +\n (viewProj[10] as number) * z +\n (viewProj[14] as number);\n const clipW =\n (viewProj[3] as number) * x +\n (viewProj[7] as number) * y +\n (viewProj[11] as number) * z +\n (viewProj[15] as number);\n\n // behind = camera-space point is behind the eye (w < 0); `out` is then meaningless.\n if (clipW < 0) {\n return { onScreen: false, behind: true };\n }\n\n const invW = 1 / clipW;\n const ndcX = clipX * invW;\n const ndcY = clipY * invW;\n const ndcZ = clipZ * invW;\n\n // y-down pixel map, top-left origin (DOM convention).\n out[0] = (ndcX * 0.5 + 0.5) * canvasW;\n out[1] = (1 - (ndcY * 0.5 + 0.5)) * canvasH;\n\n // onScreen: NDC xy in [-1, 1], NDC z in [0, 1] (WebGPU clip-space z convention).\n const onScreen = ndcX >= -1 && ndcX <= 1 && ndcY >= -1 && ndcY <= 1 && ndcZ >= 0 && ndcZ <= 1;\n\n return { onScreen, behind: false };\n}\n\n// ============================================================\n// rayTriangleIntersects (feat-20260630-vertex-snapping-picking M1)\n// ============================================================\n//\n// Moller-Trumbore algorithm. Returns RayTriResult { hit, t, u, v }.\n// Double-sided: uses abs(det) < epsilon (no backface culling).\n// Degenerate (collinear/zero-area/parallel) triangles return hit=false to avoid NaN propagation.\n// t <= 0 rejected (behind ray origin).\n// Barycentric boundary: u >= 0, v >= 0, u + v <= 1.\n// NaN guard on all inputs.\n//\n// Related: requirements AC-06; plan-strategy D-1;\n// KB 2026-06-30-scratchapixel-moller-trumbore.md;\n// plan-tasks.json w2 acceptanceCheck.\n\nconst RAY_TRI_EPSILON = 1e-8;\n\n/**\n * Test whether a ray intersects a triangle using the Moller-Trumbore algorithm.\n *\n * Double-sided: both front and back faces are checked (abs(det) < epsilon).\n * Degenerate triangles (collinear / zero-area) return hit=false.\n * Ray origin behind the triangle (t <= 0) is rejected.\n * NaN inputs are guarded against — any NaN input returns hit=false.\n *\n * @param r Ray (RayLike, 6 floats: ox,oy,oz,dx,dy,dz with normalized direction).\n * @param a Triangle vertex A (Vec3Like, 3 floats).\n * @param b Triangle vertex B (Vec3Like, 3 floats).\n * @param c Triangle vertex C (Vec3Like, 3 floats).\n * @returns RayTriResult with hit flag, t (ray parameter), and u/v (barycentric coordinates).\n */\nexport function rayTriangleIntersects(\n r: RayLike,\n a: Vec3Like,\n b: Vec3Like,\n c: Vec3Like,\n): RayTriResult {\n // NaN guard: any NaN input → miss (prevents NaN propagation through the algorithm)\n if (\n Number.isNaN(r[0] as number) ||\n Number.isNaN(r[1] as number) ||\n Number.isNaN(r[2] as number) ||\n Number.isNaN(r[3] as number) ||\n Number.isNaN(r[4] as number) ||\n Number.isNaN(r[5] as number) ||\n Number.isNaN(a[0] as number) ||\n Number.isNaN(a[1] as number) ||\n Number.isNaN(a[2] as number) ||\n Number.isNaN(b[0] as number) ||\n Number.isNaN(b[1] as number) ||\n Number.isNaN(b[2] as number) ||\n Number.isNaN(c[0] as number) ||\n Number.isNaN(c[1] as number) ||\n Number.isNaN(c[2] as number)\n ) {\n return { hit: false, t: 0, u: 0, v: 0 };\n }\n\n const ox = r[0] as number;\n const oy = r[1] as number;\n const oz = r[2] as number;\n const dx = r[3] as number;\n const dy = r[4] as number;\n const dz = r[5] as number;\n\n // E1 = B - A, E2 = C - A\n const e1x = (b[0] as number) - (a[0] as number);\n const e1y = (b[1] as number) - (a[1] as number);\n const e1z = (b[2] as number) - (a[2] as number);\n const e2x = (c[0] as number) - (a[0] as number);\n const e2y = (c[1] as number) - (a[1] as number);\n const e2z = (c[2] as number) - (a[2] as number);\n\n // P = D x E2\n const px = dy * e2z - dz * e2y;\n const py = dz * e2x - dx * e2z;\n const pz = dx * e2y - dy * e2x;\n\n // det = E1 . P\n const det = e1x * px + e1y * py + e1z * pz;\n\n // Double-sided: abs(det) < epsilon → parallel / degenerate → miss\n if (Math.abs(det) < RAY_TRI_EPSILON) {\n return { hit: false, t: 0, u: 0, v: 0 };\n }\n\n const invDet = 1 / det;\n\n // T = O - A\n const tx = ox - (a[0] as number);\n const ty = oy - (a[1] as number);\n const tz = oz - (a[2] as number);\n\n // u = (T . P) * invDet\n const u = (tx * px + ty * py + tz * pz) * invDet;\n if (u < 0 || u > 1) {\n return { hit: false, t: 0, u, v: 0 };\n }\n\n // Q = T x E1\n const qx = ty * e1z - tz * e1y;\n const qy = tz * e1x - tx * e1z;\n const qz = tx * e1y - ty * e1x;\n\n // v = (D . Q) * invDet\n const v = (dx * qx + dy * qy + dz * qz) * invDet;\n if (v < 0 || u + v > 1) {\n return { hit: false, t: 0, u, v };\n }\n\n // t = (E2 . Q) * invDet\n const t = (e2x * qx + e2y * qy + e2z * qz) * invDet;\n if (t <= 0) {\n return { hit: false, t, u, v };\n }\n\n return { hit: true, t, u, v };\n}\n","// ray2.ts — finite 2D ray and bounding-volume casts (P12 / bounding_2d).\n//\n// Ray2 storage: Float32Array [originX, originY, directionX, directionY, maxDistance].\n// Direction is normalized at construction, matching ray.create. A finite max distance\n// keeps ordinary ray tests and swept-volume tests on one small, composable surface.\n\nimport type { Box2Like } from './box2';\nimport type { Circle2Like } from './circle2';\nimport type { Vec2, Vec2Like } from './types';\n\n/** 2D ray storage: [originX, originY, directionX, directionY, maxDistance]. */\nexport type Ray2 = Float32Array & { readonly __ray2: void };\n\n/** Readable 2D ray input. */\nexport type Ray2Like = ArrayLike<number>;\n\n/** Result shared by AABB, circle, and swept-volume intersection tests. */\nexport interface Ray2Intersection {\n hit: boolean;\n /** Entry distance along the normalized ray, clamped to zero when inside. */\n t: number;\n}\n\n/** Create a normalized finite 2D ray. `maxDistance` defaults to infinity. */\nexport function create(\n out?: Float32Array,\n origin?: Vec2Like,\n direction?: Vec2Like,\n maxDistance = Number.POSITIVE_INFINITY,\n): Ray2 {\n const ray = out ?? new Float32Array(5);\n ray[0] = origin ? (origin[0] as number) : 0;\n ray[1] = origin ? (origin[1] as number) : 0;\n const dx = direction ? (direction[0] as number) : 0;\n const dy = direction ? (direction[1] as number) : 1;\n const lengthSq = dx * dx + dy * dy;\n if (lengthSq < 1e-12) {\n ray[2] = 0;\n ray[3] = 0;\n } else {\n const invLength = 1 / Math.sqrt(lengthSq);\n ray[2] = dx * invLength;\n ray[3] = dy * invLength;\n }\n ray[4] = maxDistance < 0 ? 0 : maxDistance;\n return ray as Ray2;\n}\n\n/** Copy the ray origin to out. */\nexport function getOrigin(out: Vec2, ray: Ray2Like): Vec2 {\n out[0] = ray[0] as number;\n out[1] = ray[1] as number;\n return out;\n}\n\n/** Copy the normalized ray direction to out. */\nexport function getDirection(out: Vec2, ray: Ray2Like): Vec2 {\n out[0] = ray[2] as number;\n out[1] = ray[3] as number;\n return out;\n}\n\n/** Return the ray's finite travel limit. */\nexport function getMaxDistance(ray: Ray2Like): number {\n return ray[4] as number;\n}\n\n/** Set the ray origin. */\nexport function setOrigin(ray: Ray2, origin: Vec2Like): Ray2 {\n ray[0] = origin[0] as number;\n ray[1] = origin[1] as number;\n return ray;\n}\n\n/** Set and normalize the ray direction. */\nexport function setDirection(ray: Ray2, direction: Vec2Like): Ray2 {\n const dx = direction[0] as number;\n const dy = direction[1] as number;\n const lengthSq = dx * dx + dy * dy;\n if (lengthSq < 1e-12) {\n ray[2] = 0;\n ray[3] = 0;\n } else {\n const invLength = 1 / Math.sqrt(lengthSq);\n ray[2] = dx * invLength;\n ray[3] = dy * invLength;\n }\n return ray;\n}\n\n/** Set the ray's non-negative travel limit. */\nexport function setMaxDistance(ray: Ray2, maxDistance: number): Ray2 {\n ray[4] = maxDistance < 0 ? 0 : maxDistance;\n return ray;\n}\n\n/** Intersect a finite ray with an AABB using the 2D slab method. */\nexport function rayAabbIntersects(ray: Ray2Like, box: Box2Like): Ray2Intersection {\n return rayAabbValues(ray, box[0] as number, box[1] as number, box[2] as number, box[3] as number);\n}\n\n/** Intersect a finite ray with a bounding circle. */\nexport function rayCircleIntersects(ray: Ray2Like, circle: Circle2Like): Ray2Intersection {\n return rayCircleValues(ray, circle[0] as number, circle[1] as number, circle[2] as number);\n}\n\n/** Sweep an AABB along a finite ray and intersect it with a target AABB. */\nexport function aabbCastIntersects(\n ray: Ray2Like,\n moving: Box2Like,\n target: Box2Like,\n): Ray2Intersection {\n // Minkowski difference: target ⊖ moving. This also preserves the moving\n // volume's offset relative to the ray origin, matching Bevy AabbCast2d.\n return rayAabbValues(\n ray,\n (target[0] as number) - (moving[2] as number),\n (target[1] as number) - (moving[3] as number),\n (target[2] as number) - (moving[0] as number),\n (target[3] as number) - (moving[1] as number),\n );\n}\n\n/** Sweep a circle along a finite ray and intersect it with a target circle. */\nexport function circleCastIntersects(\n ray: Ray2Like,\n moving: Circle2Like,\n target: Circle2Like,\n): Ray2Intersection {\n return rayCircleValues(\n ray,\n (target[0] as number) - (moving[0] as number),\n (target[1] as number) - (moving[1] as number),\n (target[2] as number) + (moving[2] as number),\n );\n}\n\nfunction rayAabbValues(\n ray: Ray2Like,\n minX: number,\n minY: number,\n maxX: number,\n maxY: number,\n): Ray2Intersection {\n const ox = ray[0] as number;\n const oy = ray[1] as number;\n const dx = ray[2] as number;\n const dy = ray[3] as number;\n let near = 0;\n let far = ray[4] as number;\n\n if (minX > maxX || minY > maxY || far < 0) return miss();\n if (Math.abs(dx) < 1e-12) {\n if (ox < minX || ox > maxX) return miss();\n } else {\n let a = (minX - ox) / dx;\n let b = (maxX - ox) / dx;\n if (a > b) [a, b] = [b, a];\n if (a > near) near = a;\n if (b < far) far = b;\n }\n if (Math.abs(dy) < 1e-12) {\n if (oy < minY || oy > maxY) return miss();\n } else {\n let a = (minY - oy) / dy;\n let b = (maxY - oy) / dy;\n if (a > b) [a, b] = [b, a];\n if (a > near) near = a;\n if (b < far) far = b;\n }\n return near <= far && far >= 0 ? { hit: true, t: near } : miss();\n}\n\nfunction rayCircleValues(ray: Ray2Like, cx: number, cy: number, radius: number): Ray2Intersection {\n const ox = (ray[0] as number) - cx;\n const oy = (ray[1] as number) - cy;\n const dx = ray[2] as number;\n const dy = ray[3] as number;\n const maxDistance = ray[4] as number;\n if (radius < 0 || maxDistance < 0) return miss();\n const directionLengthSq = dx * dx + dy * dy;\n const radiusSq = radius * radius;\n const originDistanceSq = ox * ox + oy * oy;\n if (originDistanceSq <= radiusSq) return maxDistance >= 0 ? { hit: true, t: 0 } : miss();\n if (directionLengthSq < 1e-12) return miss();\n\n const projected = ox * dx + oy * dy;\n const constant = originDistanceSq - radiusSq;\n const discriminant = projected * projected - directionLengthSq * constant;\n if (discriminant < 0) return miss();\n const entry = (-projected - Math.sqrt(discriminant)) / directionLengthSq;\n const t = entry < 0 ? 0 : entry;\n return t <= maxDistance ? { hit: true, t } : miss();\n}\n\nfunction miss(): Ray2Intersection {\n return { hit: false, t: 0 };\n}\n","// sphere.ts — bounding sphere namespace (M3 / w7).\n//\n// 5-function surface (plan-tasks.json w7): create / expandByPoint / containsPoint / intersectsBox / fromPoints.\n//\n// Storage layout: Float32Array length 4 [cx, cy, cz, radius].\n// Negative radius is the \"empty sphere\" sentinel — expandByPoint on an empty\n// sphere seeds center + zero radius at the input point; containsPoint always\n// returns false on an empty sphere.\n//\n// `fromPoints` uses the tight axis-aligned-bounding-box center + max distance\n// bound as a fast approximation (Ritter is one option; we pick the simpler\n// AABB-center variant because it is the common three.js/babylon default and\n// is sufficient for v1 frustum-culling / broadphase needs — Welzl and Ritter\n// are future spinoffs if tighter bounds become necessary).\n//\n// Related: requirements §AC-16 (Box3 / Sphere pure functions);\n// plan-strategy M3 range; plan-tasks.json w7 acceptanceCheck.\n\nimport * as box3 from './box3';\nimport type { Vec3Like } from './types';\n\n/**\n * Sphere storage: Float32Array length 4 [cx, cy, cz, radius].\n * Local brand (not part of the seven-piece SSOT); see box3.ts rationale.\n */\nexport type Sphere = Float32Array & { readonly __sphere: void };\n\n/**\n * Sphere readable input: ArrayLike<number> of length 4 (ordering identical to Sphere).\n */\nexport type SphereLike = ArrayLike<number>;\n\n/**\n * Create a Sphere. Defaults to a zero-radius sphere at the origin.\n */\nexport function create(cx = 0, cy = 0, cz = 0, radius = 0): Sphere {\n return Float32Array.of(cx, cy, cz, radius) as Sphere;\n}\n\n/**\n * Grow the sphere so `point` lies inside (boundary inclusive). Returns `out`.\n *\n * If the sphere was empty (radius < 0) the call re-seeds the center to `point`\n * with radius 0. Otherwise the radius is set to max(current, distance(center, point)).\n */\nexport function expandByPoint(out: Sphere, point: Vec3Like): Sphere {\n const r = out[3] as number;\n const px = point[0] as number;\n const py = point[1] as number;\n const pz = point[2] as number;\n if (r < 0) {\n out[0] = px;\n out[1] = py;\n out[2] = pz;\n out[3] = 0;\n return out;\n }\n const dx = px - (out[0] as number);\n const dy = py - (out[1] as number);\n const dz = pz - (out[2] as number);\n const d = Math.sqrt(dx * dx + dy * dy + dz * dz);\n if (d > r) out[3] = d;\n return out;\n}\n\n/**\n * True when `point` is inside `sphere` (boundary inclusive). Empty sphere\n * (radius < 0) contains nothing.\n */\nexport function containsPoint(s: SphereLike, point: Vec3Like): boolean {\n const r = s[3] as number;\n if (r < 0) return false;\n const dx = (point[0] as number) - (s[0] as number);\n const dy = (point[1] as number) - (s[1] as number);\n const dz = (point[2] as number) - (s[2] as number);\n return dx * dx + dy * dy + dz * dz <= r * r;\n}\n\n/**\n * True when `sphere` overlaps `box` (boundary inclusive). Uses the standard\n * closest-point-on-AABB distance test.\n */\nexport function intersectsBox(s: SphereLike, b: box3.Box3Like): boolean {\n const r = s[3] as number;\n if (r < 0) return false;\n const cx = s[0] as number;\n const cy = s[1] as number;\n const cz = s[2] as number;\n const minX = b[0] as number;\n const minY = b[1] as number;\n const minZ = b[2] as number;\n const maxX = b[3] as number;\n const maxY = b[4] as number;\n const maxZ = b[5] as number;\n const qx = cx < minX ? minX : cx > maxX ? maxX : cx;\n const qy = cy < minY ? minY : cy > maxY ? maxY : cy;\n const qz = cz < minZ ? minZ : cz > maxZ ? maxZ : cz;\n const dx = cx - qx;\n const dy = cy - qy;\n const dz = cz - qz;\n return dx * dx + dy * dy + dz * dz <= r * r;\n}\n\n/**\n * Build an enclosing sphere from `points` via AABB-center + max-distance\n * approximation. Empty `points` leaves the negative-radius empty sphere at\n * the origin.\n */\nexport function fromPoints(out: Sphere, points: readonly Vec3Like[]): Sphere {\n if (points.length === 0) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = -1;\n return out;\n }\n const aabb = box3.create();\n for (let i = 0; i < points.length; i++) {\n box3.expandByPoint(aabb, points[i] as Vec3Like);\n }\n const cx = ((aabb[0] as number) + (aabb[3] as number)) * 0.5;\n const cy = ((aabb[1] as number) + (aabb[4] as number)) * 0.5;\n const cz = ((aabb[2] as number) + (aabb[5] as number)) * 0.5;\n let rSq = 0;\n for (let i = 0; i < points.length; i++) {\n const p = points[i] as Vec3Like;\n const dx = (p[0] as number) - cx;\n const dy = (p[1] as number) - cy;\n const dz = (p[2] as number) - cz;\n const d2 = dx * dx + dy * dy + dz * dz;\n if (d2 > rSq) rSq = d2;\n }\n out[0] = cx;\n out[1] = cy;\n out[2] = cz;\n out[3] = Math.sqrt(rSq);\n return out;\n}\n","// vec2.ts — 2D vector namespace (M2 / T-013)\n//\n// 19-function surface (≥ 14 lower bound; includes perp 2D 90° rotation, excludes cross):\n// create / clone / copy / set / equals / add / sub / scale / negate /\n// dot / lengthSq / length / distance / normalize / lerp / smoothDamp / catmullRom / min / max / perp\n//\n// Design locks:\n// - branded Float32Array storage (types.ts SSOT); `as Vec2` casts are funneled through factory\n// functions (D-P15 / lint-brand-cast.mjs guard).\n// - Out-param first + aliasing-safe (gl-matrix four ironclad rules): every function reads\n// a/b components into locals before writing out, so vec2.add(v, v, v) / vec2.lerp(out, out, b, t)\n// are legal.\n// - degenerate silent fall-back (D-P12 / AC-06): normalize(0-vec) → 0-vec, no NaN, no throw.\n// - mandatory `export function` (D-P10) so grep + count-math-exports.mjs AST can count exports.\n//\n// Related: requirements §Surface vec2 lower bound 14; plan-strategy §6 M2 + §1.1 vec2.ts LOC 220;\n// wiki/typescript-branded-types §7.2 factory template;\n// wiki/gl-matrix-overview Out-param four ironclad rules + degenerate-semantics anchor.\n\nimport { EPS_NORMALIZE } from './_internal/epsilon';\nimport { catmullRomScalar, lerp as scalarLerp, smoothDecayFactor } from './_internal/scalar';\nimport type { Vec2, Vec2Like } from './types';\n\n/** Create a Vec2 (zero vector by default). */\nexport function create(x = 0, y = 0): Vec2 {\n return Float32Array.of(x, y) as Vec2;\n}\n\n/** Allocate a new Vec2 copy. Difference from copy: clone allocates, copy writes into an existing out. */\nexport function clone(a: Vec2Like): Vec2 {\n return Float32Array.of(a[0] as number, a[1] as number) as Vec2;\n}\n\n/** out = a. Returns out. aliasing-safe (copy(v, v) is a no-op). */\nexport function copy(out: Vec2, a: Vec2Like): Vec2 {\n out[0] = a[0] as number;\n out[1] = a[1] as number;\n return out;\n}\n\n/** Write the components and return out. */\nexport function set(out: Vec2, x: number, y: number): Vec2 {\n out[0] = x;\n out[1] = y;\n return out;\n}\n\n/**\n * Approximate equality: every component differs by ≤ epsilon. NaN inputs always return false (matches IEEE 754).\n */\nexport function equals(a: Vec2Like, b: Vec2Like, epsilon = 1e-6): boolean {\n const ax = a[0] as number;\n const ay = a[1] as number;\n const bx = b[0] as number;\n const by = b[1] as number;\n if (Number.isNaN(ax) || Number.isNaN(ay) || Number.isNaN(bx) || Number.isNaN(by)) return false;\n return Math.abs(ax - bx) <= epsilon && Math.abs(ay - by) <= epsilon;\n}\n\n/** out = a + b. aliasing-safe. */\nexport function add(out: Vec2, a: Vec2Like, b: Vec2Like): Vec2 {\n const ax = a[0] as number;\n const ay = a[1] as number;\n const bx = b[0] as number;\n const by = b[1] as number;\n out[0] = ax + bx;\n out[1] = ay + by;\n return out;\n}\n\n/** out = a - b. aliasing-safe. */\nexport function sub(out: Vec2, a: Vec2Like, b: Vec2Like): Vec2 {\n const ax = a[0] as number;\n const ay = a[1] as number;\n const bx = b[0] as number;\n const by = b[1] as number;\n out[0] = ax - bx;\n out[1] = ay - by;\n return out;\n}\n\n/** out = a * s. */\nexport function scale(out: Vec2, a: Vec2Like, s: number): Vec2 {\n out[0] = (a[0] as number) * s;\n out[1] = (a[1] as number) * s;\n return out;\n}\n\n/** out = -a. The `0 - x` form avoids -0 (test toBe(0) uses Object.is and distinguishes ±0). */\nexport function negate(out: Vec2, a: Vec2Like): Vec2 {\n out[0] = 0 - (a[0] as number);\n out[1] = 0 - (a[1] as number);\n return out;\n}\n\n/** Dot product a · b. */\nexport function dot(a: Vec2Like, b: Vec2Like): number {\n return (a[0] as number) * (b[0] as number) + (a[1] as number) * (b[1] as number);\n}\n\n/** Squared length |a|² (avoids sqrt overhead; useful on hot paths comparing distances). */\nexport function lengthSq(a: Vec2Like): number {\n const x = a[0] as number;\n const y = a[1] as number;\n return x * x + y * y;\n}\n\n/** Euclidean length |a|. */\nexport function length(a: Vec2Like): number {\n const x = a[0] as number;\n const y = a[1] as number;\n return Math.sqrt(x * x + y * y);\n}\n\n/** Distance between two points |a - b|. */\nexport function distance(a: Vec2Like, b: Vec2Like): number {\n const dx = (a[0] as number) - (b[0] as number);\n const dy = (a[1] as number) - (b[1] as number);\n return Math.sqrt(dx * dx + dy * dy);\n}\n\n/**\n * out = a / |a| (unit-length).\n *\n * @degrade Zero vector (|a|² < EPS_NORMALIZE) silently falls back to the zero vector;\n * no NaN, no throw (gl-matrix style, AC-06 / D-P12).\n * @degrade NaN inputs → NaN outputs: when a component is NaN, lenSq=NaN; the `lenSq < EPS`\n * branch is false → goes through 1/sqrt(NaN)=NaN → output is all NaN (IEEE-754 NaN propagation;\n * still does not throw).\n *\n * @example\n * ```ts\n * vec2.normalize(out, [3, 4]); // → (0.6, 0.8)\n * vec2.normalize(out, [0, 0]); // → (0, 0) zero vector falls back (no NaN; AC-06 no throw)\n * vec2.normalize(out, [NaN, 1]); // → (NaN, NaN) IEEE-754 propagation\n * ```\n */\nexport function normalize(out: Vec2, a: Vec2Like): Vec2 {\n const x = a[0] as number;\n const y = a[1] as number;\n const lenSq = x * x + y * y;\n if (lenSq < EPS_NORMALIZE) {\n out[0] = 0;\n out[1] = 0;\n return out;\n }\n const inv = 1 / Math.sqrt(lenSq);\n out[0] = x * inv;\n out[1] = y * inv;\n return out;\n}\n\n/** out = lerp(a, b, t). t is not clamped (extrapolation semantics matches glam / wgpu-matrix). aliasing-safe. */\nexport function lerp(out: Vec2, a: Vec2Like, b: Vec2Like, t: number): Vec2 {\n const ax = a[0] as number;\n const ay = a[1] as number;\n const bx = b[0] as number;\n const by = b[1] as number;\n out[0] = scalarLerp(ax, bx, t);\n out[1] = scalarLerp(ay, by, t);\n return out;\n}\n\n/**\n * out = frame-rate-INDEPENDENT exponential smoothing of `current` toward `target`:\n * `lerp(current, target, 1 − exp(−decayRate · dt))`. Semantics match Bevy\n * `StableInterpolate::smooth_nudge` / three.js `MathUtils.damp` (1st-order decay, NOT Unity\n * `SmoothDamp`'s 2nd-order spring). `dt=0` → out=current; large `decayRate·dt` → out≈target.\n * Frame-rate independent by construction (one `dt` step = two composed `dt/2` steps). aliasing-safe.\n * See vec3.smoothDamp for the full contract. */\nexport function smoothDamp(\n out: Vec2,\n current: Vec2Like,\n target: Vec2Like,\n decayRate: number,\n dt: number,\n): Vec2 {\n return lerp(out, current, target, smoothDecayFactor(decayRate, dt));\n}\n\n/**\n * out = Catmull-Rom spline point on the segment between `p1` and `p2`, with `p0` / `p3` the\n * neighbor control points setting the endpoint tangents (tension 0.5 — the Bevy\n * `CubicCardinalSpline::new_catmull_rom` / three.js default). Interpolates the control points\n * (`t=0` → `p1`, `t=1` → `p2`). See vec3.catmullRom for the full contract + whole-polyline\n * sampling. aliasing-safe. */\nexport function catmullRom(\n out: Vec2,\n p0: Vec2Like,\n p1: Vec2Like,\n p2: Vec2Like,\n p3: Vec2Like,\n t: number,\n): Vec2 {\n const x = catmullRomScalar(p0[0] as number, p1[0] as number, p2[0] as number, p3[0] as number, t);\n const y = catmullRomScalar(p0[1] as number, p1[1] as number, p2[1] as number, p3[1] as number, t);\n out[0] = x;\n out[1] = y;\n return out;\n}\n\n/** Component-wise min. */\nexport function min(out: Vec2, a: Vec2Like, b: Vec2Like): Vec2 {\n out[0] = Math.min(a[0] as number, b[0] as number);\n out[1] = Math.min(a[1] as number, b[1] as number);\n return out;\n}\n\n/** Component-wise max. */\nexport function max(out: Vec2, a: Vec2Like, b: Vec2Like): Vec2 {\n out[0] = Math.max(a[0] as number, b[0] as number);\n out[1] = Math.max(a[1] as number, b[1] as number);\n return out;\n}\n\n/**\n * out = perp(a) — 2D counter-clockwise 90° rotation: (x, y) → (-y, x).\n *\n * Derives from cross(a, b) reducing to a scalar determinant in 2D; this API serves hot paths\n * (collision / normals).\n * aliasing-safe: reads a's components into locals before writing out.\n */\nexport function perp(out: Vec2, a: Vec2Like): Vec2 {\n const x = a[0] as number;\n const y = a[1] as number;\n out[0] = 0 - y;\n out[1] = x;\n return out;\n}\n","// vec4.ts — 4D vector / homogeneous coordinate namespace (M2 / T-015)\n//\n// 18-function surface (≥ 14 lower bound; same shape as vec2/vec3, no cross / perp):\n// create / clone / copy / set / equals / add / sub / scale / negate /\n// dot / lengthSq / length / distance / normalize / lerp / smoothDamp / min / max\n//\n// Design locks:\n// - branded Float32Array (types.ts SSOT); factory `as Vec4` casts are funneled (D-P15).\n// - Out-param first + aliasing-safe (gl-matrix four ironclad rules).\n// - normalize(0-vec) → 0-vec silent fall-back (D-P12 / AC-06).\n// - mandatory `export function` (D-P10).\n// - reuses lerp from _internal/scalar.ts (strategy D mixed; duplicate-code elimination).\n// - Vec4 ≠ Quat (same length=4 brand mutual exclusion; types.ts SSOT keeps each brand independent).\n//\n// Related: requirements §Surface vec4 lower bound 14; plan-strategy §6 M2 + §1.1 vec4.ts LOC 240;\n// wiki/typescript-branded-types §7.2 factory template;\n// wiki/gl-matrix-overview Out-param four ironclad rules.\n\nimport { EPS_NORMALIZE } from './_internal/epsilon';\nimport { lengthSq4, normalize4, lerp as scalarLerp, smoothDecayFactor } from './_internal/scalar';\nimport type { Vec4, Vec4Like } from './types';\n\n/** Create a Vec4 (zero vector by default). */\nexport function create(x = 0, y = 0, z = 0, w = 0): Vec4 {\n return Float32Array.of(x, y, z, w) as Vec4;\n}\n\n/** Allocate a new Vec4 copy. */\nexport function clone(a: Vec4Like): Vec4 {\n return Float32Array.of(a[0] as number, a[1] as number, a[2] as number, a[3] as number) as Vec4;\n}\n\n/** out = a. aliasing-safe (copy(v, v) is a no-op). */\nexport function copy(out: Vec4, a: Vec4Like): Vec4 {\n out[0] = a[0] as number;\n out[1] = a[1] as number;\n out[2] = a[2] as number;\n out[3] = a[3] as number;\n return out;\n}\n\n/** Write the components and return out. */\nexport function set(out: Vec4, x: number, y: number, z: number, w: number): Vec4 {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = w;\n return out;\n}\n\n/**\n * Approximate equality: every component differs by ≤ epsilon. NaN inputs always return false (IEEE 754).\n */\nexport function equals(a: Vec4Like, b: Vec4Like, epsilon = 1e-6): boolean {\n const ax = a[0] as number;\n const ay = a[1] as number;\n const az = a[2] as number;\n const aw = a[3] as number;\n const bx = b[0] as number;\n const by = b[1] as number;\n const bz = b[2] as number;\n const bw = b[3] as number;\n if (\n Number.isNaN(ax) ||\n Number.isNaN(ay) ||\n Number.isNaN(az) ||\n Number.isNaN(aw) ||\n Number.isNaN(bx) ||\n Number.isNaN(by) ||\n Number.isNaN(bz) ||\n Number.isNaN(bw)\n ) {\n return false;\n }\n return (\n Math.abs(ax - bx) <= epsilon &&\n Math.abs(ay - by) <= epsilon &&\n Math.abs(az - bz) <= epsilon &&\n Math.abs(aw - bw) <= epsilon\n );\n}\n\n/** out = a + b. aliasing-safe. */\nexport function add(out: Vec4, a: Vec4Like, b: Vec4Like): Vec4 {\n const ax = a[0] as number;\n const ay = a[1] as number;\n const az = a[2] as number;\n const aw = a[3] as number;\n const bx = b[0] as number;\n const by = b[1] as number;\n const bz = b[2] as number;\n const bw = b[3] as number;\n out[0] = ax + bx;\n out[1] = ay + by;\n out[2] = az + bz;\n out[3] = aw + bw;\n return out;\n}\n\n/** out = a - b. aliasing-safe. */\nexport function sub(out: Vec4, a: Vec4Like, b: Vec4Like): Vec4 {\n const ax = a[0] as number;\n const ay = a[1] as number;\n const az = a[2] as number;\n const aw = a[3] as number;\n const bx = b[0] as number;\n const by = b[1] as number;\n const bz = b[2] as number;\n const bw = b[3] as number;\n out[0] = ax - bx;\n out[1] = ay - by;\n out[2] = az - bz;\n out[3] = aw - bw;\n return out;\n}\n\n/** out = a * s. */\nexport function scale(out: Vec4, a: Vec4Like, s: number): Vec4 {\n out[0] = (a[0] as number) * s;\n out[1] = (a[1] as number) * s;\n out[2] = (a[2] as number) * s;\n out[3] = (a[3] as number) * s;\n return out;\n}\n\n/** out = -a. The `0 - x` form avoids -0. */\nexport function negate(out: Vec4, a: Vec4Like): Vec4 {\n out[0] = 0 - (a[0] as number);\n out[1] = 0 - (a[1] as number);\n out[2] = 0 - (a[2] as number);\n out[3] = 0 - (a[3] as number);\n return out;\n}\n\n/** Dot product a · b (4 components). */\nexport function dot(a: Vec4Like, b: Vec4Like): number {\n return (\n (a[0] as number) * (b[0] as number) +\n (a[1] as number) * (b[1] as number) +\n (a[2] as number) * (b[2] as number) +\n (a[3] as number) * (b[3] as number)\n );\n}\n\n/** Squared length |a|² (avoids sqrt overhead). */\nexport function lengthSq(a: Vec4Like): number {\n return lengthSq4(a);\n}\n\n/** Euclidean length |a|. */\nexport function length(a: Vec4Like): number {\n return Math.sqrt(lengthSq4(a));\n}\n\n/** Distance between two points |a - b|. */\nexport function distance(a: Vec4Like, b: Vec4Like): number {\n const dx = (a[0] as number) - (b[0] as number);\n const dy = (a[1] as number) - (b[1] as number);\n const dz = (a[2] as number) - (b[2] as number);\n const dw = (a[3] as number) - (b[3] as number);\n return Math.sqrt(dx * dx + dy * dy + dz * dz + dw * dw);\n}\n\n/**\n * out = a / |a| (unit-length).\n *\n * @degrade Zero vector (|a|² < EPS_NORMALIZE) silently falls back to the zero vector;\n * no NaN, no throw (gl-matrix style, AC-06 / D-P12).\n * @degrade NaN inputs → NaN outputs: when a component is NaN, lenSq=NaN; the `lenSq < EPS`\n * branch is false → goes through 1/sqrt(NaN)=NaN → output is all NaN (IEEE-754 NaN propagation;\n * still does not throw).\n *\n * @example\n * ```ts\n * vec4.normalize(out, [1, 2, 2, 0]); // → (1/3, 2/3, 2/3, 0)\n * vec4.normalize(out, [0, 0, 0, 0]); // → (0, 0, 0, 0) zero vector falls back (AC-06 no throw)\n * vec4.normalize(out, [NaN, 1, 0, 0]); // → all NaN, IEEE-754 propagation\n * ```\n */\nexport function normalize(out: Vec4, a: Vec4Like): Vec4 {\n normalize4(out, a, EPS_NORMALIZE);\n return out;\n}\n\n/** out = lerp(a, b, t). t is not clamped (extrapolation semantics). aliasing-safe. */\nexport function lerp(out: Vec4, a: Vec4Like, b: Vec4Like, t: number): Vec4 {\n const ax = a[0] as number;\n const ay = a[1] as number;\n const az = a[2] as number;\n const aw = a[3] as number;\n const bx = b[0] as number;\n const by = b[1] as number;\n const bz = b[2] as number;\n const bw = b[3] as number;\n out[0] = scalarLerp(ax, bx, t);\n out[1] = scalarLerp(ay, by, t);\n out[2] = scalarLerp(az, bz, t);\n out[3] = scalarLerp(aw, bw, t);\n return out;\n}\n\n/**\n * out = frame-rate-INDEPENDENT exponential smoothing of `current` toward `target`:\n * `lerp(current, target, 1 − exp(−decayRate · dt))`. Semantics match Bevy\n * `StableInterpolate::smooth_nudge` / three.js `MathUtils.damp` (1st-order decay, NOT Unity\n * `SmoothDamp`'s 2nd-order spring). `dt=0` → out=current; large `decayRate·dt` → out≈target.\n * Frame-rate independent by construction (one `dt` step = two composed `dt/2` steps). aliasing-safe.\n * See vec3.smoothDamp for the full contract. */\nexport function smoothDamp(\n out: Vec4,\n current: Vec4Like,\n target: Vec4Like,\n decayRate: number,\n dt: number,\n): Vec4 {\n return lerp(out, current, target, smoothDecayFactor(decayRate, dt));\n}\n\n/** Component-wise min. */\nexport function min(out: Vec4, a: Vec4Like, b: Vec4Like): Vec4 {\n out[0] = Math.min(a[0] as number, b[0] as number);\n out[1] = Math.min(a[1] as number, b[1] as number);\n out[2] = Math.min(a[2] as number, b[2] as number);\n out[3] = Math.min(a[3] as number, b[3] as number);\n return out;\n}\n\n/** Component-wise max. */\nexport function max(out: Vec4, a: Vec4Like, b: Vec4Like): Vec4 {\n out[0] = Math.max(a[0] as number, b[0] as number);\n out[1] = Math.max(a[1] as number, b[1] as number);\n out[2] = Math.max(a[2] as number, b[2] as number);\n out[3] = Math.max(a[3] as number, b[3] as number);\n return out;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/box2.ts","../src/box3.ts","../src/circle2.ts","../src/color.ts","../src/easing.ts","../src/_internal/scalar.ts","../src/euler.ts","../src/quat.ts","../src/_internal/epsilon.ts","../src/f32-to-f16-bytes.ts","../src/frustum.ts","../src/mat3.ts","../src/mat4.ts","../src/vec3.ts","../src/noise.ts","../src/ray.ts","../src/ray2.ts","../src/sphere.ts","../src/vec2.ts","../src/vec4.ts"],"names":["center","halfSize","radius","containsPoint","create","fromPoints","intersectsBox","closestPoint","intersectsCircle","merge","distanceSq","scale","distance","value","min","max","clone","fromRotationMatrix","up","identity","invert","multiply","equals","fromQuat","transformVec3","transpose","dot","length","lengthSq","lerp","normalize","set","right","getDirection","getOrigin","rayAabbIntersects","setDirection","setOrigin","expandByPoint","add","catmullRom","copy","negate","smoothDamp","sub"],"mappings":"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AAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAC1F,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAC1F,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,CAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,CAAA;AAAA,EAAM,EAAA;AAAA,EAC1F,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,CAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,CAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,CAAA;AAAA,EAC1F,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAC1F,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,E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","file":"index.mjs","sourcesContent":["// box2.ts — 2D axis-aligned bounding box namespace (P12 / bounding_2d).\n//\n// Storage layout: Float32Array length 4 [minX, minY, maxX, maxY]. The surface\n// mirrors box3 so an AI can transfer broad-phase code between dimensions without\n// learning a second object model.\n\nimport type { Circle2Like } from './circle2';\nimport type { Vec2, Vec2Like } from './types';\n\n/** 2D AABB storage: [minX, minY, maxX, maxY]. */\nexport type Box2 = Float32Array & { readonly __box2: void };\n\n/** Readable 2D AABB input. */\nexport type Box2Like = ArrayLike<number>;\n\n/** Create a 2D AABB. The default is the inverted-infinity empty box. */\nexport function create(\n minX = Number.POSITIVE_INFINITY,\n minY = Number.POSITIVE_INFINITY,\n maxX = Number.NEGATIVE_INFINITY,\n maxY = Number.NEGATIVE_INFINITY,\n): Box2 {\n return Float32Array.of(minX, minY, maxX, maxY) as Box2;\n}\n\n/** Create an AABB from its center and non-negative half-size. */\nexport function fromCenter(out: Box2, center: Vec2Like, halfSize: Vec2Like): Box2 {\n const cx = center[0] as number;\n const cy = center[1] as number;\n const hx = Math.abs(halfSize[0] as number);\n const hy = Math.abs(halfSize[1] as number);\n out[0] = cx - hx;\n out[1] = cy - hy;\n out[2] = cx + hx;\n out[3] = cy + hy;\n return out;\n}\n\n/** Build the tightest AABB containing the given points. */\nexport function fromPoints(out: Box2, points: readonly Vec2Like[]): Box2 {\n out[0] = Number.POSITIVE_INFINITY;\n out[1] = Number.POSITIVE_INFINITY;\n out[2] = Number.NEGATIVE_INFINITY;\n out[3] = Number.NEGATIVE_INFINITY;\n for (let i = 0; i < points.length; i++) {\n const point = points[i] as Vec2Like;\n const x = point[0] as number;\n const y = point[1] as number;\n if (x < (out[0] as number)) out[0] = x;\n if (y < (out[1] as number)) out[1] = y;\n if (x > (out[2] as number)) out[2] = x;\n if (y > (out[3] as number)) out[3] = y;\n }\n return out;\n}\n\n/** Write the box center to out. Empty boxes produce non-finite values. */\nexport function center(out: Vec2, box: Box2Like): Vec2 {\n out[0] = ((box[0] as number) + (box[2] as number)) * 0.5;\n out[1] = ((box[1] as number) + (box[3] as number)) * 0.5;\n return out;\n}\n\n/** Write the box half-size to out. */\nexport function halfSize(out: Vec2, box: Box2Like): Vec2 {\n out[0] = ((box[2] as number) - (box[0] as number)) * 0.5;\n out[1] = ((box[3] as number) - (box[1] as number)) * 0.5;\n return out;\n}\n\n/** Write the closest point in the box to point. */\nexport function closestPoint(out: Vec2, box: Box2Like, point: Vec2Like): Vec2 {\n const x = point[0] as number;\n const y = point[1] as number;\n const minX = box[0] as number;\n const minY = box[1] as number;\n const maxX = box[2] as number;\n const maxY = box[3] as number;\n out[0] = x < minX ? minX : x > maxX ? maxX : x;\n out[1] = y < minY ? minY : y > maxY ? maxY : y;\n return out;\n}\n\n/** True when point is inside the box, including its boundary. */\nexport function containsPoint(box: Box2Like, point: Vec2Like): boolean {\n const x = point[0] as number;\n const y = point[1] as number;\n return (\n x >= (box[0] as number) &&\n x <= (box[2] as number) &&\n y >= (box[1] as number) &&\n y <= (box[3] as number)\n );\n}\n\n/** True when the box completely contains other, including touching edges. */\nexport function containsBox(box: Box2Like, other: Box2Like): boolean {\n return (\n (other[0] as number) >= (box[0] as number) &&\n (other[1] as number) >= (box[1] as number) &&\n (other[2] as number) <= (box[2] as number) &&\n (other[3] as number) <= (box[3] as number)\n );\n}\n\n/** True when two boxes overlap, including touching edges. */\nexport function intersectsBox(a: Box2Like, b: Box2Like): boolean {\n return (\n (a[2] as number) >= (b[0] as number) &&\n (a[0] as number) <= (b[2] as number) &&\n (a[3] as number) >= (b[1] as number) &&\n (a[1] as number) <= (b[3] as number)\n );\n}\n\n/** True when a box and a circle overlap, including tangent contact. */\nexport function intersectsCircle(box: Box2Like, circle: Circle2Like): boolean {\n const cx = circle[0] as number;\n const cy = circle[1] as number;\n const radius = circle[2] as number;\n if (radius < 0) return false;\n const closestX =\n cx < (box[0] as number)\n ? (box[0] as number)\n : cx > (box[2] as number)\n ? (box[2] as number)\n : cx;\n const closestY =\n cy < (box[1] as number)\n ? (box[1] as number)\n : cy > (box[3] as number)\n ? (box[3] as number)\n : cy;\n const dx = cx - closestX;\n const dy = cy - closestY;\n return dx * dx + dy * dy <= radius * radius;\n}\n\n/** Return the smallest box containing a and b. */\nexport function merge(out: Box2, a: Box2Like, b: Box2Like): Box2 {\n out[0] = Math.min(a[0] as number, b[0] as number);\n out[1] = Math.min(a[1] as number, b[1] as number);\n out[2] = Math.max(a[2] as number, b[2] as number);\n out[3] = Math.max(a[3] as number, b[3] as number);\n return out;\n}\n\n/** Grow the box by a non-negative amount on each side. */\nexport function grow(out: Box2, box: Box2Like, amount: Vec2Like): Box2 {\n const x = Math.abs(amount[0] as number);\n const y = Math.abs(amount[1] as number);\n out[0] = (box[0] as number) - x;\n out[1] = (box[1] as number) - y;\n out[2] = (box[2] as number) + x;\n out[3] = (box[3] as number) + y;\n return out;\n}\n\n/** Shrink the box by a non-negative amount on each side. */\nexport function shrink(out: Box2, box: Box2Like, amount: Vec2Like): Box2 {\n const x = Math.abs(amount[0] as number);\n const y = Math.abs(amount[1] as number);\n out[0] = (box[0] as number) + x;\n out[1] = (box[1] as number) + y;\n out[2] = (box[2] as number) - x;\n out[3] = (box[3] as number) - y;\n return out;\n}\n","// box3.ts — axis-aligned bounding box namespace (M3 / w7).\n//\n// 5-function surface (plan-tasks.json w7): create / expandByPoint / containsPoint / intersectsBox / fromPoints.\n//\n// Storage layout: Float32Array length 6 [minX, minY, minZ, maxX, maxY, maxZ].\n// Default state is \"empty box\" using the standard inverted-infinity convention\n// (min = +Infinity, max = -Infinity) so `expandByPoint` on any finite point\n// collapses to a zero-volume box containing exactly that point; this mirrors\n// three.js Box3.makeEmpty + glam/wgpu-matrix conventions (research knowledge-base\n// gl-matrix-overview §degenerate-anchor equivalent for AABB).\n//\n// Design locks:\n// - branded `Box3` Float32Array local to this module; cast funneled through `create`\n// - pure-function / out-param style consistent with vec3 / mat4;\n// - `expandByPoint` / `fromPoints` write to `out` in place and return it (aliasing-safe);\n// - `containsPoint` / `intersectsBox` are boundary-inclusive (standard AABB semantics).\n//\n// Related: requirements §AC-16 (Box3 / Sphere pure functions);\n// plan-strategy M3 range + D-P5 procedural geometry (Box3 backs future frustum culling);\n// plan-tasks.json w7 acceptanceCheck.\n\nimport type { Mat4Like, Vec3Like } from './types';\n\n/**\n * Box3 storage: Float32Array length 6 [minX, minY, minZ, maxX, maxY, maxZ].\n * Local brand (not part of the seven-piece SSOT because bounding volumes are\n * neither linear-algebra primitives nor ECS POD carriers; types.ts SSOT is\n * reserved for vec/mat/quat/color).\n */\nexport type Box3 = Float32Array & { readonly __box3: void };\n\n/**\n * Box3 readable input: ArrayLike<number> of length 6 (ordering identical to Box3).\n */\nexport type Box3Like = ArrayLike<number>;\n\n/**\n * Create a Box3. Defaults to the \"empty\" box (min=+Inf, max=-Inf) so the first\n * `expandByPoint` call collapses to a zero-volume box at the input point.\n */\nexport function create(\n minX: number = Number.POSITIVE_INFINITY,\n minY: number = Number.POSITIVE_INFINITY,\n minZ: number = Number.POSITIVE_INFINITY,\n maxX: number = Number.NEGATIVE_INFINITY,\n maxY: number = Number.NEGATIVE_INFINITY,\n maxZ: number = Number.NEGATIVE_INFINITY,\n): Box3 {\n return Float32Array.of(minX, minY, minZ, maxX, maxY, maxZ) as Box3;\n}\n\n/**\n * out ∪= point: grow min / max so `point` lies inside (boundary inclusive). Returns out.\n * Works correctly from the default empty box (inverted-infinity) — the first call\n * collapses both min and max to `point`.\n */\nexport function expandByPoint(out: Box3, point: Vec3Like): Box3 {\n const px = point[0] as number;\n const py = point[1] as number;\n const pz = point[2] as number;\n if (px < (out[0] as number)) out[0] = px;\n if (py < (out[1] as number)) out[1] = py;\n if (pz < (out[2] as number)) out[2] = pz;\n if (px > (out[3] as number)) out[3] = px;\n if (py > (out[4] as number)) out[4] = py;\n if (pz > (out[5] as number)) out[5] = pz;\n return out;\n}\n\n/**\n * True when `point` is inside `box` (boundary inclusive). An empty box\n * (min > max on any axis) contains no points.\n */\nexport function containsPoint(box: Box3Like, point: Vec3Like): boolean {\n const px = point[0] as number;\n const py = point[1] as number;\n const pz = point[2] as number;\n return (\n px >= (box[0] as number) &&\n px <= (box[3] as number) &&\n py >= (box[1] as number) &&\n py <= (box[4] as number) &&\n pz >= (box[2] as number) &&\n pz <= (box[5] as number)\n );\n}\n\n/**\n * True when `a` and `b` overlap on every axis (boundary inclusive — touching\n * faces intersect). Two empty boxes do not intersect.\n */\nexport function intersectsBox(a: Box3Like, b: Box3Like): boolean {\n return (\n (a[3] as number) >= (b[0] as number) &&\n (a[0] as number) <= (b[3] as number) &&\n (a[4] as number) >= (b[1] as number) &&\n (a[1] as number) <= (b[4] as number) &&\n (a[5] as number) >= (b[2] as number) &&\n (a[2] as number) <= (b[5] as number)\n );\n}\n\n/**\n * Build the tightest AABB enclosing `points`. Writes to `out` in place and\n * returns it. Empty `points` leaves `out` as the inverted-infinity empty box.\n */\nexport function fromPoints(out: Box3, points: readonly Vec3Like[]): Box3 {\n out[0] = Number.POSITIVE_INFINITY;\n out[1] = Number.POSITIVE_INFINITY;\n out[2] = Number.POSITIVE_INFINITY;\n out[3] = Number.NEGATIVE_INFINITY;\n out[4] = Number.NEGATIVE_INFINITY;\n out[5] = Number.NEGATIVE_INFINITY;\n for (let i = 0; i < points.length; i++) {\n const p = points[i] as Vec3Like;\n const px = p[0] as number;\n const py = p[1] as number;\n const pz = p[2] as number;\n if (px < (out[0] as number)) out[0] = px;\n if (py < (out[1] as number)) out[1] = py;\n if (pz < (out[2] as number)) out[2] = pz;\n if (px > (out[3] as number)) out[3] = px;\n if (py > (out[4] as number)) out[4] = py;\n if (pz > (out[5] as number)) out[5] = pz;\n }\n return out;\n}\n\n/**\n * Build the tightest AABB enclosing flattened xyz `positions` (tight-packed,\n * 3 floats per vertex). Writes to `out` in place and returns it.\n *\n * `positions` must have at least 3 elements to produce a non-empty box.\n * Fewer than 3 elements leaves `out` as the inverted-infinity empty box\n * (identical to `create()` default).\n *\n * Trailing elements beyond the last complete triplet are read verbatim\n * (undefined → NaN), matching the legacy `aabbFromPositions` behaviour\n * this function replaces.\n *\n * Related: `fromPoints` for `Vec3Like[]` input.\n */\nexport function fromPositions(out: Box3, positions: ArrayLike<number>): Box3 {\n out[0] = Number.POSITIVE_INFINITY;\n out[1] = Number.POSITIVE_INFINITY;\n out[2] = Number.POSITIVE_INFINITY;\n out[3] = Number.NEGATIVE_INFINITY;\n out[4] = Number.NEGATIVE_INFINITY;\n out[5] = Number.NEGATIVE_INFINITY;\n if (positions.length < 3) return out;\n let minX = positions[0] as number;\n let minY = positions[1] as number;\n let minZ = positions[2] as number;\n let maxX = minX;\n let maxY = minY;\n let maxZ = minZ;\n for (let i = 3; i < positions.length; i += 3) {\n const x = positions[i] as number;\n const y = positions[i + 1] as number;\n const z = positions[i + 2] as number;\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (z < minZ) minZ = z;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n if (z > maxZ) maxZ = z;\n }\n out[0] = minX;\n out[1] = minY;\n out[2] = minZ;\n out[3] = maxX;\n out[4] = maxY;\n out[5] = maxZ;\n return out;\n}\n\n/**\n * Transform an AABB by a 4x4 matrix using the conservative 8-corner method.\n *\n * Each of the 8 corners (all min/max combinations) is transformed by `m` as a\n * homogeneous point (w=1), then a new AABB is computed that tightly encloses\n * all 8 transformed points. This is always conservative — the output AABB is\n * guaranteed to contain the true transformed volume (no false culling).\n *\n * Returns `out`. Aliasing-safe: `box` and `out` may be the same reference.\n *\n * @example\n * ```ts\n * import { box3, mat4 } from '@forgeax/engine-math';\n * const box = box3.create(-1, -1, -1, 1, 1, 1);\n * const xform = mat4.create();\n * mat4.fromTranslation(xform, [5, 0, 0]);\n * box3.transformBox3(box, box, xform);\n * ```\n */\nexport function transformBox3(out: Box3, box: Box3Like, m: Mat4Like): Box3 {\n const bx = box[0] as number;\n const by = box[1] as number;\n const bz = box[2] as number;\n const bX = box[3] as number;\n const bY = box[4] as number;\n const bZ = box[5] as number;\n\n const m00 = m[0] as number;\n const m01 = m[1] as number;\n const m02 = m[2] as number;\n const m03 = m[3] as number;\n const m10 = m[4] as number;\n const m11 = m[5] as number;\n const m12 = m[6] as number;\n const m13 = m[7] as number;\n const m20 = m[8] as number;\n const m21 = m[9] as number;\n const m22 = m[10] as number;\n const m23 = m[11] as number;\n const m30 = m[12] as number;\n const m31 = m[13] as number;\n const m32 = m[14] as number;\n const m33 = m[15] as number;\n\n // Corner 0: (bx, by, bz)\n let x = m00 * bx + m10 * by + m20 * bz + m30;\n let y = m01 * bx + m11 * by + m21 * bz + m31;\n let z = m02 * bx + m12 * by + m22 * bz + m32;\n let w = m03 * bx + m13 * by + m23 * bz + m33;\n if (w !== 0) {\n const iw = 1 / w;\n x *= iw;\n y *= iw;\n z *= iw;\n }\n let minX = x,\n maxX = x,\n minY = y,\n maxY = y,\n minZ = z,\n maxZ = z;\n\n // Corner 1: (bX, by, bz)\n x = m00 * bX + m10 * by + m20 * bz + m30;\n y = m01 * bX + m11 * by + m21 * bz + m31;\n z = m02 * bX + m12 * by + m22 * bz + m32;\n w = m03 * bX + m13 * by + m23 * bz + m33;\n if (w !== 0) {\n const iw = 1 / w;\n x *= iw;\n y *= iw;\n z *= iw;\n }\n if (x < minX) minX = x;\n if (x > maxX) maxX = x;\n if (y < minY) minY = y;\n if (y > maxY) maxY = y;\n if (z < minZ) minZ = z;\n if (z > maxZ) maxZ = z;\n\n // Corner 2: (bx, bY, bz)\n x = m00 * bx + m10 * bY + m20 * bz + m30;\n y = m01 * bx + m11 * bY + m21 * bz + m31;\n z = m02 * bx + m12 * bY + m22 * bz + m32;\n w = m03 * bx + m13 * bY + m23 * bz + m33;\n if (w !== 0) {\n const iw = 1 / w;\n x *= iw;\n y *= iw;\n z *= iw;\n }\n if (x < minX) minX = x;\n if (x > maxX) maxX = x;\n if (y < minY) minY = y;\n if (y > maxY) maxY = y;\n if (z < minZ) minZ = z;\n if (z > maxZ) maxZ = z;\n\n // Corner 3: (bX, bY, bz)\n x = m00 * bX + m10 * bY + m20 * bz + m30;\n y = m01 * bX + m11 * bY + m21 * bz + m31;\n z = m02 * bX + m12 * bY + m22 * bz + m32;\n w = m03 * bX + m13 * bY + m23 * bz + m33;\n if (w !== 0) {\n const iw = 1 / w;\n x *= iw;\n y *= iw;\n z *= iw;\n }\n if (x < minX) minX = x;\n if (x > maxX) maxX = x;\n if (y < minY) minY = y;\n if (y > maxY) maxY = y;\n if (z < minZ) minZ = z;\n if (z > maxZ) maxZ = z;\n\n // Corner 4: (bx, by, bZ)\n x = m00 * bx + m10 * by + m20 * bZ + m30;\n y = m01 * bx + m11 * by + m21 * bZ + m31;\n z = m02 * bx + m12 * by + m22 * bZ + m32;\n w = m03 * bx + m13 * by + m23 * bZ + m33;\n if (w !== 0) {\n const iw = 1 / w;\n x *= iw;\n y *= iw;\n z *= iw;\n }\n if (x < minX) minX = x;\n if (x > maxX) maxX = x;\n if (y < minY) minY = y;\n if (y > maxY) maxY = y;\n if (z < minZ) minZ = z;\n if (z > maxZ) maxZ = z;\n\n // Corner 5: (bX, by, bZ)\n x = m00 * bX + m10 * by + m20 * bZ + m30;\n y = m01 * bX + m11 * by + m21 * bZ + m31;\n z = m02 * bX + m12 * by + m22 * bZ + m32;\n w = m03 * bX + m13 * by + m23 * bZ + m33;\n if (w !== 0) {\n const iw = 1 / w;\n x *= iw;\n y *= iw;\n z *= iw;\n }\n if (x < minX) minX = x;\n if (x > maxX) maxX = x;\n if (y < minY) minY = y;\n if (y > maxY) maxY = y;\n if (z < minZ) minZ = z;\n if (z > maxZ) maxZ = z;\n\n // Corner 6: (bx, bY, bZ)\n x = m00 * bx + m10 * bY + m20 * bZ + m30;\n y = m01 * bx + m11 * bY + m21 * bZ + m31;\n z = m02 * bx + m12 * bY + m22 * bZ + m32;\n w = m03 * bx + m13 * bY + m23 * bZ + m33;\n if (w !== 0) {\n const iw = 1 / w;\n x *= iw;\n y *= iw;\n z *= iw;\n }\n if (x < minX) minX = x;\n if (x > maxX) maxX = x;\n if (y < minY) minY = y;\n if (y > maxY) maxY = y;\n if (z < minZ) minZ = z;\n if (z > maxZ) maxZ = z;\n\n // Corner 7: (bX, bY, bZ)\n x = m00 * bX + m10 * bY + m20 * bZ + m30;\n y = m01 * bX + m11 * bY + m21 * bZ + m31;\n z = m02 * bX + m12 * bY + m22 * bZ + m32;\n w = m03 * bX + m13 * bY + m23 * bZ + m33;\n if (w !== 0) {\n const iw = 1 / w;\n x *= iw;\n y *= iw;\n z *= iw;\n }\n if (x < minX) minX = x;\n if (x > maxX) maxX = x;\n if (y < minY) minY = y;\n if (y > maxY) maxY = y;\n if (z < minZ) minZ = z;\n if (z > maxZ) maxZ = z;\n\n out[0] = minX;\n out[1] = minY;\n out[2] = minZ;\n out[3] = maxX;\n out[4] = maxY;\n out[5] = maxZ;\n return out;\n}\n","// circle2.ts — 2D bounding-circle namespace (P12 / bounding_2d).\n\nimport * as box2 from './box2';\nimport type { Vec2, Vec2Like } from './types';\n\n/** 2D bounding circle storage: Float32Array [centerX, centerY, radius]. */\nexport type Circle2 = Float32Array & { readonly __circle2: void };\n\n/** Readable 2D bounding-circle input. */\nexport type Circle2Like = ArrayLike<number>;\n\n/** Create a bounding circle. Negative radius is clamped to zero. */\nexport function create(cx = 0, cy = 0, radius = 0): Circle2 {\n return Float32Array.of(cx, cy, radius < 0 ? 0 : radius) as Circle2;\n}\n\n/** Build a circle centered at the point-cloud AABB center and enclosing all points. */\nexport function fromPoints(out: Circle2, points: readonly Vec2Like[]): Circle2 {\n if (points.length === 0) {\n out[0] = 0;\n out[1] = 0;\n out[2] = -1;\n return out;\n }\n const bounds = box2.create();\n box2.fromPoints(bounds, points);\n const cx = ((bounds[0] as number) + (bounds[2] as number)) * 0.5;\n const cy = ((bounds[1] as number) + (bounds[3] as number)) * 0.5;\n let radiusSq = 0;\n for (let i = 0; i < points.length; i++) {\n const point = points[i] as Vec2Like;\n const dx = (point[0] as number) - cx;\n const dy = (point[1] as number) - cy;\n const distanceSq = dx * dx + dy * dy;\n if (distanceSq > radiusSq) radiusSq = distanceSq;\n }\n out[0] = cx;\n out[1] = cy;\n out[2] = Math.sqrt(radiusSq);\n return out;\n}\n\n/** Build the smallest AABB containing the circle. */\nexport function toBox(out: box2.Box2, circle: Circle2Like): box2.Box2 {\n const cx = circle[0] as number;\n const cy = circle[1] as number;\n const radius = circle[2] as number;\n out[0] = cx - radius;\n out[1] = cy - radius;\n out[2] = cx + radius;\n out[3] = cy + radius;\n return out;\n}\n\n/** Write the circle center to out. */\nexport function center(out: Vec2, circle: Circle2Like): Vec2 {\n out[0] = circle[0] as number;\n out[1] = circle[1] as number;\n return out;\n}\n\n/** Return the circle radius. */\nexport function radius(circle: Circle2Like): number {\n return circle[2] as number;\n}\n\n/** Write the closest point in the circle to point. */\nexport function closestPoint(out: Vec2, circle: Circle2Like, point: Vec2Like): Vec2 {\n const dx = (point[0] as number) - (circle[0] as number);\n const dy = (point[1] as number) - (circle[1] as number);\n const distanceSq = dx * dx + dy * dy;\n const r = circle[2] as number;\n if (r < 0) {\n out[0] = circle[0] as number;\n out[1] = circle[1] as number;\n return out;\n }\n if (distanceSq <= r * r || distanceSq < 1e-12) {\n out[0] = point[0] as number;\n out[1] = point[1] as number;\n return out;\n }\n const scale = r / Math.sqrt(distanceSq);\n out[0] = (circle[0] as number) + dx * scale;\n out[1] = (circle[1] as number) + dy * scale;\n return out;\n}\n\n/** True when point is inside the circle, including its boundary. */\nexport function containsPoint(circle: Circle2Like, point: Vec2Like): boolean {\n const dx = (point[0] as number) - (circle[0] as number);\n const dy = (point[1] as number) - (circle[1] as number);\n const r = circle[2] as number;\n return r >= 0 && dx * dx + dy * dy <= r * r;\n}\n\n/** True when two circles overlap, including tangent contact. */\nexport function intersectsCircle(a: Circle2Like, b: Circle2Like): boolean {\n const dx = (a[0] as number) - (b[0] as number);\n const dy = (a[1] as number) - (b[1] as number);\n const radius = (a[2] as number) + (b[2] as number);\n return (a[2] as number) >= 0 && (b[2] as number) >= 0 && dx * dx + dy * dy <= radius * radius;\n}\n\n/** True when the circle overlaps the box, including tangent contact. */\nexport function intersectsBox(circle: Circle2Like, box: box2.Box2Like): boolean {\n return box2.intersectsCircle(box, circle);\n}\n\n/** Return the smallest circle containing both circles. */\nexport function merge(out: Circle2, a: Circle2Like, b: Circle2Like): Circle2 {\n const ax = a[0] as number;\n const ay = a[1] as number;\n const ar = a[2] as number;\n const bx = b[0] as number;\n const by = b[1] as number;\n const br = b[2] as number;\n const dx = bx - ax;\n const dy = by - ay;\n const distance = Math.sqrt(dx * dx + dy * dy);\n if (ar >= distance + br) return createInto(out, ax, ay, ar);\n if (br >= distance + ar) return createInto(out, bx, by, br);\n if (distance < 1e-12) return createInto(out, ax, ay, Math.max(ar, br));\n const nextRadius = (distance + ar + br) * 0.5;\n const shift = (nextRadius - ar) / distance;\n return createInto(out, ax + dx * shift, ay + dy * shift, nextRadius);\n}\n\nfunction createInto(out: Circle2, cx: number, cy: number, r: number): Circle2 {\n out[0] = cx;\n out[1] = cy;\n out[2] = r;\n return out;\n}\n","// color.ts — RGBA color namespace (M5 / T-032)\n//\n// 7-function surface: create / clone / srgbToLinear / linearToSrgb / fromHex / fromCss / toHex\n//\n// Design anchors:\n// - branded Float32Array length 4 [r, g, b, a]; `as Color` casts are funneled inside factories (D-P15)\n// - sRGB ↔ linear: IEC 61966-2-1 piecewise gamma; RGB channels only, alpha pass-through\n// - srgbToLinear: cutoff 0.04045 / linear segment v/12.92 / power segment ((v+0.055)/1.055)^2.4\n// - linearToSrgb: cutoff 0.0031308 / linear segment 12.92*v / power segment 1.055*v^(1/2.4) - 0.055\n// - negatives / NaN returned verbatim (HDR-friendly + IEEE-754 NaN propagation)\n// - fromHex (D-P7): only `#RRGGBB` (7 chars) and `#RRGGBBAA` (9 chars); RGB channels are decoded\n// from sRGB to linear; illegal inputs silently fall\n// back to (0, 0, 0, 1) without throwing (D-P12 degenerate family / AC-06)\n// - #RGB / #RGBA short forms are not supported (stricter than bevy_color::Srgba::hex; less ambiguous\n// in practice; wiki/sources/2026-05-05-bevy-0-19-math-transform-color §Srgba::hex mentions short\n// forms but D-P7 actively tightens the contract)\n// - fromCss: deterministic CSS color boundary for full hex plus common rgb()/rgba()/hsl()/hsla()\n// and named colors; output is linear and illegal inputs use the same black fallback\n// - toHex: alpha=1 → `#rrggbb`; alpha<1 → `#rrggbbaa`; linear components are encoded to sRGB,\n// clamped to [0, 1], multiplied by 255 and rounded; output is lowercase\n//\n// Related: requirements §Surface color lower bound 6 + AC-06 silent fall-back (never raises);\n// plan-strategy D-P7 / D-P12 / §appendix A degenerate registry #14-#16;\n// wiki/sources/2026-05-05-bevy-0-19-math-transform-color §sRGB piecewise gamma;\n// wiki/glam-rs-overview §LinearRgba.\n\nimport type { Color, ColorLike } from './types';\n\nexport type { Color, ColorLike };\n\n// === create / copy ===\n\n/** Create a Color (default RGBA = (0, 0, 0, 1) = opaque black). */\nexport function create(r = 0, g = 0, b = 0, a = 1): Color {\n return Float32Array.of(r, g, b, a) as Color;\n}\n\n/** Allocate a new Color copy. */\nexport function clone(c: ColorLike): Color {\n return Float32Array.of(c[0] as number, c[1] as number, c[2] as number, c[3] as number) as Color;\n}\n\n// === sRGB ↔ linear (IEC 61966-2-1 piecewise gamma) ===\n\n/**\n * Single-channel sRGB → linear (component-level helper).\n *\n * @degrade NaN input → NaN output (IEEE-754 arithmetic propagation); negatives returned verbatim\n * to preserve HDR / specialized rendering needs (same convention as bevy_color::gamma_function;\n * wiki/sources bevy-0-19-color §gamma_function).\n *\n * @example\n * ```ts\n * srgbChannelToLinear(NaN); // → NaN (IEEE-754 propagation)\n * srgbChannelToLinear(-0.1); // → -0.1 (HDR / negative kept verbatim)\n * ```\n */\nfunction srgbChannelToLinear(v: number): number {\n if (Number.isNaN(v)) return Number.NaN;\n if (v <= 0) return v;\n if (v <= 0.04045) return v / 12.92;\n return ((v + 0.055) / 1.055) ** 2.4;\n}\n\n/** Single-channel linear → sRGB (component-level helper). */\nfunction linearChannelToSrgb(v: number): number {\n if (Number.isNaN(v)) return Number.NaN;\n if (v <= 0) return v;\n if (v <= 0.0031308) return v * 12.92;\n return 1.055 * v ** (1 / 2.4) - 0.055;\n}\n\n/**\n * out = sRGB → linear conversion (RGB channels only; alpha passed through).\n *\n * @degrade NaN propagation / negatives returned verbatim (HDR-friendly); alpha is strictly untouched.\n *\n * @example\n * ```ts\n * color.srgbToLinear(out, color.create(NaN, -0.1, 0.5, 0.8));\n * // → out = (NaN, -0.1, ~0.214, 0.8); alpha 0.8 passed through unchanged.\n * ```\n */\nexport function srgbToLinear(out: Color, c: ColorLike): Color {\n out[0] = srgbChannelToLinear(c[0] as number);\n out[1] = srgbChannelToLinear(c[1] as number);\n out[2] = srgbChannelToLinear(c[2] as number);\n out[3] = c[3] as number;\n return out;\n}\n\n/**\n * out = linear → sRGB conversion (RGB channels only; alpha passed through).\n *\n * @degrade NaN propagation / negatives returned verbatim; alpha is strictly untouched.\n *\n * @example\n * ```ts\n * color.linearToSrgb(out, color.create(NaN, -0.05, 0.5, 1));\n * // → out = (NaN, -0.05, ~0.735, 1); alpha is strictly untouched.\n * ```\n */\nexport function linearToSrgb(out: Color, c: ColorLike): Color {\n out[0] = linearChannelToSrgb(c[0] as number);\n out[1] = linearChannelToSrgb(c[1] as number);\n out[2] = linearChannelToSrgb(c[2] as number);\n out[3] = c[3] as number;\n return out;\n}\n\n// === Hex parse / serialize ===\n\nconst HEX_PATTERN = /^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})?$/;\n\n/**\n * Write a Color from a hex string.\n *\n * Only supports the two forms `#RRGGBB` (7 chars) and `#RRGGBBAA` (9 chars) (D-P7);\n * the CSS-style `#RGB` / `#RGBA` short forms are not supported.\n *\n * @degrade Any illegal input (short form / non-hex chars / missing # / wrong length / empty string,\n * etc.) silently falls back to (0, 0, 0, 1); never throws (D-P12 / AC-06).\n *\n * @example\n * ```ts\n * color.fromHex(out, '#ff8000'); // → (1, ~0.216, 0, 1)\n * color.fromHex(out, '#ff800080'); // → (1, ~0.216, 0, 0.502)\n * color.fromHex(out, '#fff'); // → (0, 0, 0, 1) short form unsupported → silent fall-back\n * ```\n */\nexport function fromHex(out: Color, hex: string): Color {\n const match = typeof hex === 'string' ? HEX_PATTERN.exec(hex) : null;\n if (match === null) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n return out;\n }\n out[0] = srgbChannelToLinear(Number.parseInt(match[1] as string, 16) / 255);\n out[1] = srgbChannelToLinear(Number.parseInt(match[2] as string, 16) / 255);\n out[2] = srgbChannelToLinear(Number.parseInt(match[3] as string, 16) / 255);\n out[3] = match[4] !== undefined ? Number.parseInt(match[4], 16) / 255 : 1;\n return out;\n}\n\nconst CSS_HEX_PATTERN = /^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i;\nconst CSS_RGB_PATTERN = /^rgba?\\(([^()]*)\\)$/i;\nconst CSS_HSL_PATTERN = /^hsla?\\(([^()]*)\\)$/i;\nconst CSS_DECIMAL_PATTERN = /^[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)$/;\n\nconst CSS_NAMED_COLORS: Readonly<Record<string, string>> = {\n black: '#000000',\n blue: '#0000ff',\n cyan: '#00ffff',\n fuchsia: '#ff00ff',\n gray: '#808080',\n green: '#008000',\n grey: '#808080',\n lime: '#00ff00',\n magenta: '#ff00ff',\n maroon: '#800000',\n navy: '#000080',\n olive: '#808000',\n orange: '#ffa500',\n purple: '#800080',\n red: '#ff0000',\n silver: '#c0c0c0',\n teal: '#008080',\n transparent: '#00000000',\n white: '#ffffff',\n yellow: '#ffff00',\n};\n\nfunction clamp01(v: number): number {\n return Math.min(1, Math.max(0, v));\n}\n\nfunction parseCssChannel(token: string): number | undefined {\n const trimmed = token.trim();\n if (trimmed.endsWith('%')) {\n const raw = trimmed.slice(0, -1).trim();\n if (!CSS_DECIMAL_PATTERN.test(raw)) return undefined;\n const value = Number(raw);\n return Number.isFinite(value) ? clamp01(value / 100) : undefined;\n }\n if (!CSS_DECIMAL_PATTERN.test(trimmed)) return undefined;\n const value = Number(trimmed);\n return Number.isFinite(value) ? clamp01(value / 255) : undefined;\n}\n\nfunction parseCssAlpha(token: string): number | undefined {\n const trimmed = token.trim();\n if (trimmed.endsWith('%')) {\n const raw = trimmed.slice(0, -1).trim();\n if (!CSS_DECIMAL_PATTERN.test(raw)) return undefined;\n const value = Number(raw);\n return Number.isFinite(value) ? clamp01(value / 100) : undefined;\n }\n if (!CSS_DECIMAL_PATTERN.test(trimmed)) return undefined;\n const value = Number(trimmed);\n return Number.isFinite(value) ? clamp01(value) : undefined;\n}\n\nfunction parseCssHue(token: string): number | undefined {\n const match = /^([+-]?(?:\\d+\\.?\\d*|\\.\\d+))(deg|grad|rad|turn)?$/i.exec(token.trim());\n if (match === null) return undefined;\n const raw = Number(match[1] as string);\n if (!Number.isFinite(raw)) return undefined;\n const unit = (match[2] ?? 'deg').toLowerCase();\n const degrees =\n unit === 'grad'\n ? raw * 0.9\n : unit === 'rad'\n ? (raw * 180) / Math.PI\n : unit === 'turn'\n ? raw * 360\n : raw;\n return ((degrees % 360) + 360) % 360;\n}\n\nfunction parseCssPercentage(token: string): number | undefined {\n const trimmed = token.trim();\n if (!trimmed.endsWith('%')) return undefined;\n const raw = trimmed.slice(0, -1).trim();\n if (!CSS_DECIMAL_PATTERN.test(raw)) return undefined;\n const value = Number(raw);\n return Number.isFinite(value) ? clamp01(value / 100) : undefined;\n}\n\nfunction splitCssColorArgs(\n body: string,\n): { channels: [string, string, string]; alpha?: string } | undefined {\n const source = body.trim();\n if (source.length === 0) return undefined;\n if (source.includes(',')) {\n if (source.includes('/')) return undefined;\n const parts = source.split(',').map((part) => part.trim());\n if (parts.length !== 3 && parts.length !== 4) return undefined;\n if (parts.some((part) => part.length === 0)) return undefined;\n return {\n channels: [parts[0] as string, parts[1] as string, parts[2] as string],\n ...(parts.length === 4 ? { alpha: parts[3] as string } : {}),\n };\n }\n const tokens = source.replaceAll('/', ' / ').split(/\\s+/);\n const slash = tokens.indexOf('/');\n if (slash === -1) {\n if (tokens.length !== 3) return undefined;\n return { channels: [tokens[0] as string, tokens[1] as string, tokens[2] as string] };\n }\n if (slash !== 3 || tokens.length !== 5 || tokens[4] === undefined) return undefined;\n return {\n channels: [tokens[0] as string, tokens[1] as string, tokens[2] as string],\n alpha: tokens[4],\n };\n}\n\nfunction hslToSrgb(hue: number, saturation: number, lightness: number): [number, number, number] {\n const chroma = (1 - Math.abs(2 * lightness - 1)) * saturation;\n const h = hue / 60;\n const x = chroma * (1 - Math.abs((h % 2) - 1));\n const [r1, g1, b1] =\n h < 1\n ? [chroma, x, 0]\n : h < 2\n ? [x, chroma, 0]\n : h < 3\n ? [0, chroma, x]\n : h < 4\n ? [0, x, chroma]\n : h < 5\n ? [x, 0, chroma]\n : [chroma, 0, x];\n const m = lightness - chroma / 2;\n return [r1 + m, g1 + m, b1 + m];\n}\n\nfunction cssFallback(out: Color): Color {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n return out;\n}\n\n/**\n * Write a Color from a deterministic CSS color string.\n *\n * Supports full and short hex, common named colors, rgb()/rgba() channel\n * numbers or percentages, and hsl()/hsla() with an optional alpha. RGB\n * channels are decoded to linear-sRGB; alpha is passed through unchanged.\n * Unsupported or malformed input silently falls back to opaque black.\n */\nexport function fromCss(out: Color, css: string): Color {\n if (typeof css !== 'string') return cssFallback(out);\n const source = css.trim().toLowerCase();\n const named = CSS_NAMED_COLORS[source];\n if (named !== undefined) return fromHex(out, named);\n const fullHex = CSS_HEX_PATTERN.exec(source);\n if (fullHex !== null) {\n const digits = fullHex[1] as string;\n if (digits.length === 3 || digits.length === 4) {\n const expanded = [...digits].map((channel) => `${channel}${channel}`).join('');\n return fromHex(out, `#${expanded}`);\n }\n return fromHex(out, source);\n }\n\n const rgb = CSS_RGB_PATTERN.exec(source);\n if (rgb !== null) {\n const args = splitCssColorArgs(rgb[1] as string);\n if (args === undefined) return cssFallback(out);\n const r = parseCssChannel(args.channels[0]);\n const g = parseCssChannel(args.channels[1]);\n const b = parseCssChannel(args.channels[2]);\n const alpha = args.alpha === undefined ? 1 : parseCssAlpha(args.alpha);\n if (r === undefined || g === undefined || b === undefined || alpha === undefined)\n return cssFallback(out);\n out[0] = srgbChannelToLinear(r);\n out[1] = srgbChannelToLinear(g);\n out[2] = srgbChannelToLinear(b);\n out[3] = alpha;\n return out;\n }\n\n const hsl = CSS_HSL_PATTERN.exec(source);\n if (hsl !== null) {\n const args = splitCssColorArgs(hsl[1] as string);\n if (args === undefined) return cssFallback(out);\n const hue = parseCssHue(args.channels[0]);\n const saturation = parseCssPercentage(args.channels[1]);\n const lightness = parseCssPercentage(args.channels[2]);\n const alpha = args.alpha === undefined ? 1 : parseCssAlpha(args.alpha);\n if (\n hue === undefined ||\n saturation === undefined ||\n lightness === undefined ||\n alpha === undefined\n )\n return cssFallback(out);\n const [r, g, b] = hslToSrgb(hue, saturation, lightness);\n out[0] = srgbChannelToLinear(r);\n out[1] = srgbChannelToLinear(g);\n out[2] = srgbChannelToLinear(b);\n out[3] = alpha;\n return out;\n }\n return cssFallback(out);\n}\n\n/** Encode one linear component to sRGB, then clamp + ×255 + round. */\nfunction toHexByte(v: number, encodeLinear = true): string {\n if (Number.isNaN(v)) return '00';\n const clamped = Math.max(0, Math.min(1, encodeLinear ? linearChannelToSrgb(v) : v));\n const byte = Math.round(clamped * 255);\n return byte.toString(16).padStart(2, '0');\n}\n\n/**\n * Serialize as hex string: alpha=1 → `#rrggbb`; alpha<1 → `#rrggbbaa`.\n *\n * @degrade Out-of-range components (HDR > 1 / negatives) are clamped to [0, 1] then rounded;\n * **truncated** rather than throwing (symmetric with fromHex's silent fall-back). NaN components →\n * literal '00' (same byte as 0.0; prevents the hex-string builder from throwing; alpha=NaN takes the\n * alpha=1 path, emitting the short `#rrggbb` form).\n *\n * @example\n * ```ts\n * color.toHex(color.create(2, -0.1, 0.5, 1)); // → '#ff00bc' (linear HDR/negative clamp)\n * color.toHex(color.create(1, 0, 0, 0.5)); // → '#ff000080'\n * color.toHex(color.create(NaN, 0, 0, NaN)); // → '#000000' (NaN→'00', alpha=NaN takes short form)\n * ```\n */\nexport function toHex(c: ColorLike): string {\n const r = toHexByte(c[0] as number);\n const g = toHexByte(c[1] as number);\n const b = toHexByte(c[2] as number);\n const aValue = c[3] as number;\n if (aValue >= 1 || Number.isNaN(aValue)) {\n return `#${r}${g}${b}`;\n }\n const a = toHexByte(aValue, false);\n return `#${r}${g}${b}${a}`;\n}\n","// easing.ts — easing-function namespace (solo round 20260713-233409)\n//\n// 4-function surface: cubicInOut / smoothstep / smootherstep / elasticInOut\n// (GLSL `smoothstep`, Perlin's smootherstep; Bevy `EaseFunction::SmoothStep`/`SmootherStep`).\n// Scalar time-remaps t → number: take a normalized parameter and return an eased value. The\n// growable home for Bevy's `EaseFunction` family — further variants (sine / quad / bounce /\n// steps) land here add-only.\n//\n// Every function clamps the input to [0, 1] first (GLSL / Bevy semantics), so out-of-range t\n// saturates to the endpoints rather than extrapolating the curve.\n\nimport { clamp } from './_internal/scalar';\n\n/** Cubic ease-in-out: Bevy `EaseFunction::CubicInOut`, clamped to [0, 1]. */\nexport function cubicInOut(t: number): number {\n const x = clamp(t, 0, 1);\n return x < 0.5 ? 4 * x * x * x : 1 - (-2 * x + 2) ** 3 / 2;\n}\n\n/**\n * Smoothstep S-curve: `3t² − 2t³` on the clamped input. GLSL `smoothstep` (with edges 0/1),\n * Bevy `EaseFunction::SmoothStep`. f(0)=0, f(1)=1, f′(0)=f′(1)=0 (slow-in / slow-out).\n * Input clamped to [0, 1]. Use to ease a normalized time / lerp factor instead of a linear ramp.\n */\nexport function smoothstep(t: number): number {\n const x = clamp(t, 0, 1);\n return x * x * (3 - 2 * x);\n}\n\n/**\n * Smootherstep (Perlin) S-curve: `6t⁵ − 15t⁴ + 10t³` on the clamped input. Bevy\n * `EaseFunction::SmootherStep`. Like {@link smoothstep} but ALSO has zero 2nd derivatives at\n * the endpoints (f″(0)=f″(1)=0), so acceleration is continuous — a gentler, more natural ease.\n * Input clamped to [0, 1].\n */\nexport function smootherstep(t: number): number {\n const x = clamp(t, 0, 1);\n return x * x * x * (x * (x * 6 - 15) + 10);\n}\n\n/** Elastic ease-in-out: Bevy `EaseFunction::ElasticInOut`, clamped to [0, 1]. */\nexport function elasticInOut(t: number): number {\n const x = clamp(t, 0, 1);\n if (x === 0 || x === 1) return x;\n const c5 = (2 * Math.PI) / 4.5;\n return x < 0.5\n ? -(2 ** (20 * x - 10) * Math.sin((20 * x - 11.125) * c5)) / 2\n : (2 ** (-20 * x + 10) * Math.sin((20 * x - 11.125) * c5)) / 2 + 1;\n}\n","// _internal/scalar.ts — scalar helper SSOT (D-P13 not exported from package)\n//\n// Provides the scalar-layer building blocks reused across the vec/mat/quat namespaces;\n// avoids duplicate implementations.\n// Not exported through src/index.ts; indirectly covered by the public API tests of the dim files\n// (plan-strategy §4.1 exemption).\n//\n// Related: plan-strategy §1.1 file layering (_internal/scalar.ts) + D-P13 _internal not exported;\n// requirements §duplicate-code elimination strategy D mixed.\n\n/**\n * Scalar linear interpolation. t is not clamped (extrapolation semantics preserved,\n * matches glam Vec3.lerp / wgpu-matrix).\n */\nexport function lerp(a: number, b: number, t: number): number {\n return a + (b - a) * t;\n}\n\n/** Squared length of a four-component numeric value. */\nexport function lengthSq4(a: ArrayLike<number>): number {\n const x = a[0] as number;\n const y = a[1] as number;\n const z = a[2] as number;\n const w = a[3] as number;\n return x * x + y * y + z * z + w * w;\n}\n\n/** Normalize a four-component numeric value into a typed-array output. */\nexport function normalize4(out: Float32Array, a: ArrayLike<number>, epsilon: number): void {\n const lenSq = lengthSq4(a);\n if (lenSq < epsilon) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n return;\n }\n const inv = 1 / Math.sqrt(lenSq);\n out[0] = (a[0] as number) * inv;\n out[1] = (a[1] as number) * inv;\n out[2] = (a[2] as number) * inv;\n out[3] = (a[3] as number) * inv;\n}\n\n/**\n * Exponential-decay smoothing factor for frame-rate-INDEPENDENT damping:\n * `1 − exp(−decayRate · dt)`. The single value the vec `smoothDamp` helpers interpolate by.\n *\n * SSOT for the smooth-nudge semantics (Bevy `StableInterpolate::smooth_nudge`,\n * three.js `MathUtils.damp`): the returned factor composes multiplicatively over dt —\n * `exp(−k·(a+b)) = exp(−k·a)·exp(−k·b)` — so one step of dt equals two steps of dt/2, the\n * property a naive `rate·dt` factor violates. `dt=0` → 0 (no move); `decayRate·dt → ∞` → 1\n * (snap to target); `decayRate=0` → 0 (no effect). NaN propagates via Math.exp.\n */\nexport function smoothDecayFactor(decayRate: number, dt: number): number {\n return 1 - Math.exp(-decayRate * dt);\n}\n\n/**\n * Scalar Catmull-Rom spline value on the segment between `b` and `c`, with `a` / `d` the\n * neighbor control points that set the endpoint tangents. Tension 0.5 (the Catmull-Rom\n * special case of a Cardinal spline, and the Bevy default). SSOT for the vec `catmullRom`\n * helpers — the coefficient matrix lives here once (Bevy `CubicCardinalSpline::char_matrix`\n * with s=0.5):\n * c0 = b\n * c1 = 0.5 (c − a)\n * c2 = a − 2.5 b + 2 c − 0.5 d\n * c3 = −0.5 a + 1.5 b − 1.5 c + 0.5 d\n * value = c0 + c1 t + c2 t² + c3 t³\n * Interpolates the control points: t=0 → b, t=1 → c. `t` is not clamped (extrapolation\n * beyond the segment follows the same cubic, matching `lerp`'s unclamped semantics).\n */\nexport function catmullRomScalar(a: number, b: number, c: number, d: number, t: number): number {\n const c0 = b;\n const c1 = 0.5 * (c - a);\n const c2 = a - 2.5 * b + 2 * c - 0.5 * d;\n const c3 = -0.5 * a + 1.5 * b - 1.5 * c + 0.5 * d;\n const t2 = t * t;\n const t3 = t2 * t;\n return c0 + c1 * t + c2 * t2 + c3 * t3;\n}\n\n/**\n * Numeric clamp into the closed interval [min, max]. Returns NaN when v is NaN (NaN propagation).\n */\nexport function clamp(v: number, min: number, max: number): number {\n if (v < min) return min;\n if (v > max) return max;\n return v;\n}\n","// euler.ts — Euler angle namespace (M4 / T-028)\n//\n// 6-function surface (≥ 6 lower bound):\n// create / clone / set / fromQuat / toQuat / fromRotationMatrix\n//\n// Memory layout: plain object `{ x: number, y: number, z: number, order: EulerOrder }`\n// (not a Float32Array). Rationale:\n// - need to store length=3 plus a string order; strings cannot live inside a TypedArray\n// - performance-insensitive (euler is only used at the editor/IO boundary; runtime always converts to Quat)\n//\n// 6 orders (intrinsic rotation; literal order x → y → z):\n// XYZ / YXZ / ZXY / ZYX / YZX / XZY\n//\n// Degenerate convention (plan-strategy §appendix A degenerate registry #16):\n// - fromQuat(q, order) gimbal-lock (pitch ≈ ±π/2) → pick an equivalent branch; never throws\n// - fromRotationMatrix follows the same convention\n//\n// Related: requirements §Surface euler lower bound 6 + 6-order full support;\n// plan-strategy §1.1 euler.ts + §appendix A degenerate registry #16 + D-P19 EulerOrder union;\n// wiki/glam-rs-overview Hamilton convention +\n// Three.js Euler.setFromQuaternion / setFromRotationMatrix 6-order formulas.\n//\n// Degenerate-semantics registry (plan-strategy.md §appendix A; D-P16 dual promise:\n// runtime silent + JSDoc `@degrade` + `@example` guard pattern landing together):\n// #16 euler.fromQuat(q, order) gimbal-lock → pick equivalent branch (no throw)\n// #17 euler.fromRotationMatrix gimbal-lock → same as above\n\nimport * as quat from './quat';\nimport type { Euler, EulerOrder, Mat3Like, Quat, QuatLike } from './types';\n\nexport type { Euler, EulerOrder };\n\n/** Create an Euler, defaulting to (0, 0, 0, 'XYZ'). */\nexport function create(): Euler {\n return { x: 0, y: 0, z: 0, order: 'XYZ' };\n}\n\n/** Allocate a new Euler copy. */\nexport function clone(a: Euler): Euler {\n return { x: a.x, y: a.y, z: a.z, order: a.order };\n}\n\n/** out.x/y/z/order = inputs; returns out (in-place). */\nexport function set(out: Euler, x: number, y: number, z: number, order: EulerOrder): Euler {\n out.x = x;\n out.y = y;\n out.z = z;\n out.order = order;\n return out;\n}\n\n/**\n * out (Quat) = quaternion from euler. Returns out.\n *\n * Routes directly to quat.fromEuler (D-P2 + 6-order coverage already implemented inside quat).\n *\n * @example\n * ```ts\n * euler.toQuat(quatBuf, eulerInstance);\n * ```\n */\nexport function toQuat(out: Quat, e: Euler): Quat {\n return quat.fromEuler(out, e.x, e.y, e.z, e.order);\n}\n\n/**\n * out (Euler) = euler angles from quaternion in given order. Returns out.\n *\n * Implementation path: quat → 3x3 column-major rotation matrix → fromRotationMatrix(order).\n * This concentrates the 6-order formulas in fromRotationMatrix and avoids dual maintenance.\n *\n * @degrade gimbal lock (pitch ≈ ±π/2, sin/cos critical) → set yaw to 0 and let roll absorb the\n * full rotation (registry #16; same equivalent-branch semantics as Three.js; no throw).\n *\n * @example\n * ```ts\n * euler.fromQuat(out, q, 'XYZ');\n * ```\n */\nexport function fromQuat(out: Euler, q: QuatLike, order: EulerOrder): Euler {\n // Expand q into a 3x3 column-major rotation matrix (matching the index convention of quat.fromRotationMatrix)\n const x = q[0] as number;\n const y = q[1] as number;\n const z = q[2] as number;\n const w = q[3] as number;\n const xx = x * x;\n const xy = x * y;\n const xz = x * z;\n const yy = y * y;\n const yz = y * z;\n const zz = z * z;\n const wx = w * x;\n const wy = w * y;\n const wz = w * z;\n\n // mat3 column-major: m[col*3+row] → m00=col0row0, m01=col0row1, m10=col1row0...\n // R[row][col] maps to m[col*3+row]:\n // R[0][0]=m00,R[0][1]=m10,R[0][2]=m20\n // R[1][0]=m01,R[1][1]=m11,R[1][2]=m21\n // R[2][0]=m02,R[2][1]=m12,R[2][2]=m22\n const m = new Float32Array(9);\n m[0] = 1 - 2 * (yy + zz);\n m[1] = 2 * (xy + wz);\n m[2] = 2 * (xz - wy);\n m[3] = 2 * (xy - wz);\n m[4] = 1 - 2 * (xx + zz);\n m[5] = 2 * (yz + wx);\n m[6] = 2 * (xz + wy);\n m[7] = 2 * (yz - wx);\n m[8] = 1 - 2 * (xx + yy);\n\n return fromRotationMatrix(out, m, order);\n}\n\n/**\n * out (Euler) = euler from a 3x3 rotation matrix m (column-major, length 9) in `order`. Returns out.\n *\n * Uses the Three.js Euler.setFromRotationMatrix formulas (intrinsic rotation + Hamilton convention).\n * Each of the 6 orders has an analytic formula; near gimbal-lock (middle axis sin/cos near ±1)\n * an equivalent branch is selected.\n *\n * @degrade gimbal lock → middle axis is fixed at ±π/2; the remaining two axes degenerate\n * (one is set to 0; the other absorbs the rotation).\n *\n * @example\n * ```ts\n * euler.fromRotationMatrix(out, mat3InstanceColumnMajor, 'XYZ');\n * ```\n */\nexport function fromRotationMatrix(out: Euler, m: Mat3Like, order: EulerOrder): Euler {\n // Column-major indexing (matches quat.fromRotationMatrix):\n // m00 m01 m02 = column 0 (col=0)'s row=0/1/2\n // m10 m11 m12 = column 1 (col=1)'s row=0/1/2\n // m20 m21 m22 = column 2 (col=2)'s row=0/1/2\n // Mathematically R[row][col] = m[c*3 + r].\n // Thus, in the Three.js formulas, m11 (R[0][0]) corresponds to our m[0],\n // m12 (R[0][1]) corresponds to m[3],\n // m13 (R[0][2]) corresponds to m[6],\n // m21 (R[1][0]) corresponds to m[1], etc.\n // For readability and alignment with Three.js naming, alias (_ij denotes R[i-1][j-1]):\n const _11 = m[0] as number;\n const _21 = m[1] as number;\n const _31 = m[2] as number;\n const _12 = m[3] as number;\n const _22 = m[4] as number;\n const _32 = m[5] as number;\n const _13 = m[6] as number;\n const _23 = m[7] as number;\n const _33 = m[8] as number;\n\n out.order = order;\n switch (order) {\n case 'XYZ':\n out.y = Math.asin(clamp11(_13));\n if (Math.abs(_13) < 1 - 1e-7) {\n out.x = Math.atan2(-_23, _33);\n out.z = Math.atan2(-_12, _11);\n } else {\n // gimbal lock\n out.x = Math.atan2(_32, _22);\n out.z = 0;\n }\n break;\n case 'YXZ':\n out.x = Math.asin(-clamp11(_23));\n if (Math.abs(_23) < 1 - 1e-7) {\n out.y = Math.atan2(_13, _33);\n out.z = Math.atan2(_21, _22);\n } else {\n out.y = Math.atan2(-_31, _11);\n out.z = 0;\n }\n break;\n case 'ZXY':\n out.x = Math.asin(clamp11(_32));\n if (Math.abs(_32) < 1 - 1e-7) {\n out.y = Math.atan2(-_31, _33);\n out.z = Math.atan2(-_12, _22);\n } else {\n out.y = 0;\n out.z = Math.atan2(_21, _11);\n }\n break;\n case 'ZYX':\n out.y = Math.asin(-clamp11(_31));\n if (Math.abs(_31) < 1 - 1e-7) {\n out.x = Math.atan2(_32, _33);\n out.z = Math.atan2(_21, _11);\n } else {\n out.x = 0;\n out.z = Math.atan2(-_12, _22);\n }\n break;\n case 'YZX':\n out.z = Math.asin(clamp11(_21));\n if (Math.abs(_21) < 1 - 1e-7) {\n out.x = Math.atan2(-_23, _22);\n out.y = Math.atan2(-_31, _11);\n } else {\n out.x = 0;\n out.y = Math.atan2(_13, _33);\n }\n break;\n case 'XZY':\n out.z = Math.asin(-clamp11(_12));\n if (Math.abs(_12) < 1 - 1e-7) {\n out.x = Math.atan2(_32, _22);\n out.y = Math.atan2(_13, _11);\n } else {\n out.x = Math.atan2(-_23, _33);\n out.y = 0;\n }\n break;\n default:\n // Silent fallback to 'XYZ' (same convention as quat.fromEuler D-P2)\n out.y = Math.asin(clamp11(_13));\n if (Math.abs(_13) < 1 - 1e-7) {\n out.x = Math.atan2(-_23, _33);\n out.z = Math.atan2(-_12, _11);\n } else {\n out.x = Math.atan2(_32, _22);\n out.z = 0;\n }\n out.order = 'XYZ';\n break;\n }\n\n return out;\n}\n\n/**\n * Internal: clamp to [-1, 1] to keep asin from receiving out-of-range inputs (floating-point error\n * may make |x| slightly > 1; same guard as Three.js; not counted in the surface).\n */\nfunction clamp11(v: number): number {\n if (v < -1) return -1;\n if (v > 1) return 1;\n return v;\n}\n","// quat.ts — quaternion namespace (M4 / T-027)\n//\n// 23-function surface (≥ 16 lower bound):\n// create / clone / identity / fromAxisAngle / fromEuler / fromRotationMatrix /\n// fromLookAt / fromUnitVectors / multiply / rotateAxis / slerp / nlerp / invert /\n// conjugate / dot / length / lengthSq / transformVec3 / normalize / eulerY /\n// right / up / forward\n//\n// Memory layout lock: Float32Array length 4 [x, y, z, w], **Hamilton convention**\n// (graphics mainstream: glm / Three.js / wgpu-matrix / DirectXMath / glam are all Hamilton (x,y,z,w)).\n// Identity = [0, 0, 0, 1].\n//\n// Degenerate convention (plan-strategy §appendix A degenerate registry #8-#13):\n// - fromAxisAngle(0-axis, _) → identity (same convention as the M2 baseline)\n// - fromEuler(x, y, z, 'unknown') → silent fallback to 'XYZ' (D-P2 + AC-06 no throw)\n// - slerp(a, b, t) when dot(a,b) < -EPS_SLERP_DOT_LIMIT → negate b then slerp normally (D-P6)\n// - slerp(a, b, t) when |dot| > 1 - EPS_SLERP_DOT_LIMIT → falls back to nlerp (avoids acos blow-up)\n// - fromUnitVectors(v, -v) → pick perpendicular axis (prefer (0,1,0); fall back to (1,0,0) if\n// collinear with v) and 180° rotation (D-P18)\n// - fromUnitVectors(v, v) → identity\n// - normalize(zero quat) → out = zero (same convention as vec.normalize)\n//\n// Four ironclad rules (gl-matrix wiki / research §F1):\n// 1. Out-param first; 2. Aliasing-safe; 3. Module-as-namespace; 4. Float32Array by default.\n//\n// Related: requirements §Surface quat lower bound 16 + AC-06 no throw + AC-08 naming alignment +\n// AC-01 brand + boundary-case quat row;\n// plan-strategy §6 M4 + D-P2/D-P6/D-P18 + §appendix A degenerate registry #8-#13;\n// research §Finding 3 glam Hamilton + §fact-correction 4 fromEuler unknown silenced;\n// wiki/gl-matrix-overview §quat degenerate anchor + wiki/glam-rs-overview §Hamilton +\n// wiki/wgpu-matrix-overview §quat namespace.\n//\n// Degenerate-semantics registry (plan-strategy.md §appendix A; shares numbering with mat;\n// D-P16 dual promise: runtime silent + JSDoc `@degrade` + `@example` guard pattern landing together):\n// #8 quat.fromAxisAngle(0-axis, _) → out = identity\n// #9 quat.fromEuler(_, _, _, unknown) → silently computes as 'XYZ' (D-P2)\n// #10 quat.slerp(a, b, t) dot < -1+ε → negate b then slerp (D-P6)\n// #11 quat.slerp(a, b, t) |dot| > 1-ε → falls back to nlerp\n// #12 quat.fromUnitVectors(v, -v) → perpendicular-axis 180° rotation (D-P18)\n// #13 quat.fromUnitVectors(v, v) → out = identity\n\nimport { EPS_NORMALIZE, EPS_QUAT_PARALLEL, EPS_SLERP_DOT_LIMIT } from './_internal/epsilon';\nimport { lengthSq4, normalize4 } from './_internal/scalar';\nimport type { EulerOrder, Mat3Like, Quat, QuatLike, Vec3, Vec3Like } from './types';\n\nexport type { Quat, QuatLike };\n\n// Canonical axes for the local-basis accessors (right / up / forward). −Z is the\n// forward convention (RL-4), matching mat4.getForward and fromLookAt.\nconst UNIT_X = [1, 0, 0] as const;\nconst UNIT_Y = [0, 1, 0] as const;\nconst UNIT_NEG_Z = [0, 0, -1] as const;\n\n/** Create a Quat (default all zero; callers usually call identity() right after). */\nexport function create(): Quat {\n return new Float32Array(4) as Quat;\n}\n\n/** Allocate a new Quat copy. */\nexport function clone(a: QuatLike): Quat {\n return Float32Array.of(a[0] as number, a[1] as number, a[2] as number, a[3] as number) as Quat;\n}\n\n/** out = identity quaternion [0, 0, 0, 1]. Returns out. */\nexport function identity(out: Quat): Quat {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n return out;\n}\n\n/**\n * out = quaternion representing rotation by angleRadians around axis. Returns out.\n *\n * axis does not have to be pre-normalized; this function normalizes it internally.\n *\n * @degrade axis is the zero vector (lengthSq < EPS_NORMALIZE) → out = identity\n * (no throw, registry #8).\n *\n * @example\n * ```ts\n * quat.fromAxisAngle(out, [0, 1, 0], Math.PI / 2);\n * // Guard: if (vec3.lengthSq(axis) < EPS_NORMALIZE) skip;\n * ```\n */\nexport function fromAxisAngle(out: Quat, axis: Vec3Like, angleRadians: number): Quat {\n const ax = axis[0] as number;\n const ay = axis[1] as number;\n const az = axis[2] as number;\n const lenSq = ax * ax + ay * ay + az * az;\n if (lenSq < EPS_NORMALIZE) {\n return identity(out);\n }\n const inv = 1 / Math.sqrt(lenSq);\n const half = angleRadians / 2;\n const s = Math.sin(half);\n out[0] = ax * inv * s;\n out[1] = ay * inv * s;\n out[2] = az * inv * s;\n out[3] = Math.cos(half);\n return out;\n}\n\n/**\n * out = quaternion from intrinsic Euler angles (x, y, z, order). Returns out.\n *\n * Angle unit = **radians** (aligned with wgpu-matrix / Three.js; research §fact-correction 4\n * deviates from gl-matrix's degrees).\n * 6 orders: XYZ / YXZ / ZXY / ZYX / YZX / XZY (intrinsic rotation: literal order x → y → z).\n * Implementation: split each axis rotation into single-axis quaternions, then Hamilton-multiply\n * in `order`.\n *\n * @degrade order outside the EulerOrder union (only possible via `as any` cast) →\n * **silently computes as if 'XYZ'** (D-P2 + AC-06 no throw; registry #9).\n *\n * @example\n * ```ts\n * quat.fromEuler(out, 0.5, 0.3, 0.1, 'XYZ');\n * quat.fromEuler(out, 0.5, 0.3, 0.1, 'unknown' as any); // silently computed as 'XYZ'\n * // Guard: pass an EulerOrder union literal; the TS layer already blocks unknown strings.\n * ```\n */\nexport function fromEuler(out: Quat, x: number, y: number, z: number, order: EulerOrder): Quat {\n // Single-axis half-angle quat coefficients\n const c1 = Math.cos(x / 2);\n const c2 = Math.cos(y / 2);\n const c3 = Math.cos(z / 2);\n const s1 = Math.sin(x / 2);\n const s2 = Math.sin(y / 2);\n const s3 = Math.sin(z / 2);\n\n // Formulas from Three.js Quaternion.setFromEuler (intrinsic rotation, Hamilton convention).\n // 6 orders dispatched via switch; unknown silently falls back to XYZ (D-P2).\n switch (order) {\n case 'XYZ':\n out[0] = s1 * c2 * c3 + c1 * s2 * s3;\n out[1] = c1 * s2 * c3 - s1 * c2 * s3;\n out[2] = c1 * c2 * s3 + s1 * s2 * c3;\n out[3] = c1 * c2 * c3 - s1 * s2 * s3;\n break;\n case 'YXZ':\n out[0] = s1 * c2 * c3 + c1 * s2 * s3;\n out[1] = c1 * s2 * c3 - s1 * c2 * s3;\n out[2] = c1 * c2 * s3 - s1 * s2 * c3;\n out[3] = c1 * c2 * c3 + s1 * s2 * s3;\n break;\n case 'ZXY':\n out[0] = s1 * c2 * c3 - c1 * s2 * s3;\n out[1] = c1 * s2 * c3 + s1 * c2 * s3;\n out[2] = c1 * c2 * s3 + s1 * s2 * c3;\n out[3] = c1 * c2 * c3 - s1 * s2 * s3;\n break;\n case 'ZYX':\n out[0] = s1 * c2 * c3 - c1 * s2 * s3;\n out[1] = c1 * s2 * c3 + s1 * c2 * s3;\n out[2] = c1 * c2 * s3 - s1 * s2 * c3;\n out[3] = c1 * c2 * c3 + s1 * s2 * s3;\n break;\n case 'YZX':\n out[0] = s1 * c2 * c3 + c1 * s2 * s3;\n out[1] = c1 * s2 * c3 + s1 * c2 * s3;\n out[2] = c1 * c2 * s3 - s1 * s2 * c3;\n out[3] = c1 * c2 * c3 - s1 * s2 * s3;\n break;\n case 'XZY':\n out[0] = s1 * c2 * c3 - c1 * s2 * s3;\n out[1] = c1 * s2 * c3 - s1 * c2 * s3;\n out[2] = c1 * c2 * s3 + s1 * s2 * c3;\n out[3] = c1 * c2 * c3 + s1 * s2 * s3;\n break;\n default:\n // D-P2 + AC-06: unknown order silently falls back to 'XYZ' (no throw, no console.warn).\n out[0] = s1 * c2 * c3 + c1 * s2 * s3;\n out[1] = c1 * s2 * c3 - s1 * c2 * s3;\n out[2] = c1 * c2 * s3 + s1 * s2 * c3;\n out[3] = c1 * c2 * c3 - s1 * s2 * s3;\n break;\n }\n return out;\n}\n\n/**\n * out = quaternion from a 3x3 rotation matrix m (column-major, length 9). Returns out.\n *\n * Implementation: Shepperd's case-split (branch on trace / largest diagonal entry); numerically\n * more stable than the direct trace method (avoids sqrt(0) when trace ≈ -1).\n *\n * Assumption: m is a pure rotation matrix (|det|=1, columns orthogonal). If not, the result is\n * undefined but does not throw.\n *\n * @degrade m is not a pure rotation (contains shear / scale) → numerically undefined but does\n * not throw (AC-06 no throw; callers should normalize column vectors first or avoid\n * introducing non-pure-rotation matrices at the ECS-design layer).\n *\n * @example\n * ```ts\n * quat.fromRotationMatrix(out, mat3InstanceColumnMajor);\n * ```\n */\nexport function fromRotationMatrix(out: Quat, m: Mat3Like): Quat {\n const m00 = m[0] as number;\n const m01 = m[1] as number;\n const m02 = m[2] as number;\n const m10 = m[3] as number;\n const m11 = m[4] as number;\n const m12 = m[5] as number;\n const m20 = m[6] as number;\n const m21 = m[7] as number;\n const m22 = m[8] as number;\n\n // m is column-major: m[col*3+row] → m00 is col=0,row=0; m01 is col=0,row=1.\n // Rotation matrix R[row][col]:\n // R[0][0]=m00, R[1][0]=m01, R[2][0]=m02\n // R[0][1]=m10, R[1][1]=m11, R[2][1]=m12\n // R[0][2]=m20, R[1][2]=m21, R[2][2]=m22\n // Shepperd's formulas use R[i][j]; here the column-major indices are equivalent:\n // trace = R[0][0]+R[1][1]+R[2][2] = m00+m11+m22\n const trace = m00 + m11 + m22;\n if (trace > 0) {\n const s = 0.5 / Math.sqrt(trace + 1);\n out[0] = (m12 - m21) * s; // (R[2][1] - R[1][2])\n out[1] = (m20 - m02) * s; // (R[0][2] - R[2][0])\n out[2] = (m01 - m10) * s; // (R[1][0] - R[0][1])\n out[3] = 0.25 / s;\n } else if (m00 > m11 && m00 > m22) {\n const s = 2 * Math.sqrt(1 + m00 - m11 - m22);\n out[0] = 0.25 * s;\n out[1] = (m10 + m01) / s;\n out[2] = (m20 + m02) / s;\n out[3] = (m12 - m21) / s;\n } else if (m11 > m22) {\n const s = 2 * Math.sqrt(1 + m11 - m00 - m22);\n out[0] = (m10 + m01) / s;\n out[1] = 0.25 * s;\n out[2] = (m21 + m12) / s;\n out[3] = (m20 - m02) / s;\n } else {\n const s = 2 * Math.sqrt(1 + m22 - m00 - m11);\n out[0] = (m20 + m02) / s;\n out[1] = (m21 + m12) / s;\n out[2] = 0.25 * s;\n out[3] = (m01 - m10) / s;\n }\n return out;\n}\n\n/**\n * out = orientation quaternion for an object placed at `eye` and facing `target`. Returns out.\n *\n * This is the ergonomic camera/look-at helper: it yields the WORLD-space orientation an entity's\n * Transform.rotation needs so that its local -z axis points from `eye` toward `target` (the camera\n * convention, matching `mat4.lookAt`). Use it instead of hand-wiring\n * `mat4.lookAt → mat4.invert → mat3.fromMat4 → quat.fromRotationMatrix`; that chain is easy to get\n * wrong (notably `fromRotationMatrix` takes a mat3, but `Mat4Like`≡`Mat3Like`≡`ArrayLike<number>`,\n * so passing a mat4 typechecks and silently reads garbage → NaN → nothing renders).\n *\n * Convenience composition (like `mat4.computeViewProj`), not a primitive: it builds the same\n * right/newUp/forward basis as `mat4.lookAt` and reuses `fromRotationMatrix` for the extraction.\n *\n * @degrade eye ≈ target (|eye-target| < EPS_NORMALIZE) → out = identity (same convention as\n * `mat4.lookAt` degenerate #4; no throw, AC-06).\n * @degrade up collinear with the view direction → alternative up auto-selected (same as\n * `mat4.lookAt` #5).\n *\n * @example\n * ```ts\n * // aim a camera at the origin\n * const q = quat.fromLookAt(quat.create(), [-2.5, 4.5, 9], [0, 0, 0], [0, 1, 0]);\n * world.set(cameraEntity, Transform, { pos: [-2.5, 4.5, 9], rot: q });\n * ```\n */\nexport function fromLookAt(out: Quat, eye: Vec3Like, target: Vec3Like, up: Vec3Like): Quat {\n const ex = eye[0] as number;\n const ey = eye[1] as number;\n const ez = eye[2] as number;\n\n // forward = normalize(eye - target): the object's local -z points at the target, so +z = eye - target\n // (right-handed camera convention, identical to mat4.lookAt).\n let fx = ex - (target[0] as number);\n let fy = ey - (target[1] as number);\n let fz = ez - (target[2] as number);\n const fLenSq = fx * fx + fy * fy + fz * fz;\n if (fLenSq < EPS_NORMALIZE) {\n return identity(out);\n }\n const fInv = 1 / Math.sqrt(fLenSq);\n fx *= fInv;\n fy *= fInv;\n fz *= fInv;\n\n const upx = up[0] as number;\n const upy = up[1] as number;\n const upz = up[2] as number;\n\n // right = normalize(cross(up, forward)); degrade path mirrors mat4.lookAt (#5 alternative up).\n let rx = upy * fz - upz * fy;\n let ry = upz * fx - upx * fz;\n let rz = upx * fy - upy * fx;\n let rLenSq = rx * rx + ry * ry + rz * rz;\n if (rLenSq < EPS_NORMALIZE) {\n // up collinear with forward: pick alternative up = (0, 0, 1); if still collinear pick (0, 1, 0)\n rx = -fy;\n ry = fx;\n rz = 0;\n rLenSq = rx * rx + ry * ry + rz * rz;\n if (rLenSq < EPS_NORMALIZE) {\n rx = 0;\n ry = -fz;\n rz = fy;\n rLenSq = rx * rx + ry * ry + rz * rz;\n }\n }\n const rInv = 1 / Math.sqrt(rLenSq);\n rx *= rInv;\n ry *= rInv;\n rz *= rInv;\n\n // newUp = cross(forward, right)\n const ux = fy * rz - fz * ry;\n const uy = fz * rx - fx * rz;\n const uz = fx * ry - fy * rx;\n\n // World rotation columns are the basis vectors themselves (col0=right, col1=up, col2=forward) —\n // this is the transpose of mat4.lookAt's view rotation, i.e. the camera's world orientation.\n // Pack column-major into a length-9 mat3 for fromRotationMatrix (SSOT for the Shepperd extraction).\n // Per-call alloc mirrors mat4.computeViewProj's convenience-composition grain (camera orientation\n // is set rarely; no module-scoped mutable state to reason about).\n const m3 = new Float32Array(9);\n m3[0] = rx;\n m3[1] = ry;\n m3[2] = rz;\n m3[3] = ux;\n m3[4] = uy;\n m3[5] = uz;\n m3[6] = fx;\n m3[7] = fy;\n m3[8] = fz;\n return fromRotationMatrix(out, m3);\n}\n\n/**\n * out = quaternion that rotates the unit vector v to w (shortest arc). Returns out.\n *\n * Assumes v and w are normalized; if not, the caller is responsible.\n *\n * @degrade v ≈ w (dot > 1 - EPS_QUAT_PARALLEL) → out = identity (registry #13).\n * @degrade v ≈ -w (dot < -1 + EPS_QUAT_PARALLEL) → pick a perpendicular axis and do a 180°\n * rotation (prefer (0,1,0); fall back to (1,0,0) when collinear with v;\n * registry #12 + D-P18).\n *\n * @example\n * ```ts\n * quat.fromUnitVectors(out, [1,0,0], [0,1,0]); // 90° around Z\n * quat.fromUnitVectors(out, [1,0,0], [-1,0,0]); // 180° opposite: pick (0,1,0) axis\n * ```\n */\nexport function fromUnitVectors(out: Quat, v: Vec3Like, w: Vec3Like): Quat {\n const vx = v[0] as number;\n const vy = v[1] as number;\n const vz = v[2] as number;\n const wx = w[0] as number;\n const wy = w[1] as number;\n const wz = w[2] as number;\n\n const d = vx * wx + vy * wy + vz * wz;\n\n if (d > 1 - EPS_QUAT_PARALLEL) {\n // same direction: identity\n return identity(out);\n }\n\n if (d < -1 + EPS_QUAT_PARALLEL) {\n // opposite direction: pick a perpendicular axis (D-P18).\n // Prefer (0, 1, 0); when v is collinear with (0, 1, 0) (|vy| ~ 1) fall back to (1, 0, 0).\n let ax: number;\n let ay: number;\n let az: number;\n if (Math.abs(vy) < 1 - EPS_QUAT_PARALLEL) {\n // axis = normalize(cross(v, (0, 1, 0)))\n ax = -vz;\n ay = 0;\n az = vx;\n } else {\n // v is collinear with (0, 1, 0) → use (1, 0, 0)\n // axis = normalize(cross(v, (1, 0, 0)))\n ax = 0;\n ay = vz;\n az = -vy;\n }\n const axLen = Math.sqrt(ax * ax + ay * ay + az * az);\n if (axLen < EPS_NORMALIZE) {\n // extreme safety net (theoretically unreachable): write identity, no throw\n return identity(out);\n }\n const axInv = 1 / axLen;\n out[0] = ax * axInv;\n out[1] = ay * axInv;\n out[2] = az * axInv;\n out[3] = 0; // cos(PI/2) = 0\n return out;\n }\n\n // General case: half-vector method (numerically stable; consensus of wgpu-matrix / Three.js)\n // q = (cross(v, w), 1 + dot(v, w)), then normalize\n const cx = vy * wz - vz * wy;\n const cy = vz * wx - vx * wz;\n const cz = vx * wy - vy * wx;\n const sw = 1 + d;\n const len = Math.sqrt(cx * cx + cy * cy + cz * cz + sw * sw);\n const inv = 1 / len;\n out[0] = cx * inv;\n out[1] = cy * inv;\n out[2] = cz * inv;\n out[3] = sw * inv;\n return out;\n}\n\n/**\n * out = a * b (Hamilton product). Returns out.\n *\n * Aliasing-safe: reads all 8 source elements into locals first.\n */\nexport function multiply(out: Quat, a: QuatLike, b: QuatLike): Quat {\n const ax = a[0] as number;\n const ay = a[1] as number;\n const az = a[2] as number;\n const aw = a[3] as number;\n const bx = b[0] as number;\n const by = b[1] as number;\n const bz = b[2] as number;\n const bw = b[3] as number;\n out[0] = aw * bx + ax * bw + ay * bz - az * by;\n out[1] = aw * by - ax * bz + ay * bw + az * bx;\n out[2] = aw * bz + ax * by - ay * bx + az * bw;\n out[3] = aw * bw - ax * bx - ay * by - az * bz;\n return out;\n}\n\n/**\n * out = the orientation `q` after rotating a further `angleRadians` about world-space `axis`,\n * re-normalized. Returns out.\n *\n * This is the ergonomic *incremental rotate* helper — the per-frame spin/animation move. It folds\n * the three steps every rotating demo otherwise hand-wires: build the delta quaternion\n * (`fromAxisAngle`), **pre**-multiply it onto the current orientation (world-space axis, matching\n * **Bevy `Transform::rotate(r)` = `r * self.rotation`** / `rotate_y(θ)`), and — the step that is\n * silently omitted and makes the naive loop wrong — **normalize** to shed the floating-point error\n * that accumulates over thousands of frames into a non-unit quaternion (skew / scale artefacts).\n *\n * Prefer this over hand-writing `quat.multiply(q, delta, q)` in an update system: that loop drifts,\n * so demos work around it with an absolute-angle accumulator + `fromAxisAngle` (can't compose onto an\n * existing orientation) or raw `sin/cos` quaternion literals. `rotateAxis` composes safely.\n *\n * Convenience composition (like `fromLookAt`), not a primitive: same result as\n * `normalize(out, multiply(out, fromAxisAngle(tmp, axis, angleRadians), q))`, fused + aliasing-safe.\n *\n * @degrade `axis` zero-length → the delta is identity (degenerate registry #8), so out = normalize(q)\n * (no rotation applied; no throw, consistent with the sibling helpers).\n *\n * @example\n * ```ts\n * // in an Update system: spin a cube about +Y at `speed` rad/s using the frame delta\n * const dt = world.getResource(Time).delta;\n * const t = world.get(entity, Transform).unwrap();\n * quat.rotateAxis(t.quat, t.quat, [0, 1, 0], speed * dt); // in-place accumulate, no drift\n * world.set(entity, Transform, t);\n * ```\n */\nexport function rotateAxis(out: Quat, q: QuatLike, axis: Vec3Like, angleRadians: number): Quat {\n // Read q into locals first (aliasing-safe: rotateAxis(q, q, ...) is the common per-frame call).\n const qx = q[0] as number;\n const qy = q[1] as number;\n const qz = q[2] as number;\n const qw = q[3] as number;\n\n // Delta quaternion for `angleRadians` about `axis` (fromAxisAngle inline; 0-axis → identity, #8).\n const ax = axis[0] as number;\n const ay = axis[1] as number;\n const az = axis[2] as number;\n const axisLen = Math.sqrt(ax * ax + ay * ay + az * az);\n let dx = 0;\n let dy = 0;\n let dz = 0;\n let dw = 1;\n if (axisLen >= EPS_NORMALIZE) {\n const half = angleRadians * 0.5;\n const s = Math.sin(half) / axisLen;\n dx = ax * s;\n dy = ay * s;\n dz = az * s;\n dw = Math.cos(half);\n }\n\n // Pre-multiply: out = delta * q (world-space axis; matches Bevy Transform::rotate order).\n let rx = dw * qx + dx * qw + dy * qz - dz * qy;\n let ry = dw * qy - dx * qz + dy * qw + dz * qx;\n let rz = dw * qz + dx * qy - dy * qx + dz * qw;\n let rw = dw * qw - dx * qx - dy * qy - dz * qz;\n\n // Normalize to kill accumulation drift (the whole point of this helper).\n const len = Math.sqrt(rx * rx + ry * ry + rz * rz + rw * rw);\n if (len >= EPS_NORMALIZE) {\n const inv = 1 / len;\n rx *= inv;\n ry *= inv;\n rz *= inv;\n rw *= inv;\n }\n out[0] = rx;\n out[1] = ry;\n out[2] = rz;\n out[3] = rw;\n return out;\n}\n\n/**\n * out = spherical linear interpolation(a, b, t). Returns out.\n *\n * t is not clamped (extrapolation semantics matches vec.lerp).\n *\n * @degrade dot(a, b) < -EPS_SLERP_DOT_LIMIT (anti-parallel) → **negate b' = -b then slerp**\n * (D-P6; q and -q represent the same rotation; registry #10).\n * @degrade |dot(a, b)| > 1 - EPS_SLERP_DOT_LIMIT (endpoint coincidence or near-coincidence) →\n * falls back to nlerp (avoids acos blow-up; registry #11).\n *\n * @example\n * ```ts\n * quat.slerp(out, a, b, 0.5);\n * // Anti-parallel (dot ≈ -1): caller does not need to pre-process; the negation fall-back\n * // happens internally.\n * ```\n */\nexport function slerp(out: Quat, a: QuatLike, b: QuatLike, t: number): Quat {\n const ax = a[0] as number;\n const ay = a[1] as number;\n const az = a[2] as number;\n const aw = a[3] as number;\n let bx = b[0] as number;\n let by = b[1] as number;\n let bz = b[2] as number;\n let bw = b[3] as number;\n\n let cosTheta = ax * bx + ay * by + az * bz + aw * bw;\n\n // D-P6: anti-parallel → negate b then slerp (q and -q are the same rotation; shortest arc)\n if (cosTheta < 0) {\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n cosTheta = -cosTheta;\n }\n\n // Endpoint coincidence (|dot| → 1): nlerp fall-back avoids sin(0) division by zero\n if (cosTheta > 1 - EPS_SLERP_DOT_LIMIT) {\n return nlerp(out, a, b, t);\n }\n\n const theta = Math.acos(cosTheta);\n const sinTheta = Math.sin(theta);\n const wa = Math.sin((1 - t) * theta) / sinTheta;\n const wb = Math.sin(t * theta) / sinTheta;\n out[0] = wa * ax + wb * bx;\n out[1] = wa * ay + wb * by;\n out[2] = wa * az + wb * bz;\n out[3] = wa * aw + wb * bw;\n return out;\n}\n\n/**\n * out = normalized lerp(a, b, t). Returns out.\n *\n * Faster than slerp but the angular velocity is non-uniform; use it as a slerp substitute near endpoints.\n * Like slerp, automatically handles dot < 0 by negating b to keep the shortest arc.\n *\n * @degrade lerp result is near zero (very rare) → out = identity.\n *\n * @example\n * ```ts\n * quat.nlerp(out, qA, qB, 0.5);\n * // Very rare: lerp result lengthSq < EPS_NORMALIZE → out = (0, 0, 0, 1)\n * ```\n */\nexport function nlerp(out: Quat, a: QuatLike, b: QuatLike, t: number): Quat {\n const ax = a[0] as number;\n const ay = a[1] as number;\n const az = a[2] as number;\n const aw = a[3] as number;\n let bx = b[0] as number;\n let by = b[1] as number;\n let bz = b[2] as number;\n let bw = b[3] as number;\n\n // anti-parallel → negate b for the shortest arc (same convention as slerp)\n const cosTheta = ax * bx + ay * by + az * bz + aw * bw;\n if (cosTheta < 0) {\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n }\n\n out[0] = ax + t * (bx - ax);\n out[1] = ay + t * (by - ay);\n out[2] = az + t * (bz - az);\n out[3] = aw + t * (bw - aw);\n\n const lenSq =\n (out[0] as number) * (out[0] as number) +\n (out[1] as number) * (out[1] as number) +\n (out[2] as number) * (out[2] as number) +\n (out[3] as number) * (out[3] as number);\n if (lenSq < EPS_NORMALIZE) {\n return identity(out);\n }\n const inv = 1 / Math.sqrt(lenSq);\n out[0] = (out[0] as number) * inv;\n out[1] = (out[1] as number) * inv;\n out[2] = (out[2] as number) * inv;\n out[3] = (out[3] as number) * inv;\n return out;\n}\n\n/**\n * out = inverse of a (conjugate / lengthSq). Returns out.\n *\n * For unit quaternions, invert is equivalent to conjugate (and faster); this implementation uses\n * the general a/|a|² form to support non-unit inputs.\n *\n * @degrade lengthSq(a) < EPS_NORMALIZE (zero quaternion) → out = identity (does not return NaN;\n * same convention as mat invert).\n *\n * @example\n * ```ts\n * quat.invert(out, q);\n * quat.invert(out, quat.create(0, 0, 0, 0)); // → out = identity (0, 0, 0, 1), AC-06 no throw\n * ```\n */\nexport function invert(out: Quat, a: QuatLike): Quat {\n const ax = a[0] as number;\n const ay = a[1] as number;\n const az = a[2] as number;\n const aw = a[3] as number;\n const lenSq = ax * ax + ay * ay + az * az + aw * aw;\n if (lenSq < EPS_NORMALIZE) {\n return identity(out);\n }\n const inv = 1 / lenSq;\n out[0] = -ax * inv;\n out[1] = -ay * inv;\n out[2] = -az * inv;\n out[3] = aw * inv;\n return out;\n}\n\n/** out = conjugate quaternion [-x, -y, -z, w] (aliasing-safe). Returns out. */\nexport function conjugate(out: Quat, a: QuatLike): Quat {\n out[0] = -(a[0] as number);\n out[1] = -(a[1] as number);\n out[2] = -(a[2] as number);\n out[3] = a[3] as number;\n return out;\n}\n\n/** dot(a, b) = ax*bx + ay*by + az*bz + aw*bw (returns scalar). */\nexport function dot(a: QuatLike, b: QuatLike): number {\n return (\n (a[0] as number) * (b[0] as number) +\n (a[1] as number) * (b[1] as number) +\n (a[2] as number) * (b[2] as number) +\n (a[3] as number) * (b[3] as number)\n );\n}\n\n/** sqrt(x² + y² + z² + w²). Delegates to lengthSq + Math.sqrt (canonical pattern; see clone-5-quat-audit.md). */\nexport function length(a: QuatLike): number {\n return Math.sqrt(lengthSq(a));\n}\n\n/** x² + y² + z² + w² (no sqrt). */\nexport function lengthSq(a: QuatLike): number {\n return lengthSq4(a);\n}\n\n/**\n * out = q · v · q⁻¹ (rotate vec3 v by the unit quaternion q). Returns out.\n *\n * Rodrigues optimized form (research Finding 3, 18 mul + 12 add):\n * t = 2 · cross(q.xyz, v)\n * out = v + q.w · t + cross(q.xyz, t)\n *\n * 3-5× faster than going through mat4 (fromQuat → transformVec3); same shape as gl-matrix\n * `vec3.transformQuat` / Three.js `Vector3.applyQuaternion` (industry consensus).\n *\n * Aliasing-safe: reads v.xyz / q.xyzw into locals before writing out.\n *\n * @degrade q must be a unit-length quaternion. A non-unit q introduces implicit scaling\n * (D-4 silent convention; no throw; AI users always get unit-length q from\n * quat.fromAxisAngle / fromEuler / normalize / slerp, so this branch is not hit).\n * When q = (0,0,0,0), t = 0 → out = v (the natural result of the formula; matches\n * gl-matrix / Three.js; non-NaN, no throw).\n *\n * @example\n * ```ts\n * const q = quat.fromAxisAngle(quat.create(), [0, 1, 0], Math.PI / 2);\n * const out = vec3.create();\n * quat.transformVec3(out, q, [1, 0, 0]); // → out ≈ (0, 0, -1)\n * // Guard: q derived from the quat surface is always unit-length; callers do not need to normalize.\n * ```\n */\nexport function transformVec3(out: Vec3, q: QuatLike, v: Vec3Like): Vec3 {\n const qx = q[0] as number;\n const qy = q[1] as number;\n const qz = q[2] as number;\n const qw = q[3] as number;\n const vx = v[0] as number;\n const vy = v[1] as number;\n const vz = v[2] as number;\n // t = 2 * cross(q.xyz, v)\n const tx = 2 * (qy * vz - qz * vy);\n const ty = 2 * (qz * vx - qx * vz);\n const tz = 2 * (qx * vy - qy * vx);\n // out = v + q.w * t + cross(q.xyz, t)\n out[0] = vx + qw * tx + (qy * tz - qz * ty);\n out[1] = vy + qw * ty + (qz * tx - qx * tz);\n out[2] = vz + qw * tz + (qx * ty - qy * tx);\n return out;\n}\n\n/**\n * out = a / length(a). Returns out.\n *\n * @degrade lengthSq(a) < EPS_NORMALIZE → out = [0, 0, 0, 0] (same convention as vec.normalize;\n * does not write identity, preserving the \"zero quaternion\" semantics; if the caller\n * needs identity it should use fromAxisAngle with 0-axis).\n *\n * @example\n * ```ts\n * quat.normalize(out, q);\n * quat.normalize(out, quat.create(0, 0, 0, 0)); // → out = (0, 0, 0, 0); zero-quaternion semantics preserved\n * ```\n */\nexport function normalize(out: Quat, a: QuatLike): Quat {\n normalize4(out, a, EPS_NORMALIZE);\n return out;\n}\n\n/**\n * Convenience: quaternion representing rotation `theta` radians around the\n * Y axis. Equivalent to `quat.fromEuler(out, 0, theta, 0, 'YXZ')` but\n * allocates its own output `Quat`.\n *\n * Formula: `(0, sin(theta/2), 0, cos(theta/2))`.\n *\n * @degrade eulerY(0) → identity, eulerY(2pi) → identity within epsilon.\n *\n * @example\n * ```ts\n * const yaw45 = quat.eulerY(Math.PI / 4);\n * // yaw45 ≈ [0, 0.3826834, 0, 0.9238795]\n * ```\n *\n * @example Equivalent to the verbose form:\n * ```ts\n * const q1 = quat.eulerY(theta);\n * const q2 = quat.fromEuler(quat.create(), 0, theta, 0, 'YXZ');\n * // q1 === q2 (within epsilon)\n * ```\n */\nexport function eulerY(theta: number): Quat {\n const out = create();\n return fromEuler(out, 0, theta, 0, 'YXZ');\n}\n\n// ── Local basis accessors ─────────────────────────────────────────────────\n//\n// A rotation's three local basis vectors — the world-space directions its own\n// +X / +Y / −Z axes point after the rotation. They are exactly `q` applied to\n// the canonical axes: right = q·(1,0,0), up = q·(0,1,0), forward = q·(0,0,−1).\n//\n// The −Z forward convention matches `mat4.getForward` (RL-4) and the look\n// convention `fromLookAt` / `computeViewProj` use, so a camera/listener built\n// with `fromLookAt(eye, target)` has `forward(q)` ≈ normalize(target − eye).\n// These fold the transformVec3-with-a-magic-axis idiom (and the handedness a\n// caller would otherwise have to know) into a named accessor, mirroring the\n// mat4 getters so learning one basis form applies to both. Because `q` from the\n// quat surface is always unit-length, `transformVec3` returns a unit vector — no\n// separate normalize step (unlike the mat4 getters, which read possibly-scaled\n// basis columns and must normalize).\n\n/**\n * Local right axis: the world-space direction the rotation's own +X axis points.\n * `right(out, q) = quat.transformVec3(out, q, [1, 0, 0])`. Mirrors\n * `mat4.getRight`; matches Bevy `Transform::local_x` / `Transform::right`.\n *\n * @degrade q must be unit-length (guaranteed by the quat surface); a unit q\n * yields a unit result. q = (0,0,0,0) → out = (1,0,0) (the natural\n * transformVec3 result; non-NaN, no throw).\n *\n * @example\n * ```ts\n * const q = quat.eulerY(Math.PI / 2); // 90° about +Y\n * quat.right(vec3.create(), q); // → (0, 0, -1): +X yawed a quarter-turn\n * ```\n */\nexport function right(out: Vec3, q: QuatLike): Vec3 {\n return transformVec3(out, q, UNIT_X);\n}\n\n/**\n * Local up axis: the world-space direction the rotation's own +Y axis points.\n * `up(out, q) = quat.transformVec3(out, q, [0, 1, 0])`. Mirrors `mat4.getUp`;\n * matches Bevy `Transform::local_y` / `Transform::up`.\n *\n * @degrade q must be unit-length (guaranteed by the quat surface); a unit q\n * yields a unit result. q = (0,0,0,0) → out = (0,1,0).\n *\n * @example\n * ```ts\n * const q = quat.fromAxisAngle(quat.create(), [1, 0, 0], Math.PI / 2); // pitch 90°\n * quat.up(vec3.create(), q); // → (0, 0, 1): +Y pitched onto +Z\n * ```\n */\nexport function up(out: Vec3, q: QuatLike): Vec3 {\n return transformVec3(out, q, UNIT_Y);\n}\n\n/**\n * Local forward axis: the world-space direction the rotation's own −Z axis\n * points (−Z look convention, RL-4). `forward(out, q) =\n * quat.transformVec3(out, q, [0, 0, -1])`. Mirrors `mat4.getForward`; matches\n * Bevy `Transform::forward` (Bevy also uses −Z). A quat from `fromLookAt(eye,\n * target, up)` has `forward(q)` ≈ normalize(target − eye).\n *\n * @degrade q must be unit-length (guaranteed by the quat surface); a unit q\n * yields a unit result. q = (0,0,0,0) → out = (0,0,-1).\n *\n * @example\n * ```ts\n * const q = quat.eulerY(Math.PI / 2); // 90° about +Y\n * quat.forward(vec3.create(), q); // → (-1, 0, 0): -Z yawed a quarter-turn\n * ```\n */\nexport function forward(out: Vec3, q: QuatLike): Vec3 {\n return transformVec3(out, q, UNIT_NEG_Z);\n}\n","// _internal/epsilon.ts — EPS constant family SSOT (D-P14)\n//\n// Centralizes all numeric tolerances; prevents scattered hard-coded constants.\n// Not exported through src/index.ts (D-P13 _internal does not leave the package);\n// indirectly covered by the vec/mat/quat tests that consume it.\n//\n// Rationale:\n// - EPS_NORMALIZE: lengths below this are treated as zero vectors; normalize falls back to a zero\n// vector. 1e-12 follows the consensus of glam-rs and wgpu-matrix, avoiding single-precision\n// Float32 noise misjudgments.\n// - EPS_DET: threshold for declaring a determinant singular. 1e-8 leaves safe headroom over the\n// single-precision ULP near 1.0 (~1.19e-7) (research §Finding 4.2 ε-tolerance table).\n// - EPS_QUAT_PARALLEL: near-collinear input check for fromUnitVectors / slerp (D-P18).\n// - EPS_SLERP_DOT_LIMIT: slerp falls back to nlerp when |dot| ≥ 1-EPS, avoiding acos blowup (D-P6).\n//\n// Related: plan-strategy D-P14 EPS constants centralized; research §Finding 3 glam epsilon choice +\n// §Finding 4.2 ε-tolerance table.\n\n/** Vector lengths below this value are treated as zero (normalize fall-back). */\nexport const EPS_NORMALIZE = 1e-12;\n\n/** Matrix determinants below this value are treated as singular (invert falls back to identity, D-P1). */\nexport const EPS_DET = 1e-8;\n\n/** Threshold for treating two unit vectors as nearly collinear / opposite (fromUnitVectors / slerp inputs). */\nexport const EPS_QUAT_PARALLEL = 1e-6;\n\n/** In quat.slerp, |dot| above this value is treated as endpoint coincidence; falls back to nlerp (D-P6). */\nexport const EPS_SLERP_DOT_LIMIT = 1e-6;\n","// f32-to-f16-bytes.ts — IEEE 754 binary16 half-float conversion.\n//\n// Pure arithmetic codec extracted from runtime/render-resource-table.ts (D-3)\n// so build-time image-importer and runtime uploadCubemapFromEquirect share\n// a single SSOT. Takes a Uint8Array view over packed Float32 RGBA pixels\n// and returns a Uint8Array with half the byte length of the equivalent\n// binary16 interleaved pixels (little-endian).\n//\n// Out-of-range f32 values saturate to +/-inf, NaN propagates, and subnormals\n// round-to-zero (industry-standard f32->f16 path, semantic-preserving\n// extraction).\n//\n// Related: plan-strategy §2 D-3; research Finding 5 + C3; requirements C3;\n// w1 test file: packages/math/src/__tests__/f32-to-f16-bytes.test.ts.\n\n/**\n * Convert a packed float32 RGBA byte buffer into the equivalent float16 RGBA\n * byte buffer (IEEE 754 binary16, little-endian). The output length is\n * `src.byteLength / 2`.\n *\n * @param src A Uint8Array whose underlying buffer is an interleaved Float32Array.\n * @returns A Uint8Array of packed binary16 pixels, exactly half the length.\n */\nexport function f32ToF16Bytes(src: Uint8Array): Uint8Array {\n const f32 = new Float32Array(src.buffer, src.byteOffset, src.byteLength / 4);\n const out = new Uint8Array(f32.length * 2);\n const view = new DataView(out.buffer);\n const scratch = new ArrayBuffer(4);\n const scratchF = new Float32Array(scratch);\n const scratchU = new Uint32Array(scratch);\n for (let i = 0; i < f32.length; i++) {\n scratchF[0] = f32[i] ?? 0;\n const bits = scratchU[0] ?? 0;\n const sign = (bits >>> 31) & 0x1;\n const exp = (bits >>> 23) & 0xff;\n let mant = bits & 0x7fffff;\n let half: number;\n if (exp === 0xff) {\n half = (sign << 15) | 0x7c00 | (mant ? 0x200 : 0);\n } else if (exp === 0) {\n half = sign << 15;\n } else {\n const e = exp - 127 + 15;\n if (e >= 0x1f) {\n half = (sign << 15) | 0x7c00;\n } else if (e <= 0) {\n if (e < -10) {\n half = sign << 15;\n } else {\n mant = (mant | 0x800000) >> (1 - e);\n if (mant & 0x1000) mant += 0x2000;\n half = (sign << 15) | (mant >> 13);\n }\n } else {\n if (mant & 0x1000) {\n mant += 0x2000;\n if (mant & 0x800000) {\n mant = 0;\n half = (sign << 15) | ((e + 1) << 10);\n } else {\n half = (sign << 15) | (e << 10) | (mant >> 13);\n }\n } else {\n half = (sign << 15) | (e << 10) | (mant >> 13);\n }\n }\n }\n view.setUint16(i * 2, half & 0xffff, true);\n }\n return out;\n}\n","// frustum.ts — view-frustum plane extraction and intersection tests (M1 / w4).\n//\n// Frustum representation: Float32Array(24) — 6 planes × 4 floats (nx, ny, nz, d) each,\n// normalized. Plane equation: nx*x + ny*y + nz*z + d = 0, positive side = inside frustum.\n//\n// Planes are extracted from a combined view-projection matrix (column-major) by\n// combining rows per the Gribb/Hartmann method (Gribb/Hartmann 2001 \"Fast\n// Extraction of Viewing Frustum Planes from the World-View-Projection Matrix\").\n// Plane normalization is built into fromViewProjection internally (D-6).\n//\n// Surface: create / fromViewProjection / intersectsBox / intersectsSphere.\n//\n// Related: requirements §AC-01 (frustum function signatures + test coverage);\n// plan-strategy §D-6 (internal normalization).\n\nimport type { Box3Like } from './box3';\nimport type { Mat4Like, Vec3Like } from './types';\n\n/**\n * Frustum storage: Float32Array(24) — 6 planes × 4 floats each (nx, ny, nz, d).\n * Local brand (not part of the seven-piece SSOT; same rationale as Box3).\n */\nexport type Frustum = Float32Array & { readonly __frustum: void };\n\n/** Allocate a new Frustum (zero-initialized 6 planes). */\nexport function create(): Frustum {\n return new Float32Array(24) as Frustum;\n}\n\n/**\n * Extract 6 frustum planes (left, right, bottom, top, near, far) from a\n * combined view-projection matrix (column-major, right-handed).\n *\n * Uses Gribb/Hartmann method: each plane = sum or difference of VP rows,\n * then normalized so (nx, ny, nz) is a unit vector and d is the signed\n * distance from origin. Plane inside-half-space is nx*x + ny*y + nz*z + d > 0.\n *\n * Writes to `out` and returns it.\n *\n * @example\n * ```ts\n * const view = mat4.lookAt(mat4.create(), [0, 0, 5], [0, 0, 0], [0, 1, 0]);\n * const proj = mat4.perspective(mat4.create(), Math.PI / 2, 1, 0.1, 100);\n * const vp = mat4.create();\n * mat4.multiply(vp, proj, view);\n * const f = frustum.fromViewProjection(frustum.create(), vp);\n * ```\n */\nexport function fromViewProjection(out: Frustum, vp: Mat4Like): Frustum {\n const m0 = vp[0] as number;\n const m1 = vp[1] as number;\n const m2 = vp[2] as number;\n const m3 = vp[3] as number;\n const m4 = vp[4] as number;\n const m5 = vp[5] as number;\n const m6 = vp[6] as number;\n const m7 = vp[7] as number;\n const m8 = vp[8] as number;\n const m9 = vp[9] as number;\n const m10 = vp[10] as number;\n const m11 = vp[11] as number;\n const m12 = vp[12] as number;\n const m13 = vp[13] as number;\n const m14 = vp[14] as number;\n const m15 = vp[15] as number;\n\n // Left plane: row3 + row0\n let nx = m3 + m0,\n ny = m7 + m4,\n nz = m11 + m8,\n d = m15 + m12;\n let len = Math.sqrt(nx * nx + ny * ny + nz * nz);\n if (len > 0) {\n const il = 1 / len;\n nx *= il;\n ny *= il;\n nz *= il;\n d *= il;\n }\n out[0] = nx;\n out[1] = ny;\n out[2] = nz;\n out[3] = d;\n\n // Right plane: row3 - row0\n nx = m3 - m0;\n ny = m7 - m4;\n nz = m11 - m8;\n d = m15 - m12;\n len = Math.sqrt(nx * nx + ny * ny + nz * nz);\n if (len > 0) {\n const il = 1 / len;\n nx *= il;\n ny *= il;\n nz *= il;\n d *= il;\n }\n out[4] = nx;\n out[5] = ny;\n out[6] = nz;\n out[7] = d;\n\n // Bottom plane: row3 + row1\n nx = m3 + m1;\n ny = m7 + m5;\n nz = m11 + m9;\n d = m15 + m13;\n len = Math.sqrt(nx * nx + ny * ny + nz * nz);\n if (len > 0) {\n const il = 1 / len;\n nx *= il;\n ny *= il;\n nz *= il;\n d *= il;\n }\n out[8] = nx;\n out[9] = ny;\n out[10] = nz;\n out[11] = d;\n\n // Top plane: row3 - row1\n nx = m3 - m1;\n ny = m7 - m5;\n nz = m11 - m9;\n d = m15 - m13;\n len = Math.sqrt(nx * nx + ny * ny + nz * nz);\n if (len > 0) {\n const il = 1 / len;\n nx *= il;\n ny *= il;\n nz *= il;\n d *= il;\n }\n out[12] = nx;\n out[13] = ny;\n out[14] = nz;\n out[15] = d;\n\n // Near plane: row3 + row2\n nx = m3 + m2;\n ny = m7 + m6;\n nz = m11 + m10;\n d = m15 + m14;\n len = Math.sqrt(nx * nx + ny * ny + nz * nz);\n if (len > 0) {\n const il = 1 / len;\n nx *= il;\n ny *= il;\n nz *= il;\n d *= il;\n }\n out[16] = nx;\n out[17] = ny;\n out[18] = nz;\n out[19] = d;\n\n // Far plane: row3 - row2\n nx = m3 - m2;\n ny = m7 - m6;\n nz = m11 - m10;\n d = m15 - m14;\n len = Math.sqrt(nx * nx + ny * ny + nz * nz);\n if (len > 0) {\n const il = 1 / len;\n nx *= il;\n ny *= il;\n nz *= il;\n d *= il;\n }\n out[20] = nx;\n out[21] = ny;\n out[22] = nz;\n out[23] = d;\n\n return out;\n}\n\n/**\n * Test whether an AABB intersects the frustum. Conservative: returns `true` when\n * the box straddles a plane boundary, even if partially outside.\n *\n * For each plane, the signed distance of both the positive-most corner (p-vertex)\n * and negative-most corner (n-vertex) are tested. The box is outside only when\n * the p-vertex is on the negative side of any plane.\n */\nexport function intersectsBox(f: Frustum, box: Box3Like): boolean {\n const bx = box[0] as number;\n const by = box[1] as number;\n const bz = box[2] as number;\n const bX = box[3] as number;\n const bY = box[4] as number;\n const bZ = box[5] as number;\n\n // For each plane, compute the p-vertex (most positive along plane normal)\n // and test if it's on the negative side. If so, box is entirely outside.\n for (let i = 0; i < 6; i++) {\n const off = i * 4;\n const nx = f[off] as number;\n const ny = f[off + 1] as number;\n const nz = f[off + 2] as number;\n const d = f[off + 3] as number;\n\n // p-vertex: corner maximizing dot(normal, corner) = corner select via sign of normal\n const px = nx >= 0 ? bX : bx;\n const py = ny >= 0 ? bY : by;\n const pz = nz >= 0 ? bZ : bz;\n\n if (nx * px + ny * py + nz * pz + d < 0) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Test whether a sphere intersects the frustum. Conservative: returns `true`\n * when the sphere straddles a plane boundary.\n *\n * Computes signed distance from the sphere center to each plane;\n * outside when distance < -radius.\n */\nexport function intersectsSphere(f: Frustum, center: Vec3Like, radius: number): boolean {\n const cx = center[0] as number;\n const cy = center[1] as number;\n const cz = center[2] as number;\n\n for (let i = 0; i < 6; i++) {\n const off = i * 4;\n const nx = f[off] as number;\n const ny = f[off + 1] as number;\n const nz = f[off + 2] as number;\n const sd = f[off + 3] as number; // plane's d (signed distance from origin)\n\n const dist = nx * cx + ny * cy + nz * cz + sd;\n if (dist < -radius) {\n return false;\n }\n }\n return true;\n}\n","// mat3.ts — 3x3 matrix namespace (M3 / T-020)\n//\n// 10-function surface (≥ 10 lower bound):\n// create / clone / identity / equals / multiply / transpose / invert /\n// scale / fromMat4 / normalMatrix\n//\n// Memory layout lock (D-P4): 9 floats packed column-major; index mapping m[col*3 + row].\n// Primary use: CPU normal matrix (normalMatrix = transpose(invert(upper-left mat3 of mat4)));\n// callers that upload directly to a GPU UBO should pad to mat4 themselves\n// (see R4 + the reserved toGpuLayout hook).\n//\n// Degenerate convention (same as D-P1): invert(singular) → write identity into out, return out (does not return null).\n//\n// Four ironclad rules (gl-matrix wiki / research §F1):\n// 1. Out-param first (except for query functions, the first parameter = out, return out)\n// 2. Aliasing-safe (out may equal an input; read all source data into locals first)\n// 3. Module-as-namespace (pure functions; no class, no this)\n// 4. Float32Array by default (V8 elements-kinds consistency)\n//\n// Related: requirements §Surface mat3 lower bound 10 + AC-04 (normalMatrix);\n// plan-strategy D-P4 9-float lock + D-P1 invert writes identity;\n// wiki/gl-matrix-overview Out-param four ironclad rules;\n// wiki/typescript-branded-types §7.2 factory template.\n//\n// Degenerate-semantics registry (plan-strategy.md §appendix A; shares numbering #3 with mat4):\n// - mat3.invert(singular) → out = identity (same convention as D-P1)\n// - mat3.normalMatrix(singular) → out = identity (via the internal branch in mat3.invert)\n\nimport { EPS_DET } from './_internal/epsilon';\nimport type { Mat3, Mat3Like, Mat4Like, Vec3Like } from './types';\n\nexport type { Mat3, Mat3Like };\n\n/** Create a Mat3 (default all zero; callers usually call identity() right after). */\nexport function create(): Mat3 {\n return new Float32Array(9) as Mat3;\n}\n\n/** Allocate a new Mat3 copy. */\nexport function clone(a: Mat3Like): Mat3 {\n return Float32Array.of(\n a[0] as number,\n a[1] as number,\n a[2] as number,\n a[3] as number,\n a[4] as number,\n a[5] as number,\n a[6] as number,\n a[7] as number,\n a[8] as number,\n ) as Mat3;\n}\n\n/** out = 3x3 identity (column-major [1,0,0, 0,1,0, 0,0,1]). Returns out. */\nexport function identity(out: Mat3): Mat3 {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 1;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n}\n\n/** Approximate equality: each element differs by ≤ epsilon. NaN inputs always return false. */\nexport function equals(a: Mat3Like, b: Mat3Like, epsilon = 1e-6): boolean {\n for (let i = 0; i < 9; i++) {\n const av = a[i] as number;\n const bv = b[i] as number;\n if (Number.isNaN(av) || Number.isNaN(bv)) return false;\n if (Math.abs(av - bv) > epsilon) return false;\n }\n return true;\n}\n\n/**\n * out = a * b (column-major matrix multiply). Returns out.\n *\n * Aliasing-safe: out may equal a or b; reads all 18 source elements into locals first.\n */\nexport function multiply(out: Mat3, a: Mat3Like, b: Mat3Like): Mat3 {\n const a00 = a[0] as number;\n const a01 = a[1] as number;\n const a02 = a[2] as number;\n const a10 = a[3] as number;\n const a11 = a[4] as number;\n const a12 = a[5] as number;\n const a20 = a[6] as number;\n const a21 = a[7] as number;\n const a22 = a[8] as number;\n const b00 = b[0] as number;\n const b01 = b[1] as number;\n const b02 = b[2] as number;\n const b10 = b[3] as number;\n const b11 = b[4] as number;\n const b12 = b[5] as number;\n const b20 = b[6] as number;\n const b21 = b[7] as number;\n const b22 = b[8] as number;\n out[0] = a00 * b00 + a10 * b01 + a20 * b02;\n out[1] = a01 * b00 + a11 * b01 + a21 * b02;\n out[2] = a02 * b00 + a12 * b01 + a22 * b02;\n out[3] = a00 * b10 + a10 * b11 + a20 * b12;\n out[4] = a01 * b10 + a11 * b11 + a21 * b12;\n out[5] = a02 * b10 + a12 * b11 + a22 * b12;\n out[6] = a00 * b20 + a10 * b21 + a20 * b22;\n out[7] = a01 * b20 + a11 * b21 + a21 * b22;\n out[8] = a02 * b20 + a12 * b21 + a22 * b22;\n return out;\n}\n\n/**\n * out = transpose(a). Returns out.\n *\n * Aliasing-safe (transpose(m, m) is legal; reads the 6 off-diagonal elements into locals first).\n */\nexport function transpose(out: Mat3, a: Mat3Like): Mat3 {\n const a01 = a[1] as number;\n const a02 = a[2] as number;\n const a12 = a[5] as number;\n const a10 = a[3] as number;\n const a20 = a[6] as number;\n const a21 = a[7] as number;\n out[0] = a[0] as number;\n out[1] = a10;\n out[2] = a20;\n out[3] = a01;\n out[4] = a[4] as number;\n out[5] = a21;\n out[6] = a02;\n out[7] = a12;\n out[8] = a[8] as number;\n return out;\n}\n\n/**\n * out = invert(a). Returns out.\n *\n * @degrade a singular (|det| < EPS_DET) → out = identity (same convention as D-P1; does not return null).\n *\n * @example\n * ```ts\n * // Caller-side guard:\n * const det = mat3DetForGuard(m); // caller computes det to decide whether to invert\n * const inv = mat3.invert(mat3.create(), m);\n * // If m is singular, inv === identity (no NaN; safe to keep using).\n * ```\n */\nexport function invert(out: Mat3, a: Mat3Like): Mat3 {\n const a00 = a[0] as number;\n const a01 = a[1] as number;\n const a02 = a[2] as number;\n const a10 = a[3] as number;\n const a11 = a[4] as number;\n const a12 = a[5] as number;\n const a20 = a[6] as number;\n const a21 = a[7] as number;\n const a22 = a[8] as number;\n\n // cofactors (column-major → derive from row/col indices)\n const b01 = a22 * a11 - a12 * a21;\n const b11 = -a22 * a10 + a12 * a20;\n const b21 = a21 * a10 - a11 * a20;\n const det = a00 * b01 + a01 * b11 + a02 * b21;\n\n if (Math.abs(det) < EPS_DET) {\n return identity(out);\n }\n\n const invDet = 1 / det;\n out[0] = b01 * invDet;\n out[1] = (-a22 * a01 + a02 * a21) * invDet;\n out[2] = (a12 * a01 - a02 * a11) * invDet;\n out[3] = b11 * invDet;\n out[4] = (a22 * a00 - a02 * a20) * invDet;\n out[5] = (-a12 * a00 + a02 * a10) * invDet;\n out[6] = b21 * invDet;\n out[7] = (-a21 * a00 + a01 * a20) * invDet;\n out[8] = (a11 * a00 - a01 * a10) * invDet;\n return out;\n}\n\n/**\n * out = a * Scale(v) (per-column scale). Returns out.\n *\n * v takes the first 3 components (aligned with mat4.scale's vec3 input); mat3's third column is the z scale.\n */\nexport function scale(out: Mat3, a: Mat3Like, v: Vec3Like): Mat3 {\n const x = v[0] as number;\n const y = v[1] as number;\n const z = v[2] as number;\n out[0] = (a[0] as number) * x;\n out[1] = (a[1] as number) * x;\n out[2] = (a[2] as number) * x;\n out[3] = (a[3] as number) * y;\n out[4] = (a[4] as number) * y;\n out[5] = (a[5] as number) * y;\n out[6] = (a[6] as number) * z;\n out[7] = (a[7] as number) * z;\n out[8] = (a[8] as number) * z;\n return out;\n}\n\n/**\n * out = mat3 extracted from mat4's upper-left 3x3 (drop the 4th row and 4th column). Returns out.\n *\n * Column-major mapping: mat4 col0 [0..2] / col1 [4..6] / col2 [8..10] → mat3 col0/1/2.\n */\nexport function fromMat4(out: Mat3, m: Mat4Like): Mat3 {\n out[0] = m[0] as number;\n out[1] = m[1] as number;\n out[2] = m[2] as number;\n out[3] = m[4] as number;\n out[4] = m[5] as number;\n out[5] = m[6] as number;\n out[6] = m[8] as number;\n out[7] = m[9] as number;\n out[8] = m[10] as number;\n return out;\n}\n\n/**\n * out = transpose(invert(upper-left 3x3 of m)) (the normal-transform matrix). Returns out.\n *\n * Used to transform normals from model space to world / view space; when m has a non-uniform\n * scale, normals must use normalMatrix (the upper-left 3x3 of m alone is incorrect).\n *\n * Per-frame consumer: feat-20260518-pbr-direct-lighting-mvp M3 / w14 wires\n * `render-system-record.ts` to call this helper once per renderable per frame\n * (host-side computation; result lives in mesh SSBO `normalMatrix` slot at\n * byte offset 64 within each PER_ENTITY_STRIDE = 256 B slot, plan-strategy\n * D-5 + AC-08).\n *\n * @degrade upper-left 3x3 singular -> out = identity (same convention as D-P1, via mat3.invert).\n *\n * @example\n * ```ts\n * const N = mat3.normalMatrix(mat3.create(), modelViewMat);\n * // vertex shader: normal_view = N * normal_model\n * ```\n */\nexport function normalMatrix(out: Mat3, m: Mat4Like): Mat3 {\n // 1. extract the upper-left 3x3\n const m00 = m[0] as number;\n const m01 = m[1] as number;\n const m02 = m[2] as number;\n const m10 = m[4] as number;\n const m11 = m[5] as number;\n const m12 = m[6] as number;\n const m20 = m[8] as number;\n const m21 = m[9] as number;\n const m22 = m[10] as number;\n\n // 2. inline invert + transpose (combine the two steps; avoid a temporary allocation)\n const b01 = m22 * m11 - m12 * m21;\n const b11 = -m22 * m10 + m12 * m20;\n const b21 = m21 * m10 - m11 * m20;\n const det = m00 * b01 + m01 * b11 + m02 * b21;\n\n if (Math.abs(det) < EPS_DET) {\n return identity(out);\n }\n\n const invDet = 1 / det;\n // Elements of invert(upper-left), then transpose (swap rows/cols)\n // invert column-major:\n // inv[0]=b01*invDet inv[3]=b11*invDet inv[6]=b21*invDet\n // inv[1]=... inv[4]=... inv[7]=...\n // inv[2]=... inv[5]=... inv[8]=...\n // After transpose (i, j) = inv (j, i)\n // More directly: transposing the invert result = transpose(invert).\n // The transpose(invert) elements are written out below:\n out[0] = b01 * invDet;\n out[3] = (-m22 * m01 + m02 * m21) * invDet;\n out[6] = (m12 * m01 - m02 * m11) * invDet;\n out[1] = b11 * invDet;\n out[4] = (m22 * m00 - m02 * m20) * invDet;\n out[7] = (-m12 * m00 + m02 * m10) * invDet;\n out[2] = b21 * invDet;\n out[5] = (-m21 * m00 + m01 * m20) * invDet;\n out[8] = (m11 * m00 - m01 * m10) * invDet;\n return out;\n}\n","// mat4.ts — 4x4 matrix namespace (M3 / T-021 base + T-022 projection)\n//\n// Base functions (T-021): create / clone / identity / equals / multiply / transpose /\n// invert / scale / translate / rotate / lookAt / compose / decompose / fromQuat /\n// fromTranslation / fromScaling / fromRotation\n// Projection functions (T-022): perspective / perspectiveNO / perspectiveReverseZ /\n// orthographic / orthographicNO / orthographicReverseZ\n//\n// Surface: 23+ functions (≥ 22 lower bound).\n//\n// Memory layout: column-major 16 floats (compatible with WebGL/WebGPU shader uniforms);\n// index mapping m[col*4 + row]. translation lives in col 3 → indices 12, 13, 14.\n//\n// Naming convention (D-3):\n// - perspective / orthographic = WebGPU [0, 1] NDC (short names go to the primary target)\n// - perspectiveNO / orthographicNO = WebGL/OpenGL [-1, 1] NDC\n// - perspectiveReverseZ / orthographicReverseZ = reversed-Z (far→0, near→1)\n//\n// Degenerate convention:\n// - invert(singular) → out = identity (D-P1; returns out, not null)\n// - lookAt(eye=target) → out = identity (D-P17; same convention as D-P1)\n// - perspective(near>=far) / fovy<=0 / aspect<=0 → numerically undefined but does not throw\n//\n// Four ironclad rules (gl-matrix wiki / research §F1):\n// 1. Out-param first; 2. Aliasing-safe; 3. Module-as-namespace; 4. Float32Array by default.\n//\n// Related: requirements §Surface mat4 lower bound 22 + AC-04 three projection tiers complete +\n// AC-05 reversed-Z fixture + AC-06 never raises (silent degrade) + AC-08 invert returns out, not null;\n// plan-strategy §6 M3 + D-P1/D-P3/D-P17 + R-P1 aliasing-singular;\n// wiki/wgpu-matrix-overview.md / gl-matrix-overview.md / reversed-z-projection.md.\n//\n// Degenerate-semantics registry (plan-strategy.md §appendix A numbering; mat portion has 5 of the\n// AC-07 ≥ 8 hard lower-bound entries):\n// #3 mat4.invert(singular) → out = identity (D-P1)\n// #4 mat4.lookAt(eye=target) → out = identity (D-P17)\n// #5 mat4.lookAt(up // forward) → auto-select alternative up\n// #6 mat4.decompose(m with shear) → silent best-effort decomposition\n// #7 mat4.perspective(near>=far) etc. → numerically undefined but does not throw\n\nimport { EPS_DET, EPS_NORMALIZE } from './_internal/epsilon';\nimport type { Mat4, Mat4Like, Quat, QuatLike, Vec3, Vec3Like } from './types';\nimport * as vec3 from './vec3';\n\nexport type { Mat4, Mat4Like };\n\n/** Create a Mat4 (default all zero; callers usually call identity() right after). */\nexport function create(): Mat4 {\n return new Float32Array(16) as Mat4;\n}\n\n/** Allocate a new Mat4 copy. */\nexport function clone(a: Mat4Like): Mat4 {\n const r = new Float32Array(16) as Mat4;\n for (let i = 0; i < 16; i++) r[i] = a[i] as number;\n return r;\n}\n\n/** out = 4x4 identity. Returns out. */\nexport function identity(out: Mat4): Mat4 {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n\n/** Approximate equality: each element differs by ≤ epsilon. NaN inputs always return false. */\nexport function equals(a: Mat4Like, b: Mat4Like, epsilon = 1e-6): boolean {\n for (let i = 0; i < 16; i++) {\n const av = a[i] as number;\n const bv = b[i] as number;\n if (Number.isNaN(av) || Number.isNaN(bv)) return false;\n if (Math.abs(av - bv) > epsilon) return false;\n }\n return true;\n}\n\n/**\n * out = a * b (column-major matrix multiply). Returns out.\n *\n * Aliasing-safe: out may equal a or b; reads all 32 source elements into locals first.\n */\nexport function multiply(out: Mat4, a: Mat4Like, b: Mat4Like): Mat4 {\n const a00 = a[0] as number;\n const a01 = a[1] as number;\n const a02 = a[2] as number;\n const a03 = a[3] as number;\n const a10 = a[4] as number;\n const a11 = a[5] as number;\n const a12 = a[6] as number;\n const a13 = a[7] as number;\n const a20 = a[8] as number;\n const a21 = a[9] as number;\n const a22 = a[10] as number;\n const a23 = a[11] as number;\n const a30 = a[12] as number;\n const a31 = a[13] as number;\n const a32 = a[14] as number;\n const a33 = a[15] as number;\n const b00 = b[0] as number;\n const b01 = b[1] as number;\n const b02 = b[2] as number;\n const b03 = b[3] as number;\n const b10 = b[4] as number;\n const b11 = b[5] as number;\n const b12 = b[6] as number;\n const b13 = b[7] as number;\n const b20 = b[8] as number;\n const b21 = b[9] as number;\n const b22 = b[10] as number;\n const b23 = b[11] as number;\n const b30 = b[12] as number;\n const b31 = b[13] as number;\n const b32 = b[14] as number;\n const b33 = b[15] as number;\n out[0] = a00 * b00 + a10 * b01 + a20 * b02 + a30 * b03;\n out[1] = a01 * b00 + a11 * b01 + a21 * b02 + a31 * b03;\n out[2] = a02 * b00 + a12 * b01 + a22 * b02 + a32 * b03;\n out[3] = a03 * b00 + a13 * b01 + a23 * b02 + a33 * b03;\n out[4] = a00 * b10 + a10 * b11 + a20 * b12 + a30 * b13;\n out[5] = a01 * b10 + a11 * b11 + a21 * b12 + a31 * b13;\n out[6] = a02 * b10 + a12 * b11 + a22 * b12 + a32 * b13;\n out[7] = a03 * b10 + a13 * b11 + a23 * b12 + a33 * b13;\n out[8] = a00 * b20 + a10 * b21 + a20 * b22 + a30 * b23;\n out[9] = a01 * b20 + a11 * b21 + a21 * b22 + a31 * b23;\n out[10] = a02 * b20 + a12 * b21 + a22 * b22 + a32 * b23;\n out[11] = a03 * b20 + a13 * b21 + a23 * b22 + a33 * b23;\n out[12] = a00 * b30 + a10 * b31 + a20 * b32 + a30 * b33;\n out[13] = a01 * b30 + a11 * b31 + a21 * b32 + a31 * b33;\n out[14] = a02 * b30 + a12 * b31 + a22 * b32 + a32 * b33;\n out[15] = a03 * b30 + a13 * b31 + a23 * b32 + a33 * b33;\n return out;\n}\n\n/** out = transpose(a). Returns out. Aliasing-safe (transpose(m, m) is legal). */\nexport function transpose(out: Mat4, a: Mat4Like): Mat4 {\n const a01 = a[1] as number;\n const a02 = a[2] as number;\n const a03 = a[3] as number;\n const a12 = a[6] as number;\n const a13 = a[7] as number;\n const a23 = a[11] as number;\n const a10 = a[4] as number;\n const a20 = a[8] as number;\n const a30 = a[12] as number;\n const a21 = a[9] as number;\n const a31 = a[13] as number;\n const a32 = a[14] as number;\n out[0] = a[0] as number;\n out[1] = a10;\n out[2] = a20;\n out[3] = a30;\n out[4] = a01;\n out[5] = a[5] as number;\n out[6] = a21;\n out[7] = a31;\n out[8] = a02;\n out[9] = a12;\n out[10] = a[10] as number;\n out[11] = a32;\n out[12] = a03;\n out[13] = a13;\n out[14] = a23;\n out[15] = a[15] as number;\n return out;\n}\n\n/**\n * out = invert(a). Returns out.\n *\n * @degrade a singular (|det| < EPS_DET) → out = identity (D-P1; AC-08: returns out, not null).\n * @degrade aliasing invert(out, out) where out is singular → reads 16 elements into locals before\n * falling back; R-P1 pins the behavior so that out is overwritten with identity.\n *\n * @example\n * ```ts\n * import { mat4 } from '@forgeax/engine-math';\n *\n * const inv = mat4.invert(mat4.create(), m);\n * // If m is singular, inv === identity (no NaN, no null); callers may keep using it.\n * // For explicit diagnostics, the caller builds its own guard (the library never console.warns):\n * // const EPS = 1e-12;\n * // if (mat4.equals(inv, mat4.identity(mat4.create()))) console.warn('mat4.invert: singular input');\n * ```\n */\nexport function invert(out: Mat4, a: Mat4Like): Mat4 {\n const a00 = a[0] as number;\n const a01 = a[1] as number;\n const a02 = a[2] as number;\n const a03 = a[3] as number;\n const a10 = a[4] as number;\n const a11 = a[5] as number;\n const a12 = a[6] as number;\n const a13 = a[7] as number;\n const a20 = a[8] as number;\n const a21 = a[9] as number;\n const a22 = a[10] as number;\n const a23 = a[11] as number;\n const a30 = a[12] as number;\n const a31 = a[13] as number;\n const a32 = a[14] as number;\n const a33 = a[15] as number;\n\n const b00 = a00 * a11 - a01 * a10;\n const b01 = a00 * a12 - a02 * a10;\n const b02 = a00 * a13 - a03 * a10;\n const b03 = a01 * a12 - a02 * a11;\n const b04 = a01 * a13 - a03 * a11;\n const b05 = a02 * a13 - a03 * a12;\n const b06 = a20 * a31 - a21 * a30;\n const b07 = a20 * a32 - a22 * a30;\n const b08 = a20 * a33 - a23 * a30;\n const b09 = a21 * a32 - a22 * a31;\n const b10 = a21 * a33 - a23 * a31;\n const b11 = a22 * a33 - a23 * a32;\n\n const det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (Math.abs(det) < EPS_DET) {\n return identity(out);\n }\n\n const invDet = 1 / det;\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * invDet;\n out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * invDet;\n out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * invDet;\n out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * invDet;\n out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * invDet;\n out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * invDet;\n out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * invDet;\n out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * invDet;\n out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * invDet;\n out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * invDet;\n out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * invDet;\n out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * invDet;\n out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * invDet;\n out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * invDet;\n out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * invDet;\n out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * invDet;\n return out;\n}\n\n/**\n * out = a * Scale(v). Returns out. Aliasing-safe (reads the source diagonal columns into locals first).\n */\nexport function scale(out: Mat4, a: Mat4Like, v: Vec3Like): Mat4 {\n const x = v[0] as number;\n const y = v[1] as number;\n const z = v[2] as number;\n out[0] = (a[0] as number) * x;\n out[1] = (a[1] as number) * x;\n out[2] = (a[2] as number) * x;\n out[3] = (a[3] as number) * x;\n out[4] = (a[4] as number) * y;\n out[5] = (a[5] as number) * y;\n out[6] = (a[6] as number) * y;\n out[7] = (a[7] as number) * y;\n out[8] = (a[8] as number) * z;\n out[9] = (a[9] as number) * z;\n out[10] = (a[10] as number) * z;\n out[11] = (a[11] as number) * z;\n out[12] = a[12] as number;\n out[13] = a[13] as number;\n out[14] = a[14] as number;\n out[15] = a[15] as number;\n return out;\n}\n\n/**\n * out = a * Translate(v) (translate by v in a's local coordinates). Returns out. Aliasing-safe.\n */\nexport function translate(out: Mat4, a: Mat4Like, v: Vec3Like): Mat4 {\n const x = v[0] as number;\n const y = v[1] as number;\n const z = v[2] as number;\n if (a === out) {\n out[12] =\n (a[0] as number) * x + (a[4] as number) * y + (a[8] as number) * z + (a[12] as number);\n out[13] =\n (a[1] as number) * x + (a[5] as number) * y + (a[9] as number) * z + (a[13] as number);\n out[14] =\n (a[2] as number) * x + (a[6] as number) * y + (a[10] as number) * z + (a[14] as number);\n out[15] =\n (a[3] as number) * x + (a[7] as number) * y + (a[11] as number) * z + (a[15] as number);\n return out;\n }\n const a00 = a[0] as number;\n const a01 = a[1] as number;\n const a02 = a[2] as number;\n const a03 = a[3] as number;\n const a10 = a[4] as number;\n const a11 = a[5] as number;\n const a12 = a[6] as number;\n const a13 = a[7] as number;\n const a20 = a[8] as number;\n const a21 = a[9] as number;\n const a22 = a[10] as number;\n const a23 = a[11] as number;\n out[0] = a00;\n out[1] = a01;\n out[2] = a02;\n out[3] = a03;\n out[4] = a10;\n out[5] = a11;\n out[6] = a12;\n out[7] = a13;\n out[8] = a20;\n out[9] = a21;\n out[10] = a22;\n out[11] = a23;\n out[12] = a00 * x + a10 * y + a20 * z + (a[12] as number);\n out[13] = a01 * x + a11 * y + a21 * z + (a[13] as number);\n out[14] = a02 * x + a12 * y + a22 * z + (a[14] as number);\n out[15] = a03 * x + a13 * y + a23 * z + (a[15] as number);\n return out;\n}\n\n/**\n * out = a * Rotate(axis, rad) (build the rotation via the Rodrigues formula then right-multiply a).\n * Returns out.\n *\n * @degrade axis is the zero vector (lengthSq < EPS_NORMALIZE) → out = a (no rotation; identity behavior).\n *\n * @example\n * ```ts\n * mat4.rotate(out, mat4.identity(mat4.create()), [0, 1, 0], Math.PI / 2);\n * // Guard: if (vec3.lengthSq(axis) < EPS_NORMALIZE) skip;\n * ```\n */\nexport function rotate(out: Mat4, a: Mat4Like, axis: Vec3Like, rad: number): Mat4 {\n let x = axis[0] as number;\n let y = axis[1] as number;\n let z = axis[2] as number;\n const lenSq = x * x + y * y + z * z;\n if (lenSq < EPS_NORMALIZE) {\n // zero-axis degenerate: copy a to out (no rotation)\n if (out !== a) {\n for (let i = 0; i < 16; i++) out[i] = a[i] as number;\n }\n return out;\n }\n const invLen = 1 / Math.sqrt(lenSq);\n x *= invLen;\n y *= invLen;\n z *= invLen;\n const s = Math.sin(rad);\n const c = Math.cos(rad);\n const t = 1 - c;\n\n // rotation matrix R column-major (3x3 embedded into the upper-left of 4x4)\n const r00 = x * x * t + c;\n const r01 = y * x * t + z * s;\n const r02 = z * x * t - y * s;\n const r10 = x * y * t - z * s;\n const r11 = y * y * t + c;\n const r12 = z * y * t + x * s;\n const r20 = x * z * t + y * s;\n const r21 = y * z * t - x * s;\n const r22 = z * z * t + c;\n\n // out = a * R (read a then write out; aliasing-safe)\n const a00 = a[0] as number;\n const a01 = a[1] as number;\n const a02 = a[2] as number;\n const a03 = a[3] as number;\n const a10 = a[4] as number;\n const a11 = a[5] as number;\n const a12 = a[6] as number;\n const a13 = a[7] as number;\n const a20 = a[8] as number;\n const a21 = a[9] as number;\n const a22 = a[10] as number;\n const a23 = a[11] as number;\n\n out[0] = a00 * r00 + a10 * r01 + a20 * r02;\n out[1] = a01 * r00 + a11 * r01 + a21 * r02;\n out[2] = a02 * r00 + a12 * r01 + a22 * r02;\n out[3] = a03 * r00 + a13 * r01 + a23 * r02;\n out[4] = a00 * r10 + a10 * r11 + a20 * r12;\n out[5] = a01 * r10 + a11 * r11 + a21 * r12;\n out[6] = a02 * r10 + a12 * r11 + a22 * r12;\n out[7] = a03 * r10 + a13 * r11 + a23 * r12;\n out[8] = a00 * r20 + a10 * r21 + a20 * r22;\n out[9] = a01 * r20 + a11 * r21 + a21 * r22;\n out[10] = a02 * r20 + a12 * r21 + a22 * r22;\n out[11] = a03 * r20 + a13 * r21 + a23 * r22;\n out[12] = a[12] as number;\n out[13] = a[13] as number;\n out[14] = a[14] as number;\n out[15] = a[15] as number;\n return out;\n}\n\n/**\n * out = view matrix lookAt(eye, target, up) (right-handed; camera looks toward -z at target).\n * Returns out.\n *\n * @degrade eye === target (distanceSq < EPS_NORMALIZE) → out = identity (D-P17, same convention as D-P1).\n * @degrade up collinear with the view direction (cross degenerate) → auto-select an alternative up\n * (first (0,0,1), then (0,1,0)).\n *\n * @example\n * ```ts\n * mat4.lookAt(out, [0, 0, 5], [0, 0, 0], [0, 1, 0]);\n * // Guard: if (vec3.distanceSq(eye, target) < EPS_NORMALIZE) skip;\n * ```\n */\nexport function lookAt(out: Mat4, eye: Vec3Like, target: Vec3Like, up: Vec3Like): Mat4 {\n const ex = eye[0] as number;\n const ey = eye[1] as number;\n const ez = eye[2] as number;\n const tx = target[0] as number;\n const ty = target[1] as number;\n const tz = target[2] as number;\n const upx = up[0] as number;\n const upy = up[1] as number;\n const upz = up[2] as number;\n\n // forward = normalize(eye - target) (right-handed: camera looks toward -z, so the z axis = eye - target)\n let fx = ex - tx;\n let fy = ey - ty;\n let fz = ez - tz;\n const fLenSq = fx * fx + fy * fy + fz * fz;\n if (fLenSq < EPS_NORMALIZE) {\n return identity(out);\n }\n const fInv = 1 / Math.sqrt(fLenSq);\n fx *= fInv;\n fy *= fInv;\n fz *= fInv;\n\n // right = normalize(cross(up, forward))\n let rx = upy * fz - upz * fy;\n let ry = upz * fx - upx * fz;\n let rz = upx * fy - upy * fx;\n let rLenSq = rx * rx + ry * ry + rz * rz;\n if (rLenSq < EPS_NORMALIZE) {\n // up collinear with forward: pick alternative up = (0, 0, 1); if still collinear pick (0, 1, 0)\n rx = 0 * fz - 1 * fy;\n ry = 1 * fx - 0 * fz;\n rz = 0 * fy - 0 * fx;\n rLenSq = rx * rx + ry * ry + rz * rz;\n if (rLenSq < EPS_NORMALIZE) {\n rx = 0 * fz - 0 * fy;\n ry = 0 * fx - 1 * fz;\n rz = 1 * fy - 0 * fx;\n rLenSq = rx * rx + ry * ry + rz * rz;\n }\n }\n const rInv = 1 / Math.sqrt(rLenSq);\n rx *= rInv;\n ry *= rInv;\n rz *= rInv;\n\n // newUp = cross(forward, right)\n const ux = fy * rz - fz * ry;\n const uy = fz * rx - fx * rz;\n const uz = fx * ry - fy * rx;\n\n // column-major: col0 = right, col1 = newUp, col2 = forward, col3 = -view * eye\n out[0] = rx;\n out[1] = ux;\n out[2] = fx;\n out[3] = 0;\n out[4] = ry;\n out[5] = uy;\n out[6] = fy;\n out[7] = 0;\n out[8] = rz;\n out[9] = uz;\n out[10] = fz;\n out[11] = 0;\n out[12] = -(rx * ex + ry * ey + rz * ez);\n out[13] = -(ux * ex + uy * ey + uz * ez);\n out[14] = -(fx * ex + fy * ey + fz * ez);\n out[15] = 1;\n return out;\n}\n\n/**\n * out = T(translation) * R(rotation) * S(scale) (TRS affine composition). Returns out.\n */\nexport function compose(out: Mat4, t: Vec3Like, r: QuatLike, s: Vec3Like): Mat4 {\n // build R (from quat) first, then scale each column, finally write translation\n const x = r[0] as number;\n const y = r[1] as number;\n const z = r[2] as number;\n const w = r[3] as number;\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n const xx = x * x2;\n const xy = x * y2;\n const xz = x * z2;\n const yy = y * y2;\n const yz = y * z2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n const sx = s[0] as number;\n const sy = s[1] as number;\n const sz = s[2] as number;\n\n out[0] = (1 - (yy + zz)) * sx;\n out[1] = (xy + wz) * sx;\n out[2] = (xz - wy) * sx;\n out[3] = 0;\n out[4] = (xy - wz) * sy;\n out[5] = (1 - (xx + zz)) * sy;\n out[6] = (yz + wx) * sy;\n out[7] = 0;\n out[8] = (xz + wy) * sz;\n out[9] = (yz - wx) * sz;\n out[10] = (1 - (xx + yy)) * sz;\n out[11] = 0;\n out[12] = t[0] as number;\n out[13] = t[1] as number;\n out[14] = t[2] as number;\n out[15] = 1;\n return out;\n}\n\n/**\n * Decompose m into (translation, rotation quat, scale).\n *\n * @degrade m contains shear (non-pure affine) → silent best-effort decomposition (matches\n * Three.js behavior; does not throw).\n *\n * @example\n * ```ts\n * const t = vec3.create(); const r = quat.create(); const s = vec3.create();\n * mat4.decompose(t, r, s, m);\n * // Guard: callers should avoid introducing shear matrices at the ECS-design layer.\n * ```\n */\nexport function decompose(out_t: Vec3, out_r: Quat, out_s: Vec3, m: Mat4Like): void {\n // translation\n out_t[0] = m[12] as number;\n out_t[1] = m[13] as number;\n out_t[2] = m[14] as number;\n\n // length of each column = scale\n const sx = Math.hypot(m[0] as number, m[1] as number, m[2] as number);\n const sy = Math.hypot(m[4] as number, m[5] as number, m[6] as number);\n const sz = Math.hypot(m[8] as number, m[9] as number, m[10] as number);\n\n // handle the determinant sign: negative det → flip sx\n // simplified det check: use the upper-left 3x3 determinant\n const det =\n (m[0] as number) *\n ((m[5] as number) * (m[10] as number) - (m[6] as number) * (m[9] as number)) -\n (m[1] as number) *\n ((m[4] as number) * (m[10] as number) - (m[6] as number) * (m[8] as number)) +\n (m[2] as number) * ((m[4] as number) * (m[9] as number) - (m[5] as number) * (m[8] as number));\n const sxFinal = det < 0 ? -sx : sx;\n\n out_s[0] = sxFinal;\n out_s[1] = sy;\n out_s[2] = sz;\n\n // extract rotation: divide each column of m's upper-left 3x3 by scale to get the pure rotation matrix → convert to quat\n const invSx = sxFinal === 0 ? 0 : 1 / sxFinal;\n const invSy = sy === 0 ? 0 : 1 / sy;\n const invSz = sz === 0 ? 0 : 1 / sz;\n const r00 = (m[0] as number) * invSx;\n const r01 = (m[1] as number) * invSx;\n const r02 = (m[2] as number) * invSx;\n const r10 = (m[4] as number) * invSy;\n const r11 = (m[5] as number) * invSy;\n const r12 = (m[6] as number) * invSy;\n const r20 = (m[8] as number) * invSz;\n const r21 = (m[9] as number) * invSz;\n const r22 = (m[10] as number) * invSz;\n\n // rotation matrix → quat (Shoemake's method; case-split on the sign of trace)\n const trace = r00 + r11 + r22;\n if (trace > 0) {\n const s = 0.5 / Math.sqrt(trace + 1);\n out_r[0] = (r12 - r21) * s;\n out_r[1] = (r20 - r02) * s;\n out_r[2] = (r01 - r10) * s;\n out_r[3] = 0.25 / s;\n } else if (r00 > r11 && r00 > r22) {\n const s = 2 * Math.sqrt(1 + r00 - r11 - r22);\n out_r[0] = 0.25 * s;\n out_r[1] = (r10 + r01) / s;\n out_r[2] = (r20 + r02) / s;\n out_r[3] = (r12 - r21) / s;\n } else if (r11 > r22) {\n const s = 2 * Math.sqrt(1 + r11 - r00 - r22);\n out_r[0] = (r10 + r01) / s;\n out_r[1] = 0.25 * s;\n out_r[2] = (r21 + r12) / s;\n out_r[3] = (r20 - r02) / s;\n } else {\n const s = 2 * Math.sqrt(1 + r22 - r00 - r11);\n out_r[0] = (r20 + r02) / s;\n out_r[1] = (r21 + r12) / s;\n out_r[2] = 0.25 * s;\n out_r[3] = (r01 - r10) / s;\n }\n}\n\n/** out = 4x4 rotation matrix from quaternion (no translation, no scale). Returns out. */\nexport function fromQuat(out: Mat4, q: QuatLike): Mat4 {\n const x = q[0] as number;\n const y = q[1] as number;\n const z = q[2] as number;\n const w = q[3] as number;\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n const xx = x * x2;\n const xy = x * y2;\n const xz = x * z2;\n const yy = y * y2;\n const yz = y * z2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n out[0] = 1 - (yy + zz);\n out[1] = xy + wz;\n out[2] = xz - wy;\n out[3] = 0;\n out[4] = xy - wz;\n out[5] = 1 - (xx + zz);\n out[6] = yz + wx;\n out[7] = 0;\n out[8] = xz + wy;\n out[9] = yz - wx;\n out[10] = 1 - (xx + yy);\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n\n/** out = pure translation matrix (translation added to identity). Returns out. */\nexport function fromTranslation(out: Mat4, v: Vec3Like): Mat4 {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = v[0] as number;\n out[13] = v[1] as number;\n out[14] = v[2] as number;\n out[15] = 1;\n return out;\n}\n\n/** out = pure scaling matrix diag(v.x, v.y, v.z, 1). Returns out. */\nexport function fromScaling(out: Mat4, v: Vec3Like): Mat4 {\n out[0] = v[0] as number;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = v[1] as number;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = v[2] as number;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n\n/**\n * out = pure rotation matrix from axis-angle. Returns out.\n *\n * @degrade axis is the zero vector → out = identity (same convention as rotate).\n *\n * @example\n * ```ts\n * mat4.fromRotation(out, [0, 1, 0], Math.PI / 2);\n * mat4.fromRotation(out, [0, 0, 0], 1); // → identity (zero-axis degenerate, AC-06 no throw)\n * ```\n */\nexport function fromRotation(out: Mat4, axis: Vec3Like, rad: number): Mat4 {\n let x = axis[0] as number;\n let y = axis[1] as number;\n let z = axis[2] as number;\n const lenSq = x * x + y * y + z * z;\n if (lenSq < EPS_NORMALIZE) {\n return identity(out);\n }\n const invLen = 1 / Math.sqrt(lenSq);\n x *= invLen;\n y *= invLen;\n z *= invLen;\n const s = Math.sin(rad);\n const c = Math.cos(rad);\n const t = 1 - c;\n out[0] = x * x * t + c;\n out[1] = y * x * t + z * s;\n out[2] = z * x * t - y * s;\n out[3] = 0;\n out[4] = x * y * t - z * s;\n out[5] = y * y * t + c;\n out[6] = z * y * t + x * s;\n out[7] = 0;\n out[8] = x * z * t + y * s;\n out[9] = y * z * t - x * s;\n out[10] = z * z * t + c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n\n// ============================================================\n// Projection family (T-022) — three perspective tiers + three orthographic tiers\n// ============================================================\n//\n// Naming convention (D-3 + wiki/wgpu-matrix-overview / wiki/gl-matrix-overview):\n// `perspective` / `orthographic` = WebGPU [0, 1] NDC (short names borrowed from wgpu-matrix)\n// `perspectiveNO` / `orthographicNO` = WebGL/OpenGL [-1, 1] NDC (NO=Negative-One, borrowed from gl-matrix)\n// `perspectiveReverseZ` / `orthographicReverseZ` = reversed-Z (far→0, near→1; covers finite + infinite)\n//\n// AC-04 three projection tiers complete + AC-05 reversed-Z numeric fixture (error ≤ 1e-5)\n// + AC-06 never raises (silent degrade).\n// reversed-Z numeric correctness: see wiki/reversed-z-projection.md §7.2 / §7.3 / §7.4.\n\n/**\n * out = perspective projection (**WebGPU [0, 1] NDC** short name, D-3). Returns out.\n *\n * Right-handed; z_eye negative values lie in the frustum; near → ndc_z=0, far → ndc_z=1.\n * Naming borrowed from wgpu-matrix (short name for WebGPU), unlike gl-matrix (short name for WebGL).\n * Supports both finite far and infinite far (far=Infinity, aligned with wgpu-matrix\n * `m[10]=-1, m[14]=-near`).\n *\n * @degrade near >= far or fovy <= 0 or aspect <= 0 → numerically undefined but does not throw\n * (plan §appendix A #7).\n *\n * @example\n * ```ts\n * mat4.perspective(out, Math.PI / 4, canvas.width / canvas.height, 0.1, 1000);\n * mat4.perspective(out, Math.PI / 4, aspect, 0.1, Infinity); // infinite-far trick\n * // Guard: if (!(near < far && fovy > 0 && aspect > 0)) handleInvalid();\n * ```\n */\nexport function perspective(\n out: Mat4,\n fovYRadians: number,\n aspect: number,\n near: number,\n far: number,\n): Mat4 {\n const f = 1 / Math.tan(fovYRadians / 2);\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[15] = 0;\n\n if (far === Number.POSITIVE_INFINITY) {\n // infinite-far trick (aligned with wgpu-matrix): m[10]=-1, m[14]=-near\n out[10] = -1;\n out[14] = -near;\n } else {\n const nf = 1 / (near - far);\n out[10] = far * nf;\n out[14] = far * near * nf;\n }\n return out;\n}\n\n/**\n * out = perspective projection (**WebGL/OpenGL [-1, 1] NDC**; *NO* = Negative-One, borrowed from gl-matrix).\n *\n * Right-handed, near → ndc_z=-1, far → ndc_z=+1.\n *\n * @degrade Same as perspective.\n *\n * @example\n * ```ts\n * mat4.perspectiveNO(out, Math.PI / 4, canvas.width / canvas.height, 0.1, 1000);\n * mat4.perspectiveNO(out, Math.PI / 4, aspect, 0.1, Infinity); // infinite-far\n * // Guard: if (!(near < far && fovy > 0 && aspect > 0)) handleInvalid();\n * ```\n */\nexport function perspectiveNO(\n out: Mat4,\n fovYRadians: number,\n aspect: number,\n near: number,\n far: number,\n): Mat4 {\n const f = 1 / Math.tan(fovYRadians / 2);\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[15] = 0;\n\n if (far === Number.POSITIVE_INFINITY) {\n out[10] = -1;\n out[14] = -2 * near;\n } else {\n const nf = 1 / (near - far);\n out[10] = (far + near) * nf;\n out[14] = 2 * far * near * nf;\n }\n return out;\n}\n\n/**\n * out = reversed-Z perspective projection (**WebGPU [0, 1] NDC, near→1 far→0**). Returns out.\n *\n * Precision gain: matches the float dense region ([0, 0.01]) to the slowly-varying far end of 1/z.\n * Under the standard test conditions `near=0.1, far=10000`, NVIDIA reports a reversed-Z + float32\n * depth error rate of 0% (vs. high error rate for the standard mapping). See\n * `.forgeax-harness/knowledge-base/wiki/reversed-z-projection.md` §5.\n *\n * GPU-side companion switches (5 places must be flipped together):\n * 1. depthCompare: 'greater' (vs 'less')\n * 2. depthClearValue: 0.0 (vs 1.0)\n * 3. depth format: 'depth32float' (mandatory; fixed-point loses most of the gain)\n * 4. depth bias: inverted (avoid worsening z-fighting)\n * 5. multiple passes must share the reversed-Z convention\n *\n * Supports finite and infinite far (from wiki §3.3 / §4.2 derivations):\n * - finite: m[10]=near/(far-near), m[14]=near*far/(far-near)\n * - infinite (far=Infinity): m[10]=0, m[14]=near (lim f→∞ limit values)\n *\n * Numeric fixture (AC-05 error ≤ 1e-5): see __tests__/_fixtures.ts.\n *\n * @degrade Same as perspective.\n *\n * @example\n * ```ts\n * mat4.perspectiveReverseZ(out, Math.PI / 4, aspect, 0.1, 100);\n * mat4.perspectiveReverseZ(out, Math.PI / 4, aspect, 0.1, Infinity); // infinite far\n * // GPU companion: pipeline.depthCompare = 'greater'; passDesc.depthClearValue = 0.0;\n * ```\n */\nexport function perspectiveReverseZ(\n out: Mat4,\n fovYRadians: number,\n aspect: number,\n near: number,\n far: number,\n): Mat4 {\n const f = 1 / Math.tan(fovYRadians / 2);\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[15] = 0;\n\n if (far === Number.POSITIVE_INFINITY) {\n out[10] = 0;\n out[14] = near;\n } else {\n const fn = 1 / (far - near);\n out[10] = near * fn;\n out[14] = near * far * fn;\n }\n return out;\n}\n\n/**\n * out = orthographic projection (**WebGPU [0, 1] NDC** short name, D-3). Returns out.\n *\n * @degrade near >= far or left >= right or top <= bottom → numerically undefined but does not throw.\n *\n * @example\n * ```ts\n * mat4.orthographic(out, -10, 10, 10, -10, 0.1, 100);\n * // Guard: if (!(left < right && top > bottom && near < far)) handleInvalid();\n * ```\n */\nexport function orthographic(\n out: Mat4,\n left: number,\n right: number,\n top: number,\n bottom: number,\n near: number,\n far: number,\n): Mat4 {\n const lr = 1 / (left - right);\n const bt = 1 / (bottom - top);\n const nf = 1 / (near - far);\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = nf; // [0,1] NDC: near→0, far→1 → m[10] = 1/(near-far), m[14] = near/(near-far)\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = near * nf;\n out[15] = 1;\n return out;\n}\n\n/** out = orthographic projection (**WebGL/OpenGL [-1, 1] NDC**, *NO*). Returns out. */\nexport function orthographicNO(\n out: Mat4,\n left: number,\n right: number,\n top: number,\n bottom: number,\n near: number,\n far: number,\n): Mat4 {\n const lr = 1 / (left - right);\n const bt = 1 / (bottom - top);\n const nf = 1 / (near - far);\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 2 * nf; // [-1,1] NDC: near→-1, far→1\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = (near + far) * nf;\n out[15] = 1;\n return out;\n}\n\n/**\n * out = reversed-Z orthographic projection (**WebGPU [0, 1] NDC, near→1 far→0**;\n * D-P3 self-extension).\n *\n * Pairs with perspectiveReverseZ to form a symmetric three-tier surface; in orthographic\n * projection the reversed-Z precision gain is small (ortho is linear in z), but it is kept to\n * avoid LLM single-pass-scan cognitive load (charter proposition 1).\n * Note: this function is an @forgeax/engine-math self-extension; wgpu-matrix / gl-matrix have no matching\n * name (see plan-strategy D-P3 + README quick-ref table footnote).\n */\nexport function orthographicReverseZ(\n out: Mat4,\n left: number,\n right: number,\n top: number,\n bottom: number,\n near: number,\n far: number,\n): Mat4 {\n const lr = 1 / (left - right);\n const bt = 1 / (bottom - top);\n const fn = 1 / (far - near); // reversed-Z [0,1]: near→1, far→0\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n // Derivation: -m[10]*near + m[14] = 1, -m[10]*far + m[14] = 0\n // → m[10] = 1/(far-near), m[14] = far/(far-near)\n out[10] = fn;\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = far * fn;\n out[15] = 1;\n return out;\n}\n\n// ============================================================\n// Transform reverse surface (M1 / t6) — mat4 → vec3 cross-type transforms\n// ============================================================\n//\n// 3 functions / +3 surface (mat4 23 → 26 / total 115 → 119, AC-03):\n// - transformVec3: (x, y, z, 1) multiplied by 4×4 + perspective divide + w'=0 explicit guard (D-4 silent)\n// - transformPoint: ES alias of transformVec3 (OQ-1 / S-1, saves 16 LOC)\n// - transformDirection: takes m's upper-left 3×3 (no translation column) + vec3.normalize (OQ-2 / S-2)\n//\n// Degenerate convention (D-4 library-wide silent fall-back):\n// - transformVec3 / transformPoint: w' = 0 (perspective divide by zero) → out = (0, 0, 0)\n// - transformDirection: |out| = 0 → vec3.normalize silently falls back to (0, 0, 0)\n//\n// Related: requirements §3.1 mat4 rows 1/2/3 + §11 surface full table mat4 23→26;\n// research Finding 1 (alias evidence) + Finding 2 (take 3×3 + normalize) +\n// Finding 4 (w'=0 explicit guard stricter than upstreams);\n// plan-strategy §2 S-1 / S-2 + §3 R-1 countermeasure + §6 M1 scope section.\n\n/**\n * out = M * (v.x, v.y, v.z, 1) (with perspective divide by w'). Returns out.\n *\n * For affine m this is equivalent to transformPoint (treats v as a \"position\" that participates\n * in the transform, including translation).\n * Aliasing-safe: reads v.xyz into locals before writing out.\n *\n * @degrade w' = 0 (perspective divide by zero) → out = (0, 0, 0) (D-4 silent convention; avoids\n * NaN/Infinity propagation; stricter than the implicit 1/0 = Infinity behavior of\n * Three.js / gl-matrix).\n *\n * @example\n * ```ts\n * mat4.transformVec3(out, projViewModel, v);\n * // Guard: if (out[0] === 0 && out[1] === 0 && out[2] === 0 && wasNonZero(v)) {\n * // // w'=0 degenerate branch; the caller diagnoses as needed\n * // }\n * ```\n */\nexport function transformVec3(out: Vec3, m: Mat4Like, v: Vec3Like): Vec3 {\n const x = v[0] as number;\n const y = v[1] as number;\n const z = v[2] as number;\n const m00 = m[0] as number;\n const m01 = m[1] as number;\n const m02 = m[2] as number;\n const m03 = m[3] as number;\n const m10 = m[4] as number;\n const m11 = m[5] as number;\n const m12 = m[6] as number;\n const m13 = m[7] as number;\n const m20 = m[8] as number;\n const m21 = m[9] as number;\n const m22 = m[10] as number;\n const m23 = m[11] as number;\n const m30 = m[12] as number;\n const m31 = m[13] as number;\n const m32 = m[14] as number;\n const m33 = m[15] as number;\n\n const w = m03 * x + m13 * y + m23 * z + m33;\n if (w === 0) {\n // D-4 silent convention: perspective divide by zero → (0, 0, 0)\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n return out;\n }\n const invW = 1 / w;\n out[0] = (m00 * x + m10 * y + m20 * z + m30) * invW;\n out[1] = (m01 * x + m11 * y + m21 * z + m31) * invW;\n out[2] = (m02 * x + m12 * y + m22 * z + m32) * invW;\n return out;\n}\n\n/**\n * out = M * (v.x, v.y, v.z, 1) (with perspective divide by w'). Returns out.\n *\n * Treats v as a \"position\", including the translation column (shares the same function body as\n * transformVec3; OQ-1 / S-1).\n * Aliasing-safe; reference-equal with transformVec3: `mat4.transformPoint === mat4.transformVec3`.\n *\n * @degrade w' = 0 (perspective divide by zero) → out = (0, 0, 0) (D-4 silent convention;\n * same as transformVec3).\n *\n * @example\n * ```ts\n * mat4.transformPoint(out, modelMatrix, [1, 2, 3]);\n * // (1,2,3) → world-space position, including translation\n * ```\n */\nexport const transformPoint = transformVec3;\n\n/**\n * out = normalize(M_3x3 * v) (uses m's upper-left 3×3, no translation column). Returns out.\n *\n * Treats v as a \"direction\" and does **not** apply translation; the result is unit-normalized via\n * `vec3.normalize` (OQ-2 / S-2).\n * Aliasing-safe: reads v.xyz into locals before writing out.\n *\n * @degrade |out| = 0 (singular m + arbitrary v / m_3x3 maps v to the zero vector) → vec3.normalize\n * silently falls back to (0, 0, 0) (library-wide D-4 convention).\n *\n * @example\n * ```ts\n * const worldNormal = vec3.create();\n * mat4.transformDirection(worldNormal, modelMatrix, localNormal);\n * // Normal-vector transform: ignores translation; a unit-length input + orthogonal matrix\n * // guarantees a unit-length output.\n * ```\n */\nexport function transformDirection(out: Vec3, m: Mat4Like, v: Vec3Like): Vec3 {\n const x = v[0] as number;\n const y = v[1] as number;\n const z = v[2] as number;\n const m00 = m[0] as number;\n const m01 = m[1] as number;\n const m02 = m[2] as number;\n const m10 = m[4] as number;\n const m11 = m[5] as number;\n const m12 = m[6] as number;\n const m20 = m[8] as number;\n const m21 = m[9] as number;\n const m22 = m[10] as number;\n out[0] = m00 * x + m10 * y + m20 * z;\n out[1] = m01 * x + m11 * y + m21 * z;\n out[2] = m02 * x + m12 * y + m22 * z;\n // S-2: reuse vec3.normalize's silent convention (|out|=0 → out=(0,0,0)); do not inline copy.\n return vec3.normalize(out, out);\n}\n\n// ============================================================\n// world-mat4 basis / translation accessors\n// (feat-20260601-unify-transform-local-global-mat4-drop-globaltrans M1 w6)\n// ============================================================\n//\n// Decompose a world-space mat4 into its translation + the three orthonormal\n// basis directions. Placed adjacent to transformDirection because they share\n// the same normalization convention (vec3.normalize's |out|=0 → (0,0,0) D-4\n// fallback). The Transform world column (array<f32, 16>) is the producer; the\n// audio listener / camera-orientation consumers read forward/up via these.\n//\n// Layout (column-major, m[col*4 + row]):\n// col0 = m[0..2] = right col1 = m[4..6] = up\n// col2 = m[8..10] = forward col3 = m[12..14] = translation\n//\n// Sign (RL-4): getForward returns -normalize(col2) so it aligns with the\n// historical single-quaternion oracle quat.transformVec3(q, (0, 0, -1)) -- a\n// camera/listener looking down -Z in its local frame.\n\n/**\n * World-space translation = col 3 (m[12], m[13], m[14]). Read verbatim, not\n * normalized (translation has magnitude).\n */\nexport function getTranslation(out: Vec3, m: Mat4Like): Vec3 {\n out[0] = m[12] as number;\n out[1] = m[13] as number;\n out[2] = m[14] as number;\n return out;\n}\n\n/**\n * World-space forward = `-normalize(col2)` (RL-4: -Z look convention; matches\n * `quat.transformVec3(q, [0, 0, -1])`). Degenerate zero column → (0,0,0).\n */\nexport function getForward(out: Vec3, m: Mat4Like): Vec3 {\n out[0] = -(m[8] as number);\n out[1] = -(m[9] as number);\n out[2] = -(m[10] as number);\n return vec3.normalize(out, out);\n}\n\n/** World-space up = `normalize(col1)`. Degenerate zero column → (0,0,0). */\nexport function getUp(out: Vec3, m: Mat4Like): Vec3 {\n out[0] = m[4] as number;\n out[1] = m[5] as number;\n out[2] = m[6] as number;\n return vec3.normalize(out, out);\n}\n\n/** World-space right = `normalize(col0)`. Degenerate zero column → (0,0,0). */\nexport function getRight(out: Vec3, m: Mat4Like): Vec3 {\n out[0] = m[0] as number;\n out[1] = m[1] as number;\n out[2] = m[2] as number;\n return vec3.normalize(out, out);\n}\n\n// ============================================================\n// unproject (feat-20260529-picking-raycasting-screen-to-entity M2 w7)\n// ============================================================\n//\n// Map an NDC point back to world space via the inverse view-projection matrix.\n// Internally constructs vec4 (ndc.x, ndc.y, ndc.z, 1) and delegates to transformVec3,\n// which performs the 4×4 multiply + perspective divide by w'.\n//\n// WebGPU [0,1] NDC z convention (D-NDC / research Finding 6):\n// near plane → z=0, far plane → z=1\n//\n// Related: plan-tasks.json w7; requirements in-scope #3;\n// research Finding 3 (transformVec3 built-in w-divide).\n\n/**\n * Unproject an NDC point to world space.\n *\n * `ndcPoint` is in NDC space: x,y ∈ [-1,1], z ∈ [0,1] (WebGPU convention).\n * `invVP` is the inverse of the view-projection matrix.\n *\n * @example\n * ```ts\n * const worldPoint = vec3.create();\n * mat4.unproject(worldPoint, [0, 0, 0], invVP); // near-plane centre → world\n * mat4.unproject(worldPoint, [0, 0, 1], invVP); // far-plane centre → world\n * ```\n */\nexport function unproject(out: Vec3, ndcPoint: Vec3Like, invVP: Mat4Like): Vec3 {\n return transformVec3(out, invVP, ndcPoint);\n}\n\n// ============================================================\n// projectPoint — world → NDC dual of unproject\n// (roadmap 2026-06-15 game-demo-engine-gaps G-4: HUD anchor / worldToScreen)\n// ============================================================\n//\n// Map a world-space point to NDC via the view-projection matrix. Caller maps\n// NDC.xy ∈ [-1,1] to viewport pixels (DOM y-down → flip y), and inspects NDC.z\n// for \"behind camera\" / \"outside far plane\" culling.\n//\n// Pairs with unproject (NDC → world); both are intent-revealing aliases of\n// transformVec3 + perspective divide (D-4 silent w'=0 → out=(0,0,0) inherited).\n\n/**\n * Project a world-space point to NDC space through a view-projection matrix.\n *\n * `worldPos` is a position (treated with translation column, not a direction).\n * `viewProj` is `proj × view` (eye→clip composed with world→eye).\n * Output NDC is WebGPU convention: x,y ∈ [-1,1], z ∈ [0,1] (near=0 / far=1).\n *\n * To map NDC to viewport pixels (DOM y-down):\n * px = (ndc.x * 0.5 + 0.5) * vpWidth\n * py = (1 - (ndc.y * 0.5 + 0.5)) * vpHeight\n * `ndc.z < 0` or `ndc.z > 1` means the point is outside the depth range\n * (behind near or beyond far); callers typically skip drawing the HUD anchor.\n *\n * @degrade w' = 0 (point lies on the camera plane) → out = (0, 0, 0)\n * (D-4 silent convention; inherited from transformVec3).\n *\n * @example\n * ```ts\n * const ndc = vec3.create();\n * mat4.projectPoint(ndc, worldPos, viewProj);\n * if (ndc[2] >= 0 && ndc[2] <= 1) {\n * const px = (ndc[0] * 0.5 + 0.5) * canvas.width;\n * const py = (1 - (ndc[1] * 0.5 + 0.5)) * canvas.height;\n * // anchor DOM tooltip at (px, py)\n * }\n * ```\n */\nexport function projectPoint(out: Vec3, worldPos: Vec3Like, viewProj: Mat4Like): Vec3 {\n return transformVec3(out, viewProj, worldPos);\n}\n\n// ============================================================\n// computeViewProj (feat-20260617-host-engine-contract-and-video-cutscene M2 w6)\n// ============================================================\n//\n// Convenience composition: out = perspective(fov,aspect,near,far) * lookAt(eye,target,up).\n// Plain numeric / Vec3Like params only — keeps math zero-dep (plan-strategy D-1).\n//\n// Related: requirements AC-03; plan-strategy D-1; research Finding 4.\n\n/**\n * Compute a combined view-projection matrix from camera parameters.\n *\n * This is a convenience composition of `mat4.perspective * mat4.lookAt`, not a primitive.\n * All parameters are plain numbers / Vec3Like — no runtime POD types (math zero-dep).\n *\n * @param out Mat4 to write the result into.\n * @param eye Camera position in world space.\n * @param target Point the camera looks at.\n * @param up Approximate up direction.\n * @param fovYRadians Vertical field of view in radians.\n * @param aspect Aspect ratio (width / height).\n * @param near Near clip distance (positive).\n * @param far Far clip distance (positive, or Infinity for infinite-far).\n * @returns `out` (same Mat4 instance).\n */\nexport function computeViewProj(\n out: Mat4,\n eye: Vec3Like,\n target: Vec3Like,\n up: Vec3Like,\n fovYRadians: number,\n aspect: number,\n near: number,\n far: number,\n): Mat4 {\n const view = lookAt(create(), eye, target, up);\n const proj = perspective(create(), fovYRadians, aspect, near, far);\n return multiply(out, proj, view);\n}\n","// vec3.ts — 3D vector namespace (M2 / T-014, rewritten from the M1 baseline of 8 functions)\n//\n// 21-function surface (≥ 18 lower bound): vec2 base (without perp) + cross + distanceSq.\n// create / clone / copy / set / equals / add / sub / scale / negate /\n// dot / cross / lengthSq / length / distance / distanceSq /\n// normalize / lerp / smoothDamp / catmullRom / min / max\n//\n// Cross-type transforms are provided via the reverse surfaces of mat4 / quat (K-1/K-2 tore down\n// the Three.js-style promise; see plan-decisions §D-12): the three mat4 ns transform* functions\n// + quat.transformVec3 supersede the historical promise to \"hang cross-type methods on vec3 instances\".\n//\n// Design locks:\n// - branded Float32Array (types.ts SSOT); factory `as Vec3` casts are funneled.\n// - The legacy local Vec3 / Vec3Like type aliases are removed; mat4 / quat now `import './types'` Vec3Like.\n// - Out-param first + aliasing-safe (gl-matrix four ironclad rules, wiki/gl-matrix-overview).\n// - normalize(0-vec) → 0-vec silent fall-back (D-P12 / AC-06).\n// - mandatory `export function` (D-P10).\n//\n// Related: requirements §Surface vec3 lower bound 18 + AC-19 legacy 8-function removal (vec3 portion);\n// plan-strategy §6 M2 + §1.1 vec3.ts;\n// wiki/typescript-branded-types §7.2 factory template;\n// wiki/gl-matrix-overview Out-param four ironclad rules + degenerate anchor.\n//\n// Compatibility: this file still re-exports `Vec3Like` from ./types so mat4 / quat's existing imports\n// keep working (M2 does not force-update mat4 / quat import paths; that lands in M3).\n\nimport { EPS_NORMALIZE } from './_internal/epsilon';\nimport { catmullRomScalar, lerp as scalarLerp, smoothDecayFactor } from './_internal/scalar';\nimport type { Vec3, Vec3Like } from './types';\n\nexport type { Vec3, Vec3Like };\n\n/** Create a Vec3 (zero vector by default). */\nexport function create(x = 0, y = 0, z = 0): Vec3 {\n return Float32Array.of(x, y, z) as Vec3;\n}\n\n/** Allocate a new Vec3 copy. */\nexport function clone(a: Vec3Like): Vec3 {\n return Float32Array.of(a[0] as number, a[1] as number, a[2] as number) as Vec3;\n}\n\n/** out = a. aliasing-safe (copy(v, v) is a no-op). */\nexport function copy(out: Vec3, a: Vec3Like): Vec3 {\n out[0] = a[0] as number;\n out[1] = a[1] as number;\n out[2] = a[2] as number;\n return out;\n}\n\n/** Write the components and return out. */\nexport function set(out: Vec3, x: number, y: number, z: number): Vec3 {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\n\n/**\n * Approximate equality: every component differs by ≤ epsilon. NaN inputs always return false (IEEE 754).\n */\nexport function equals(a: Vec3Like, b: Vec3Like, epsilon = 1e-6): boolean {\n const ax = a[0] as number;\n const ay = a[1] as number;\n const az = a[2] as number;\n const bx = b[0] as number;\n const by = b[1] as number;\n const bz = b[2] as number;\n if (\n Number.isNaN(ax) ||\n Number.isNaN(ay) ||\n Number.isNaN(az) ||\n Number.isNaN(bx) ||\n Number.isNaN(by) ||\n Number.isNaN(bz)\n ) {\n return false;\n }\n return (\n Math.abs(ax - bx) <= epsilon && Math.abs(ay - by) <= epsilon && Math.abs(az - bz) <= epsilon\n );\n}\n\n/** out = a + b. aliasing-safe. */\nexport function add(out: Vec3, a: Vec3Like, b: Vec3Like): Vec3 {\n const ax = a[0] as number;\n const ay = a[1] as number;\n const az = a[2] as number;\n const bx = b[0] as number;\n const by = b[1] as number;\n const bz = b[2] as number;\n out[0] = ax + bx;\n out[1] = ay + by;\n out[2] = az + bz;\n return out;\n}\n\n/** out = a - b. aliasing-safe. */\nexport function sub(out: Vec3, a: Vec3Like, b: Vec3Like): Vec3 {\n const ax = a[0] as number;\n const ay = a[1] as number;\n const az = a[2] as number;\n const bx = b[0] as number;\n const by = b[1] as number;\n const bz = b[2] as number;\n out[0] = ax - bx;\n out[1] = ay - by;\n out[2] = az - bz;\n return out;\n}\n\n/** out = a * s. */\nexport function scale(out: Vec3, a: Vec3Like, s: number): Vec3 {\n out[0] = (a[0] as number) * s;\n out[1] = (a[1] as number) * s;\n out[2] = (a[2] as number) * s;\n return out;\n}\n\n/** out = -a. */\nexport function negate(out: Vec3, a: Vec3Like): Vec3 {\n out[0] = 0 - (a[0] as number);\n out[1] = 0 - (a[1] as number);\n out[2] = 0 - (a[2] as number);\n return out;\n}\n\n/** Dot product a · b. */\nexport function dot(a: Vec3Like, b: Vec3Like): number {\n return (\n (a[0] as number) * (b[0] as number) +\n (a[1] as number) * (b[1] as number) +\n (a[2] as number) * (b[2] as number)\n );\n}\n\n/** out = a × b (cross product). aliasing-safe (reads all 6 components into locals first). */\nexport function cross(out: Vec3, a: Vec3Like, b: Vec3Like): Vec3 {\n const ax = a[0] as number;\n const ay = a[1] as number;\n const az = a[2] as number;\n const bx = b[0] as number;\n const by = b[1] as number;\n const bz = b[2] as number;\n out[0] = ay * bz - az * by;\n out[1] = az * bx - ax * bz;\n out[2] = ax * by - ay * bx;\n return out;\n}\n\n/** Squared length |a|² (avoids sqrt overhead). */\nexport function lengthSq(a: Vec3Like): number {\n const x = a[0] as number;\n const y = a[1] as number;\n const z = a[2] as number;\n return x * x + y * y + z * z;\n}\n\n/** Euclidean length |a|. */\nexport function length(a: Vec3Like): number {\n const x = a[0] as number;\n const y = a[1] as number;\n const z = a[2] as number;\n return Math.sqrt(x * x + y * y + z * z);\n}\n\n/** Distance between two points |a - b|. */\nexport function distance(a: Vec3Like, b: Vec3Like): number {\n const dx = (a[0] as number) - (b[0] as number);\n const dy = (a[1] as number) - (b[1] as number);\n const dz = (a[2] as number) - (b[2] as number);\n return Math.sqrt(dx * dx + dy * dy + dz * dz);\n}\n\n/** Squared distance between two points |a - b|² (avoids sqrt overhead). */\nexport function distanceSq(a: Vec3Like, b: Vec3Like): number {\n const dx = (a[0] as number) - (b[0] as number);\n const dy = (a[1] as number) - (b[1] as number);\n const dz = (a[2] as number) - (b[2] as number);\n return dx * dx + dy * dy + dz * dz;\n}\n\n/**\n * out = a / |a| (unit-length).\n *\n * @degrade Zero vector (|a|² < EPS_NORMALIZE) silently falls back to the zero vector;\n * no NaN, no throw (gl-matrix style, AC-06 / D-P12).\n * @degrade NaN inputs → NaN outputs: when a component is NaN, lenSq=NaN; the `lenSq < EPS`\n * branch is false → goes through 1/sqrt(NaN)=NaN → output is all NaN (IEEE-754 NaN propagation;\n * still does not throw).\n *\n * @example\n * ```ts\n * vec3.normalize(out, [3, 0, 4]); // → (0.6, 0, 0.8)\n * vec3.normalize(out, [0, 0, 0]); // → (0, 0, 0) zero vector falls back (AC-06 no throw)\n * vec3.normalize(out, [NaN, 1, 0]); // → (NaN, NaN, NaN) IEEE-754 propagation\n * ```\n */\nexport function normalize(out: Vec3, a: Vec3Like): Vec3 {\n const x = a[0] as number;\n const y = a[1] as number;\n const z = a[2] as number;\n const lenSq = x * x + y * y + z * z;\n if (lenSq < EPS_NORMALIZE) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n return out;\n }\n const inv = 1 / Math.sqrt(lenSq);\n out[0] = x * inv;\n out[1] = y * inv;\n out[2] = z * inv;\n return out;\n}\n\n/** out = lerp(a, b, t). t is not clamped (extrapolation semantics). aliasing-safe. */\nexport function lerp(out: Vec3, a: Vec3Like, b: Vec3Like, t: number): Vec3 {\n const ax = a[0] as number;\n const ay = a[1] as number;\n const az = a[2] as number;\n const bx = b[0] as number;\n const by = b[1] as number;\n const bz = b[2] as number;\n out[0] = scalarLerp(ax, bx, t);\n out[1] = scalarLerp(ay, by, t);\n out[2] = scalarLerp(az, bz, t);\n return out;\n}\n\n/**\n * out = frame-rate-INDEPENDENT exponential smoothing of `current` toward `target`:\n * `lerp(current, target, 1 − exp(−decayRate · dt))`. Semantics match Bevy\n * `StableInterpolate::smooth_nudge` / three.js `MathUtils.damp` — NOT Unity `Vector3.SmoothDamp`\n * (which is a 2nd-order critically-damped spring needing a velocity ref; this is 1st-order decay).\n *\n * `decayRate` is the exponential decay constant (1/s), meant to stay fixed while `dt` is per-frame;\n * a good anchor is `decayRate = ln(2)/halfLife`. `dt=0` → out=current (no move); large `decayRate·dt`\n * → out≈target; `decayRate=0` → out=current. Frame-rate independent by construction: one step of `dt`\n * equals two composed steps of `dt/2` — unlike the naive `lerp(current, target, rate·dt)`, which\n * behaves differently per frame rate and overshoots when `rate·dt > 1`. aliasing-safe.\n */\nexport function smoothDamp(\n out: Vec3,\n current: Vec3Like,\n target: Vec3Like,\n decayRate: number,\n dt: number,\n): Vec3 {\n return lerp(out, current, target, smoothDecayFactor(decayRate, dt));\n}\n\n/**\n * out = Catmull-Rom spline point on the segment between `p1` and `p2`, with `p0` / `p3` the\n * neighbor control points setting the endpoint tangents (tension 0.5 — the Bevy\n * `CubicCardinalSpline::new_catmull_rom` / three.js `CatmullRomCurve3` default). Interpolates\n * the control points: `t=0` → `p1`, `t=1` → `p2`. Unlike `lerp` (a straight segment), this is\n * the smooth cubic through the points — use it for camera paths, animation ease paths, or\n * procedural curve geometry. To sample a whole polyline, loop the segments with a sliding\n * 4-point window `[pts[i-1], pts[i], pts[i+1], pts[i+2]]` (clamp/duplicate ends). `t` is not\n * clamped (extrapolation follows the same cubic). aliasing-safe.\n */\nexport function catmullRom(\n out: Vec3,\n p0: Vec3Like,\n p1: Vec3Like,\n p2: Vec3Like,\n p3: Vec3Like,\n t: number,\n): Vec3 {\n const x = catmullRomScalar(p0[0] as number, p1[0] as number, p2[0] as number, p3[0] as number, t);\n const y = catmullRomScalar(p0[1] as number, p1[1] as number, p2[1] as number, p3[1] as number, t);\n const z = catmullRomScalar(p0[2] as number, p1[2] as number, p2[2] as number, p3[2] as number, t);\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\n\n/** Component-wise min. */\nexport function min(out: Vec3, a: Vec3Like, b: Vec3Like): Vec3 {\n out[0] = Math.min(a[0] as number, b[0] as number);\n out[1] = Math.min(a[1] as number, b[1] as number);\n out[2] = Math.min(a[2] as number, b[2] as number);\n return out;\n}\n\n/** Component-wise max. */\nexport function max(out: Vec3, a: Vec3Like, b: Vec3Like): Vec3 {\n out[0] = Math.max(a[0] as number, b[0] as number);\n out[1] = Math.max(a[1] as number, b[1] as number);\n out[2] = Math.max(a[2] as number, b[2] as number);\n return out;\n}\n","// noise.ts — noise-function namespace (solo round 20260716-212942)\n//\n// 1-function surface: perlin1d — 1D Perlin noise returning [-1, 1]. The growable home for\n// further noise variants (2D Perlin, simplex, Worley, etc.).\n//\n// The permutation table is the canonical 256-entry table from Bevy's 2d_screen_shake example.\n// The fade function is the smootherstep polynomial (6t⁵−15t⁴+10t³), matching the Perlin\n// reference implementation — forgeax's own easing.smootherstep is the same polynomial but we\n// inline it here to keep the noise namespace self-contained (no cross-namespace dependency).\n\n// Canonical Perlin permutation table — a random sequence of 0-255.\nconst PERM: Readonly<Uint8Array> = new Uint8Array([\n 0x97, 0xa0, 0x89, 0x5b, 0x5a, 0x0f, 0x83, 0x0d, 0xc9, 0x5f, 0x60, 0x35, 0xc2, 0xe9, 0x07, 0xe1,\n 0x8c, 0x24, 0x67, 0x1e, 0x45, 0x8e, 0x08, 0x63, 0x25, 0xf0, 0x15, 0x0a, 0x17, 0xbe, 0x06, 0x94,\n 0xf7, 0x78, 0xea, 0x4b, 0x00, 0x1a, 0xc5, 0x3e, 0x5e, 0xfc, 0xdb, 0xcb, 0x75, 0x23, 0x0b, 0x20,\n 0x39, 0xb1, 0x21, 0x58, 0xed, 0x95, 0x38, 0x57, 0xae, 0x14, 0x7d, 0x88, 0xab, 0xa8, 0x44, 0xaf,\n 0x4a, 0xa5, 0x47, 0x86, 0x8b, 0x30, 0x1b, 0xa6, 0x4d, 0x92, 0x9e, 0xe7, 0x53, 0x6f, 0xe5, 0x7a,\n 0x3c, 0xd3, 0x85, 0xe6, 0xdc, 0x69, 0x5c, 0x29, 0x37, 0x2e, 0xf5, 0x28, 0xf4, 0x66, 0x8f, 0x36,\n 0x41, 0x19, 0x3f, 0xa1, 0x01, 0xd8, 0x50, 0x49, 0xd1, 0x4c, 0x84, 0xbb, 0xd0, 0x59, 0x12, 0xa9,\n 0xc8, 0xc4, 0x87, 0x82, 0x74, 0xbc, 0x9f, 0x56, 0xa4, 0x64, 0x6d, 0xc6, 0xad, 0xba, 0x03, 0x40,\n 0x34, 0xd9, 0xe2, 0xfa, 0x7c, 0x7b, 0x05, 0xca, 0x26, 0x93, 0x76, 0x7e, 0xff, 0x52, 0x55, 0xd4,\n 0xcf, 0xce, 0x3b, 0xe3, 0x2f, 0x10, 0x3a, 0x11, 0xb6, 0xbd, 0x1c, 0x2a, 0xdf, 0xb7, 0xaa, 0xd5,\n 0x77, 0xf8, 0x98, 0x02, 0x2c, 0x9a, 0xa3, 0x46, 0xdd, 0x99, 0x65, 0x9b, 0xa7, 0x2b, 0xac, 0x09,\n 0x81, 0x16, 0x27, 0xfd, 0x13, 0x62, 0x6c, 0x6e, 0x4f, 0x71, 0xe0, 0xe8, 0xb2, 0xb9, 0x70, 0x68,\n 0xda, 0xf6, 0x61, 0xe4, 0xfb, 0x22, 0xf2, 0xc1, 0xee, 0xd2, 0x90, 0x0c, 0xbf, 0xb3, 0xa2, 0xf1,\n 0x51, 0x33, 0x91, 0xeb, 0xf9, 0x0e, 0xef, 0x6b, 0x31, 0xc0, 0xd6, 0x1f, 0xb5, 0xc7, 0x6a, 0x9d,\n 0xb8, 0x54, 0xcc, 0xb0, 0x73, 0x79, 0x32, 0x2d, 0x7f, 0x04, 0x96, 0xfe, 0x8a, 0xec, 0xcd, 0x5d,\n 0xde, 0x72, 0x43, 0x1d, 0x18, 0x48, 0xf3, 0x8d, 0x80, 0xc3, 0x4e, 0x42, 0xd7, 0x3d, 0x9c, 0xb4,\n]);\n\n/**\n * Perlin smootherstep fade curve: `6t⁵ − 15t⁴ + 10t³`. The canonical Perlin fade — same\n * polynomial as {@link easing!smootherstep} but inlined so the noise namespace stays\n * self-contained. Input expected in [0, 1]; output is the smoothed value.\n */\nfunction fade(t: number): number {\n return t * t * t * (t * (t * 6.0 - 15.0) + 10.0);\n}\n\n/**\n * Dot product of a 1D gradient with the distance vector. The gradient is +1 or -1 based on\n * the lowest bit of the hash; the distance is the fractional offset from the integer lattice\n * point.\n */\nfunction dotGrad(hash: number, xf: number): number {\n return hash & 0x1 ? xf : -xf;\n}\n\n/**\n * 1D Perlin noise. Returns a value in [-1, 1] that varies smoothly with the input `x` —\n * small changes in `x` produce small changes in output (no wild jumps). Three separate calls\n * with different `x` offsets (e.g. `perlin1d(t)`, `perlin1d(t + 100)`, `perlin1d(t + 200)`)\n * produce three independent but individually smooth noise channels.\n *\n * This is the canonical Perlin noise algorithm with the 256-entry permutation table from\n * Bevy's `2d_screen_shake` example. Use for camera shake, procedural terrain, organic\n * motion, and any effect that needs smooth pseudo-random variation.\n */\nexport function perlin1d(x: number): number {\n const xFloor = Math.floor(x);\n const xi0 = xFloor & 0xff;\n const xi1 = (xFloor + 1) & 0xff;\n\n const xf0 = x - xFloor;\n const xf1 = xf0 - 1.0;\n\n const t = fade(xf0);\n\n const h0 = PERM[xi0] ?? 0;\n const h1 = PERM[xi1] ?? 0;\n\n const a = dotGrad(h0, xf0);\n const b = dotGrad(h1, xf1);\n\n // Linear interpolation between the two gradient dots.\n // Using the standard lerp: a + t * (b - a) where t is the faded xf0.\n return a + t * (b - a);\n}\n","// ray.ts — ray primitive namespace (feat-20260529-picking-raycasting-screen-to-entity M1 / w3 + M2 / w7).\n//\n// Storage layout: Float32Array length 6 [ox, oy, oz, dx, dy, dz], direction normalized.\n// default: origin=(0,0,0), direction=(0,0,-1).\n//\n// Surface: create / getOrigin / getDirection / setOrigin / setDirection /\n// rayAabbIntersects (slab method, 6 degenerate cases) /\n// screenToRay (M2 w7, two-point unproject with WebGPU [0,1] NDC z).\n//\n// Design locks:\n// - branded `Ray` Float32Array local to this module; cast funneled through `create`\n// - pure-function / out-param style consistent with box3 / vec3 / mat4;\n// - `rayAabbIntersects` uses the slab method with inv precomputation,\n// `inv[i] < 0` sign test (not direction test — avoids -0 pitfall),\n// NaN-safe edge/corner handling (Research Finding 2 #5).\n//\n// Related: requirements AC-01 / AC-02 / AC-03;\n// research Finding 2 (slab algorithm + 6 degenerate table);\n// research Finding 6 (WebGPU [0,1] NDC z);\n// plan-tasks.json w3 + w7 acceptanceChecks.\n\nimport type { Box3Like } from './box3';\nimport * as mat4 from './mat4';\nimport type { Mat4Like, Vec2, Vec3, Vec3Like } from './types';\n\n/**\n * Result of a ray-triangle intersection test (Moller-Trumbore).\n * `t` = ray parameter, `u`/`v` = barycentric coordinates.\n */\nexport interface RayTriResult {\n hit: boolean;\n t: number;\n u: number;\n v: number;\n}\n\n/**\n * Ray storage: Float32Array length 6 [ox, oy, oz, dx, dy, dz], direction normalized.\n * Local brand (not part of the seven-piece SSOT; same rationale as Box3).\n */\nexport type Ray = Float32Array & { readonly __ray: void };\n\n/**\n * Ray readable input: ArrayLike<number> of length 6 (ordering identical to Ray).\n */\nexport type RayLike = ArrayLike<number>;\n\n/**\n * Create a Ray. Defaults to origin=(0,0,0), direction=(0,0,-1) normalized.\n *\n * When `out` is not provided, a new Float32Array is allocated.\n * When `origin` / `direction` are provided, direction is normalized\n * (zero-length direction falls back to (0,0,0) per gl-matrix style).\n */\nexport function create(out?: Float32Array, origin?: Vec3Like, direction?: Vec3Like): Ray {\n const r = out ?? new Float32Array(6);\n if (origin) {\n r[0] = origin[0] as number;\n r[1] = origin[1] as number;\n r[2] = origin[2] as number;\n } else {\n r[0] = 0;\n r[1] = 0;\n r[2] = 0;\n }\n if (direction) {\n const dx = direction[0] as number;\n const dy = direction[1] as number;\n const dz = direction[2] as number;\n const lenSq = dx * dx + dy * dy + dz * dz;\n if (lenSq < 1e-12) {\n r[3] = 0;\n r[4] = 0;\n r[5] = 0;\n } else {\n const inv = 1 / Math.sqrt(lenSq);\n r[3] = dx * inv;\n r[4] = dy * inv;\n r[5] = dz * inv;\n }\n } else {\n r[3] = 0;\n r[4] = 0;\n r[5] = -1;\n }\n return r as Ray;\n}\n\n/**\n * Copy the origin of `r` into `out`. Returns `out`.\n */\nexport function getOrigin(out: Vec3, r: RayLike): Vec3 {\n out[0] = r[0] as number;\n out[1] = r[1] as number;\n out[2] = r[2] as number;\n return out;\n}\n\n/**\n * Copy the direction of `r` into `out`. Returns `out`.\n */\nexport function getDirection(out: Vec3, r: RayLike): Vec3 {\n out[0] = r[3] as number;\n out[1] = r[4] as number;\n out[2] = r[5] as number;\n return out;\n}\n\n/**\n * Overwrite the origin of `r` with `o`. Returns `r`.\n */\nexport function setOrigin(r: Ray, o: Vec3Like): Ray {\n r[0] = o[0] as number;\n r[1] = o[1] as number;\n r[2] = o[2] as number;\n return r;\n}\n\n/**\n * Overwrite the direction of `r` with `d` and normalize it.\n * Zero-length direction falls back to (0,0,0) (gl-matrix style).\n * Returns `r`.\n */\nexport function setDirection(r: Ray, d: Vec3Like): Ray {\n const dx = d[0] as number;\n const dy = d[1] as number;\n const dz = d[2] as number;\n const lenSq = dx * dx + dy * dy + dz * dz;\n if (lenSq < 1e-12) {\n r[3] = 0;\n r[4] = 0;\n r[5] = 0;\n } else {\n const inv = 1 / Math.sqrt(lenSq);\n r[3] = dx * inv;\n r[4] = dy * inv;\n r[5] = dz * inv;\n }\n return r;\n}\n\n/**\n * Result of a ray-AABB intersection test.\n */\nexport interface RayAabbResult {\n hit: boolean;\n /** Entry distance along the ray (clamped to 0 when origin is inside the box). */\n tmin: number;\n}\n\n/**\n * Test whether a ray intersects an axis-aligned bounding box using the\n * slab (Kay-Kajiya) method.\n *\n * Six degenerate cases per research Finding 2:\n * 1. hit from outside → `tmin > 0`\n * 2. hit from inside → `tmin = 0`\n * 3. miss (ray away) → `hit = false`\n * 4. parallel-axis miss → natural via ±Inf propagation\n * 5. edge/corner NaN-safe → guard `t1 > t2` NaN scenarios with `Number.isNaN`\n * 6. thin box (1D/2D) → correct via interval shrink\n *\n * Algorithm: precompute `inv = 1/D`, use `inv[i] < 0` (not direction[i] < 0)\n * to handle `-0` direction correctly. On each axis compute `(min - O)*inv` and\n * `(max - O)*inv`, swap when `inv < 0`, then accumulate `t_near = max(t_near, t1)`,\n * `t_far = min(t_far, t2)`. Hit when `t_far >= max(t_near, 0)`.\n *\n * Input: `r` (Ray with normalized direction) + `aabb` (Box3Like, 6 floats).\n * Output: `{ hit: boolean, tmin: number }`.\n */\nexport function rayAabbIntersects(r: RayLike, aabb: Box3Like): RayAabbResult {\n const ox = r[0] as number;\n const oy = r[1] as number;\n const oz = r[2] as number;\n const dx = r[3] as number;\n const dy = r[4] as number;\n const dz = r[5] as number;\n\n const minX = aabb[0] as number;\n const minY = aabb[1] as number;\n const minZ = aabb[2] as number;\n const maxX = aabb[3] as number;\n const maxY = aabb[4] as number;\n const maxZ = aabb[5] as number;\n\n // precomputed inverse (Research Finding 2 #2: IEEE 754 ±Inf for D_i = 0)\n const invX = 1 / dx;\n const invY = 1 / dy;\n const invZ = 1 / dz;\n\n // X axis\n let t1x = (minX - ox) * invX;\n let t2x = (maxX - ox) * invX;\n // sign test on inv, not direction — avoids -0 pitfall (Finding 2 #3)\n if (invX < 0) {\n const tmp = t1x;\n t1x = t2x;\n t2x = tmp;\n }\n // NaN-safe: when t1x or t2x is NaN (0*∞ from origin on face), skip this axis\n // for tnear accumulation (interval unbounded on this axis)\n let tnear = Number.isNaN(t1x) ? -Infinity : t1x;\n let tfar = Number.isNaN(t2x) ? Infinity : t2x;\n\n // Y axis\n let t1y = (minY - oy) * invY;\n let t2y = (maxY - oy) * invY;\n if (invY < 0) {\n const tmp = t1y;\n t1y = t2y;\n t2y = tmp;\n }\n if (!Number.isNaN(t1y) && t1y > tnear) tnear = t1y;\n if (!Number.isNaN(t2y) && t2y < tfar) tfar = t2y;\n\n // early out: interval already invalid\n if (tnear > tfar) return { hit: false, tmin: 0 };\n\n // Z axis\n let t1z = (minZ - oz) * invZ;\n let t2z = (maxZ - oz) * invZ;\n if (invZ < 0) {\n const tmp = t1z;\n t1z = t2z;\n t2z = tmp;\n }\n if (!Number.isNaN(t1z) && t1z > tnear) tnear = t1z;\n if (!Number.isNaN(t2z) && t2z < tfar) tfar = t2z;\n\n // Kay-Kajiya hit criterion: tfar >= max(tnear, 0) and tfar >= 0\n if (tfar >= 0 && tfar >= tnear) {\n return { hit: true, tmin: tnear > 0 ? tnear : 0 };\n }\n return { hit: false, tmin: 0 };\n}\n\n// ============================================================\n// screenToRay (feat-20260529-picking-raycasting-screen-to-entity M2 w7)\n// ============================================================\n//\n// Two-point unproject method: unproject near (z=0) and far (z=1) NDC points\n// through invVP, then ray.origin = nearWorld, ray.direction = normalize(farWorld - nearWorld).\n//\n// WebGPU [0,1] NDC z convention (D-NDC / research Finding 6):\n// near plane → ndc_z = 0, far plane → ndc_z = 1.\n//\n// y-flip: ndc_y = 1 - 2*screenY/viewportH (screen y-down → NDC y-up).\n//\n// Input sanitization: clamp screen coords to [0, vpW/vpH]; NaN/Inf inputs\n// fall back to centre (0,0,0,0,0,-1) to guarantee a defined Ray.\n//\n// Related: plan-tasks.json w7; requirements in-scope #3 + edge cases;\n// research Finding 6 (WebGPU z) + Finding 3 (y-flip formula).\n\nconst _nearNdC = new Float32Array(3);\nconst _farNdC = new Float32Array(3);\nconst _nearWorld = new Float32Array(3);\nconst _farWorld = new Float32Array(3);\nconst _tmpInvVP = new Float32Array(16);\n\n/**\n * Project a screen-space coordinate into a world-space Ray.\n *\n * `screenX` / `screenY` are in pixels relative to the top-left corner of the viewport\n * (DOM convention: y-down). They are clamped to `[0, vpWidth]` / `[0, vpHeight]` and\n * sanitized against NaN/Inf.\n *\n * `kind` discriminates the projection type so callers can branch on the result if needed;\n * both paths use the same two-point unproject algorithm.\n *\n * @param out The Ray to write into.\n * @param screenX Horizontal pixel coordinate (y-down origin, top-left).\n * @param screenY Vertical pixel coordinate.\n * @param vpWidth Viewport width in pixels.\n * @param vpHeight Viewport height in pixels.\n * @param view Camera view matrix (world→eye).\n * @param proj Camera projection matrix (eye→clip).\n * @param kind `'perspective'` or `'orthographic'`.\n * @returns `out` (same Ray instance).\n */\nexport function screenToRay(\n out: Ray,\n screenX: number,\n screenY: number,\n vpWidth: number,\n vpHeight: number,\n view: Mat4Like,\n proj: Mat4Like,\n _kind: 'perspective' | 'orthographic',\n): Ray {\n // --- input sanitization ---\n if (\n !Number.isFinite(screenX) ||\n !Number.isFinite(screenY) ||\n !Number.isFinite(vpWidth) ||\n !Number.isFinite(vpHeight) ||\n vpWidth <= 0 ||\n vpHeight <= 0\n ) {\n // Degenerate viewport or non-finite input: return a safe centre ray\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -1;\n return out;\n }\n\n // Clamp to viewport bounds\n const sx = screenX < 0 ? 0 : screenX > vpWidth ? vpWidth : screenX;\n const sy = screenY < 0 ? 0 : screenY > vpHeight ? vpHeight : screenY;\n\n // --- screen → NDC (y-flip) ---\n const ndcX = (2 * sx) / vpWidth - 1;\n const ndcY = 1 - (2 * sy) / vpHeight;\n\n // --- build invVP = invert(proj * view) ---\n mat4.multiply(_tmpInvVP as unknown as import('./types').Mat4, proj, view);\n mat4.invert(_tmpInvVP as unknown as import('./types').Mat4, _tmpInvVP);\n\n // --- unproject near (z=0) and far (z=1) ---\n _nearNdC[0] = ndcX;\n _nearNdC[1] = ndcY;\n _nearNdC[2] = 0;\n\n _farNdC[0] = ndcX;\n _farNdC[1] = ndcY;\n _farNdC[2] = 1;\n\n mat4.unproject(_nearWorld as unknown as Vec3, _nearNdC, _tmpInvVP as unknown as Mat4Like);\n mat4.unproject(_farWorld as unknown as Vec3, _farNdC, _tmpInvVP as unknown as Mat4Like);\n\n // --- write origin = nearWorld ---\n out[0] = _nearWorld[0] as number;\n out[1] = _nearWorld[1] as number;\n out[2] = _nearWorld[2] as number;\n\n // --- compute direction = normalize(far - near) ---\n const dx = (_farWorld[0] as number) - (_nearWorld[0] as number);\n const dy = (_farWorld[1] as number) - (_nearWorld[1] as number);\n const dz = (_farWorld[2] as number) - (_nearWorld[2] as number);\n const lenSq = dx * dx + dy * dy + dz * dz;\n if (lenSq < 1e-12) {\n // Degenerate: far == near (e.g. infinite-far projection, zero-depth frustum)\n // Fall back to camera forward direction\n out[3] = 0;\n out[4] = 0;\n out[5] = -1;\n } else {\n const inv = 1 / Math.sqrt(lenSq);\n out[3] = dx * inv;\n out[4] = dy * inv;\n out[5] = dz * inv;\n }\n\n return out;\n}\n\n// ============================================================\n// worldToScreen (feat-20260617-host-engine-contract-and-video-cutscene M2 w5)\n// ============================================================\n//\n// Self-contained mat4 * vec4 to get pre-divide w (do NOT wrap projectPoint — it discards w,\n// research Finding 3). behind = w<0; onScreen = NDC xyz all in [-1,1] for xy and [0,1] for z.\n// Pixel map y-down top-left: px=(ndc.x*0.5+0.5)*w, py=(1-(ndc.y*0.5+0.5))*h.\n// out-param writes Vec2; returns plain {onScreen, behind} flags (no allocation).\n//\n// Related: requirements AC-01; plan-strategy D-2; research Finding 3/5/6.\n\n/** Result of projecting a world-space point to screen-space pixel coordinates. */\nexport interface WorldToScreenResult {\n /** True if the NDC coordinates are within clip-space bounds. */\n onScreen: boolean;\n /** True if the original world-space point is behind the camera (w < 0).\n * When true, `out` is meaningless (requirements §7). */\n behind: boolean;\n}\n\n/**\n * Project a world-space point to screen-space pixel coordinates.\n *\n * Performs a full mat4 * vec4 internally to capture the pre-divide `w` component\n * (projectPoint discards `w`, so it cannot report `behind`).\n *\n * Pixel mapping: top-left origin, y-down (DOM convention).\n * px = (ndc.x * 0.5 + 0.5) * canvasW\n * py = (1 - (ndc.y * 0.5 + 0.5)) * canvasH\n *\n * Degenerate viewport (canvasW <= 0 || canvasH <= 0): returns { onScreen: false, behind: false },\n * leaves `out` untouched.\n *\n * @param out Vec2 to write pixel coordinates into (y-down, top-left origin).\n * @param worldPos World-space point (3 floats).\n * @param viewProj Combined view-projection matrix (proj * view, 16 floats).\n * @param canvasW Canvas width in pixels.\n * @param canvasH Canvas height in pixels.\n * @returns { onScreen: boolean, behind: boolean } — pure data flags, no allocation.\n */\nexport function worldToScreen(\n out: Vec2,\n worldPos: Vec3Like,\n viewProj: Mat4Like,\n canvasW: number,\n canvasH: number,\n): WorldToScreenResult {\n // Degenerate viewport: leave `out` untouched, report off-screen.\n if (!(canvasW > 0) || !(canvasH > 0)) {\n return { onScreen: false, behind: false };\n }\n\n const x = worldPos[0] as number;\n const y = worldPos[1] as number;\n const z = worldPos[2] as number;\n\n // clip = viewProj * [x, y, z, 1] (column-major: m[col*4 + row])\n const clipX =\n (viewProj[0] as number) * x +\n (viewProj[4] as number) * y +\n (viewProj[8] as number) * z +\n (viewProj[12] as number);\n const clipY =\n (viewProj[1] as number) * x +\n (viewProj[5] as number) * y +\n (viewProj[9] as number) * z +\n (viewProj[13] as number);\n const clipZ =\n (viewProj[2] as number) * x +\n (viewProj[6] as number) * y +\n (viewProj[10] as number) * z +\n (viewProj[14] as number);\n const clipW =\n (viewProj[3] as number) * x +\n (viewProj[7] as number) * y +\n (viewProj[11] as number) * z +\n (viewProj[15] as number);\n\n // behind = camera-space point is behind the eye (w < 0); `out` is then meaningless.\n if (clipW < 0) {\n return { onScreen: false, behind: true };\n }\n\n const invW = 1 / clipW;\n const ndcX = clipX * invW;\n const ndcY = clipY * invW;\n const ndcZ = clipZ * invW;\n\n // y-down pixel map, top-left origin (DOM convention).\n out[0] = (ndcX * 0.5 + 0.5) * canvasW;\n out[1] = (1 - (ndcY * 0.5 + 0.5)) * canvasH;\n\n // onScreen: NDC xy in [-1, 1], NDC z in [0, 1] (WebGPU clip-space z convention).\n const onScreen = ndcX >= -1 && ndcX <= 1 && ndcY >= -1 && ndcY <= 1 && ndcZ >= 0 && ndcZ <= 1;\n\n return { onScreen, behind: false };\n}\n\n// ============================================================\n// rayTriangleIntersects (feat-20260630-vertex-snapping-picking M1)\n// ============================================================\n//\n// Moller-Trumbore algorithm. Returns RayTriResult { hit, t, u, v }.\n// Double-sided: uses abs(det) < epsilon (no backface culling).\n// Degenerate (collinear/zero-area/parallel) triangles return hit=false to avoid NaN propagation.\n// t <= 0 rejected (behind ray origin).\n// Barycentric boundary: u >= 0, v >= 0, u + v <= 1.\n// NaN guard on all inputs.\n//\n// Related: requirements AC-06; plan-strategy D-1;\n// KB 2026-06-30-scratchapixel-moller-trumbore.md;\n// plan-tasks.json w2 acceptanceCheck.\n\nconst RAY_TRI_EPSILON = 1e-8;\n\n/**\n * Test whether a ray intersects a triangle using the Moller-Trumbore algorithm.\n *\n * Double-sided: both front and back faces are checked (abs(det) < epsilon).\n * Degenerate triangles (collinear / zero-area) return hit=false.\n * Ray origin behind the triangle (t <= 0) is rejected.\n * NaN inputs are guarded against — any NaN input returns hit=false.\n *\n * @param r Ray (RayLike, 6 floats: ox,oy,oz,dx,dy,dz with normalized direction).\n * @param a Triangle vertex A (Vec3Like, 3 floats).\n * @param b Triangle vertex B (Vec3Like, 3 floats).\n * @param c Triangle vertex C (Vec3Like, 3 floats).\n * @returns RayTriResult with hit flag, t (ray parameter), and u/v (barycentric coordinates).\n */\nexport function rayTriangleIntersects(\n r: RayLike,\n a: Vec3Like,\n b: Vec3Like,\n c: Vec3Like,\n): RayTriResult {\n // NaN guard: any NaN input → miss (prevents NaN propagation through the algorithm)\n if (\n Number.isNaN(r[0] as number) ||\n Number.isNaN(r[1] as number) ||\n Number.isNaN(r[2] as number) ||\n Number.isNaN(r[3] as number) ||\n Number.isNaN(r[4] as number) ||\n Number.isNaN(r[5] as number) ||\n Number.isNaN(a[0] as number) ||\n Number.isNaN(a[1] as number) ||\n Number.isNaN(a[2] as number) ||\n Number.isNaN(b[0] as number) ||\n Number.isNaN(b[1] as number) ||\n Number.isNaN(b[2] as number) ||\n Number.isNaN(c[0] as number) ||\n Number.isNaN(c[1] as number) ||\n Number.isNaN(c[2] as number)\n ) {\n return { hit: false, t: 0, u: 0, v: 0 };\n }\n\n const ox = r[0] as number;\n const oy = r[1] as number;\n const oz = r[2] as number;\n const dx = r[3] as number;\n const dy = r[4] as number;\n const dz = r[5] as number;\n\n // E1 = B - A, E2 = C - A\n const e1x = (b[0] as number) - (a[0] as number);\n const e1y = (b[1] as number) - (a[1] as number);\n const e1z = (b[2] as number) - (a[2] as number);\n const e2x = (c[0] as number) - (a[0] as number);\n const e2y = (c[1] as number) - (a[1] as number);\n const e2z = (c[2] as number) - (a[2] as number);\n\n // P = D x E2\n const px = dy * e2z - dz * e2y;\n const py = dz * e2x - dx * e2z;\n const pz = dx * e2y - dy * e2x;\n\n // det = E1 . P\n const det = e1x * px + e1y * py + e1z * pz;\n\n // Double-sided: abs(det) < epsilon → parallel / degenerate → miss\n if (Math.abs(det) < RAY_TRI_EPSILON) {\n return { hit: false, t: 0, u: 0, v: 0 };\n }\n\n const invDet = 1 / det;\n\n // T = O - A\n const tx = ox - (a[0] as number);\n const ty = oy - (a[1] as number);\n const tz = oz - (a[2] as number);\n\n // u = (T . P) * invDet\n const u = (tx * px + ty * py + tz * pz) * invDet;\n if (u < 0 || u > 1) {\n return { hit: false, t: 0, u, v: 0 };\n }\n\n // Q = T x E1\n const qx = ty * e1z - tz * e1y;\n const qy = tz * e1x - tx * e1z;\n const qz = tx * e1y - ty * e1x;\n\n // v = (D . Q) * invDet\n const v = (dx * qx + dy * qy + dz * qz) * invDet;\n if (v < 0 || u + v > 1) {\n return { hit: false, t: 0, u, v };\n }\n\n // t = (E2 . Q) * invDet\n const t = (e2x * qx + e2y * qy + e2z * qz) * invDet;\n if (t <= 0) {\n return { hit: false, t, u, v };\n }\n\n return { hit: true, t, u, v };\n}\n","// ray2.ts — finite 2D ray and bounding-volume casts (P12 / bounding_2d).\n//\n// Ray2 storage: Float32Array [originX, originY, directionX, directionY, maxDistance].\n// Direction is normalized at construction, matching ray.create. A finite max distance\n// keeps ordinary ray tests and swept-volume tests on one small, composable surface.\n\nimport type { Box2Like } from './box2';\nimport type { Circle2Like } from './circle2';\nimport type { Vec2, Vec2Like } from './types';\n\n/** 2D ray storage: [originX, originY, directionX, directionY, maxDistance]. */\nexport type Ray2 = Float32Array & { readonly __ray2: void };\n\n/** Readable 2D ray input. */\nexport type Ray2Like = ArrayLike<number>;\n\n/** Result shared by AABB, circle, and swept-volume intersection tests. */\nexport interface Ray2Intersection {\n hit: boolean;\n /** Entry distance along the normalized ray, clamped to zero when inside. */\n t: number;\n}\n\n/** Create a normalized finite 2D ray. `maxDistance` defaults to infinity. */\nexport function create(\n out?: Float32Array,\n origin?: Vec2Like,\n direction?: Vec2Like,\n maxDistance = Number.POSITIVE_INFINITY,\n): Ray2 {\n const ray = out ?? new Float32Array(5);\n ray[0] = origin ? (origin[0] as number) : 0;\n ray[1] = origin ? (origin[1] as number) : 0;\n const dx = direction ? (direction[0] as number) : 0;\n const dy = direction ? (direction[1] as number) : 1;\n const lengthSq = dx * dx + dy * dy;\n if (lengthSq < 1e-12) {\n ray[2] = 0;\n ray[3] = 0;\n } else {\n const invLength = 1 / Math.sqrt(lengthSq);\n ray[2] = dx * invLength;\n ray[3] = dy * invLength;\n }\n ray[4] = maxDistance < 0 ? 0 : maxDistance;\n return ray as Ray2;\n}\n\n/** Copy the ray origin to out. */\nexport function getOrigin(out: Vec2, ray: Ray2Like): Vec2 {\n out[0] = ray[0] as number;\n out[1] = ray[1] as number;\n return out;\n}\n\n/** Copy the normalized ray direction to out. */\nexport function getDirection(out: Vec2, ray: Ray2Like): Vec2 {\n out[0] = ray[2] as number;\n out[1] = ray[3] as number;\n return out;\n}\n\n/** Return the ray's finite travel limit. */\nexport function getMaxDistance(ray: Ray2Like): number {\n return ray[4] as number;\n}\n\n/** Set the ray origin. */\nexport function setOrigin(ray: Ray2, origin: Vec2Like): Ray2 {\n ray[0] = origin[0] as number;\n ray[1] = origin[1] as number;\n return ray;\n}\n\n/** Set and normalize the ray direction. */\nexport function setDirection(ray: Ray2, direction: Vec2Like): Ray2 {\n const dx = direction[0] as number;\n const dy = direction[1] as number;\n const lengthSq = dx * dx + dy * dy;\n if (lengthSq < 1e-12) {\n ray[2] = 0;\n ray[3] = 0;\n } else {\n const invLength = 1 / Math.sqrt(lengthSq);\n ray[2] = dx * invLength;\n ray[3] = dy * invLength;\n }\n return ray;\n}\n\n/** Set the ray's non-negative travel limit. */\nexport function setMaxDistance(ray: Ray2, maxDistance: number): Ray2 {\n ray[4] = maxDistance < 0 ? 0 : maxDistance;\n return ray;\n}\n\n/** Intersect a finite ray with an AABB using the 2D slab method. */\nexport function rayAabbIntersects(ray: Ray2Like, box: Box2Like): Ray2Intersection {\n return rayAabbValues(ray, box[0] as number, box[1] as number, box[2] as number, box[3] as number);\n}\n\n/** Intersect a finite ray with a bounding circle. */\nexport function rayCircleIntersects(ray: Ray2Like, circle: Circle2Like): Ray2Intersection {\n return rayCircleValues(ray, circle[0] as number, circle[1] as number, circle[2] as number);\n}\n\n/** Sweep an AABB along a finite ray and intersect it with a target AABB. */\nexport function aabbCastIntersects(\n ray: Ray2Like,\n moving: Box2Like,\n target: Box2Like,\n): Ray2Intersection {\n // Minkowski difference: target ⊖ moving. This also preserves the moving\n // volume's offset relative to the ray origin, matching Bevy AabbCast2d.\n return rayAabbValues(\n ray,\n (target[0] as number) - (moving[2] as number),\n (target[1] as number) - (moving[3] as number),\n (target[2] as number) - (moving[0] as number),\n (target[3] as number) - (moving[1] as number),\n );\n}\n\n/** Sweep a circle along a finite ray and intersect it with a target circle. */\nexport function circleCastIntersects(\n ray: Ray2Like,\n moving: Circle2Like,\n target: Circle2Like,\n): Ray2Intersection {\n return rayCircleValues(\n ray,\n (target[0] as number) - (moving[0] as number),\n (target[1] as number) - (moving[1] as number),\n (target[2] as number) + (moving[2] as number),\n );\n}\n\nfunction rayAabbValues(\n ray: Ray2Like,\n minX: number,\n minY: number,\n maxX: number,\n maxY: number,\n): Ray2Intersection {\n const ox = ray[0] as number;\n const oy = ray[1] as number;\n const dx = ray[2] as number;\n const dy = ray[3] as number;\n let near = 0;\n let far = ray[4] as number;\n\n if (minX > maxX || minY > maxY || far < 0) return miss();\n if (Math.abs(dx) < 1e-12) {\n if (ox < minX || ox > maxX) return miss();\n } else {\n let a = (minX - ox) / dx;\n let b = (maxX - ox) / dx;\n if (a > b) [a, b] = [b, a];\n if (a > near) near = a;\n if (b < far) far = b;\n }\n if (Math.abs(dy) < 1e-12) {\n if (oy < minY || oy > maxY) return miss();\n } else {\n let a = (minY - oy) / dy;\n let b = (maxY - oy) / dy;\n if (a > b) [a, b] = [b, a];\n if (a > near) near = a;\n if (b < far) far = b;\n }\n return near <= far && far >= 0 ? { hit: true, t: near } : miss();\n}\n\nfunction rayCircleValues(ray: Ray2Like, cx: number, cy: number, radius: number): Ray2Intersection {\n const ox = (ray[0] as number) - cx;\n const oy = (ray[1] as number) - cy;\n const dx = ray[2] as number;\n const dy = ray[3] as number;\n const maxDistance = ray[4] as number;\n if (radius < 0 || maxDistance < 0) return miss();\n const directionLengthSq = dx * dx + dy * dy;\n const radiusSq = radius * radius;\n const originDistanceSq = ox * ox + oy * oy;\n if (originDistanceSq <= radiusSq) return maxDistance >= 0 ? { hit: true, t: 0 } : miss();\n if (directionLengthSq < 1e-12) return miss();\n\n const projected = ox * dx + oy * dy;\n const constant = originDistanceSq - radiusSq;\n const discriminant = projected * projected - directionLengthSq * constant;\n if (discriminant < 0) return miss();\n const entry = (-projected - Math.sqrt(discriminant)) / directionLengthSq;\n const t = entry < 0 ? 0 : entry;\n return t <= maxDistance ? { hit: true, t } : miss();\n}\n\nfunction miss(): Ray2Intersection {\n return { hit: false, t: 0 };\n}\n","// sphere.ts — bounding sphere namespace (M3 / w7).\n//\n// 5-function surface (plan-tasks.json w7): create / expandByPoint / containsPoint / intersectsBox / fromPoints.\n//\n// Storage layout: Float32Array length 4 [cx, cy, cz, radius].\n// Negative radius is the \"empty sphere\" sentinel — expandByPoint on an empty\n// sphere seeds center + zero radius at the input point; containsPoint always\n// returns false on an empty sphere.\n//\n// `fromPoints` uses the tight axis-aligned-bounding-box center + max distance\n// bound as a fast approximation (Ritter is one option; we pick the simpler\n// AABB-center variant because it is the common three.js/babylon default and\n// is sufficient for v1 frustum-culling / broadphase needs — Welzl and Ritter\n// are future spinoffs if tighter bounds become necessary).\n//\n// Related: requirements §AC-16 (Box3 / Sphere pure functions);\n// plan-strategy M3 range; plan-tasks.json w7 acceptanceCheck.\n\nimport * as box3 from './box3';\nimport type { Vec3Like } from './types';\n\n/**\n * Sphere storage: Float32Array length 4 [cx, cy, cz, radius].\n * Local brand (not part of the seven-piece SSOT); see box3.ts rationale.\n */\nexport type Sphere = Float32Array & { readonly __sphere: void };\n\n/**\n * Sphere readable input: ArrayLike<number> of length 4 (ordering identical to Sphere).\n */\nexport type SphereLike = ArrayLike<number>;\n\n/**\n * Create a Sphere. Defaults to a zero-radius sphere at the origin.\n */\nexport function create(cx = 0, cy = 0, cz = 0, radius = 0): Sphere {\n return Float32Array.of(cx, cy, cz, radius) as Sphere;\n}\n\n/**\n * Grow the sphere so `point` lies inside (boundary inclusive). Returns `out`.\n *\n * If the sphere was empty (radius < 0) the call re-seeds the center to `point`\n * with radius 0. Otherwise the radius is set to max(current, distance(center, point)).\n */\nexport function expandByPoint(out: Sphere, point: Vec3Like): Sphere {\n const r = out[3] as number;\n const px = point[0] as number;\n const py = point[1] as number;\n const pz = point[2] as number;\n if (r < 0) {\n out[0] = px;\n out[1] = py;\n out[2] = pz;\n out[3] = 0;\n return out;\n }\n const dx = px - (out[0] as number);\n const dy = py - (out[1] as number);\n const dz = pz - (out[2] as number);\n const d = Math.sqrt(dx * dx + dy * dy + dz * dz);\n if (d > r) out[3] = d;\n return out;\n}\n\n/**\n * True when `point` is inside `sphere` (boundary inclusive). Empty sphere\n * (radius < 0) contains nothing.\n */\nexport function containsPoint(s: SphereLike, point: Vec3Like): boolean {\n const r = s[3] as number;\n if (r < 0) return false;\n const dx = (point[0] as number) - (s[0] as number);\n const dy = (point[1] as number) - (s[1] as number);\n const dz = (point[2] as number) - (s[2] as number);\n return dx * dx + dy * dy + dz * dz <= r * r;\n}\n\n/**\n * True when `sphere` overlaps `box` (boundary inclusive). Uses the standard\n * closest-point-on-AABB distance test.\n */\nexport function intersectsBox(s: SphereLike, b: box3.Box3Like): boolean {\n const r = s[3] as number;\n if (r < 0) return false;\n const cx = s[0] as number;\n const cy = s[1] as number;\n const cz = s[2] as number;\n const minX = b[0] as number;\n const minY = b[1] as number;\n const minZ = b[2] as number;\n const maxX = b[3] as number;\n const maxY = b[4] as number;\n const maxZ = b[5] as number;\n const qx = cx < minX ? minX : cx > maxX ? maxX : cx;\n const qy = cy < minY ? minY : cy > maxY ? maxY : cy;\n const qz = cz < minZ ? minZ : cz > maxZ ? maxZ : cz;\n const dx = cx - qx;\n const dy = cy - qy;\n const dz = cz - qz;\n return dx * dx + dy * dy + dz * dz <= r * r;\n}\n\n/**\n * Build an enclosing sphere from `points` via AABB-center + max-distance\n * approximation. Empty `points` leaves the negative-radius empty sphere at\n * the origin.\n */\nexport function fromPoints(out: Sphere, points: readonly Vec3Like[]): Sphere {\n if (points.length === 0) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = -1;\n return out;\n }\n const aabb = box3.create();\n for (let i = 0; i < points.length; i++) {\n box3.expandByPoint(aabb, points[i] as Vec3Like);\n }\n const cx = ((aabb[0] as number) + (aabb[3] as number)) * 0.5;\n const cy = ((aabb[1] as number) + (aabb[4] as number)) * 0.5;\n const cz = ((aabb[2] as number) + (aabb[5] as number)) * 0.5;\n let rSq = 0;\n for (let i = 0; i < points.length; i++) {\n const p = points[i] as Vec3Like;\n const dx = (p[0] as number) - cx;\n const dy = (p[1] as number) - cy;\n const dz = (p[2] as number) - cz;\n const d2 = dx * dx + dy * dy + dz * dz;\n if (d2 > rSq) rSq = d2;\n }\n out[0] = cx;\n out[1] = cy;\n out[2] = cz;\n out[3] = Math.sqrt(rSq);\n return out;\n}\n","// vec2.ts — 2D vector namespace (M2 / T-013)\n//\n// 19-function surface (≥ 14 lower bound; includes perp 2D 90° rotation, excludes cross):\n// create / clone / copy / set / equals / add / sub / scale / negate /\n// dot / lengthSq / length / distance / normalize / lerp / smoothDamp / catmullRom / min / max / perp\n//\n// Design locks:\n// - branded Float32Array storage (types.ts SSOT); `as Vec2` casts are funneled through factory\n// functions (D-P15 / lint-brand-cast.mjs guard).\n// - Out-param first + aliasing-safe (gl-matrix four ironclad rules): every function reads\n// a/b components into locals before writing out, so vec2.add(v, v, v) / vec2.lerp(out, out, b, t)\n// are legal.\n// - degenerate silent fall-back (D-P12 / AC-06): normalize(0-vec) → 0-vec, no NaN, no throw.\n// - mandatory `export function` (D-P10) so grep + count-math-exports.mjs AST can count exports.\n//\n// Related: requirements §Surface vec2 lower bound 14; plan-strategy §6 M2 + §1.1 vec2.ts LOC 220;\n// wiki/typescript-branded-types §7.2 factory template;\n// wiki/gl-matrix-overview Out-param four ironclad rules + degenerate-semantics anchor.\n\nimport { EPS_NORMALIZE } from './_internal/epsilon';\nimport { catmullRomScalar, lerp as scalarLerp, smoothDecayFactor } from './_internal/scalar';\nimport type { Vec2, Vec2Like } from './types';\n\n/** Create a Vec2 (zero vector by default). */\nexport function create(x = 0, y = 0): Vec2 {\n return Float32Array.of(x, y) as Vec2;\n}\n\n/** Allocate a new Vec2 copy. Difference from copy: clone allocates, copy writes into an existing out. */\nexport function clone(a: Vec2Like): Vec2 {\n return Float32Array.of(a[0] as number, a[1] as number) as Vec2;\n}\n\n/** out = a. Returns out. aliasing-safe (copy(v, v) is a no-op). */\nexport function copy(out: Vec2, a: Vec2Like): Vec2 {\n out[0] = a[0] as number;\n out[1] = a[1] as number;\n return out;\n}\n\n/** Write the components and return out. */\nexport function set(out: Vec2, x: number, y: number): Vec2 {\n out[0] = x;\n out[1] = y;\n return out;\n}\n\n/**\n * Approximate equality: every component differs by ≤ epsilon. NaN inputs always return false (matches IEEE 754).\n */\nexport function equals(a: Vec2Like, b: Vec2Like, epsilon = 1e-6): boolean {\n const ax = a[0] as number;\n const ay = a[1] as number;\n const bx = b[0] as number;\n const by = b[1] as number;\n if (Number.isNaN(ax) || Number.isNaN(ay) || Number.isNaN(bx) || Number.isNaN(by)) return false;\n return Math.abs(ax - bx) <= epsilon && Math.abs(ay - by) <= epsilon;\n}\n\n/** out = a + b. aliasing-safe. */\nexport function add(out: Vec2, a: Vec2Like, b: Vec2Like): Vec2 {\n const ax = a[0] as number;\n const ay = a[1] as number;\n const bx = b[0] as number;\n const by = b[1] as number;\n out[0] = ax + bx;\n out[1] = ay + by;\n return out;\n}\n\n/** out = a - b. aliasing-safe. */\nexport function sub(out: Vec2, a: Vec2Like, b: Vec2Like): Vec2 {\n const ax = a[0] as number;\n const ay = a[1] as number;\n const bx = b[0] as number;\n const by = b[1] as number;\n out[0] = ax - bx;\n out[1] = ay - by;\n return out;\n}\n\n/** out = a * s. */\nexport function scale(out: Vec2, a: Vec2Like, s: number): Vec2 {\n out[0] = (a[0] as number) * s;\n out[1] = (a[1] as number) * s;\n return out;\n}\n\n/** out = -a. The `0 - x` form avoids -0 (test toBe(0) uses Object.is and distinguishes ±0). */\nexport function negate(out: Vec2, a: Vec2Like): Vec2 {\n out[0] = 0 - (a[0] as number);\n out[1] = 0 - (a[1] as number);\n return out;\n}\n\n/** Dot product a · b. */\nexport function dot(a: Vec2Like, b: Vec2Like): number {\n return (a[0] as number) * (b[0] as number) + (a[1] as number) * (b[1] as number);\n}\n\n/** Squared length |a|² (avoids sqrt overhead; useful on hot paths comparing distances). */\nexport function lengthSq(a: Vec2Like): number {\n const x = a[0] as number;\n const y = a[1] as number;\n return x * x + y * y;\n}\n\n/** Euclidean length |a|. */\nexport function length(a: Vec2Like): number {\n const x = a[0] as number;\n const y = a[1] as number;\n return Math.sqrt(x * x + y * y);\n}\n\n/** Distance between two points |a - b|. */\nexport function distance(a: Vec2Like, b: Vec2Like): number {\n const dx = (a[0] as number) - (b[0] as number);\n const dy = (a[1] as number) - (b[1] as number);\n return Math.sqrt(dx * dx + dy * dy);\n}\n\n/**\n * out = a / |a| (unit-length).\n *\n * @degrade Zero vector (|a|² < EPS_NORMALIZE) silently falls back to the zero vector;\n * no NaN, no throw (gl-matrix style, AC-06 / D-P12).\n * @degrade NaN inputs → NaN outputs: when a component is NaN, lenSq=NaN; the `lenSq < EPS`\n * branch is false → goes through 1/sqrt(NaN)=NaN → output is all NaN (IEEE-754 NaN propagation;\n * still does not throw).\n *\n * @example\n * ```ts\n * vec2.normalize(out, [3, 4]); // → (0.6, 0.8)\n * vec2.normalize(out, [0, 0]); // → (0, 0) zero vector falls back (no NaN; AC-06 no throw)\n * vec2.normalize(out, [NaN, 1]); // → (NaN, NaN) IEEE-754 propagation\n * ```\n */\nexport function normalize(out: Vec2, a: Vec2Like): Vec2 {\n const x = a[0] as number;\n const y = a[1] as number;\n const lenSq = x * x + y * y;\n if (lenSq < EPS_NORMALIZE) {\n out[0] = 0;\n out[1] = 0;\n return out;\n }\n const inv = 1 / Math.sqrt(lenSq);\n out[0] = x * inv;\n out[1] = y * inv;\n return out;\n}\n\n/** out = lerp(a, b, t). t is not clamped (extrapolation semantics matches glam / wgpu-matrix). aliasing-safe. */\nexport function lerp(out: Vec2, a: Vec2Like, b: Vec2Like, t: number): Vec2 {\n const ax = a[0] as number;\n const ay = a[1] as number;\n const bx = b[0] as number;\n const by = b[1] as number;\n out[0] = scalarLerp(ax, bx, t);\n out[1] = scalarLerp(ay, by, t);\n return out;\n}\n\n/**\n * out = frame-rate-INDEPENDENT exponential smoothing of `current` toward `target`:\n * `lerp(current, target, 1 − exp(−decayRate · dt))`. Semantics match Bevy\n * `StableInterpolate::smooth_nudge` / three.js `MathUtils.damp` (1st-order decay, NOT Unity\n * `SmoothDamp`'s 2nd-order spring). `dt=0` → out=current; large `decayRate·dt` → out≈target.\n * Frame-rate independent by construction (one `dt` step = two composed `dt/2` steps). aliasing-safe.\n * See vec3.smoothDamp for the full contract. */\nexport function smoothDamp(\n out: Vec2,\n current: Vec2Like,\n target: Vec2Like,\n decayRate: number,\n dt: number,\n): Vec2 {\n return lerp(out, current, target, smoothDecayFactor(decayRate, dt));\n}\n\n/**\n * out = Catmull-Rom spline point on the segment between `p1` and `p2`, with `p0` / `p3` the\n * neighbor control points setting the endpoint tangents (tension 0.5 — the Bevy\n * `CubicCardinalSpline::new_catmull_rom` / three.js default). Interpolates the control points\n * (`t=0` → `p1`, `t=1` → `p2`). See vec3.catmullRom for the full contract + whole-polyline\n * sampling. aliasing-safe. */\nexport function catmullRom(\n out: Vec2,\n p0: Vec2Like,\n p1: Vec2Like,\n p2: Vec2Like,\n p3: Vec2Like,\n t: number,\n): Vec2 {\n const x = catmullRomScalar(p0[0] as number, p1[0] as number, p2[0] as number, p3[0] as number, t);\n const y = catmullRomScalar(p0[1] as number, p1[1] as number, p2[1] as number, p3[1] as number, t);\n out[0] = x;\n out[1] = y;\n return out;\n}\n\n/** Component-wise min. */\nexport function min(out: Vec2, a: Vec2Like, b: Vec2Like): Vec2 {\n out[0] = Math.min(a[0] as number, b[0] as number);\n out[1] = Math.min(a[1] as number, b[1] as number);\n return out;\n}\n\n/** Component-wise max. */\nexport function max(out: Vec2, a: Vec2Like, b: Vec2Like): Vec2 {\n out[0] = Math.max(a[0] as number, b[0] as number);\n out[1] = Math.max(a[1] as number, b[1] as number);\n return out;\n}\n\n/**\n * out = perp(a) — 2D counter-clockwise 90° rotation: (x, y) → (-y, x).\n *\n * Derives from cross(a, b) reducing to a scalar determinant in 2D; this API serves hot paths\n * (collision / normals).\n * aliasing-safe: reads a's components into locals before writing out.\n */\nexport function perp(out: Vec2, a: Vec2Like): Vec2 {\n const x = a[0] as number;\n const y = a[1] as number;\n out[0] = 0 - y;\n out[1] = x;\n return out;\n}\n","// vec4.ts — 4D vector / homogeneous coordinate namespace (M2 / T-015)\n//\n// 18-function surface (≥ 14 lower bound; same shape as vec2/vec3, no cross / perp):\n// create / clone / copy / set / equals / add / sub / scale / negate /\n// dot / lengthSq / length / distance / normalize / lerp / smoothDamp / min / max\n//\n// Design locks:\n// - branded Float32Array (types.ts SSOT); factory `as Vec4` casts are funneled (D-P15).\n// - Out-param first + aliasing-safe (gl-matrix four ironclad rules).\n// - normalize(0-vec) → 0-vec silent fall-back (D-P12 / AC-06).\n// - mandatory `export function` (D-P10).\n// - reuses lerp from _internal/scalar.ts (strategy D mixed; duplicate-code elimination).\n// - Vec4 ≠ Quat (same length=4 brand mutual exclusion; types.ts SSOT keeps each brand independent).\n//\n// Related: requirements §Surface vec4 lower bound 14; plan-strategy §6 M2 + §1.1 vec4.ts LOC 240;\n// wiki/typescript-branded-types §7.2 factory template;\n// wiki/gl-matrix-overview Out-param four ironclad rules.\n\nimport { EPS_NORMALIZE } from './_internal/epsilon';\nimport { lengthSq4, normalize4, lerp as scalarLerp, smoothDecayFactor } from './_internal/scalar';\nimport type { Vec4, Vec4Like } from './types';\n\n/** Create a Vec4 (zero vector by default). */\nexport function create(x = 0, y = 0, z = 0, w = 0): Vec4 {\n return Float32Array.of(x, y, z, w) as Vec4;\n}\n\n/** Allocate a new Vec4 copy. */\nexport function clone(a: Vec4Like): Vec4 {\n return Float32Array.of(a[0] as number, a[1] as number, a[2] as number, a[3] as number) as Vec4;\n}\n\n/** out = a. aliasing-safe (copy(v, v) is a no-op). */\nexport function copy(out: Vec4, a: Vec4Like): Vec4 {\n out[0] = a[0] as number;\n out[1] = a[1] as number;\n out[2] = a[2] as number;\n out[3] = a[3] as number;\n return out;\n}\n\n/** Write the components and return out. */\nexport function set(out: Vec4, x: number, y: number, z: number, w: number): Vec4 {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = w;\n return out;\n}\n\n/**\n * Approximate equality: every component differs by ≤ epsilon. NaN inputs always return false (IEEE 754).\n */\nexport function equals(a: Vec4Like, b: Vec4Like, epsilon = 1e-6): boolean {\n const ax = a[0] as number;\n const ay = a[1] as number;\n const az = a[2] as number;\n const aw = a[3] as number;\n const bx = b[0] as number;\n const by = b[1] as number;\n const bz = b[2] as number;\n const bw = b[3] as number;\n if (\n Number.isNaN(ax) ||\n Number.isNaN(ay) ||\n Number.isNaN(az) ||\n Number.isNaN(aw) ||\n Number.isNaN(bx) ||\n Number.isNaN(by) ||\n Number.isNaN(bz) ||\n Number.isNaN(bw)\n ) {\n return false;\n }\n return (\n Math.abs(ax - bx) <= epsilon &&\n Math.abs(ay - by) <= epsilon &&\n Math.abs(az - bz) <= epsilon &&\n Math.abs(aw - bw) <= epsilon\n );\n}\n\n/** out = a + b. aliasing-safe. */\nexport function add(out: Vec4, a: Vec4Like, b: Vec4Like): Vec4 {\n const ax = a[0] as number;\n const ay = a[1] as number;\n const az = a[2] as number;\n const aw = a[3] as number;\n const bx = b[0] as number;\n const by = b[1] as number;\n const bz = b[2] as number;\n const bw = b[3] as number;\n out[0] = ax + bx;\n out[1] = ay + by;\n out[2] = az + bz;\n out[3] = aw + bw;\n return out;\n}\n\n/** out = a - b. aliasing-safe. */\nexport function sub(out: Vec4, a: Vec4Like, b: Vec4Like): Vec4 {\n const ax = a[0] as number;\n const ay = a[1] as number;\n const az = a[2] as number;\n const aw = a[3] as number;\n const bx = b[0] as number;\n const by = b[1] as number;\n const bz = b[2] as number;\n const bw = b[3] as number;\n out[0] = ax - bx;\n out[1] = ay - by;\n out[2] = az - bz;\n out[3] = aw - bw;\n return out;\n}\n\n/** out = a * s. */\nexport function scale(out: Vec4, a: Vec4Like, s: number): Vec4 {\n out[0] = (a[0] as number) * s;\n out[1] = (a[1] as number) * s;\n out[2] = (a[2] as number) * s;\n out[3] = (a[3] as number) * s;\n return out;\n}\n\n/** out = -a. The `0 - x` form avoids -0. */\nexport function negate(out: Vec4, a: Vec4Like): Vec4 {\n out[0] = 0 - (a[0] as number);\n out[1] = 0 - (a[1] as number);\n out[2] = 0 - (a[2] as number);\n out[3] = 0 - (a[3] as number);\n return out;\n}\n\n/** Dot product a · b (4 components). */\nexport function dot(a: Vec4Like, b: Vec4Like): number {\n return (\n (a[0] as number) * (b[0] as number) +\n (a[1] as number) * (b[1] as number) +\n (a[2] as number) * (b[2] as number) +\n (a[3] as number) * (b[3] as number)\n );\n}\n\n/** Squared length |a|² (avoids sqrt overhead). */\nexport function lengthSq(a: Vec4Like): number {\n return lengthSq4(a);\n}\n\n/** Euclidean length |a|. */\nexport function length(a: Vec4Like): number {\n return Math.sqrt(lengthSq4(a));\n}\n\n/** Distance between two points |a - b|. */\nexport function distance(a: Vec4Like, b: Vec4Like): number {\n const dx = (a[0] as number) - (b[0] as number);\n const dy = (a[1] as number) - (b[1] as number);\n const dz = (a[2] as number) - (b[2] as number);\n const dw = (a[3] as number) - (b[3] as number);\n return Math.sqrt(dx * dx + dy * dy + dz * dz + dw * dw);\n}\n\n/**\n * out = a / |a| (unit-length).\n *\n * @degrade Zero vector (|a|² < EPS_NORMALIZE) silently falls back to the zero vector;\n * no NaN, no throw (gl-matrix style, AC-06 / D-P12).\n * @degrade NaN inputs → NaN outputs: when a component is NaN, lenSq=NaN; the `lenSq < EPS`\n * branch is false → goes through 1/sqrt(NaN)=NaN → output is all NaN (IEEE-754 NaN propagation;\n * still does not throw).\n *\n * @example\n * ```ts\n * vec4.normalize(out, [1, 2, 2, 0]); // → (1/3, 2/3, 2/3, 0)\n * vec4.normalize(out, [0, 0, 0, 0]); // → (0, 0, 0, 0) zero vector falls back (AC-06 no throw)\n * vec4.normalize(out, [NaN, 1, 0, 0]); // → all NaN, IEEE-754 propagation\n * ```\n */\nexport function normalize(out: Vec4, a: Vec4Like): Vec4 {\n normalize4(out, a, EPS_NORMALIZE);\n return out;\n}\n\n/** out = lerp(a, b, t). t is not clamped (extrapolation semantics). aliasing-safe. */\nexport function lerp(out: Vec4, a: Vec4Like, b: Vec4Like, t: number): Vec4 {\n const ax = a[0] as number;\n const ay = a[1] as number;\n const az = a[2] as number;\n const aw = a[3] as number;\n const bx = b[0] as number;\n const by = b[1] as number;\n const bz = b[2] as number;\n const bw = b[3] as number;\n out[0] = scalarLerp(ax, bx, t);\n out[1] = scalarLerp(ay, by, t);\n out[2] = scalarLerp(az, bz, t);\n out[3] = scalarLerp(aw, bw, t);\n return out;\n}\n\n/**\n * out = frame-rate-INDEPENDENT exponential smoothing of `current` toward `target`:\n * `lerp(current, target, 1 − exp(−decayRate · dt))`. Semantics match Bevy\n * `StableInterpolate::smooth_nudge` / three.js `MathUtils.damp` (1st-order decay, NOT Unity\n * `SmoothDamp`'s 2nd-order spring). `dt=0` → out=current; large `decayRate·dt` → out≈target.\n * Frame-rate independent by construction (one `dt` step = two composed `dt/2` steps). aliasing-safe.\n * See vec3.smoothDamp for the full contract. */\nexport function smoothDamp(\n out: Vec4,\n current: Vec4Like,\n target: Vec4Like,\n decayRate: number,\n dt: number,\n): Vec4 {\n return lerp(out, current, target, smoothDecayFactor(decayRate, dt));\n}\n\n/** Component-wise min. */\nexport function min(out: Vec4, a: Vec4Like, b: Vec4Like): Vec4 {\n out[0] = Math.min(a[0] as number, b[0] as number);\n out[1] = Math.min(a[1] as number, b[1] as number);\n out[2] = Math.min(a[2] as number, b[2] as number);\n out[3] = Math.min(a[3] as number, b[3] as number);\n return out;\n}\n\n/** Component-wise max. */\nexport function max(out: Vec4, a: Vec4Like, b: Vec4Like): Vec4 {\n out[0] = Math.max(a[0] as number, b[0] as number);\n out[1] = Math.max(a[1] as number, b[1] as number);\n out[2] = Math.max(a[2] as number, b[2] as number);\n out[3] = Math.max(a[3] as number, b[3] as number);\n return out;\n}\n"]}
|