@flare-engine/math 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/scalar.ts","../src/vec2.ts","../src/rect.ts","../src/circle.ts","../src/transform2d.ts","../src/mat3.ts","../src/color.ts","../src/easings.ts","../src/random.ts","../src/intersection.ts"],"sourcesContent":["export {\n clamp,\n lerp,\n inverseLerp,\n map,\n degToRad,\n radToDeg,\n approxEquals,\n wrap,\n pingPong,\n smoothStep,\n sign,\n} from './scalar.js';\nexport { vec2, Vec2 } from './vec2.js';\nexport { Rect } from './rect.js';\nexport { Circle } from './circle.js';\nexport { Transform2D } from './transform2d.js';\nexport { Mat3 } from './mat3.js';\nexport { Color, type Oklab, type Oklch } from './color.js';\nexport {\n type EasingFn,\n linear,\n step,\n easeInQuad,\n easeOutQuad,\n easeInOutQuad,\n easeInCubic,\n easeOutCubic,\n easeInOutCubic,\n easeInQuart,\n easeOutQuart,\n easeInOutQuart,\n easeInQuint,\n easeOutQuint,\n easeInOutQuint,\n easeInSine,\n easeOutSine,\n easeInOutSine,\n easeInExpo,\n easeOutExpo,\n easeInOutExpo,\n easeInCirc,\n easeOutCirc,\n easeInOutCirc,\n easeInBack,\n easeOutBack,\n easeInOutBack,\n easeInElastic,\n easeOutElastic,\n easeInOutElastic,\n easeInBounce,\n easeOutBounce,\n easeInOutBounce,\n springIn,\n springOut,\n springInOut,\n} from './easings.js';\nexport {\n SeededRNG,\n randomFloat,\n randomInt,\n randomVec2InRect,\n randomPointInCircle,\n shuffle,\n choose,\n} from './random.js';\nexport {\n pointInRect,\n pointInCircle,\n rectVsRect,\n rectVsCircle,\n circleVsCircle,\n lineVsRect,\n lineVsCircle,\n rayVsRect,\n} from './intersection.js';\n","/** Clamps value between min and max. */\nexport function clamp(value: number, min: number, max: number): number {\n return value < min ? min : value > max ? max : value;\n}\n\n/** Linearly interpolates between a and b by t (unclamped). */\nexport function lerp(a: number, b: number, t: number): number {\n return a + (b - a) * t;\n}\n\n/** Returns the interpolation factor of value between a and b. */\nexport function inverseLerp(a: number, b: number, value: number): number {\n const range = b - a;\n if (range === 0) return 0;\n return (value - a) / range;\n}\n\n/** Maps value from [inMin, inMax] to [outMin, outMax]. */\nexport function map(\n value: number,\n inMin: number,\n inMax: number,\n outMin: number,\n outMax: number,\n): number {\n return lerp(outMin, outMax, inverseLerp(inMin, inMax, value));\n}\n\nconst DEG_TO_RAD = Math.PI / 180;\nconst RAD_TO_DEG = 180 / Math.PI;\n\n/** Converts degrees to radians. */\nexport function degToRad(degrees: number): number {\n return degrees * DEG_TO_RAD;\n}\n\n/** Converts radians to degrees. */\nexport function radToDeg(radians: number): number {\n return radians * RAD_TO_DEG;\n}\n\n/** Returns true if a and b are approximately equal within epsilon. */\nexport function approxEquals(a: number, b: number, epsilon = 1e-6): boolean {\n return Math.abs(a - b) <= epsilon;\n}\n\n/** Wraps value into [min, max) range. */\nexport function wrap(value: number, min: number, max: number): number {\n const range = max - min;\n if (range === 0) return min;\n return min + ((((value - min) % range) + range) % range);\n}\n\n/** PingPong — bounces value back and forth in [0, length]. */\nexport function pingPong(t: number, length: number): number {\n if (length === 0) return 0;\n const tt = wrap(t, 0, length * 2);\n return length - Math.abs(tt - length);\n}\n\n/** Hermite smooth interpolation (0→1) with zero first-derivative at edges. */\nexport function smoothStep(edge0: number, edge1: number, x: number): number {\n const range = edge1 - edge0;\n if (range === 0) return x >= edge1 ? 1 : 0;\n const t = clamp((x - edge0) / range, 0, 1);\n return t * t * (3 - 2 * t);\n}\n\n/** Returns -1, 0, or 1. Unlike Math.sign, returns 0 for NaN. */\nexport function sign(value: number): number {\n if (Number.isNaN(value)) return 0;\n return value > 0 ? 1 : value < 0 ? -1 : 0;\n}\n","import { approxEquals } from './scalar.js';\n\n/** Vec2 plain object type — no class, no GC pressure. */\nexport type Vec2 = { x: number; y: number };\n\n/** Creates a Vec2 plain object. */\nexport function vec2(x = 0, y = 0): Vec2 {\n return { x, y };\n}\n\n// ─── Static namespace ───────────────────────────────────────────\n\nexport const Vec2 = {\n /** Returns { 0, 0 }. */\n zero(): Vec2 {\n return { x: 0, y: 0 };\n },\n /** Returns { 1, 1 }. */\n one(): Vec2 {\n return { x: 1, y: 1 };\n },\n /** Returns { 0, -1 }. */\n up(): Vec2 {\n return { x: 0, y: -1 };\n },\n /** Returns { 0, 1 }. */\n down(): Vec2 {\n return { x: 0, y: 1 };\n },\n /** Returns { -1, 0 }. */\n left(): Vec2 {\n return { x: -1, y: 0 };\n },\n /** Returns { 1, 0 }. */\n right(): Vec2 {\n return { x: 1, y: 0 };\n },\n\n /** Component-wise addition. Writes into out if provided. */\n add(a: Vec2, b: Vec2, out?: Vec2): Vec2 {\n if (out) {\n out.x = a.x + b.x;\n out.y = a.y + b.y;\n return out;\n }\n return { x: a.x + b.x, y: a.y + b.y };\n },\n\n /** Component-wise subtraction a - b. */\n sub(a: Vec2, b: Vec2, out?: Vec2): Vec2 {\n if (out) {\n out.x = a.x - b.x;\n out.y = a.y - b.y;\n return out;\n }\n return { x: a.x - b.x, y: a.y - b.y };\n },\n\n /** Scales a vector by a scalar. */\n scale(v: Vec2, s: number, out?: Vec2): Vec2 {\n if (out) {\n out.x = v.x * s;\n out.y = v.y * s;\n return out;\n }\n return { x: v.x * s, y: v.y * s };\n },\n\n /** Returns a unit vector. Returns zero vector if length is 0. */\n normalize(v: Vec2, out?: Vec2): Vec2 {\n const len = Math.sqrt(v.x * v.x + v.y * v.y);\n if (len === 0) {\n if (out) {\n out.x = 0;\n out.y = 0;\n return out;\n }\n return { x: 0, y: 0 };\n }\n const inv = 1 / len;\n if (out) {\n out.x = v.x * inv;\n out.y = v.y * inv;\n return out;\n }\n return { x: v.x * inv, y: v.y * inv };\n },\n\n /** Zero-alloc; writes into `out`. Mandatory `out` so callers avoid temporaries in hot paths. */\n normalizeOut(dx: number, dy: number, speed: number, out: Vec2): Vec2 {\n const len = Math.sqrt(dx * dx + dy * dy);\n if (len <= 1e-6) {\n out.x = 0;\n out.y = 0;\n return out;\n }\n const inv = speed / len;\n out.x = dx * inv;\n out.y = dy * inv;\n return out;\n },\n\n /** Dot product. */\n dot(a: Vec2, b: Vec2): number {\n return a.x * b.x + a.y * b.y;\n },\n\n /** 2D cross product (z-component of the 3D cross). */\n cross(a: Vec2, b: Vec2): number {\n return a.x * b.y - a.y * b.x;\n },\n\n /** Linearly interpolates between a and b (unclamped). */\n lerp(a: Vec2, b: Vec2, t: number, out?: Vec2): Vec2 {\n const x = a.x + (b.x - a.x) * t;\n const y = a.y + (b.y - a.y) * t;\n if (out) {\n out.x = x;\n out.y = y;\n return out;\n }\n return { x, y };\n },\n\n /** Spherical linear interpolation for unit vectors. */\n slerp(a: Vec2, b: Vec2, t: number, out?: Vec2): Vec2 {\n let d = a.x * b.x + a.y * b.y;\n // Clamp dot to [-1, 1] for numerical safety\n d = d < -1 ? -1 : d > 1 ? 1 : d;\n const theta = Math.acos(d);\n if (theta < 1e-6) {\n return Vec2.lerp(a, b, t, out);\n }\n const sinTheta = Math.sin(theta);\n const wa = Math.sin((1 - t) * theta) / sinTheta;\n const wb = Math.sin(t * theta) / sinTheta;\n const x = a.x * wa + b.x * wb;\n const y = a.y * wa + b.y * wb;\n if (out) {\n out.x = x;\n out.y = y;\n return out;\n }\n return { x, y };\n },\n\n /** Euclidean distance between two points. */\n distance(a: Vec2, b: Vec2): number {\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n return Math.sqrt(dx * dx + dy * dy);\n },\n\n /** Squared distance (avoids sqrt). */\n distanceSq(a: Vec2, b: Vec2): number {\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n return dx * dx + dy * dy;\n },\n\n /** Length of a vector. */\n length(v: Vec2): number {\n return Math.sqrt(v.x * v.x + v.y * v.y);\n },\n\n /** Squared length (avoids sqrt). */\n lengthSq(v: Vec2): number {\n return v.x * v.x + v.y * v.y;\n },\n\n /** Angle of vector in radians (atan2). */\n angle(v: Vec2): number {\n return Math.atan2(v.y, v.x);\n },\n\n /** Rotates a vector by angle (radians) around origin. */\n rotate(v: Vec2, angle: number, out?: Vec2): Vec2 {\n const c = Math.cos(angle);\n const s = Math.sin(angle);\n const x = v.x * c - v.y * s;\n const y = v.x * s + v.y * c;\n if (out) {\n out.x = x;\n out.y = y;\n return out;\n }\n return { x, y };\n },\n\n /** Component-wise approximate equality. */\n equals(a: Vec2, b: Vec2, epsilon = 1e-6): boolean {\n return approxEquals(a.x, b.x, epsilon) && approxEquals(a.y, b.y, epsilon);\n },\n\n /** Returns a copy of the vector. */\n clone(v: Vec2): Vec2 {\n return { x: v.x, y: v.y };\n },\n\n /** Clamps the length of a vector to maxLength. */\n clampLength(v: Vec2, maxLength: number, out?: Vec2): Vec2 {\n const lenSq = v.x * v.x + v.y * v.y;\n if (lenSq <= maxLength * maxLength) {\n if (out) {\n out.x = v.x;\n out.y = v.y;\n return out;\n }\n return { x: v.x, y: v.y };\n }\n const len = Math.sqrt(lenSq);\n const inv = maxLength / len;\n if (out) {\n out.x = v.x * inv;\n out.y = v.y * inv;\n return out;\n }\n return { x: v.x * inv, y: v.y * inv };\n },\n} as const;\n","import type { Vec2 } from './vec2.js';\n\n/** Axis-aligned bounding box. */\nexport type Rect = { x: number; y: number; width: number; height: number };\n\nexport const Rect = {\n /** Returns true if point is inside rect (inclusive). */\n contains(r: Rect, p: Vec2): boolean {\n return p.x >= r.x && p.x <= r.x + r.width && p.y >= r.y && p.y <= r.y + r.height;\n },\n\n /** Returns true if two rects overlap (share area). */\n intersects(a: Rect, b: Rect): boolean {\n return (\n a.x < b.x + b.width && a.x + a.width > b.x && a.y < b.y + b.height && a.y + a.height > b.y\n );\n },\n\n /** Returns the overlapping rect, or null if no overlap. */\n intersection(a: Rect, b: Rect): Rect | null {\n const x = Math.max(a.x, b.x);\n const y = Math.max(a.y, b.y);\n const right = Math.min(a.x + a.width, b.x + b.width);\n const bottom = Math.min(a.y + a.height, b.y + b.height);\n if (right <= x || bottom <= y) return null;\n return { x, y, width: right - x, height: bottom - y };\n },\n\n /** Returns the smallest rect containing both rects. */\n union(a: Rect, b: Rect): Rect {\n const x = Math.min(a.x, b.x);\n const y = Math.min(a.y, b.y);\n const right = Math.max(a.x + a.width, b.x + b.width);\n const bottom = Math.max(a.y + a.height, b.y + b.height);\n return { x, y, width: right - x, height: bottom - y };\n },\n\n /** Creates a rect from an array of points (bounding box). */\n fromPoints(points: readonly Vec2[]): Rect {\n if (points.length === 0) return { x: 0, y: 0, width: 0, height: 0 };\n let minX = points[0]!.x;\n let minY = points[0]!.y;\n let maxX = minX;\n let maxY = minY;\n for (let i = 1; i < points.length; i++) {\n const p = points[i]!;\n if (p.x < minX) minX = p.x;\n if (p.y < minY) minY = p.y;\n if (p.x > maxX) maxX = p.x;\n if (p.y > maxY) maxY = p.y;\n }\n return { x: minX, y: minY, width: maxX - minX, height: maxY - minY };\n },\n\n /** Returns the center point of the rect. */\n center(r: Rect): Vec2 {\n return { x: r.x + r.width * 0.5, y: r.y + r.height * 0.5 };\n },\n\n /** Returns a new rect expanded by amount on each side. */\n expand(r: Rect, amount: number): Rect {\n return {\n x: r.x - amount,\n y: r.y - amount,\n width: r.width + amount * 2,\n height: r.height + amount * 2,\n };\n },\n} as const;\n","import type { Rect } from './rect.js';\nimport type { Vec2 } from './vec2.js';\n\n/** Circle shape: center position + radius. */\nexport type Circle = { x: number; y: number; radius: number };\n\nexport const Circle = {\n /** Returns true if point is inside or on the circle. */\n contains(c: Circle, p: Vec2): boolean {\n const dx = p.x - c.x;\n const dy = p.y - c.y;\n return dx * dx + dy * dy <= c.radius * c.radius;\n },\n\n /** Returns true if two circles overlap (share area). */\n intersects(a: Circle, b: Circle): boolean {\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n const distSq = dx * dx + dy * dy;\n const radSum = a.radius + b.radius;\n return distSq < radSum * radSum;\n },\n\n /** Returns true if a circle and rect overlap. */\n intersectsRect(c: Circle, r: Rect): boolean {\n // Find closest point on rect to circle center\n const closestX = c.x < r.x ? r.x : c.x > r.x + r.width ? r.x + r.width : c.x;\n const closestY = c.y < r.y ? r.y : c.y > r.y + r.height ? r.y + r.height : c.y;\n const dx = c.x - closestX;\n const dy = c.y - closestY;\n return dx * dx + dy * dy <= c.radius * c.radius;\n },\n} as const;\n","import type { Vec2 } from './vec2.js';\n\n/** 2D transform: position, rotation (radians), and scale. */\nexport type Transform2D = {\n position: Vec2;\n rotation: number;\n scale: Vec2;\n};\n\nexport const Transform2D = {\n /** Creates an identity transform. */\n identity(): Transform2D {\n return { position: { x: 0, y: 0 }, rotation: 0, scale: { x: 1, y: 1 } };\n },\n\n /** Creates a transform from components. */\n create(x = 0, y = 0, rotation = 0, scaleX = 1, scaleY = 1): Transform2D {\n return {\n position: { x, y },\n rotation,\n scale: { x: scaleX, y: scaleY },\n };\n },\n\n /** Transforms a local-space point to world-space. */\n localToWorld(t: Transform2D, point: Vec2): Vec2 {\n const c = Math.cos(t.rotation);\n const s = Math.sin(t.rotation);\n const sx = point.x * t.scale.x;\n const sy = point.y * t.scale.y;\n return {\n x: sx * c - sy * s + t.position.x,\n y: sx * s + sy * c + t.position.y,\n };\n },\n\n /** Transforms a world-space point to local-space. */\n worldToLocal(t: Transform2D, point: Vec2): Vec2 {\n const dx = point.x - t.position.x;\n const dy = point.y - t.position.y;\n const c = Math.cos(-t.rotation);\n const s = Math.sin(-t.rotation);\n const rx = dx * c - dy * s;\n const ry = dx * s + dy * c;\n return {\n x: t.scale.x !== 0 ? rx / t.scale.x : 0,\n y: t.scale.y !== 0 ? ry / t.scale.y : 0,\n };\n },\n\n /** Returns a copy of the transform. */\n clone(t: Transform2D): Transform2D {\n return {\n position: { x: t.position.x, y: t.position.y },\n rotation: t.rotation,\n scale: { x: t.scale.x, y: t.scale.y },\n };\n },\n} as const;\n","import type { Transform2D } from './transform2d.js';\n\n/**\n * 3x3 matrix stored in column-major order on Float32Array.\n * Layout: [m00, m10, m20, m01, m11, m21, m02, m12, m22]\n *\n * | m00 m01 m02 | indices: | 0 3 6 |\n * | m10 m11 m12 | | 1 4 7 |\n * | m20 m21 m22 | | 2 5 8 |\n */\nexport type Mat3 = Float32Array;\n\nexport const Mat3 = {\n /** Creates a new identity matrix. */\n create(): Mat3 {\n const m = new Float32Array(9);\n m[0] = 1;\n m[4] = 1;\n m[8] = 1;\n return m;\n },\n\n /** Sets m to identity. */\n identity(m: Mat3): Mat3 {\n m[0] = 1;\n m[1] = 0;\n m[2] = 0;\n m[3] = 0;\n m[4] = 1;\n m[5] = 0;\n m[6] = 0;\n m[7] = 0;\n m[8] = 1;\n return m;\n },\n\n /** Multiplies a * b, writes into out (or allocates). */\n multiply(a: Mat3, b: Mat3, out?: Mat3): Mat3 {\n const a00 = a[0]!,\n a01 = a[3]!,\n a02 = a[6]!;\n const a10 = a[1]!,\n a11 = a[4]!,\n a12 = a[7]!;\n const a20 = a[2]!,\n a21 = a[5]!,\n a22 = a[8]!;\n\n const b00 = b[0]!,\n b01 = b[3]!,\n b02 = b[6]!;\n const b10 = b[1]!,\n b11 = b[4]!,\n b12 = b[7]!;\n const b20 = b[2]!,\n b21 = b[5]!,\n b22 = b[8]!;\n\n const o = out ?? new Float32Array(9);\n o[0] = a00 * b00 + a01 * b10 + a02 * b20;\n o[1] = a10 * b00 + a11 * b10 + a12 * b20;\n o[2] = a20 * b00 + a21 * b10 + a22 * b20;\n o[3] = a00 * b01 + a01 * b11 + a02 * b21;\n o[4] = a10 * b01 + a11 * b11 + a12 * b21;\n o[5] = a20 * b01 + a21 * b11 + a22 * b21;\n o[6] = a00 * b02 + a01 * b12 + a02 * b22;\n o[7] = a10 * b02 + a11 * b12 + a12 * b22;\n o[8] = a20 * b02 + a21 * b12 + a22 * b22;\n return o;\n },\n\n /** Creates a translation matrix. */\n translate(tx: number, ty: number, out?: Mat3): Mat3 {\n const m = out ?? new Float32Array(9);\n m[0] = 1;\n m[1] = 0;\n m[2] = 0;\n m[3] = 0;\n m[4] = 1;\n m[5] = 0;\n m[6] = tx;\n m[7] = ty;\n m[8] = 1;\n return m;\n },\n\n /** Creates a rotation matrix (radians). */\n rotate(angle: number, out?: Mat3): Mat3 {\n const c = Math.cos(angle);\n const s = Math.sin(angle);\n const m = out ?? new Float32Array(9);\n m[0] = c;\n m[1] = s;\n m[2] = 0;\n m[3] = -s;\n m[4] = c;\n m[5] = 0;\n m[6] = 0;\n m[7] = 0;\n m[8] = 1;\n return m;\n },\n\n /** Creates a scale matrix. */\n scale(sx: number, sy: number, out?: Mat3): Mat3 {\n const m = out ?? new Float32Array(9);\n m[0] = sx;\n m[1] = 0;\n m[2] = 0;\n m[3] = 0;\n m[4] = sy;\n m[5] = 0;\n m[6] = 0;\n m[7] = 0;\n m[8] = 1;\n return m;\n },\n\n /** Inverts the matrix. Returns null if singular. */\n invert(m: Mat3, out?: Mat3): Mat3 | null {\n const a00 = m[0]!,\n a01 = m[3]!,\n a02 = m[6]!;\n const a10 = m[1]!,\n a11 = m[4]!,\n a12 = m[7]!;\n const a20 = m[2]!,\n a21 = m[5]!,\n a22 = m[8]!;\n\n const det =\n a00 * (a11 * a22 - a12 * a21) - a01 * (a10 * a22 - a12 * a20) + a02 * (a10 * a21 - a11 * a20);\n\n if (Math.abs(det) < 1e-8) return null;\n\n const invDet = 1 / det;\n const o = out ?? new Float32Array(9);\n o[0] = (a11 * a22 - a12 * a21) * invDet;\n o[1] = (a12 * a20 - a10 * a22) * invDet;\n o[2] = (a10 * a21 - a11 * a20) * invDet;\n o[3] = (a02 * a21 - a01 * a22) * invDet;\n o[4] = (a00 * a22 - a02 * a20) * invDet;\n o[5] = (a01 * a20 - a00 * a21) * invDet;\n o[6] = (a01 * a12 - a02 * a11) * invDet;\n o[7] = (a02 * a10 - a00 * a12) * invDet;\n o[8] = (a00 * a11 - a01 * a10) * invDet;\n return o;\n },\n\n /** Builds a matrix from a Transform2D (TRS order: translate * rotate * scale). */\n fromTransform(t: Transform2D, out?: Mat3): Mat3 {\n const c = Math.cos(t.rotation);\n const s = Math.sin(t.rotation);\n const sx = t.scale.x;\n const sy = t.scale.y;\n const m = out ?? new Float32Array(9);\n m[0] = c * sx;\n m[1] = s * sx;\n m[2] = 0;\n m[3] = -s * sy;\n m[4] = c * sy;\n m[5] = 0;\n m[6] = t.position.x;\n m[7] = t.position.y;\n m[8] = 1;\n return m;\n },\n} as const;\n","import { clamp } from './scalar.js';\n\n/** RGBA color with components normalized to 0-1. */\nexport type Color = { r: number; g: number; b: number; a: number };\n\n/** OKLab perceptual color space (L 0-1, a and b unbounded in practice ±0.5). */\nexport type Oklab = { L: number; a: number; b: number };\n\n/** OKLCH polar form of OKLab (L 0-1, C >= 0, h degrees [0,360)). */\nexport type Oklch = { L: number; C: number; h: number };\n\n/**\n * Converts a single sRGB channel to linear light.\n * The 0.04045 threshold (modern WCAG errata) is numerically identical to the\n * older 0.03928 for 8-bit inputs and is shared by OKLab and WCAG luminance.\n */\nfunction srgbToLinear(c: number): number {\n return c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;\n}\n\n/** Converts a single linear-light channel back to sRGB. */\nfunction linearToSrgb(c: number): number {\n return c <= 0.0031308 ? 12.92 * c : 1.055 * c ** (1 / 2.4) - 0.055;\n}\n\nexport const Color = {\n WHITE: { r: 1, g: 1, b: 1, a: 1 } as Color,\n BLACK: { r: 0, g: 0, b: 0, a: 1 } as Color,\n TRANSPARENT: { r: 0, g: 0, b: 0, a: 0 } as Color,\n\n /** Creates a Color from normalized 0-1 components. */\n create(r = 0, g = 0, b = 0, a = 1): Color {\n return { r, g, b, a };\n },\n\n /** Parses a hex string (#RGB, #RGBA, #RRGGBB, #RRGGBBAA). */\n fromHex(hex: string): Color {\n // Strip leading #\n let h = hex.startsWith('#') ? hex.slice(1) : hex;\n\n if (h.length === 3) {\n h = h[0]! + h[0]! + h[1]! + h[1]! + h[2]! + h[2]!;\n } else if (h.length === 4) {\n h = h[0]! + h[0]! + h[1]! + h[1]! + h[2]! + h[2]! + h[3]! + h[3]!;\n }\n\n const r = Number.parseInt(h.slice(0, 2), 16) / 255;\n const g = Number.parseInt(h.slice(2, 4), 16) / 255;\n const b = Number.parseInt(h.slice(4, 6), 16) / 255;\n const a = h.length >= 8 ? Number.parseInt(h.slice(6, 8), 16) / 255 : 1;\n return { r, g, b, a };\n },\n\n /** Converts to hex string #RRGGBB or #RRGGBBAA if alpha < 1. */\n toHex(c: Color): string {\n const r = Math.round(clamp(c.r, 0, 1) * 255)\n .toString(16)\n .padStart(2, '0');\n const g = Math.round(clamp(c.g, 0, 1) * 255)\n .toString(16)\n .padStart(2, '0');\n const b = Math.round(clamp(c.b, 0, 1) * 255)\n .toString(16)\n .padStart(2, '0');\n if (c.a < 1) {\n const a = Math.round(clamp(c.a, 0, 1) * 255)\n .toString(16)\n .padStart(2, '0');\n return `#${r}${g}${b}${a}`;\n }\n return `#${r}${g}${b}`;\n },\n\n /** Linearly interpolates between two colors. */\n lerp(a: Color, b: Color, t: number): Color {\n return {\n r: a.r + (b.r - a.r) * t,\n g: a.g + (b.g - a.g) * t,\n b: a.b + (b.b - a.b) * t,\n a: a.a + (b.a - a.a) * t,\n };\n },\n\n /** Component-wise multiplication. */\n multiply(a: Color, b: Color): Color {\n return {\n r: a.r * b.r,\n g: a.g * b.g,\n b: a.b * b.b,\n a: a.a * b.a,\n };\n },\n\n /**\n * Converts to a Skia-compatible color number (0xAARRGGBB).\n * Compatible with @shopify/react-native-skia Skia.Color() format.\n */\n toSkColor(c: Color): number {\n const r = Math.round(clamp(c.r, 0, 1) * 255) & 0xff;\n const g = Math.round(clamp(c.g, 0, 1) * 255) & 0xff;\n const b = Math.round(clamp(c.b, 0, 1) * 255) & 0xff;\n const a = Math.round(clamp(c.a, 0, 1) * 255) & 0xff;\n return ((a << 24) | (r << 16) | (g << 8) | b) >>> 0;\n },\n\n /** Converts sRGB Color to OKLab. Alpha is dropped. */\n toOklab(c: Color): Oklab {\n const rl = srgbToLinear(c.r);\n const gl = srgbToLinear(c.g);\n const bl = srgbToLinear(c.b);\n\n const l = 0.4122214708 * rl + 0.5363325363 * gl + 0.0514459929 * bl;\n const m = 0.2119034982 * rl + 0.6806995451 * gl + 0.1073969566 * bl;\n const s = 0.0883024619 * rl + 0.2817188376 * gl + 0.6299787005 * bl;\n\n const l_ = Math.cbrt(l);\n const m_ = Math.cbrt(m);\n const s_ = Math.cbrt(s);\n\n return {\n L: 0.2104542553 * l_ + 0.793617785 * m_ - 0.0040720468 * s_,\n a: 1.9779984951 * l_ - 2.428592205 * m_ + 0.4505937099 * s_,\n b: 0.0259040371 * l_ + 0.7827717662 * m_ - 0.808675766 * s_,\n };\n },\n\n /**\n * Converts OKLab to sRGB Color. Out-of-gamut results are clamped to [0,1];\n * round-trips are exact only for in-gamut colors.\n */\n fromOklab(lab: Oklab, alpha = 1): Color {\n const l_ = lab.L + 0.3963377774 * lab.a + 0.2158037573 * lab.b;\n const m_ = lab.L - 0.1055613458 * lab.a - 0.0638541728 * lab.b;\n const s_ = lab.L - 0.0894841775 * lab.a - 1.291485548 * lab.b;\n\n const l = l_ ** 3;\n const m = m_ ** 3;\n const s = s_ ** 3;\n\n const rl = 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s;\n const gl = -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s;\n const bl = -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s;\n\n return {\n r: clamp(linearToSrgb(rl), 0, 1),\n g: clamp(linearToSrgb(gl), 0, 1),\n b: clamp(linearToSrgb(bl), 0, 1),\n a: alpha,\n };\n },\n\n /** Converts sRGB Color to OKLCH (polar OKLab). Achromatic colors get h = 0. */\n toOklch(c: Color): Oklch {\n const lab = Color.toOklab(c);\n const C = Math.hypot(lab.a, lab.b);\n const h = C < 1e-7 ? 0 : ((Math.atan2(lab.b, lab.a) * 180) / Math.PI + 360) % 360;\n return { L: lab.L, C, h };\n },\n\n /**\n * Converts OKLCH to sRGB Color. Hue is wrapped via ((h%360)+360)%360.\n * Out-of-gamut results are clamped; round-trips exact only in-gamut.\n */\n fromOklch(lch: Oklch, alpha = 1): Color {\n const hWrapped = ((lch.h % 360) + 360) % 360;\n const hRad = (hWrapped * Math.PI) / 180;\n return Color.fromOklab(\n { L: lch.L, a: lch.C * Math.cos(hRad), b: lch.C * Math.sin(hRad) },\n alpha,\n );\n },\n\n /** Euclidean distance in OKLab space between two sRGB colors. */\n deltaEOk(a: Color, b: Color): number {\n return Color.deltaEOkLab(Color.toOklab(a), Color.toOklab(b));\n },\n\n /** Euclidean distance between two OKLab values. */\n deltaEOkLab(a: Oklab, b: Oklab): number {\n return Math.hypot(a.L - b.L, a.a - b.a, a.b - b.b);\n },\n\n /** WCAG 2.x relative luminance. White = 1, black = 0. */\n relativeLuminance(c: Color): number {\n return 0.2126 * srgbToLinear(c.r) + 0.7152 * srgbToLinear(c.g) + 0.0722 * srgbToLinear(c.b);\n },\n\n /** WCAG 2.x contrast ratio. Order-independent; range [1, 21]. */\n contrastRatio(fg: Color, bg: Color): number {\n const l1 = Color.relativeLuminance(fg);\n const l2 = Color.relativeLuminance(bg);\n const lMax = Math.max(l1, l2);\n const lMin = Math.min(l1, l2);\n return (lMax + 0.05) / (lMin + 0.05);\n },\n} as const;\n","// 42 easing functions — all (t: number) => number, t in [0,1]\n// Robert Penner easings + spring, bounce, elastic variants.\n// Tree-shakeable named exports.\n\nconst PI = Math.PI;\nconst HALF_PI = PI / 2;\nconst TAU = PI * 2;\n\n// ─── Linear ─────────────────────────────────────────────────\nexport function linear(t: number): number {\n return t;\n}\n\n// ─── Step ───────────────────────────────────────────────────\nexport function step(t: number): number {\n return t < 1 ? 0 : 1;\n}\n\n// ─── Quad ───────────────────────────────────────────────────\nexport function easeInQuad(t: number): number {\n return t * t;\n}\nexport function easeOutQuad(t: number): number {\n return t * (2 - t);\n}\nexport function easeInOutQuad(t: number): number {\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n}\n\n// ─── Cubic ──────────────────────────────────────────────────\nexport function easeInCubic(t: number): number {\n return t * t * t;\n}\nexport function easeOutCubic(t: number): number {\n const t1 = t - 1;\n return t1 * t1 * t1 + 1;\n}\nexport function easeInOutCubic(t: number): number {\n return t < 0.5 ? 4 * t * t * t : 1 + (t - 1) * (2 * t - 2) * (2 * t - 2);\n}\n\n// ─── Quart ──────────────────────────────────────────────────\nexport function easeInQuart(t: number): number {\n return t * t * t * t;\n}\nexport function easeOutQuart(t: number): number {\n const t1 = t - 1;\n return 1 - t1 * t1 * t1 * t1;\n}\nexport function easeInOutQuart(t: number): number {\n const t1 = t - 1;\n return t < 0.5 ? 8 * t * t * t * t : 1 - 8 * t1 * t1 * t1 * t1;\n}\n\n// ─── Quint ──────────────────────────────────────────────────\nexport function easeInQuint(t: number): number {\n return t * t * t * t * t;\n}\nexport function easeOutQuint(t: number): number {\n const t1 = t - 1;\n return 1 + t1 * t1 * t1 * t1 * t1;\n}\nexport function easeInOutQuint(t: number): number {\n const t1 = t - 1;\n return t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * t1 * t1 * t1 * t1 * t1;\n}\n\n// ─── Sine ───────────────────────────────────────────────────\nexport function easeInSine(t: number): number {\n return 1 - Math.cos(t * HALF_PI);\n}\nexport function easeOutSine(t: number): number {\n return Math.sin(t * HALF_PI);\n}\nexport function easeInOutSine(t: number): number {\n return 0.5 * (1 - Math.cos(PI * t));\n}\n\n// ─── Expo ───────────────────────────────────────────────────\nexport function easeInExpo(t: number): number {\n return t === 0 ? 0 : 2 ** (10 * (t - 1));\n}\nexport function easeOutExpo(t: number): number {\n return t === 1 ? 1 : 1 - 2 ** (-10 * t);\n}\nexport function easeInOutExpo(t: number): number {\n if (t === 0) return 0;\n if (t === 1) return 1;\n return t < 0.5 ? 0.5 * 2 ** (20 * t - 10) : 1 - 0.5 * 2 ** (-20 * t + 10);\n}\n\n// ─── Circ ───────────────────────────────────────────────────\nexport function easeInCirc(t: number): number {\n return 1 - Math.sqrt(1 - t * t);\n}\nexport function easeOutCirc(t: number): number {\n const t1 = t - 1;\n return Math.sqrt(1 - t1 * t1);\n}\nexport function easeInOutCirc(t: number): number {\n return t < 0.5\n ? 0.5 * (1 - Math.sqrt(1 - 4 * t * t))\n : 0.5 * (Math.sqrt(1 - (2 * t - 2) * (2 * t - 2)) + 1);\n}\n\n// ─── Back ───────────────────────────────────────────────────\nconst S = 1.70158;\nconst S2 = S * 1.525;\n\nexport function easeInBack(t: number): number {\n return t * t * ((S + 1) * t - S);\n}\nexport function easeOutBack(t: number): number {\n const t1 = t - 1;\n return t1 * t1 * ((S + 1) * t1 + S) + 1;\n}\nexport function easeInOutBack(t: number): number {\n if (t < 0.5) {\n const t2 = 2 * t;\n return 0.5 * (t2 * t2 * ((S2 + 1) * t2 - S2));\n }\n const t2 = 2 * t - 2;\n return 0.5 * (t2 * t2 * ((S2 + 1) * t2 + S2) + 2);\n}\n\n// ─── Elastic ────────────────────────────────────────────────\nexport function easeInElastic(t: number): number {\n if (t === 0 || t === 1) return t;\n return -(2 ** (10 * t - 10)) * Math.sin((t * 10 - 10.75) * (TAU / 3));\n}\nexport function easeOutElastic(t: number): number {\n if (t === 0 || t === 1) return t;\n return 2 ** (-10 * t) * Math.sin((t * 10 - 0.75) * (TAU / 3)) + 1;\n}\nexport function easeInOutElastic(t: number): number {\n if (t === 0 || t === 1) return t;\n const p = TAU / 4.5;\n return t < 0.5\n ? -0.5 * 2 ** (20 * t - 10) * Math.sin((20 * t - 11.125) * p)\n : 0.5 * 2 ** (-20 * t + 10) * Math.sin((20 * t - 11.125) * p) + 1;\n}\n\n// ─── Bounce ─────────────────────────────────────────────────\nexport function easeOutBounce(t: number): number {\n if (t < 1 / 2.75) {\n return 7.5625 * t * t;\n }\n if (t < 2 / 2.75) {\n const t2 = t - 1.5 / 2.75;\n return 7.5625 * t2 * t2 + 0.75;\n }\n if (t < 2.5 / 2.75) {\n const t2 = t - 2.25 / 2.75;\n return 7.5625 * t2 * t2 + 0.9375;\n }\n const t2 = t - 2.625 / 2.75;\n return 7.5625 * t2 * t2 + 0.984375;\n}\nexport function easeInBounce(t: number): number {\n return 1 - easeOutBounce(1 - t);\n}\nexport function easeInOutBounce(t: number): number {\n return t < 0.5 ? 0.5 * easeInBounce(t * 2) : 0.5 * easeOutBounce(t * 2 - 1) + 0.5;\n}\n\n// ─── Spring ─────────────────────────────────────────────────\nexport function springIn(t: number): number {\n return t * t * ((1.70158 + 1) * t - 1.70158);\n}\nexport function springOut(t: number): number {\n const t1 = t - 1;\n return t1 * t1 * ((1.70158 + 1) * t1 + 1.70158) + 1;\n}\nexport function springInOut(t: number): number {\n if (t < 0.5) {\n const t2 = 2 * t;\n return 0.5 * t2 * t2 * ((S2 + 1) * t2 - S2);\n }\n const t2 = 2 * t - 2;\n return 0.5 * (t2 * t2 * ((S2 + 1) * t2 + S2) + 2);\n}\n\n// ─── Type ───────────────────────────────────────────────────\nexport type EasingFn = (t: number) => number;\n","import type { Rect } from './rect.js';\nimport type { Vec2 } from './vec2.js';\n\n/** Seeded PRNG using mulberry32 algorithm. */\nexport class SeededRNG {\n private state: number;\n\n constructor(seed: number) {\n this.state = seed | 0;\n }\n\n /** Returns a float in [0, 1). */\n next(): number {\n this.state = (this.state + 0x6d2b79f5) | 0;\n let t = Math.imul(this.state ^ (this.state >>> 15), 1 | this.state);\n t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n }\n\n /** Returns a float in [min, max). */\n float(min: number, max: number): number {\n return min + this.next() * (max - min);\n }\n\n /** Returns an integer in [min, max] (inclusive). */\n int(min: number, max: number): number {\n return Math.floor(this.float(min, max + 1));\n }\n}\n\n/** Returns a random float in [min, max). */\nexport function randomFloat(min: number, max: number): number {\n return min + Math.random() * (max - min);\n}\n\n/** Returns a random integer in [min, max] (inclusive). */\nexport function randomInt(min: number, max: number): number {\n return Math.floor(randomFloat(min, max + 1));\n}\n\n/** Returns a random Vec2 within a rect. */\nexport function randomVec2InRect(r: Rect): Vec2 {\n return {\n x: r.x + Math.random() * r.width,\n y: r.y + Math.random() * r.height,\n };\n}\n\n/** Returns a random point inside a circle (uniform distribution). */\nexport function randomPointInCircle(cx: number, cy: number, radius: number): Vec2 {\n // Use sqrt for uniform distribution\n const r = radius * Math.sqrt(Math.random());\n const angle = Math.random() * Math.PI * 2;\n return {\n x: cx + r * Math.cos(angle),\n y: cy + r * Math.sin(angle),\n };\n}\n\n/** Fisher-Yates shuffle (in-place). Returns the array. */\nexport function shuffle<T>(array: T[]): T[] {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n const tmp = array[i]!;\n array[i] = array[j]!;\n array[j] = tmp;\n }\n return array;\n}\n\n/** Returns a random element from the array. */\nexport function choose<T>(array: readonly T[]): T | undefined {\n if (array.length === 0) return undefined;\n return array[Math.floor(Math.random() * array.length)];\n}\n","import type { Circle } from './circle.js';\nimport type { Rect } from './rect.js';\nimport type { Vec2 } from './vec2.js';\n\n/** Returns true if point is inside rect (inclusive). */\nexport function pointInRect(p: Vec2, r: Rect): boolean {\n return p.x >= r.x && p.x <= r.x + r.width && p.y >= r.y && p.y <= r.y + r.height;\n}\n\n/** Returns true if point is inside circle (inclusive). */\nexport function pointInCircle(p: Vec2, c: Circle): boolean {\n const dx = p.x - c.x;\n const dy = p.y - c.y;\n return dx * dx + dy * dy <= c.radius * c.radius;\n}\n\n/** Returns true if two rects overlap. */\nexport function rectVsRect(a: Rect, b: Rect): boolean {\n return a.x < b.x + b.width && a.x + a.width > b.x && a.y < b.y + b.height && a.y + a.height > b.y;\n}\n\n/** Returns true if rect and circle overlap. */\nexport function rectVsCircle(r: Rect, c: Circle): boolean {\n const closestX = c.x < r.x ? r.x : c.x > r.x + r.width ? r.x + r.width : c.x;\n const closestY = c.y < r.y ? r.y : c.y > r.y + r.height ? r.y + r.height : c.y;\n const dx = c.x - closestX;\n const dy = c.y - closestY;\n return dx * dx + dy * dy <= c.radius * c.radius;\n}\n\n/** Returns true if two circles overlap. */\nexport function circleVsCircle(a: Circle, b: Circle): boolean {\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n const radSum = a.radius + b.radius;\n return dx * dx + dy * dy < radSum * radSum;\n}\n\n/** Line segment intersection with AABB. Uses Liang-Barsky algorithm. */\nexport function lineVsRect(x1: number, y1: number, x2: number, y2: number, r: Rect): boolean {\n const dx = x2 - x1;\n const dy = y2 - y1;\n\n let tMin = 0;\n let tMax = 1;\n\n // Check each edge\n const edges = [\n { p: -dx, q: x1 - r.x },\n { p: dx, q: r.x + r.width - x1 },\n { p: -dy, q: y1 - r.y },\n { p: dy, q: r.y + r.height - y1 },\n ];\n\n for (const { p, q } of edges) {\n if (Math.abs(p) < 1e-12) {\n // Parallel to edge\n if (q < 0) return false;\n } else {\n const t = q / p;\n if (p < 0) {\n if (t > tMax) return false;\n if (t > tMin) tMin = t;\n } else {\n if (t < tMin) return false;\n if (t < tMax) tMax = t;\n }\n }\n }\n\n return tMin <= tMax;\n}\n\n/** Line segment intersection with circle. */\nexport function lineVsCircle(x1: number, y1: number, x2: number, y2: number, c: Circle): boolean {\n const dx = x2 - x1;\n const dy = y2 - y1;\n const fx = x1 - c.x;\n const fy = y1 - c.y;\n\n const a = dx * dx + dy * dy;\n const b = 2 * (fx * dx + fy * dy);\n const cc = fx * fx + fy * fy - c.radius * c.radius;\n\n // Zero-length segment: just a point-in-circle test\n if (a < 1e-12) {\n return cc <= 0;\n }\n\n let discriminant = b * b - 4 * a * cc;\n if (discriminant < 0) return false;\n\n discriminant = Math.sqrt(discriminant);\n const t1 = (-b - discriminant) / (2 * a);\n const t2 = (-b + discriminant) / (2 * a);\n\n // Check if any intersection is within segment [0, 1]\n if (t1 >= 0 && t1 <= 1) return true;\n if (t2 >= 0 && t2 <= 1) return true;\n // Segment fully inside circle\n if (t1 < 0 && t2 > 1) return true;\n\n return false;\n}\n\n/** Ray intersection with AABB. Returns t (distance) or null if no hit. */\nexport function rayVsRect(\n originX: number,\n originY: number,\n dirX: number,\n dirY: number,\n r: Rect,\n): number | null {\n const invDx = dirX !== 0 ? 1 / dirX : Number.POSITIVE_INFINITY;\n const invDy = dirY !== 0 ? 1 / dirY : Number.POSITIVE_INFINITY;\n\n const tx1 = (r.x - originX) * invDx;\n const tx2 = (r.x + r.width - originX) * invDx;\n const ty1 = (r.y - originY) * invDy;\n const ty2 = (r.y + r.height - originY) * invDy;\n\n const tMin = Math.max(Math.min(tx1, tx2), Math.min(ty1, ty2));\n const tMax = Math.min(Math.max(tx1, tx2), Math.max(ty1, ty2));\n\n if (tMax < 0 || tMin > tMax) return null;\n\n return tMin >= 0 ? tMin : tMax;\n}\n"],"mappings":"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","names":["t2"]}