@nakednous/host 0.0.10 → 0.0.12

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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/view.js","../src/canvas.js","../src/pointer.js","../src/loop.js","../src/handle.js","../src/router.js","../src/helm.js","../src/track.js","../src/stream.js","../src/obj.js","../src/gltf.js","../src/media.js","../src/labels.js","../src/orbit.js","../src/hdr.js","../src/index.js"],"sourcesContent":["/**\n * @file The view bag — the matrices every pick, solve, label and orbit reads.\n * @module host/view\n * @license AGPL-3.0-only\n *\n * The matrices bag mapLocation takes, plus the signed viewport and the NDC\n * convention:\n *\n * view = {\n * mat4Proj, mat4View, mat4PV, mat4PVInv, // Float32Array(16) each, host-owned\n * mat4Eye, // inverse of mat4View — EYE → WORLD\n * vp, // [0, h, w, −h] — y-down, logical canvas px\n * ndcZMin, // WEBGL | WEBGPU, set once at creation\n * stale, // true until a set() with an invertible P · V\n * set(P, V) // copy P and V, recompute PV and PVInv\n * setCamera(cam) // build V and P from a camera state, then set\n * resize(width, height) // the canvas observer's write into vp\n * }\n *\n * mat4PVInv and mat4Eye are recomputed on set, once per frame, so unproject\n * and every mapping from SCREEN or EYE share them. A degenerate P · V or V\n * leaves the previous inverses and marks the bag stale; consumers treat a\n * stale bag as \"no pick this frame\".\n */\n\n'use strict';\n\nimport { WEBGL, mat4Mul, mat4Invert, cameraView, cameraProj } from '@nakednous/tree';\n\nconst _inv = new Float32Array(16); // inverse scratch: the bag keeps its previous inverse on failure\nconst _P = new Float32Array(16); // setCamera's projection\nconst _V = new Float32Array(16); // setCamera's view\n\nfunction _identity(m) {\n m.fill(0);\n m[0] = m[5] = m[10] = m[15] = 1;\n return m;\n}\n\n/**\n * Create a view bag. The matrices start at identity and the bag stale, so a\n * consumer reading it before the first set() picks nothing.\n *\n * @param {{ ndcZMin?:number, width?:number, height?:number }} [opts]\n * ndcZMin: WEBGL (−1, default) or WEBGPU (0) — written once here, never\n * detected. width / height: the initial logical canvas size.\n * @returns {object} The view bag.\n */\nexport function createView(opts) {\n const o = opts || {};\n const w = o.width || 0, h = o.height || 0;\n const view = {\n mat4Proj: _identity(new Float32Array(16)),\n mat4View: _identity(new Float32Array(16)),\n mat4PV: _identity(new Float32Array(16)),\n mat4PVInv: _identity(new Float32Array(16)),\n mat4Eye: _identity(new Float32Array(16)),\n vp: [0, h, w, -h],\n ndcZMin: o.ndcZMin === 0 ? 0 : WEBGL,\n stale: true,\n\n /**\n * Install a projection and a view: both copied, P · V with its inverse\n * and the eye matrix (V's inverse) recomputed. A singular product or\n * view keeps the previous inverses and marks the bag stale.\n * @param {ArrayLike<number>} P Projection mat4.\n * @param {ArrayLike<number>} V View mat4 (world → eye).\n * @returns {object} this\n */\n set(P, V) {\n for (let i = 0; i < 16; i++) { view.mat4Proj[i] = P[i]; view.mat4View[i] = V[i]; }\n mat4Mul(view.mat4PV, view.mat4Proj, view.mat4View);\n if (mat4Invert(_inv, view.mat4PV) === null) { view.stale = true; return view; }\n view.mat4PVInv.set(_inv);\n if (mat4Invert(_inv, view.mat4View) === null) { view.stale = true; return view; }\n view.mat4Eye.set(_inv);\n view.stale = false;\n return view;\n },\n\n /**\n * Install a camera state: cameraView and cameraProj at the viewport's\n * aspect under the bag's ndcZMin, then set(). A state with both fov and\n * halfHeight null keeps the projection already installed.\n * @param {object} cam Camera state.\n * @returns {object} this\n */\n setCamera(cam) {\n const aspect = view.vp[3] !== 0 ? view.vp[2] / -view.vp[3] : 1;\n cameraView(_V, cam);\n const P = cameraProj(_P, cam, aspect, view.ndcZMin) || view.mat4Proj;\n return view.set(P, _V);\n },\n\n /**\n * Write a new logical canvas size into vp: [0, height, width, −height].\n * @param {number} width\n * @param {number} height\n * @returns {object} this\n */\n resize(width, height) {\n view.vp[1] = height; view.vp[2] = width; view.vp[3] = -height;\n return view;\n },\n };\n return view;\n}\n","/**\n * @file The canvas observer — logical size and device pixel ratio.\n * @module host/canvas\n * @license AGPL-3.0-only\n *\n * A ResizeObserver on the canvas element plus devicePixelRatio tracking:\n * on change the observer reports the logical size in CSS px and the dpr to\n * its callback, which the context uses to update host.width / host.height /\n * host.dpr, the view bag's vp, the label layer and the bridge's onSize. The\n * observer never touches canvas.width / canvas.height — that is the\n * renderer's decision.\n *\n * Without a ResizeObserver (a headless run) the size is measured once from\n * the element's bounding rectangle, falling back to its width / height\n * attributes.\n */\n\n'use strict';\n\n/**\n * Measure a canvas: logical CSS size from its bounding rectangle when laid\n * out, else its width / height attributes; dpr from the window.\n * @param {HTMLCanvasElement} canvas\n * @param {number[]} out3 [width, height, dpr] destination.\n * @returns {number[]} out3\n */\nexport function measureCanvas(canvas, out3) {\n const r = typeof canvas.getBoundingClientRect === 'function' ? canvas.getBoundingClientRect() : null;\n const laidOut = r && r.width > 0 && r.height > 0;\n out3[0] = laidOut ? r.width : (canvas.width || 0);\n out3[1] = laidOut ? r.height : (canvas.height || 0);\n out3[2] = (typeof window !== 'undefined' && window.devicePixelRatio) || 1;\n return out3;\n}\n\n/**\n * Observe a canvas's logical size and dpr. `onChange(width, height, dpr)`\n * fires once immediately with the current measure and again on every\n * change; a change is reported only when a value differs.\n *\n * @param {HTMLCanvasElement} canvas\n * @param {function(number, number, number):void} onChange\n * @returns {{ width:number, height:number, dpr:number, measure():void, dispose():void }}\n */\nexport function observeCanvas(canvas, onChange) {\n const m = [0, 0, 1];\n const obs = { width: -1, height: 0, dpr: 1, measure, dispose };\n let ro = null;\n const onWindow = () => measure();\n\n function measure() {\n measureCanvas(canvas, m);\n if (m[0] === obs.width && m[1] === obs.height && m[2] === obs.dpr) return;\n obs.width = m[0]; obs.height = m[1]; obs.dpr = m[2];\n onChange(obs.width, obs.height, obs.dpr);\n }\n\n function dispose() {\n if (ro) { ro.disconnect(); ro = null; }\n if (typeof window !== 'undefined' && window.removeEventListener) window.removeEventListener('resize', onWindow);\n }\n\n measure(); // width −1 makes the first measure report\n if (typeof ResizeObserver !== 'undefined') {\n ro = new ResizeObserver(() => measure());\n ro.observe(canvas);\n }\n // A zoom changes devicePixelRatio and fires resize; the observer alone would miss it.\n if (typeof window !== 'undefined' && window.addEventListener) window.addEventListener('resize', onWindow);\n return obs;\n}\n","/**\n * @file The pointer source — a typed event buffer with claims, one per canvas.\n * @module host/pointer\n * @license AGPL-3.0-only\n *\n * Shared by every handle, router and orbit on a canvas. Listeners only\n * record; nothing solves in a listener:\n *\n * - pointerdown · pointermove · pointerup · pointercancel on the canvas,\n * keydown (Esc) on the window.\n * - Coordinates in screen space — the surface's logical pixels, top-left, y\n * down — through the element's bounding rectangle: (clientX − rect.left) ·\n * (width / rect.width), the logical size read off the view bag's vp. These\n * are the numbers mapLocation(SCREEN) and vp expect (a viewport of negative\n * height), so a CSS-scaled canvas maps correctly.\n * - Per pointer: an entry { id, x, y, seq, down, up, cancel, owner }, kept\n * from its press until the frame after its release; `seq` counts moves,\n * so a consumer remembers the last seq it consumed and reads only new\n * motion. Multitouch is per-pointer by construction; the mouse is one\n * more pointer.\n * - Presses queue in order for the frame (`presses`); consumers read the\n * queue inside the frame and claim what they take. Several same-frame\n * presses on different members all land.\n * - Claims: claim(id, owner) captures the pointer on the canvas so a drag\n * that leaves it keeps flowing; release(id), up and cancel release the\n * capture. An unclaimed pointer is what the orbit sees.\n * - Esc sets the cancel flag on every claimed pointer.\n * - flush() ends the frame: the press queue empties and released pointers\n * leave the map. The loop calls it after onFrame; an external loop calls\n * it after its consumers ran (the p5 adapter from postdraw).\n */\n\n'use strict';\n\n/**\n * Create the pointer source of a canvas.\n *\n * @param {HTMLCanvasElement} canvas\n * @param {object} view The view bag; vp[2] and −vp[3] are the logical size.\n * @returns {object} The source: { presses, pointers, get, claim, release,\n * ownerOf, flush, dispose }.\n */\nexport function createPointer(canvas, view) {\n const pointers = new Map(); // id → entry\n const presses = []; // this frame's presses, in order: { id, x, y }\n const xy = [0, 0];\n\n const toCanvas = (e, out) => {\n const r = canvas.getBoundingClientRect ? canvas.getBoundingClientRect() : null;\n const w = view.vp[2], h = -view.vp[3];\n if (r && r.width > 0 && r.height > 0 && w > 0 && h > 0) {\n out[0] = (e.clientX - r.left) * (w / r.width);\n out[1] = (e.clientY - r.top) * (h / r.height);\n } else {\n out[0] = e.clientX; out[1] = e.clientY;\n }\n return out;\n };\n\n const entry = (id) => {\n let p = pointers.get(id);\n if (!p) { p = { id, x: 0, y: 0, seq: 0, down: false, up: false, cancel: false, owner: null }; pointers.set(id, p); }\n return p;\n };\n\n const capture = (id, on) => {\n const f = on ? canvas.setPointerCapture : canvas.releasePointerCapture;\n if (typeof f !== 'function') return;\n try { f.call(canvas, id); } catch (_) { /* best effort: a synthetic or already-released id */ }\n };\n\n const onDown = (e) => {\n const p = entry(e.pointerId);\n toCanvas(e, xy);\n p.x = xy[0]; p.y = xy[1]; p.seq++;\n p.down = true; p.up = false; p.cancel = false;\n presses.push({ id: p.id, x: p.x, y: p.y });\n };\n const onMove = (e) => {\n const p = entry(e.pointerId);\n toCanvas(e, xy);\n p.x = xy[0]; p.y = xy[1]; p.seq++;\n };\n const onUp = (e) => {\n const p = pointers.get(e.pointerId);\n if (!p) return;\n toCanvas(e, xy);\n p.x = xy[0]; p.y = xy[1]; p.seq++;\n p.up = true;\n capture(p.id, false);\n };\n const onCancel = (e) => {\n const p = pointers.get(e.pointerId);\n if (!p) return;\n p.cancel = true;\n capture(p.id, false);\n };\n const onKey = (e) => {\n if (e.key !== 'Escape') return;\n for (const p of pointers.values()) if (p.owner !== null) p.cancel = true;\n };\n\n canvas.addEventListener('pointerdown', onDown);\n canvas.addEventListener('pointermove', onMove);\n canvas.addEventListener('pointerup', onUp);\n canvas.addEventListener('pointercancel', onCancel);\n if (typeof window !== 'undefined' && window.addEventListener) window.addEventListener('keydown', onKey);\n\n const source = {\n /** This frame's presses in order, each { id, x, y }; emptied by flush(). */\n presses,\n /** The live pointer entries by id. */\n pointers,\n\n /**\n * The entry of a pointer, or null when it is not on the canvas.\n * @param {number} id\n * @returns {object|null}\n */\n get(id) { return pointers.get(id) || null; },\n\n /**\n * Claim a pointer for an owner and capture it on the canvas. Fails when\n * another owner holds it or the pointer is unknown.\n * @param {number} id\n * @param {object} owner\n * @returns {boolean} claimed\n */\n claim(id, owner) {\n const p = pointers.get(id);\n if (!p || (p.owner !== null && p.owner !== owner)) return false;\n p.owner = owner;\n capture(id, true);\n return true;\n },\n\n /**\n * Release a claim and the capture with it. No-op for an unclaimed id.\n * @param {number} id\n */\n release(id) {\n const p = pointers.get(id);\n if (!p || p.owner === null) return;\n p.owner = null;\n capture(id, false);\n },\n\n /**\n * The owner holding a pointer, or null.\n * @param {number} id\n * @returns {object|null}\n */\n ownerOf(id) { const p = pointers.get(id); return p ? p.owner : null; },\n\n /**\n * End the frame: the press queue empties; pointers that released or\n * cancelled leave the map (their claims dropped), the rest keep their\n * position and seq.\n */\n flush() {\n presses.length = 0;\n for (const [id, p] of pointers) {\n if (p.up || p.cancel) { p.owner = null; pointers.delete(id); }\n }\n },\n\n /** Remove every listener and release every capture. */\n dispose() {\n canvas.removeEventListener('pointerdown', onDown);\n canvas.removeEventListener('pointermove', onMove);\n canvas.removeEventListener('pointerup', onUp);\n canvas.removeEventListener('pointercancel', onCancel);\n if (typeof window !== 'undefined' && window.removeEventListener) window.removeEventListener('keydown', onKey);\n for (const p of pointers.values()) if (p.owner !== null) capture(p.id, false);\n pointers.clear();\n presses.length = 0;\n },\n };\n return source;\n}\n","/**\n * @file The players registry and the frame loop.\n * @module host/loop\n * @license AGPL-3.0-only\n *\n * A player is { tick(dt) → boolean }, removed from the registry when it\n * returns false. Iteration snapshots the set, so a player may remove itself\n * or add another during a tick. Tracks register through their activation\n * hooks, helms until disposed.\n *\n * The loop is optional: with it, requestAnimationFrame (overridable — the\n * seam a WebXR session fills) drives onFrame(dt) with dt in seconds clamped\n * to 50 ms, the stalled-tab guard; without it the application ticks the\n * players from its own loop.\n */\n\n'use strict';\n\n/**\n * Create a players registry.\n * @returns {{ add(player):object, remove(player):object, has(player):boolean,\n * tick(dt:number):void, size:number, clear():void }}\n */\nexport function createPlayers() {\n const set = new Set();\n const players = {\n /** Register a player; adding one already present is a no-op. */\n add(player) { if (player) set.add(player); return players; },\n /** Unregister a player. */\n remove(player) { set.delete(player); return players; },\n /** Whether a player is registered. */\n has(player) { return set.has(player); },\n /** Tick every player with dt (seconds); one returning false is removed. */\n tick(dt) {\n for (const p of [...set]) {\n if (!set.has(p)) continue; // removed by an earlier player this tick\n if (p.tick(dt) === false) set.delete(p);\n }\n },\n /** Registered count. */\n get size() { return set.size; },\n /** Unregister every player. */\n clear() { set.clear(); },\n };\n return players;\n}\n\nconst _now = () => (typeof performance !== 'undefined' && performance.now) ? performance.now() : Date.now();\n\n/**\n * Create a frame loop. `onFrame(dt)` runs once per animation frame with the\n * clamped period in seconds; start() schedules, stop() cancels.\n *\n * @param {{ onFrame:function(number):void, raf?:function, caf?:function,\n * clampMs?:number, now?:function():number }} opts\n * raf / caf default to the window's requestAnimationFrame /\n * cancelAnimationFrame; clampMs defaults to 50.\n * @returns {{ start():object, stop():object, running:boolean, dt:number }}\n */\nexport function createLoop(opts) {\n const o = opts || {};\n const raf = o.raf || ((cb) => requestAnimationFrame(cb));\n const caf = o.caf || ((id) => cancelAnimationFrame(id));\n const now = o.now || _now;\n const clamp = (o.clampMs ?? 50) / 1000;\n let handle = null, last = 0;\n const loop = {\n running: false,\n dt: 0,\n start() {\n if (loop.running) return loop;\n loop.running = true;\n last = now();\n const frame = () => {\n if (!loop.running) return;\n const t = now();\n loop.dt = Math.min((t - last) / 1000, clamp);\n last = t;\n o.onFrame(loop.dt);\n if (loop.running) handle = raf(frame);\n };\n handle = raf(frame);\n return loop;\n },\n stop() {\n loop.running = false;\n if (handle !== null) { caf(handle); handle = null; }\n return loop;\n },\n };\n return loop;\n}\n","/**\n * @file The handle controller — a draggable constraint driven from the pointer source.\n * @module host/handle\n * @license AGPL-3.0-only\n *\n * Wraps a core Constraint (@nakednous/tree) with the transport a draggable\n * 3D control needs: presses, moves and releases from the host's pointer\n * source, a pixel → ray unprojection through the host's view bag, an\n * analytic pick against the constraint's proxy, and a host-driven update()\n * lifecycle. No drawing: a bridge draws the locus (locusLines) and the dot.\n *\n * ── update() ordering contract ─────────────────────────────────────────────\n * update() is host-driven, before the orbit, because the orbit gate depends\n * on the grab resolving first:\n *\n * onFrame() { setCamera(cam); if (!h.update()) orbit.update(); scene() }\n *\n * ── Pick ───────────────────────────────────────────────────────────────────\n * The pointer's ray is unproject(x, y, view) in WORLD; the grab size is\n * grabPx converted to world units through pixelRatio at the proxy's depth;\n * the constraint's proxy(ray, radius) answers t or Infinity. Built-in kinds\n * carry their proxy (a sphere at the point, the DIAL's ring); a custom kind\n * supplies one or gets the sphere. solve() runs in WORLD; value() converts.\n *\n * ── Pointer source ─────────────────────────────────────────────────────────\n * update() reads the frame's press queue and the tracked pointer's entry\n * (seq counts moves; up / cancel end the gesture; Esc cancels every claimed\n * pointer). A grab claims the pointer, which captures it on the canvas; a\n * miss leaves it unclaimed for the orbit. The whole gesture keys to one\n * pointerId, so on a shared surface each handle tracks its own finger.\n *\n * ── Constraint kinds ───────────────────────────────────────────────────────\n * Core SPHERE / PLANE / AXIS / DIAL pass straight through. VIEW is a core\n * PLANE re-aimed at the camera each solve — a screen-parallel drag plane\n * through the current point — reported as a world position; its constraint\n * carries `view: true`, the flag locusLines reads. A custom kind is a\n * contract-conforming object (kind / solve / value / seed, optional scalar /\n * azEl / aim / proxy / locus) passed as `constraint`.\n *\n * ── Snap / hover / cancel / from ───────────────────────────────────────────\n * snap quantises at the solve seam: an angular step for SPHERE (az/el) and\n * DIAL (θ), a world grid for PLANE / AXIS / VIEW (PLANE re-projecting).\n * hover is a lone-handle opt-in (a router provides it shared). Cancel — Esc,\n * pointercancel, cancel() — reverts to the value captured at grab, restores\n * the binding and fires onCancel instead of onRelease. `from` names the space\n * the symbolic basis (axis / normal / zero) resolves FROM into WORLD each idle\n * frame through mapDirection on the view bag — WORLD, EYE, or a mat4 —\n * frozen at grab.\n */\n\n'use strict';\n\nimport {\n createConstraint, dirFromAzEl, unproject, rayHitSphere,\n mapLocation, mapDirection, pixelRatio, mat4Invert,\n SPHERE, PLANE, AXIS, DIAL, POINT, DIRECTION, WORLD, MATRIX,\n} from '@nakednous/tree';\n\n/** The screen-parallel free-translate constraint (a core PLANE re-aimed each solve). */\nexport const VIEW = 4;\n\n// Module-level scratch — update() and value() run to completion within one\n// frame with no reentrancy across handles.\nconst _rayO = [0, 0, 0]; // pick ray origin, WORLD\nconst _rayD = [0, 0, 0]; // pick ray unit direction, WORLD\n/** The ray scratch a handle's _ray(x, y) fills — the router's shared pick reads it. */\nexport const rayScratch = { o: _rayO, d: _rayD };\nconst _v3 = [0, 0, 0]; // value() extraction scratch\nconst _q2 = [0, 0]; // az/el snap scratch\nconst _b0 = [0, 0, 0]; // resolved θ = 0 reference\nconst _b2 = [0, 0, 0]; // resolved axis / normal\nconst _frameInv = new Float32Array(16);\n\n// The mapping bag mapLocation / mapDirection take: the view's matrices plus\n// the frames a call names (a mat4 `from` or `to` is the MATRIX space).\nconst _bag = { mat4Proj: null, mat4View: null, mat4PV: null, mat4PVInv: null, mat4Eye: null,\n fromFrame: null, toFrame: null, toFrameInv: null };\nconst _isMat = (s) => s != null && typeof s !== 'string';\nconst _space = (s) => (_isMat(s) ? MATRIX : s);\n\nfunction _bagOf(view, from, to) {\n _bag.mat4Proj = view.mat4Proj; _bag.mat4View = view.mat4View;\n _bag.mat4PV = view.mat4PV; _bag.mat4PVInv = view.mat4PVInv; _bag.mat4Eye = view.mat4Eye;\n _bag.fromFrame = _isMat(from) ? from : null;\n if (_isMat(to)) { _bag.toFrame = to; _bag.toFrameInv = mat4Invert(_frameInv, to) ? _frameInv : null; }\n else { _bag.toFrame = null; _bag.toFrameInv = null; }\n return _bag;\n}\n\nconst _norm3 = (o) => {\n const l = Math.hypot(o[0], o[1], o[2]) || 1;\n o[0] /= l; o[1] /= l; o[2] /= l;\n return o;\n};\n\n// Orthonormal in-plane basis for a unit normal n, seeded from the world axis\n// least aligned with it (a DIAL's θ = 0 reference when `from` gives none).\nconst _basisFromNormal = (n, ub, vb) => {\n const ax = Math.abs(n[0]), ay = Math.abs(n[1]), az = Math.abs(n[2]);\n let rx = 0, ry = 0, rz = 0;\n if (ax <= ay && ax <= az) rx = 1; else if (ay <= az) ry = 1; else rz = 1;\n ub[0] = ry*n[2] - rz*n[1]; ub[1] = rz*n[0] - rx*n[2]; ub[2] = rx*n[1] - ry*n[0];\n _norm3(ub);\n vb[0] = n[1]*ub[2] - n[2]*ub[1]; vb[1] = n[2]*ub[0] - n[0]*ub[2]; vb[2] = n[0]*ub[1] - n[1]*ub[0];\n};\n\n// Read component i of an array or {x, y, z}, falling back to d.\nconst _vx = (v, i, d) => {\n if (v == null) return d;\n const c = i === 0 ? v.x : i === 1 ? v.y : v.z;\n return c ?? v[i] ?? d;\n};\n\n/** Contract check for a custom constraint object. */\nexport const isConstraint = (c) =>\n c && typeof c === 'object' &&\n typeof c.solve === 'function' &&\n typeof c.value === 'function' &&\n typeof c.seed === 'function';\n\n/**\n * The handle controller. Stateful and long-lived, like a track; driven from\n * the frame through update(), read with value(out, opts).\n */\nexport class Handle {\n /**\n * @param {object} host The host context (its pointer source and view bag).\n * @param {object} opts See host.handle().\n */\n constructor(host, opts) {\n this._host = host;\n this._pointer = host.pointer;\n this._view = host.view;\n\n const kind = opts.constraint;\n this._isView = (kind === VIEW);\n if (isConstraint(kind)) {\n this._constraint = kind;\n } else {\n const coreKind = this._isView ? PLANE : kind;\n // Vector opts pass straight through — the core duck-types arrays and {x, y, z}.\n this._constraint = createConstraint(coreKind, {\n radius: opts.radius, report: opts.report, anchor: opts.anchor,\n normal: opts.normal, axis: opts.axis, zero: opts.zero, extent: opts.extent,\n });\n if (this._isView) this._constraint.view = true; // the flag locusLines reads\n }\n\n // Deferred constraint frame: the symbolic basis and the space it resolves from.\n this._from = null; this._fromDir = null; this._fromZero = null;\n if (opts.from != null && opts.from !== WORLD) {\n const custom = isConstraint(kind);\n const dirOpt = (kind === PLANE) ? opts.normal : (opts.axis ?? opts.normal);\n const ok = !this._isView &&\n (kind === PLANE || kind === AXIS || kind === DIAL ||\n (custom && typeof this._constraint.aim === 'function'));\n if (!ok) {\n console.error('[host] handle: `from` needs an aimable constraint — PLANE, AXIS, DIAL, or a custom kind exposing aim(); ignoring.');\n } else if (custom && dirOpt == null) {\n console.error('[host] handle: `from` on a custom kind needs a symbolic `axis` (or `normal`) to resolve; ignoring.');\n } else {\n this._from = opts.from;\n this._fromDir = [_vx(dirOpt, 0, kind === AXIS ? 1 : 0), _vx(dirOpt, 1, kind === AXIS ? 0 : 1), _vx(dirOpt, 2, 0)];\n if (opts.zero != null) {\n this._fromZero = [_vx(opts.zero, 0, 1), _vx(opts.zero, 1, 0), _vx(opts.zero, 2, 0)];\n } else if (kind === DIAL) {\n // Derive the θ = 0 reference once, in the FROM space, so axis and zero co-rotate.\n _b2[0] = this._fromDir[0]; _b2[1] = this._fromDir[1]; _b2[2] = this._fromDir[2];\n _norm3(_b2);\n const r0 = [0, 0, 0], r1 = [0, 0, 0];\n _basisFromNormal(_b2, r0, r1);\n this._fromZero = r0;\n }\n }\n }\n\n this._enabled = opts.enabled !== false;\n this._grabPx = Number.isFinite(opts.grabPx) ? opts.grabPx : 12;\n this._snap = opts.snap ?? null;\n this._hover = opts.hover === true;\n this._hovered = false;\n this._hid = null; this._hseq = -1; // the pointer last hover-tested, and its seq then\n\n // Transport state: one pointerId per gesture, its last consumed move seq\n // and its position in logical canvas px; _routed hands the down step to a router.\n this._grabbed = false;\n this._pid = null;\n this._seq = -1;\n this._ptr = [0, 0];\n this._routed = false;\n\n // The proxy: its world position and the grab radius in world units.\n this._proxyPos = [0, 0, 0];\n this._proxyRad = 0;\n\n // Cancel state — the value (and scalar, for winding) captured at grab.\n this._saved = [0, 0, 0];\n this._savedS = 0;\n\n // Hooks — user-facing, then the lib-space seams a router or a track owns.\n this.onGrab = typeof opts.onGrab === 'function' ? opts.onGrab : null;\n this.onRelease = typeof opts.onRelease === 'function' ? opts.onRelease : null;\n this.onChange = typeof opts.onChange === 'function' ? opts.onChange : null;\n this.onCancel = typeof opts.onCancel === 'function' ? opts.onCancel : null;\n this._onGrab = null; this._onRelease = null; this._onChange = null; this._onCancel = null;\n\n // Binding — a normalised { get, set } accessor; _bindVal the reused value array.\n this._binder = null;\n this._bindVal = [0, 0, 0];\n\n if (opts.bind != null) this.bind(opts.bind);\n }\n\n // ── Lifecycle ───────────────────────────────────────────────────────────\n\n /**\n * Resolve the grab and re-solve from the pointer. Call first in the frame,\n * before the orbit; a routed handle is updated by its router. Returns the\n * grabbed state so the orbit gate can short-circuit; a disabled handle\n * returns false.\n * @returns {boolean} grabbed\n */\n update() {\n if (!this._enabled) {\n if (this._pid !== null && this._pointer) this._pointer.release(this._pid);\n this._grabbed = false; this._hovered = false; this._pid = null;\n return false;\n }\n const src = this._pointer;\n if (!src) return false;\n if (this._from && !this._grabbed) this._resolveFrame();\n\n // Fresh press (unrouted): the first unclaimed press this frame is\n // hit-tested at its pixel; a hit claims the pointer, a miss leaves it.\n if (!this._routed && this._pid === null) {\n for (const pr of src.presses) {\n if (src.ownerOf(pr.id) !== null) continue;\n this._ptr[0] = pr.x; this._ptr[1] = pr.y;\n if (this._pickAt(pr.x, pr.y)) { this._adopt(pr.id, pr.x, pr.y); break; }\n }\n }\n\n if (this._pid !== null) {\n const e = src.get(this._pid);\n if (!e) {\n this._cancelNow(); // the entry left before this handle saw its end\n } else {\n if (this._grabbed && e.seq !== this._seq && !e.cancel) {\n this._seq = e.seq;\n this._ptr[0] = e.x; this._ptr[1] = e.y;\n this._solveFromPointer(e.x, e.y);\n this._applySnap();\n this._afterSolve();\n }\n if (e.cancel) {\n this._cancelNow();\n } else if (e.up) {\n src.release(this._pid);\n this._grabbed = false;\n this._pid = null;\n this.onRelease && this.onRelease(this);\n this._onRelease && this._onRelease(this);\n }\n }\n }\n\n // Hover: a lone handle tests the latest unclaimed pointer motion.\n if (this._grabbed) {\n this._hovered = true;\n } else if (this._hover && !this._routed) {\n for (const e of src.pointers.values()) {\n if (e.owner !== null) continue;\n if (e.id === this._hid && e.seq === this._hseq) continue;\n this._hid = e.id; this._hseq = e.seq;\n this._hovered = this._pickAt(e.x, e.y);\n break;\n }\n }\n return this._grabbed;\n }\n\n _beginGrab() {\n const c = this._constraint;\n c.value(this._saved, POINT);\n this._savedS = typeof c.scalar === 'function' ? c.scalar() : 0;\n this._grabbed = true;\n this.onGrab && this.onGrab(this);\n this._onGrab && this._onGrab(this);\n }\n\n /** Router seam: adopt a pointer a shared pick decided; claims it through the source. */\n _adopt(pointerId, x, y) {\n const e = this._pointer.get(pointerId);\n this._pid = pointerId;\n this._seq = e ? e.seq : -1;\n this._ptr[0] = x; this._ptr[1] = y;\n this._pointer.claim(pointerId, this);\n this._beginGrab();\n }\n\n /**\n * Revert the drag in flight to the value captured at grab (exact θ winding\n * included), restore the binding, fire onCancel. No-op when not grabbed.\n * Chainable.\n * @returns {Handle} this\n */\n cancel() {\n if (this._grabbed) this._cancelNow();\n return this;\n }\n\n _cancelNow() {\n const c = this._constraint;\n if (this._isView) {\n c.pt[0] = this._saved[0]; c.pt[1] = this._saved[1]; c.pt[2] = this._saved[2];\n } else if (c.kind === DIAL) {\n c.s = this._savedS;\n c._dialPoint();\n } else {\n c.seed(this._saved[0], this._saved[1], this._saved[2]);\n }\n if (this._binder) this._binder.set(this.value(this._bindVal));\n this._grabbed = false;\n if (this._pid !== null && this._pointer) this._pointer.release(this._pid);\n this._pid = null;\n this.onCancel && this.onCancel(this);\n this._onCancel && this._onCancel(this);\n }\n\n // ── Frame, pick, solve ──────────────────────────────────────────────────\n\n // Resolve the symbolic basis from its space into WORLD through the view\n // bag and re-aim the constraint; idle frames only.\n _resolveFrame() {\n const v = this._view, bag = _bagOf(v, this._from, null), from = _space(this._from);\n const d = this._fromDir;\n mapDirection(_b2, d[0], d[1], d[2], from, WORLD, bag, v.vp, v.ndcZMin);\n if (this._fromZero) {\n const z = this._fromZero;\n mapDirection(_b0, z[0], z[1], z[2], from, WORLD, bag, v.vp, v.ndcZMin);\n this._constraint.aim(_b2[0], _b2[1], _b2[2], _b0[0], _b0[1], _b0[2]);\n } else {\n this._constraint.aim(_b2[0], _b2[1], _b2[2]);\n }\n }\n\n // The proxy's world position and its grab radius in world units — a\n // constant grabPx canvas size at the proxy's depth.\n _proxyPrep() {\n const c = this._constraint, v = this._view, p = this._proxyPos;\n if (this._from && !this._grabbed) this._resolveFrame();\n if (c.kind === DIAL && !this._isView) {\n p[0] = c.anchor[0]; p[1] = c.anchor[1]; p[2] = c.anchor[2];\n } else {\n c.value(p, POINT);\n }\n const V = v.mat4View;\n const eyeZ = V[2]*p[0] + V[6]*p[1] + V[10]*p[2] + V[14];\n this._proxyRad = this._grabPx * pixelRatio(v.mat4Proj, -v.vp[3], eyeZ, v.ndcZMin);\n }\n\n // The analytic pick: t along the ray, or Infinity.\n _proxyT(o, d) {\n this._proxyPrep();\n const c = this._constraint;\n if (typeof c.proxy === 'function') return c.proxy(o[0], o[1], o[2], d[0], d[1], d[2], this._proxyRad);\n const p = this._proxyPos;\n return rayHitSphere(o[0], o[1], o[2], d[0], d[1], d[2], p[0], p[1], p[2], this._proxyRad);\n }\n\n /** Unproject a screen-space pixel into the ray scratch; false on a stale view. */\n _ray(x, y) {\n const v = this._view;\n if (v.stale) return false;\n return unproject(_rayO, _rayD, x, y, v, v.vp, v.ndcZMin) !== null;\n }\n\n /** Hit-test the proxy at a screen-space pixel. */\n _pickAt(x, y) {\n return this._ray(x, y) && this._proxyT(_rayO, _rayD) < Infinity;\n }\n\n _solveFromPointer(x, y) {\n if (!this._ray(x, y)) return;\n if (this._isView) this._viewUpdatePlane();\n this._constraint.solve(_rayO[0], _rayO[1], _rayO[2], _rayD[0], _rayD[1], _rayD[2]);\n }\n\n // VIEW: re-aim the plane at the camera through the current point — its\n // normal the look direction (−Z of the eye matrix), its anchor the point.\n _viewUpdatePlane() {\n const c = this._constraint, E = this._view.mat4Eye;\n c.n[0] = -E[8]; c.n[1] = -E[9]; c.n[2] = -E[10];\n _norm3(c.n);\n c.anchor[0] = c.pt[0]; c.anchor[1] = c.pt[1]; c.anchor[2] = c.pt[2];\n }\n\n // ── Snap ────────────────────────────────────────────────────────────────\n\n /** Snap step — angular (rad) for SPHERE / DIAL, a world grid for PLANE / AXIS / VIEW; null off. */\n get snap() { return this._snap; }\n set snap(v) { this._snap = v ?? null; }\n\n _applySnap() {\n const sn = this._snap;\n if (sn == null) return;\n const c = this._constraint;\n if (this._isView || c.kind === PLANE) {\n const gx = Array.isArray(sn) ? sn[0] : sn, gy = Array.isArray(sn) ? sn[1] : sn, gz = Array.isArray(sn) ? sn[2] : sn;\n _v3[0] = gx > 0 ? Math.round(c.pt[0] / gx) * gx : c.pt[0];\n _v3[1] = gy > 0 ? Math.round(c.pt[1] / gy) * gy : c.pt[1];\n _v3[2] = gz > 0 ? Math.round(c.pt[2] / gz) * gz : c.pt[2];\n if (this._isView) { c.pt[0] = _v3[0]; c.pt[1] = _v3[1]; c.pt[2] = _v3[2]; }\n else c.seed(_v3[0], _v3[1], _v3[2]);\n } else if (c.kind === AXIS || c.kind === DIAL) {\n const step = Array.isArray(sn) ? sn[0] : sn;\n if (!(step > 0)) return;\n const q = Math.round(c.s / step) * step;\n c.s = q < c.min ? c.min : (q > c.max ? c.max : q);\n if (c.kind === DIAL) c._dialPoint();\n else {\n c.pt[0] = c.anchor[0] + c.s * c.u[0];\n c.pt[1] = c.anchor[1] + c.s * c.u[1];\n c.pt[2] = c.anchor[2] + c.s * c.u[2];\n }\n } else if (c.kind === SPHERE) {\n const step = Array.isArray(sn) ? sn[0] : sn;\n if (!(step > 0)) return;\n c.azEl(_q2);\n dirFromAzEl(c.dir, Math.round(_q2[0] / step) * step, Math.round(_q2[1] / step) * step);\n }\n }\n\n // ── Value and binding ───────────────────────────────────────────────────\n\n /**\n * Write the current value into `out`. `report` overrides the constraint's\n * (POINT | DIRECTION); `to` converts from WORLD to EYE, SCREEN, NDC, or a\n * mat4 frame through the view bag. Out-first, out required.\n * @param {number[]} out 3-element destination.\n * @param {{ to?:string|ArrayLike<number>, report?:number }} [opts]\n * @returns {number[]} out\n */\n value(out, opts) {\n const o = opts || {}, c = this._constraint;\n const report = (o.report === POINT || o.report === DIRECTION) ? o.report : c.report;\n const to = o.to ?? WORLD;\n c.value(_v3, report);\n if (to === WORLD) { out[0] = _v3[0]; out[1] = _v3[1]; out[2] = _v3[2]; return out; }\n const v = this._view, bag = _bagOf(v, null, to), space = _space(to);\n return report === DIRECTION\n ? mapDirection(out, _v3[0], _v3[1], _v3[2], WORLD, space, bag, v.vp, v.ndcZMin)\n : mapLocation(out, _v3[0], _v3[1], _v3[2], WORLD, space, bag, v.vp, v.ndcZMin);\n }\n\n /**\n * Bind the handle to a target it drives while dragging: a `{ get, set }`\n * accessor, or a vec3 array mutated in place (a camera state's eye or\n * center is one). get() seeds the constraint now; each solve calls\n * set(value) with the reused value array, then fires onChange. Chainable.\n * @param {number[]|{ get:Function, set:Function }} target\n * @returns {Handle} this\n */\n bind(target) {\n let binder = null;\n if (target && typeof target.get === 'function' && typeof target.set === 'function') {\n binder = target;\n } else if (target && typeof target === 'object' && typeof target.length === 'number' && target.length >= 3) {\n binder = { get: () => target, set: (v) => { target[0] = v[0]; target[1] = v[1]; target[2] = v[2]; } };\n } else {\n console.error('[host] handle.bind: unrecognised target — pass a vec3 array or an { get, set } accessor. Leaving unbound.');\n return this;\n }\n this._binder = binder;\n if (this._from && !this._grabbed) this._resolveFrame();\n this._seedFromBinding();\n return this;\n }\n\n /** Re-seed the constraint from the bound target after it changed externally. Chainable. */\n sync() {\n if (this._binder) this._seedFromBinding();\n return this;\n }\n\n _seedFromBinding() {\n const g = this._binder.get();\n if (g == null) return;\n const x = _vx(g, 0, 0), y = _vx(g, 1, 0), z = _vx(g, 2, 0);\n if (this._isView) { const pt = this._constraint.pt; pt[0] = x; pt[1] = y; pt[2] = z; }\n else this._constraint.seed(x, y, z);\n }\n\n // Push the freshly solved value to the binding and fire onChange, once per solve.\n _afterSolve() {\n const bound = this._binder !== null;\n const notify = !!(this.onChange || this._onChange);\n if (!bound && !notify) return;\n const v = this.value(this._bindVal);\n if (bound) this._binder.set(v);\n if (notify) {\n this.onChange && this.onChange(v, this);\n this._onChange && this._onChange(v, this);\n }\n }\n\n // ── Readouts and edits ──────────────────────────────────────────────────\n\n /** AXIS: the signed distance along the rail; DIAL: the accumulated angle; NaN otherwise. */\n scalar() { return typeof this._constraint.scalar === 'function' ? this._constraint.scalar() : NaN; }\n\n /** SPHERE: [az, el] of the current direction, into out2. */\n azEl(out2) {\n const o = out2 || [0, 0];\n return typeof this._constraint.azEl === 'function' ? this._constraint.azEl(o) : o;\n }\n\n /** True between grab and release. */\n grabbed() { return this._grabbed; }\n\n /** True while the pointer rests on the proxy, and while grabbed. */\n hovered() { return this._hovered; }\n\n /**\n * Move the reference point — sphere centre, plane point, axis anchor,\n * dial centre, or a VIEW handle's point; the stored point rides along.\n * Chainable.\n * @param {number[]|{x:number,y:number,z:number}} v\n * @returns {Handle} this\n */\n anchor(v) {\n const c = this._constraint;\n const t = this._isView ? c.pt : c.anchor;\n if (!t) return this;\n t[0] = _vx(v, 0, t[0]); t[1] = _vx(v, 1, t[1]); t[2] = _vx(v, 2, t[2]);\n if (!this._isView) {\n if (c.kind === DIAL) c._dialPoint();\n else if (c.kind === AXIS) {\n c.pt[0] = c.anchor[0] + c.s * c.u[0];\n c.pt[1] = c.anchor[1] + c.s * c.u[1];\n c.pt[2] = c.anchor[2] + c.s * c.u[2];\n } else if (c.kind === PLANE) c.seed(c.pt[0], c.pt[1], c.pt[2]);\n }\n return this;\n }\n\n /** Runtime gate — false suspends grab / solve without disposing. */\n get enabled() { return this._enabled; }\n set enabled(v) {\n this._enabled = !!v;\n if (!this._enabled) {\n if (this._pid !== null && this._pointer) this._pointer.release(this._pid);\n this._grabbed = false; this._hovered = false; this._pid = null;\n }\n }\n\n /** Release the pointer claim and leave the host. */\n dispose() {\n if (this._pid !== null && this._pointer) this._pointer.release(this._pid);\n this._pid = null;\n this._grabbed = false;\n this._pointer = null;\n this._host.unregister(this);\n }\n}\n\n/**\n * Validate the constraint option: a built-in kind, VIEW, or a contract object.\n * @param {*} kind\n * @returns {boolean}\n */\nexport function validConstraint(kind) {\n return kind === SPHERE || kind === PLANE || kind === AXIS || kind === DIAL || kind === VIEW || !!isConstraint(kind);\n}\n","/**\n * @file The pointer router — shared arbitration for overlapping handles.\n * @module host/router\n * @license AGPL-3.0-only\n *\n * Per-handle self-picking double-grabs on overlap: two proxies under one\n * finger each test only themselves and both hit. The router replaces the\n * members' down step with one shared pick: the pointer's ray once, every\n * enabled member's proxy tested, the nearest t wins (a tie keeps the\n * earlier member, as draw order would). Members keep their own move /\n * solve / release machinery, grabbed through their injected _adopt; every\n * unclaimed press of the frame resolves, so several same-frame presses on\n * different members all land. Hover is the same test on unclaimed pointer\n * motion, shared, setting at most one hovered member.\n */\n\n'use strict';\n\nimport { rayScratch } from './handle.js';\n\n/** Shared pick over a set of handles on one host. */\nexport class PointerRouter {\n /**\n * @param {object} host The host context.\n * @param {object[]} handles Members.\n * @param {{ hover?:boolean }} [opts] hover defaults to true.\n */\n constructor(host, handles, opts) {\n const o = opts || {};\n this._host = host;\n this._pointer = host.pointer;\n this._handles = [];\n this._hover = o.hover !== false;\n this._hoveredH = null;\n this._hid = null; this._hseq = -1;\n for (const h of handles || []) this.add(h);\n }\n\n /**\n * Route a handle: its own pointerdown adoption is disabled and the shared\n * pick grabs it through _adopt. Chainable.\n * @param {object} h\n * @returns {PointerRouter} this\n */\n add(h) {\n if (!h || typeof h._proxyT !== 'function') {\n console.error('[host] router.add: not a handle — ignoring.');\n return this;\n }\n if (this._handles.includes(h)) return this;\n h._routed = true;\n h._onRelease = h._onCancel = () => this._unclaim(h);\n this._handles.push(h);\n return this;\n }\n\n /**\n * Un-route a handle; it self-picks again. Chainable.\n * @param {object} h\n * @returns {PointerRouter} this\n */\n remove(h) {\n const i = this._handles.indexOf(h);\n if (i < 0) return this;\n this._handles.splice(i, 1);\n this._unclaim(h);\n h._routed = false;\n h._onRelease = h._onCancel = null;\n if (this._hoveredH === h) { this._hoveredH = null; h._hovered = false; }\n return this;\n }\n\n /**\n * Resolve the frame's presses with one shared pick each, refresh hover on\n * pointer motion, then update every member. Call first in the frame, in\n * place of the members' own updates.\n * @returns {boolean} true if any member is grabbed.\n */\n update() {\n const hs = this._handles, src = this._pointer;\n if (!src) return false;\n for (const pr of src.presses) {\n if (src.ownerOf(pr.id) !== null) continue;\n const win = this._sharedPick(pr.x, pr.y);\n if (win && win._pid === null && win.enabled) win._adopt(pr.id, pr.x, pr.y);\n }\n if (this._hover) {\n for (const e of src.pointers.values()) {\n if (e.owner !== null) continue;\n if (e.id === this._hid && e.seq === this._hseq) continue;\n this._hid = e.id; this._hseq = e.seq;\n const win = this._sharedPick(e.x, e.y);\n this._hoveredH = win;\n for (const h of hs) h._hovered = (h === win) || h._grabbed;\n break;\n }\n }\n let g = false;\n for (const h of hs) g = h.update() || g;\n return g;\n }\n\n // One ray, every enabled member's proxy, the nearest t.\n _sharedPick(x, y) {\n const hs = this._handles;\n const first = hs.find((h) => h.enabled);\n if (!first || !first._ray(x, y)) return null;\n let win = null, best = Infinity;\n for (const h of hs) {\n if (!h.enabled) continue;\n const t = h._proxyT(rayScratch.o, rayScratch.d);\n if (t < best) { best = t; win = h; }\n }\n return win;\n }\n\n _unclaim(h) {\n const src = this._pointer;\n if (!src) return;\n for (const e of src.pointers.values()) if (e.owner === h) src.release(e.id);\n }\n\n /** The member under the pointer, or null. */\n hovered() { return this._hoveredH; }\n\n /** Un-route every member and leave the host. */\n dispose() {\n for (const h of [...this._handles]) this.remove(h);\n this._pointer = null;\n this._host.unregister(this);\n }\n}\n","/**\n * @file Helm factories — a core PoseHelm driven from the host's players.\n * @module host/helm\n * @license AGPL-3.0-only\n *\n * cameraHelm(host, cam, opts) flies a camera state body-relative: the helm is\n * seeded from the state through cameraToPose, integrates each tick in the\n * state's own eye matrix (which equals the pose written last tick, so a\n * forward push flies forward) and writes back through cameraFromPose at the\n * state's gaze distance. poseHelm(host, opts) produces a pose in a declared\n * frame — WORLD, EYE (the host's view bag), SELF (its own pose) or a mat4 —\n * and drives whatever bind() names: a camera state, an { applyPose } sink, a\n * { get, set } accessor or a { pos, rot } object. Both register a player\n * with the host until disposed.\n */\n\n'use strict';\n\nimport {\n PoseHelm, cameraEye, cameraFromPose, cameraToPose, qToMat4, WORLD, EYE, SELF,\n} from '@nakednous/tree';\n\nconst _pose = { pos: [0, 0, 0], rot: [0, 0, 0, 1] }; // step() output\nconst _self = { pos: [0, 0, 0], rot: [0, 0, 0, 1] }; // eval() readout for SELF\nconst _em = new Float32Array(16); // the resolved basis\n\nconst _rawMat4 = (m) => (m != null && m.mat4 != null) ? m.mat4 : m;\nconst _isCameraState = (c) => !!(c && c.eye && c.center && c.up);\n\nfunction _applyOpts(helm, opts) {\n if (!opts) return;\n if (opts.profile) helm.profile = opts.profile;\n if (opts.deadzone != null) helm.deadzone = opts.deadzone;\n if (opts.filter != null) helm.filter = opts.filter;\n if (opts.fullScale != null) helm.fullScale = opts.fullScale;\n}\n\n/**\n * The basis a pose helm's `from` resolves to: null for WORLD, the view bag's\n * eye matrix for EYE, the helm's own rotation for SELF, a mat4 as given.\n * Exported for a bridge's rig gizmo.\n * @param {PoseHelm} helm\n * @param {object} view The host's view bag.\n * @param {Float32Array} em 16-element scratch.\n * @returns {ArrayLike<number>|null}\n */\nexport function helmBasis(helm, view, em) {\n const from = helm.from;\n if (from != null && typeof from !== 'string') return _rawMat4(from);\n if (from === EYE) return view ? view.mat4Eye : null;\n if (from === SELF) return qToMat4(em, helm.eval(_self).rot);\n if (from === WORLD || from == null) return null;\n console.error('[host] poseHelm: `from` must be EYE, WORLD, SELF, or a mat4 frame. Falling back to WORLD.');\n return null;\n}\n\n/**\n * Fly a camera state from a live 6-DOF rate stream, body-relative.\n * @param {object} host\n * @param {object} cam A camera state ({ eye, center, up, … }).\n * @param {{ profile?:object, deadzone?:number, filter?:object, fullScale?:number }} [opts]\n * @returns {PoseHelm} The helm, with dispose().\n */\nexport function cameraHelm(host, cam, opts) {\n const helm = new PoseHelm();\n _applyOpts(helm, opts);\n if (opts && opts.from != null) {\n console.error('[host] cameraHelm: a camera helm is always body-fly and has no `from`. Ignoring it; bind the camera to a poseHelm for view- or world-relative motion.');\n }\n if (_isCameraState(cam)) helm.home(cameraToPose(_pose, cam));\n const player = {\n tick(dt) {\n helm.step(_pose, dt, _isCameraState(cam) ? cameraEye(_em, cam) : null);\n if (_isCameraState(cam)) {\n cameraFromPose(cam, _pose);\n if (helm._onApply) helm._onApply(cam);\n }\n return true;\n },\n };\n helm._onApply = null; // lib-space seam: a bridge pushes the written state to its camera\n host.players.add(player);\n helm.dispose = () => { host.players.remove(player); host.unregister(helm); return helm; };\n return host.register(helm);\n}\n\n/**\n * Integrate a live 6-DOF rate stream into a pose in a declared frame and\n * drive a bound target with it.\n * @param {object} host\n * @param {{ profile?:object, deadzone?:number, filter?:object, fullScale?:number,\n * from?:string|ArrayLike<number>, bind?:object }} [opts]\n * @returns {PoseHelm} The helm, with bind() and dispose().\n */\nexport function poseHelm(host, opts) {\n const o = opts || {};\n const helm = new PoseHelm();\n _applyOpts(helm, o);\n if (o.from != null) helm.from = o.from;\n let sink = null;\n\n const player = {\n tick(dt) {\n if (sink) {\n helm.step(_pose, dt, helmBasis(helm, host.view, _em));\n sink(_pose);\n }\n return true;\n },\n };\n host.players.add(player);\n\n /**\n * Bind the target the helm drives: a camera state (seeded from it, written\n * through cameraFromPose), an { applyPose } sink, a { get, set } accessor\n * (get() seeds, set(pose) writes) or a { pos, rot } object mutated in\n * place. Chainable.\n * @param {object} target\n * @returns {PoseHelm} this\n */\n helm.bind = (target) => {\n if (_isCameraState(target)) {\n helm.home(cameraToPose(_pose, target));\n sink = (pose) => cameraFromPose(target, pose);\n } else if (target && typeof target.get === 'function' && typeof target.set === 'function') {\n helm.home(target.get());\n sink = (pose) => target.set(pose);\n } else if (target && typeof target.applyPose === 'function') {\n sink = (pose) => target.applyPose(pose);\n } else if (target && target.pos && target.rot) {\n helm.home(target);\n sink = (pose) => {\n target.pos[0] = pose.pos[0]; target.pos[1] = pose.pos[1]; target.pos[2] = pose.pos[2];\n target.rot[0] = pose.rot[0]; target.rot[1] = pose.rot[1];\n target.rot[2] = pose.rot[2]; target.rot[3] = pose.rot[3];\n };\n } else {\n console.error('[host] poseHelm: bind() target must be a camera state, an { applyPose } sink, a { get, set } accessor, or a { pos, rot } object. Leaving unbound.');\n }\n return helm;\n };\n helm.dispose = () => { host.players.remove(player); host.unregister(helm); return helm; };\n if (o.bind != null) helm.bind(o.bind);\n return host.register(helm);\n}\n","/**\n * @file Track factories and TrackHandles — core tracks wired to the host's players.\n * @module host/track\n * @license AGPL-3.0-only\n *\n * poseTrack(host, opts) is a core PoseTrack whose activation hooks add and\n * remove its player. cameraTrack(host, cam, opts) is a core CameraTrack whose\n * player evaluates straight into the camera state `cam` — the state is the\n * keyframe shape, so track.eval(cam) is the write — while the track plays, and\n * once more on deactivate so the camera rests on the path. That bound is the\n * point: a stopped track's camera belongs to whoever else drives it — the\n * reader's orbit, the figure's own camera code — so a consumer that renders\n * from the state derives it instead, one evaluation per frame after the tick\n * that advances the transport, which carries a seek, a dragged keyframe and a\n * capture into the state as well and repeats the player's write harmlessly\n * while the track plays. add() with no argument\n * captures `cam`, add({ camera }) any camera-state object. { handles } on\n * either decorates the track with TrackHandles: one VIEW handle per\n * draggable keyframe field (pos / eye / center), an optional rot DIAL per\n * keyframe about a declared axis, all on one router.\n *\n * add(depth) — the transport panel's + button, which passes its depth slider\n * (ui's contract) — authors a keyframe where the camera is looking: on a pose\n * track the pose lands at the centre of the installed camera's frustum at\n * that depth, aimed along the camera's own eye frame; on a camera track the\n * camera state is captured, the depth having nothing to place. A panel whose\n * depth row is hidden passes no depth, which reads the panel's default, 0.5.\n * The frame is the host's view bag — the matrices the last setCamera\n * installed — so the placement is the same on every bridge and needs no\n * renderer here. remove() is the panel's −: no argument retracts the last\n * keyframe, one per call, an index staying the core track's own remove.\n */\n\n'use strict';\n\nimport { PoseTrack, CameraTrack, qFromAxisAngle, DIAL, mapLocation, NDC, WORLD } from '@nakednous/tree';\nimport { VIEW } from './handle.js';\n\n// ── Placement — the + button's depth ───────────────────────────────────────\n//\n// The transport panel hands add() a depth in [0, 1] and expects a keyframe in\n// front of the camera. Writer-free placement: unproject the frustum's centre\n// through the view bag's P · V inverse and aim the pose along the bag's eye\n// frame (E = V⁻¹, its columns right / up / back). The depth is NDC-linear, as\n// the p5 transport's was — 0 the near plane's centre, 1 the far plane's — so\n// every bridge's own ndcZMin maps it without the caller knowing the API.\n\nconst _at = [0, 0, 0]; // the unprojected frustum centre\nconst _dir = [0, 0, 0]; // the camera's forward\nconst _up = [0, 0, 0]; // the camera's up\n\n/**\n * Append a pose at the centre of the installed camera's frustum, `depth` of\n * the way from the near plane to the far one.\n *\n * @param {object} host\n * @param {function} add The track's core add, already bound.\n * @param {number} [depth] NDC-linear depth in [0, 1]; clamped, absent or NaN\n * reads the panel's own default, 0.5.\n * @returns {boolean} false when no camera is installed (a stale view bag).\n */\nfunction _addInFront(host, add, depth) {\n const view = host.view;\n if (!view || view.stale) return false;\n const d = Number.isFinite(depth) ? (depth < 0 ? 0 : depth > 1 ? 1 : depth) : 0.5;\n const ndcZ = view.ndcZMin + d * (1 - view.ndcZMin);\n mapLocation(_at, 0, 0, ndcZ, NDC, WORLD, view, view.vp, view.ndcZMin);\n const e = view.mat4Eye; // columns: right · up · back · eye\n _dir[0] = -e[8]; _dir[1] = -e[9]; _dir[2] = -e[10];\n _up[0] = e[4]; _up[1] = e[5]; _up[2] = e[6];\n add({ pos: [_at[0], _at[1], _at[2]], rot: { dir: _dir, up: _up } }, { deduplicate: false });\n return true;\n}\n\n// ── Players ────────────────────────────────────────────────────────────────\n\n// remove(): the panel's −, retracting the last authored keyframe — one per\n// click, either kind of track. An index stays the core track's own remove, so\n// a caller editing by index is unaffected; an empty track removes nothing.\nfunction _wireRemove(track) {\n const coreRemove = track.remove.bind(track);\n track.remove = function (index) {\n return coreRemove(index == null ? track.keyframes.length - 1 : index);\n };\n return track;\n}\n\nfunction _wirePoseTrack(host, track) {\n let player = null;\n track._onActivate = () => {\n player = player || { tick() { track.tick(); return track.playing; } };\n host.players.add(player);\n };\n track._onDeactivate = () => { if (player) host.players.remove(player); };\n}\n\n/**\n * A core PoseTrack ticked by the host while it plays.\n * @param {object} host\n * @param {{ handles?:boolean|object }} [opts]\n * @returns {PoseTrack}\n */\nexport function poseTrack(host, opts) {\n const o = opts || {};\n const track = new PoseTrack();\n _wirePoseTrack(host, track);\n\n // add(depth): the transport's + (see the module header). A spec, or an array\n // of specs, is the core track's own; no argument — the panel with its depth\n // row hidden — places at the panel's default depth, 0.5.\n const coreAdd = track.add.bind(track);\n let warned = false;\n track.add = function (spec, addOpts) {\n if (spec != null && typeof spec !== 'number') return coreAdd(spec, addOpts);\n if (!_addInFront(host, coreAdd, spec) && !warned) {\n warned = true;\n console.warn('[host] poseTrack: add(depth) places a pose against the installed camera, and the view bag is stale — no keyframe added. Call the bridge\\'s setCamera first.');\n }\n };\n\n if (o.handles) track.handles = new TrackHandles(host, track, o.handles, false);\n return _wireRemove(track);\n}\n\n/**\n * A core CameraTrack evaluating into the camera state `cam` while it plays, and\n * once when it stops, so the camera rests on the path.\n *\n * The write is bounded by playback on purpose: while a track is stopped the\n * camera it names belongs to whoever else drives it — the reader's orbit, the\n * figure's own camera code — and a factory writing every frame would fight\n * them. A consumer that renders *from* the state therefore derives it: evaluate\n * the track once per frame, after the tick that advances the transport. A seek,\n * a dragged keyframe and a capture reach the state that way too, and the\n * evaluation repeats the player's own write harmlessly while the track plays.\n *\n * @param {object} host\n * @param {object} cam A camera state ({ eye, center, up, fov, halfHeight, near, far }).\n * @param {{ handles?:boolean|object }} [opts]\n * @returns {CameraTrack}\n */\nexport function cameraTrack(host, cam, opts) {\n const o = opts || {};\n const track = new CameraTrack();\n const state = cam || null; // the evaluation target; track.camera is informational\n track.camera = state;\n track._onApply = null; // lib-space seam: a bridge pushes the evaluated state to its camera\n\n const coreAdd = track.add.bind(track);\n track.add = function (spec, addOpts) {\n // No spec, or the transport panel's depth: a camera keyframe *is* the\n // camera, so there is nothing a placement depth could move — capture.\n if (spec == null || typeof spec === 'number') {\n if (!state) return;\n spec = state;\n } else if (Array.isArray(spec)) {\n for (const s of spec) track.add(s, addOpts);\n return;\n } else if (spec.camera != null) {\n spec = spec.camera;\n }\n coreAdd(spec, addOpts);\n };\n\n const apply = () => {\n if (!state || track.keyframes.length === 0) return;\n track.eval(state);\n if (track._onApply) track._onApply(state);\n };\n const player = {\n tick() {\n if (!track.playing) return false;\n track.tick();\n apply();\n return track.playing;\n },\n };\n track._onActivate = () => host.players.add(player);\n track._onDeactivate = () => { host.players.remove(player); apply(); };\n\n if (o.handles) track.handles = new TrackHandles(host, track, o.handles, true);\n return _wireRemove(track);\n}\n\n// ── TrackHandles ───────────────────────────────────────────────────────────\n\nconst _vx = (v, i) => (v[i] !== undefined ? v[i] : (i === 0 ? v.x : i === 1 ? v.y : v.z));\n\n/**\n * Per-keyframe manipulators of a track — the factories' `handles` opt,\n * stored at track.handles. Members are internal handles on one router;\n * their hooks are re-exposed with keyframe coordinates: onGrab(index, field,\n * h) / onChange(value, index, field, h) / onRelease / onCancel, field one of\n * 'pos' | 'eye' | 'center' | 'rot'. update() rebuilds the members when the\n * keyframe count changes and re-seeds every idle member from its keyframe.\n * A bridge draws the members itself (`members`).\n */\nexport class TrackHandles {\n /**\n * @param {object} host\n * @param {object} track PoseTrack | CameraTrack.\n * @param {true|object} opts `true` for the defaults, or\n * { center?, rot?, rotRadius?, rotSnap?, grabPx?, snap?, hover? }.\n * @param {boolean} isCamera CameraTrack (eye / center) vs PoseTrack (pos / rot).\n */\n constructor(host, track, opts, isCamera) {\n const o = opts === true ? {} : (opts || {});\n this._host = host;\n this._track = track;\n this._isCamera = !!isCamera;\n this._members = [];\n this._rotByIndex = new Map();\n this._n = -1;\n this._enabled = true;\n /** Last-grabbed keyframe index, null until a grab. @type {number|null} */\n this.selected = null;\n\n this._grabPx = Number.isFinite(o.grabPx) ? o.grabPx : 12;\n this._snap = o.snap ?? null;\n this._rotSnap = o.rotSnap ?? null;\n this._center = this._isCamera ? (o.center !== false) : false;\n if (!this._isCamera && o.center !== undefined) console.error('[host] track handles: `center` is CameraTrack-only — ignoring.');\n this._rotAxis = null;\n this._rotRadius = Number.isFinite(o.rotRadius) ? o.rotRadius : 40;\n if (o.rot != null) {\n if (this._isCamera) {\n console.error('[host] track handles: `rot` is PoseTrack-only — a camera keyframe\\'s orientation is its center; drag that instead. Ignoring.');\n } else {\n const ax = _vx(o.rot, 0) ?? 0, ay = _vx(o.rot, 1) ?? 1, az = _vx(o.rot, 2) ?? 0;\n const l = Math.hypot(ax, ay, az) || 1;\n this._rotAxis = [ax / l, ay / l, az / l];\n }\n }\n\n this.onGrab = null; this.onChange = null; this.onRelease = null; this.onCancel = null;\n this._hover = o.hover !== false;\n this._router = null; // made on the first rebuild, once a subclass is constructed\n }\n\n // The construction seams a bridge subclass overrides so the members are\n // handles it can draw.\n _makeHandle(opts) { return this._host.handle(opts); }\n _makeRouter(opts) { return this._host.router([], opts); }\n\n /** The members, { h, index, field } each, for a bridge's draw. */\n get members() { return this._members; }\n /** Dot radius in pixels, the members' grabPx. */\n get grabPx() { return this._grabPx; }\n\n /**\n * Rebuild if the keyframe count changed, re-seed idle members, then route.\n * Call first in the frame, before the orbit.\n * @returns {boolean} true while any member is grabbed.\n */\n update() {\n if (this._track.keyframes.length !== this._n) this._rebuild();\n if (this._enabled) this._syncIdle();\n return this._router.update();\n }\n\n /** The members' router, made on the first update(). */\n get router() { return this._router; }\n\n /** Runtime gate — false suspends grab / solve and empties the pick. */\n get enabled() { return this._enabled; }\n set enabled(v) {\n this._enabled = !!v;\n for (const m of this._members) m.h.enabled = this._enabled;\n }\n\n /** True while any member is grabbed. */\n grabbed() {\n for (const m of this._members) if (m.h.grabbed()) return true;\n return false;\n }\n\n /** The keyframe index under the pointer (or grabbed), else null. */\n hovered() {\n for (const m of this._members) if (m.h.hovered()) return m.index;\n return null;\n }\n\n /** Re-seed every idle member from its keyframe. Chainable. */\n sync() { this._syncIdle(); return this; }\n\n /** Dispose the members and the router, detach from the track. */\n dispose() {\n this._teardown();\n if (this._router) this._router.dispose();\n if (this._track.handles === this) this._track.handles = null;\n }\n\n _rebuild() {\n if (!this._router) this._router = this._makeRouter({ hover: this._hover });\n this._teardown();\n const n = this._track.keyframes.length;\n this._n = n;\n for (let i = 0; i < n; i++) {\n this._addViewMember(i, this._isCamera ? 'eye' : 'pos');\n if (this._center) this._addViewMember(i, 'center');\n if (this._rotAxis) this._addRotMember(i);\n }\n if (this.selected != null && this.selected >= n) this.selected = null;\n }\n\n _teardown() {\n for (const m of this._members) { this._router.remove(m.h); m.h.dispose(); }\n this._members.length = 0;\n this._rotByIndex.clear();\n }\n\n // A VIEW member bound to kf[field] by index, so set(i, spec) replacing the\n // keyframe never strands it.\n _addViewMember(index, field) {\n const track = this._track;\n const h = this._makeHandle({\n constraint: VIEW, grabPx: this._grabPx, snap: this._snap,\n bind: {\n get: () => track.keyframes[index] ? track.keyframes[index][field] : null,\n set: (v) => {\n const k = track.keyframes[index];\n if (!k) return;\n const a = k[field];\n a[0] = _vx(v, 0); a[1] = _vx(v, 1); a[2] = _vx(v, 2);\n },\n },\n });\n if (!h) return;\n this._wire(h, index, field);\n this._members.push({ h, index, field });\n this._router.add(h);\n }\n\n // A rot member: one DIAL about the declared axis at the keyframe's\n // position, unbound — θ lands in kf.rot through the hooks.\n _addRotMember(index) {\n const kf = this._track.keyframes[index];\n const h = this._makeHandle({\n constraint: DIAL, anchor: [kf.pos[0], kf.pos[1], kf.pos[2]],\n axis: this._rotAxis, radius: this._rotRadius, grabPx: this._grabPx, snap: this._rotSnap,\n });\n if (!h) return;\n this._wire(h, index, 'rot');\n const m = { h, index, field: 'rot' };\n this._members.push(m);\n this._rotByIndex.set(index, m);\n this._router.add(h);\n this._syncRot(m);\n }\n\n _wire(h, index, field) {\n const rotWrite = () => {\n const k = this._track.keyframes[index];\n if (k) { const u = this._rotAxis; qFromAxisAngle(k.rot, u[0], u[1], u[2], h.scalar()); }\n };\n h.onGrab = () => {\n this.selected = index;\n if (this.onGrab) this.onGrab(index, field, h);\n };\n h.onChange = (v) => {\n if (field === 'rot') rotWrite();\n else if (field === 'pos') {\n // Forward the dragged position into the keyframe's rot ring now, so\n // the ring never trails the dot by a frame.\n const rm = this._rotByIndex.get(index);\n const k = this._track.keyframes[index];\n if (rm && k) rm.h.anchor(k.pos);\n }\n if (this.onChange) this.onChange(v, index, field, h);\n };\n h.onRelease = () => { if (this.onRelease) this.onRelease(index, field, h); };\n h.onCancel = () => {\n if (field === 'rot') rotWrite(); // a DIAL is unbound: re-derive from the reverted θ\n if (this.onCancel) this.onCancel(index, field, h);\n };\n }\n\n _syncIdle() {\n for (const m of this._members) {\n if (m.h.grabbed()) continue;\n if (m.field === 'rot') this._syncRot(m);\n else m.h.sync();\n }\n }\n\n // Anchor the ring at the live keyframe position and set θ to the twist of\n // kf.rot about the axis: θ = 2·atan2(q.xyz · u, q.w).\n _syncRot(m) {\n const k = this._track.keyframes[m.index];\n if (!k) return;\n m.h.anchor(k.pos);\n const u = this._rotAxis;\n const th = 2 * Math.atan2(k.rot[0] * u[0] + k.rot[1] * u[1] + k.rot[2] * u[2], k.rot[3]);\n const c = m.h._constraint;\n if (c.s !== th) { c.s = th; c._dialPoint(); }\n }\n}\n","/**\n * @file Device streams — WebHID and Gamepad rate sources that feed a helm.\n * @module host/stream\n * @license AGPL-3.0-only\n *\n * The measure-by-subscription transports. Each yields lin[3] / ang[3] in raw\n * device units and, once bind(helm) ran, calls helm.feed(lin, ang) every\n * tick of the host's players — the helm's profile does all scaling, so a\n * stream carries no configuration beyond identification and decoding.\n *\n * hid — WebHID. connect() must run from a user gesture; reports land\n * out of band into the stream's buffers and the frame reads the\n * latest (last-write-wins). Permissions-Policy gates\n * requestDevice to top-level documents: a stream in an iframe\n * without allow=\"hid\" reports available === false and never\n * prompts.\n * gamepad — the Gamepad API, polled once per tick from\n * navigator.getGamepads(); an absent axis reads exactly 0.\n *\n * Both expose available and connected for a UI to reflect, and bind(helm),\n * unbind(), dispose().\n */\n\n'use strict';\n\nconst _nav = () => (typeof navigator !== 'undefined' ? navigator : null);\n\n/** The 3Dconnexion vendor ids: the SpaceNavigator and its successors. */\nexport const HID_FILTERS = [{ vendorId: 0x046d }, { vendorId: 0x256f }];\n\n/**\n * The SpaceNavigator decode: report 1 carries translation, report 2\n * rotation, each three int16 little-endian lanes; a firmware that packs all\n * six lanes into one report fills both halves from it.\n * @param {DataView} report The report's data (the id byte excluded).\n * @param {number} reportId\n * @param {number[]} lin Translation lanes, written.\n * @param {number[]} ang Rotation lanes, written.\n */\nexport function decodeSpaceNavigator(report, reportId, lin, ang) {\n if (report.byteLength >= 12) {\n for (let i = 0; i < 3; i++) { lin[i] = report.getInt16(2 * i, true); ang[i] = report.getInt16(6 + 2 * i, true); }\n return;\n }\n if (report.byteLength < 6) return;\n const t = reportId === 1 ? lin : reportId === 2 ? ang : null;\n if (!t) return;\n for (let i = 0; i < 3; i++) t[i] = report.getInt16(2 * i, true);\n}\n\n/** Whether WebHID's requestDevice is allowed in this document. */\nfunction _hidAllowed() {\n if (typeof document !== 'undefined' && document.featurePolicy && typeof document.featurePolicy.allowsFeature === 'function') {\n return document.featurePolicy.allowsFeature('hid');\n }\n if (typeof window !== 'undefined' && 'top' in window) return window.top === window.self;\n return true;\n}\n\nfunction _stream(host, lin, ang) {\n let helm = null;\n const s = {\n /** The latest translation lanes, raw device units. */\n lin,\n /** The latest rotation lanes, raw device units. */\n ang,\n /** The bound helm, or null. */\n get helm() { return helm; },\n /**\n * Feed a helm every tick. Chainable.\n * @param {object} target A PoseHelm (anything with feed(lin, ang)).\n * @returns {object} this\n */\n bind(target) {\n if (!target || typeof target.feed !== 'function') {\n console.error('[host] stream: bind() target must have feed(lin, ang). Leaving unbound.');\n return s;\n }\n helm = target;\n return s;\n },\n /** Stop feeding; the helm sees its last rate until it is fed again. */\n unbind() { helm = null; return s; },\n };\n const feed = () => { if (helm) helm.feed(lin, ang); };\n return { s, feed };\n}\n\n/**\n * A WebHID rate stream.\n *\n * @param {object} host\n * @param {{ filters?:object[], decode?:function, bind?:object, resume?:boolean,\n * hid?:object }} [opts]\n * filters: the requestDevice filters (default HID_FILTERS). decode:\n * decode(report, reportId, lin, ang) (default decodeSpaceNavigator).\n * bind: a helm to bind at once. resume (default true): attach a device\n * this origin was already granted, without a prompt. hid: the WebHID\n * interface (default navigator.hid) — the seam a test fills.\n * @returns {object} The stream: { available, connected, device, lin, ang,\n * connect(), bind(helm), unbind(), dispose() }.\n */\nexport function createHid(host, opts) {\n const o = opts || {};\n const hid = o.hid || (_nav() && _nav().hid) || null;\n const filters = o.filters || HID_FILTERS;\n const decode = typeof o.decode === 'function' ? o.decode : decodeSpaceNavigator;\n const lin = [0, 0, 0], ang = [0, 0, 0];\n const { s, feed } = _stream(host, lin, ang);\n let device = null;\n\n const onReport = (e) => decode(e.data, e.reportId, lin, ang);\n const onDisconnect = (e) => { if (device && e.device === device) detach(); };\n const matches = (d) => filters.length === 0 || filters.some((f) =>\n (f.vendorId == null || f.vendorId === d.vendorId) && (f.productId == null || f.productId === d.productId));\n\n function detach() {\n if (!device) return;\n device.removeEventListener('inputreport', onReport);\n if (device.opened && typeof device.close === 'function') device.close().catch(() => {});\n device = null;\n s.connected = false;\n lin[0] = lin[1] = lin[2] = ang[0] = ang[1] = ang[2] = 0;\n }\n\n async function attach(d) {\n detach();\n try { if (!d.opened) await d.open(); }\n catch (e) { console.error('[host] hid: open() failed: ' + e.message + '.'); return false; }\n device = d;\n d.addEventListener('inputreport', onReport);\n s.connected = true;\n return true;\n }\n\n Object.assign(s, {\n /** Whether WebHID exists and requestDevice is allowed here. */\n available: !!(hid && typeof hid.requestDevice === 'function') && _hidAllowed(),\n /** Whether a device is open and reporting. */\n connected: false,\n\n /**\n * Prompt for a device (a user gesture is required) and attach the choice.\n * @returns {Promise<boolean>} attached\n */\n async connect() {\n if (!s.available) { console.error('[host] hid: WebHID is unavailable here (a top-level Chromium document over https or localhost).'); return false; }\n let devices;\n try { devices = await hid.requestDevice({ filters }); }\n catch (e) { console.error('[host] hid: requestDevice rejected: ' + e.message + '.'); return false; }\n if (!devices || !devices.length) return false;\n return attach(devices[0]);\n },\n\n /**\n * Attach a device this origin was already granted, without a prompt.\n * @returns {Promise<boolean>} attached\n */\n async resume() {\n if (!hid || typeof hid.getDevices !== 'function') return false;\n let devices;\n try { devices = await hid.getDevices(); } catch (_) { return false; }\n const d = (devices || []).find(matches);\n return d ? attach(d) : false;\n },\n\n /** Close the device, remove every listener, unregister from the host. */\n dispose() {\n detach();\n if (hid && typeof hid.removeEventListener === 'function') hid.removeEventListener('disconnect', onDisconnect);\n host.players.remove(player);\n host.unregister(s);\n return s;\n },\n });\n\n /** The open HIDDevice, or null. */\n Object.defineProperty(s, 'device', { get: () => device, enumerable: true });\n\n const player = { tick() { feed(); return true; } };\n host.players.add(player);\n if (hid && typeof hid.addEventListener === 'function') hid.addEventListener('disconnect', onDisconnect);\n if (o.bind) s.bind(o.bind);\n if (s.available && o.resume !== false) s.resume();\n return host.register(s);\n}\n\n/**\n * The default gamepad map, the standard layout: left stick → lin[0] / lin[1],\n * right stick → ang[1] / ang[0], the triggers → lin[2] (right minus left).\n */\nexport const GAMEPAD_MAP = { lin: [0, 1, { buttons: [6, 7] }], ang: [3, 2, null] };\n\nfunction _lane(gp, spec) {\n if (spec == null) return 0;\n if (typeof spec === 'number') { const v = gp.axes[spec]; return typeof v === 'number' ? v : 0; }\n if (spec.buttons) {\n const n = gp.buttons[spec.buttons[0]], p = gp.buttons[spec.buttons[1]];\n return (p ? p.value : 0) - (n ? n.value : 0);\n }\n if (spec.button) { const b = gp.buttons[spec.button]; return b ? b.value : 0; }\n return 0;\n}\n\n/**\n * A Gamepad rate stream, polled once per tick.\n *\n * @param {object} host\n * @param {{ index?:number, map?:object, bind?:object, gamepads?:function }} [opts]\n * index: which gamepad (default: the first connected). map: { lin,\n * ang }, each three lane specs — an axis index, { buttons: [neg,\n * pos] }, { button } or null (default GAMEPAD_MAP). bind: a helm to\n * bind at once. gamepads: the poll (default navigator.getGamepads) —\n * the seam a test fills.\n * @returns {object} The stream: { available, connected, index, lin, ang,\n * bind(helm), unbind(), dispose() }.\n */\nexport function createGamepad(host, opts) {\n const o = opts || {};\n const nav = _nav();\n const poll = o.gamepads || (nav && typeof nav.getGamepads === 'function' ? () => nav.getGamepads() : null);\n const map = o.map || GAMEPAD_MAP;\n const lin = [0, 0, 0], ang = [0, 0, 0];\n const { s, feed } = _stream(host, lin, ang);\n\n Object.assign(s, {\n /** Whether the Gamepad API exists. */\n available: !!poll,\n /** Whether the last poll found a gamepad. */\n connected: false,\n /** The gamepad index polled, or null for the first connected. */\n index: o.index ?? null,\n /** Stop polling, unregister from the host. */\n dispose() { host.players.remove(player); host.unregister(s); return s; },\n });\n\n const player = {\n tick() {\n let gp = null;\n if (poll) {\n const list = poll() || [];\n if (s.index != null) gp = list[s.index] || null;\n else for (let i = 0; i < list.length; i++) if (list[i]) { gp = list[i]; break; }\n }\n s.connected = !!gp;\n for (let i = 0; i < 3; i++) {\n lin[i] = gp ? _lane(gp, map.lin[i]) : 0;\n ang[i] = gp ? _lane(gp, map.ang[i]) : 0;\n }\n feed();\n return true;\n },\n };\n host.players.add(player);\n if (o.bind) s.bind(o.bind);\n return host.register(s);\n}\n","/**\n * @file OBJ text → the arrays shape a bridge's buffer upload takes.\n * @module host/obj\n * @license AGPL-3.0-only\n *\n * Positions, texture coordinates and normals. Faces are fan-triangulated — a\n * quad as 0 1 2 · 2 3 0 — and each distinct position / uv / normal triple\n * becomes one vertex, in order of first use. Indices are 1-based, or negative\n * counting back from the last declared element. Groups, objects, smoothing and\n * materials are ignored.\n */\n\n'use strict';\n\nconst _index = (s, count) => {\n const i = parseInt(s, 10);\n return i < 0 ? count + i : i - 1;\n};\n\n/**\n * Parse OBJ text into `{ position, normal?, texcoord?, indices }`; normal and\n * texcoord only when some face vertex names one.\n * @param {string} text\n * @returns {{ position:{numComponents:number,data:Float32Array},\n * normal?:{numComponents:number,data:Float32Array},\n * texcoord?:{numComponents:number,data:Float32Array},\n * indices:{numComponents:number,data:Uint32Array} }}\n */\nexport function parseObj(text) {\n const v = [], vt = [], vn = [];\n const position = [], texcoord = [], normal = [], indices = [];\n const seen = new Map();\n let uvs = false, normals = false;\n\n const vertex = (token) => {\n const [ps, ts, ns] = token.split('/');\n const p = _index(ps, v.length / 3);\n const t = ts ? _index(ts, vt.length / 2) : -1;\n const n = ns ? _index(ns, vn.length / 3) : -1;\n const key = p + '/' + t + '/' + n;\n let id = seen.get(key);\n if (id !== undefined) return id;\n position.push(v[3 * p], v[3 * p + 1], v[3 * p + 2]);\n if (t >= 0) { texcoord.push(vt[2 * t], vt[2 * t + 1]); uvs = true; } else texcoord.push(0, 0);\n if (n >= 0) { normal.push(vn[3 * n], vn[3 * n + 1], vn[3 * n + 2]); normals = true; } else normal.push(0, 0, 0);\n id = position.length / 3 - 1;\n seen.set(key, id);\n return id;\n };\n\n for (const raw of text.split('\\n')) {\n const line = raw.trim();\n if (!line || line[0] === '#') continue;\n const parts = line.split(/\\s+/);\n switch (parts[0]) {\n case 'v': v.push(+parts[1], +parts[2], +parts[3]); break;\n case 'vt': vt.push(+parts[1], +(parts[2] ?? 0)); break;\n case 'vn': vn.push(+parts[1], +parts[2], +parts[3]); break;\n case 'f': {\n const ids = parts.slice(1).map(vertex);\n if (ids.length === 4) indices.push(ids[0], ids[1], ids[2], ids[2], ids[3], ids[0]);\n else for (let i = 1; i + 1 < ids.length; i++) indices.push(ids[0], ids[i], ids[i + 1]);\n break;\n }\n }\n }\n\n const out = {\n position: { numComponents: 3, data: new Float32Array(position) },\n indices: { numComponents: 3, data: new Uint32Array(indices) },\n };\n if (normals) out.normal = { numComponents: 3, data: new Float32Array(normal) };\n if (uvs) out.texcoord = { numComponents: 2, data: new Float32Array(texcoord) };\n return out;\n}\n","/**\n * @file glTF 2.0 → meshes in the arrays shape, the node hierarchy, skins and animation clips.\n * @module host/gltf\n * @license AGPL-3.0-only\n *\n * The format is glTF 2.0 (Khronos Group): a JSON document plus binary buffers,\n * or both in one GLB container. parseGlb splits a container; parseGltf reads\n * the document over its buffers into what a bridge uploads and what tree's\n * skin functions (clipSample, poseWorld, jointPalette) take as they are.\n *\n * Read: triangle primitives (POSITION, NORMAL, TANGENT, TEXCOORD_0, JOINTS_0,\n * WEIGHTS_0, indices), morph targets (POSITION and NORMAL deltas), the\n * material's base colour factor, nodes, skins, animations. Normalised integer\n * accessors arrive as floats; interleaved views are unpacked. Not read:\n * textures, cameras, other primitive modes, sparse accessors and compressed\n * geometry (Draco, meshopt) — the last two throw.\n *\n * Nodes are re-indexed parents first, and every node index in the result\n * (a mesh's, a skin's joints, a channel's) is the new one.\n */\n\n'use strict';\n\nimport { mat4ToTransform } from '@nakednous/tree';\n\nconst GLB_MAGIC = 0x46546C67, CHUNK_JSON = 0x4E4F534A, CHUNK_BIN = 0x004E4942;\n\nconst COMPONENTS = { SCALAR: 1, VEC2: 2, VEC3: 3, VEC4: 4, MAT2: 4, MAT3: 9, MAT4: 16 };\nconst TYPES = {\n 5120: Int8Array, 5121: Uint8Array, 5122: Int16Array, 5123: Uint16Array, 5125: Uint32Array, 5126: Float32Array,\n};\nconst NORMALISED = { 5120: 127, 5121: 255, 5122: 32767, 5123: 65535 };\nconst ATTRIBUTES = {\n POSITION: 'position', NORMAL: 'normal', TANGENT: 'tangent', TEXCOORD_0: 'texcoord',\n JOINTS_0: 'joints', WEIGHTS_0: 'weights',\n};\nconst IDENTITY = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n\n/**\n * Split a GLB container into its JSON document and binary chunk.\n * @param {ArrayBuffer} buffer\n * @returns {{ json:object, bin:ArrayBuffer|null }}\n */\nexport function parseGlb(buffer) {\n const view = new DataView(buffer);\n if (view.getUint32(0, true) !== GLB_MAGIC) throw new Error('[host] gltf: not a GLB container.');\n if (view.getUint32(4, true) !== 2) throw new Error('[host] gltf: GLB version ' + view.getUint32(4, true) + ', 2 expected.');\n const end = Math.min(view.getUint32(8, true), buffer.byteLength);\n let json = null, bin = null;\n for (let at = 12; at + 8 <= end;) {\n const length = view.getUint32(at, true), type = view.getUint32(at + 4, true);\n const start = at + 8;\n if (type === CHUNK_JSON) json = JSON.parse(new TextDecoder().decode(new Uint8Array(buffer, start, length)));\n else if (type === CHUNK_BIN && !bin) bin = buffer.slice(start, start + length);\n at = start + length + (-length & 3);\n }\n if (!json) throw new Error('[host] gltf: GLB without a JSON chunk.');\n return { json, bin };\n}\n\n/**\n * Read a glTF document over its buffers.\n *\n * A part is one triangle primitive under one node: `mesh` in the\n * arrays shape (position, normal?, tangent?, texcoord?, joints?, weights?,\n * indices), `targets` its morph targets as delta arrays, `color` the\n * material's base colour factor, `node` the node it hangs from and `skin` its\n * skin's index or −1. A rigid mesh draws under its node's world matrix; a\n * skinned one under its skin's joint palette.\n *\n * @param {object} json The glTF document.\n * @param {ArrayBuffer[]} buffers One per `json.buffers` entry.\n * @returns {{ parts:{ name:string, node:number, skin:number, mesh:object,\n * targets:{ name:string, position?:object, normal?:object }[], color:number[] }[],\n * nodes:{ names:string[], parents:Int32Array, rest:Float32Array },\n * skins:{ name:string, joints:Uint16Array, inverseBind:Float32Array }[],\n * clips:{ name:string, duration:number, channels:object[] }[] }}\n * nodes.rest: the rest pose, ten numbers per node (translation, rotation\n * [x,y,z,w], scale). A clip channel: { node, path, interp, times, values }.\n */\nexport function parseGltf(json, buffers) {\n for (const ext of json.extensionsRequired || []) {\n if (/draco|meshopt/i.test(ext)) throw new Error('[host] gltf: ' + ext + ' is not supported.');\n }\n const cache = new Map();\n\n const accessor = (index) => {\n if (cache.has(index)) return cache.get(index);\n const a = json.accessors[index];\n if (a.sparse) throw new Error('[host] gltf: sparse accessors are not supported.');\n const n = COMPONENTS[a.type], Type = TYPES[a.componentType], scale = a.normalized && NORMALISED[a.componentType];\n const data = new (scale ? Float32Array : Type)(a.count * n);\n if (a.bufferView !== undefined) {\n const bv = json.bufferViews[a.bufferView];\n const base = (bv.byteOffset || 0) + (a.byteOffset || 0), size = Type.BYTES_PER_ELEMENT;\n const stride = bv.byteStride || n * size;\n const view = new DataView(buffers[bv.buffer]);\n const get = {\n 5120: 'getInt8', 5121: 'getUint8', 5122: 'getInt16', 5123: 'getUint16', 5125: 'getUint32', 5126: 'getFloat32',\n }[a.componentType];\n for (let i = 0; i < a.count; i++) {\n for (let c = 0; c < n; c++) {\n const v = view[get](base + i * stride + c * size, true);\n data[i * n + c] = scale ? Math.max(v / scale, -1) : v;\n }\n }\n }\n const out = { numComponents: n, data };\n cache.set(index, out);\n return out;\n };\n\n // nodes, parents first\n const src = json.nodes || [], parentOf = new Array(src.length).fill(-1);\n src.forEach((node, i) => { for (const c of node.children || []) parentOf[c] = i; });\n const order = [], remap = new Array(src.length).fill(-1);\n const visit = (i) => { remap[i] = order.length; order.push(i); for (const c of src[i].children || []) visit(c); };\n src.forEach((_, i) => { if (parentOf[i] < 0) visit(i); });\n\n const names = [], parents = new Int32Array(order.length), rest = new Float32Array(order.length * 10);\n const xf = { pos: [0, 0, 0], rot: [0, 0, 0, 1], scl: [1, 1, 1] };\n order.forEach((old, i) => {\n const node = src[old];\n names.push(node.name || '');\n parents[i] = parentOf[old] < 0 ? -1 : remap[parentOf[old]];\n let t = node.translation || [0, 0, 0], r = node.rotation || [0, 0, 0, 1], s = node.scale || [1, 1, 1];\n if (node.matrix) { mat4ToTransform(xf, node.matrix); t = xf.pos; r = xf.rot; s = xf.scl; }\n rest.set(t, i * 10); rest.set(r, i * 10 + 3); rest.set(s, i * 10 + 7);\n });\n\n // parts: one per triangle primitive per node\n const primitives = (json.meshes || []).map((mesh) => {\n const out = [];\n for (const prim of mesh.primitives) {\n if ((prim.mode ?? 4) !== 4 || prim.attributes.POSITION === undefined) continue;\n const arrays = {};\n for (const [semantic, key] of Object.entries(ATTRIBUTES)) {\n if (prim.attributes[semantic] !== undefined) arrays[key] = accessor(prim.attributes[semantic]);\n }\n const count = arrays.position.data.length / 3;\n const data = prim.indices !== undefined\n ? Uint32Array.from(accessor(prim.indices).data)\n : Uint32Array.from({ length: count }, (_, i) => i);\n arrays.indices = { numComponents: 3, data };\n const targetNames = (mesh.extras && mesh.extras.targetNames) || [];\n const targets = (prim.targets || []).map((target, i) => {\n const t = { name: targetNames[i] || '' };\n if (target.POSITION !== undefined) t.position = accessor(target.POSITION);\n if (target.NORMAL !== undefined) t.normal = accessor(target.NORMAL);\n return t;\n });\n const material = prim.material !== undefined ? json.materials[prim.material] : null;\n const pbr = material && material.pbrMetallicRoughness;\n out.push({ arrays, targets, color: (pbr && pbr.baseColorFactor ? pbr.baseColorFactor : [1, 1, 1, 1]).slice() });\n }\n return { name: mesh.name || '', primitives: out };\n });\n\n const parts = [];\n order.forEach((old, i) => {\n const node = src[old];\n if (node.mesh === undefined) return;\n const mesh = primitives[node.mesh];\n for (const p of mesh.primitives) {\n parts.push({ name: mesh.name || names[i], node: i, skin: node.skin ?? -1, mesh: p.arrays, targets: p.targets, color: p.color });\n }\n });\n\n const skins = (json.skins || []).map((skin) => {\n const joints = Uint16Array.from(skin.joints, j => remap[j]);\n const inverseBind = skin.inverseBindMatrices !== undefined\n ? Float32Array.from(accessor(skin.inverseBindMatrices).data)\n : Float32Array.from({ length: joints.length * 16 }, (_, k) => IDENTITY[k % 16]);\n return { name: skin.name || '', joints, inverseBind };\n });\n\n const clips = (json.animations || []).map((anim) => {\n let duration = 0;\n const channels = [];\n for (const ch of anim.channels) {\n if (ch.target.node === undefined) continue;\n const sampler = anim.samplers[ch.sampler];\n const times = accessor(sampler.input).data, values = accessor(sampler.output).data;\n if (times.length) duration = Math.max(duration, times[times.length - 1]);\n channels.push({ node: remap[ch.target.node], path: ch.target.path, interp: sampler.interpolation || 'LINEAR', times, values });\n }\n return { name: anim.name || '', duration, channels };\n });\n\n return { parts, nodes: { names, parents, rest }, skins, clips };\n}\n","/**\n * @file Media sources — images, video and Canvas2D rasters for a bridge's textures, models for its buffers.\n * @module host/media\n * @license AGPL-3.0-only\n *\n * A mesh arrives as arrays for a bridge's buffer upload, its bounds beside\n * them: loadMesh. A model keeps a file's structure — parts, hierarchy, skins,\n * clips: loadModel. Both read OBJ (host/obj) and glTF 2.0 (host/gltf), or\n * another format through a parser the caller passes.\n *\n * What a texture upload reads from: an ImageBitmap fetched from a URL, a\n * hidden <video> element from a file or the user's camera, a bitmap drawn\n * through a 2D context (the text path — glyph strips, billboard tags,\n * anything Canvas2D can typeset). No orientation option anywhere: whether\n * rows flip is the bridge's upload, since it depends on the GPU API's\n * texture space.\n */\n\n'use strict';\n\nimport { parseObj } from './obj.js';\nimport { parseGlb, parseGltf } from './gltf.js';\nimport { meshNormals, meshBounds, meshGroups, meshFlatten } from '@nakednous/tree';\n\n/**\n * Fetch an image into an ImageBitmap.\n * @param {string} url\n * @param {{ fetch?:object, bitmap?:object }} [opts]\n * fetch: the fetch init (credentials, mode, …). bitmap: the\n * createImageBitmap options (premultiplyAlpha, colorSpaceConversion, …).\n * @returns {Promise<ImageBitmap>}\n */\nexport async function loadImage(url, opts) {\n const o = opts || {};\n const res = await fetch(url, o.fetch);\n if (!res.ok) throw new Error('[host] image: ' + url + ' → ' + res.status);\n const blob = await res.blob();\n return o.bitmap ? createImageBitmap(blob, o.bitmap) : createImageBitmap(blob);\n}\n\nconst _ONE_NODE = () => ({ names: [''], parents: Int32Array.of(-1), rest: Float32Array.of(0, 0, 0, 0, 0, 0, 1, 1, 1, 1) });\nconst _part = (mesh) => ({ name: '', node: 0, skin: -1, mesh, targets: [], color: [1, 1, 1, 1] });\n\n// A morph target's deltas expanded through its mesh's indices; a target carries no indices of its own.\nfunction _flatTarget(target, indices) {\n const flat = meshFlatten(target, indices);\n delete flat.indices;\n return flat;\n}\n\n// The normals option applied to every part, then each mesh's bounds; parts sharing a mesh share the result.\n// undefined / true the file's normals; smooth ones where a mesh has none\n// 'smooth' always recomputed, summed per position (tree's meshGroups), so a faceted file smooths\n// 'flat' always recomputed on the flattened mesh (tree's meshFlatten), morph targets flattened with it\n// false nothing computed\nfunction _finish(model, o) {\n const mode = o.normals === undefined || o.normals === true ? 'fill' : o.normals;\n if (mode !== 'fill' && mode !== 'smooth' && mode !== 'flat' && mode !== false) {\n throw new Error(\"[host] model: normals is one of 'smooth', 'flat', false, or left out.\");\n }\n const done = new Map();\n for (const part of model.parts) {\n const source = part.mesh;\n if (done.has(source)) {\n part.mesh = done.get(source);\n if (mode === 'flat') part.targets = part.targets.map(t => _flatTarget(t, source.indices.data));\n continue;\n }\n let mesh = source;\n const bounds = meshBounds({ min: [0, 0, 0], max: [0, 0, 0], center: [0, 0, 0], diag: 0 }, mesh.position.data);\n if (mode === 'flat') {\n mesh = meshFlatten(source);\n const p = mesh.position.data;\n mesh.normal = { numComponents: 3, data: meshNormals(new Float32Array(p.length), p, mesh.indices.data) };\n part.targets = part.targets.map(t => _flatTarget(t, source.indices.data));\n } else if (mode === 'smooth' || (mode === 'fill' && !mesh.normal)) {\n const p = mesh.position.data;\n const groups = meshGroups(new Int32Array(p.length / 3), p, 1e-6 * bounds.diag);\n mesh.normal = { numComponents: 3, data: meshNormals(new Float32Array(p.length), p, mesh.indices.data, { groups }) };\n }\n mesh.bounds = bounds;\n done.set(source, mesh);\n part.mesh = mesh;\n }\n return model;\n}\n\n// Fetch and parse into the model shape, before the normals and bounds.\nasync function _load(url, o, what) {\n const get = async (at, init) => {\n const res = await fetch(at, init);\n if (!res.ok) throw new Error('[host] ' + what + ': ' + at + ' → ' + res.status);\n return res;\n };\n if (typeof o.parse === 'function') {\n const mesh = await o.parse(await (await get(url, o.fetch)).arrayBuffer());\n return { parts: [_part(mesh)], nodes: _ONE_NODE(), skins: [], clips: [] };\n }\n const format = (o.format || (/\\.(\\w+)(?:[?#].*)?$/.exec(url) || [])[1] || '').toLowerCase();\n if (format !== 'obj' && format !== 'glb' && format !== 'gltf') {\n throw new Error('[host] ' + what + ': ' + url + ' → unknown format; opts.format is one of obj, glb, gltf, or pass opts.parse.');\n }\n const res = await get(url, o.fetch);\n if (format === 'obj') return { parts: [_part(parseObj(await res.text()))], nodes: _ONE_NODE(), skins: [], clips: [] };\n if (format === 'glb') {\n const { json, bin } = parseGlb(await res.arrayBuffer());\n return parseGltf(json, [bin]);\n }\n const json = await res.json();\n const base = typeof location !== 'undefined' ? new URL(url, location.href) : url;\n const resolve = (uri) => {\n if (/^data:/.test(uri)) return uri;\n try { return String(new URL(uri, base)); } catch (e) { return url.replace(/[^/]*$/, '') + uri; }\n };\n const buffers = await Promise.all((json.buffers || []).map(async b => (await get(resolve(b.uri), o.fetch)).arrayBuffer()));\n return parseGltf(json, buffers);\n}\n\n/**\n * Fetch a mesh: one object in the arrays shape — position, indices, and\n * normal, tangent, texcoord, color, joints, weights when the file carries them\n * — with `bounds`, its extent `{ min, max, center, diag }`, beside them. A\n * bridge's buffer upload takes it as it is; `size / mesh.bounds.diag` is the\n * scale that fits any file to `size`.\n *\n * Formats: OBJ (host/obj), and glTF 2.0 as `.glb` or `.gltf` (host/gltf) when\n * the file holds one part. A file of several parts rejects, naming loadModel:\n * a mesh is never silently the first of many. `opts.parse` reads any other\n * format: it receives the fetched ArrayBuffer and returns the arrays shape.\n *\n * Normals. Left out, the option keeps the file's normals and gives smooth\n * ones to a mesh that has none. 'smooth' always recomputes them, summed per\n * position, so a file that arrives faceted or cut along a texture seam\n * smooths too. 'flat' always recomputes them on the flattened mesh — every\n * triangle owning its vertices, so the vertex count grows and the indices\n * count up. false computes nothing. The procedure, its limits (no crease\n * angle; grouping by grid cell, at 1e-6 of the bounds' diagonal) and its\n * sources are tree/mesh's. glTF viewers compute flat normals for a file\n * without any; here that is `normals: 'flat'`.\n *\n * @param {string} url\n * @param {{ fetch?:object, format?:string, parse?:function(ArrayBuffer):object,\n * normals?:'smooth'|'flat'|false }} [opts] fetch: the fetch init. format: 'obj' |\n * 'glb' | 'gltf' when the URL's extension does not say. parse: a parser for another\n * format. normals: as above.\n * @returns {Promise<object>} The mesh.\n */\nexport async function loadMesh(url, opts) {\n const o = opts || {};\n const model = await _load(url, o, 'mesh');\n if (model.parts.length !== 1) {\n throw new Error('[host] mesh: ' + url + ' → ' + model.parts.length + ' parts; loadModel keeps them apart.');\n }\n return _finish(model, o).parts[0].mesh;\n}\n\n/**\n * Fetch a model with its structure — what a rig, morph targets or animation\n * need; a single mesh is loadMesh's:\n *\n * { parts: [{ name, node, skin, mesh, targets, color }], nodes, skins, clips }\n *\n * A part is one triangle primitive under one node: `mesh` as loadMesh returns\n * it (the arrays shape with `bounds`, in the part's own space), `targets` its\n * morph targets as delta arrays, `color` its base colour [r, g, b, a], `node`\n * the node it hangs from and `skin` its skin's index or −1. `nodes` is the\n * hierarchy `{ names, parents, rest }`, parents first, `rest` a pose of ten\n * numbers per node; `skins` are `{ name, joints, inverseBind }` and `clips`\n * `{ name, duration, channels }` — what tree's clipSample, poseWorld and\n * jointPalette take. A rigid part draws under its node's world matrix, a\n * skinned one under its skin's joint palette. An OBJ file is one white part\n * under one identity node.\n *\n * The options are loadMesh's; `normals` applies to every part, 'flat'\n * flattening each part's morph targets with its mesh.\n *\n * @param {string} url\n * @param {{ fetch?:object, format?:string, parse?:function(ArrayBuffer):object,\n * normals?:'smooth'|'flat'|false }} [opts]\n * @returns {Promise<{ parts:object[], nodes:{ names:string[], parents:Int32Array, rest:Float32Array },\n * skins:object[], clips:object[] }>}\n */\nexport async function loadModel(url, opts) {\n const o = opts || {};\n return _finish(await _load(url, o, 'model'), o);\n}\n\n/**\n * A hidden, muted, inline <video> element from a file or the user's camera.\n * `ready` resolves once metadata arrived (width / height known); a camera\n * denial rejects it. Inside an iframe a camera source needs allow=\"camera\"\n * on the frame.\n *\n * @param {{ src?:string, camera?:boolean|object, loop?:boolean, autoplay?:boolean,\n * document?:object, media?:object }} opts\n * src: a media URL. camera: true or getUserMedia video constraints\n * ({ facingMode, width, height }). loop (default true for src).\n * autoplay (default true): start() once ready. document / media: the\n * Document and MediaDevices to use (defaults: the globals) — the seam\n * a test fills.\n * @returns {{ el:HTMLVideoElement, ready:Promise<object>, width:number, height:number,\n * start():Promise<void>, stop():object, dispose():object }}\n */\nexport function createVideo(opts) {\n const o = opts || {};\n const doc = o.document || (typeof document !== 'undefined' ? document : null);\n if (!doc) { console.error('[host] video: no document.'); return null; }\n const el = doc.createElement('video');\n el.muted = true;\n el.playsInline = true;\n el.setAttribute('playsinline', '');\n el.setAttribute('muted', '');\n el.style.display = 'none';\n let stream = null;\n\n const v = {\n /** The <video> element — the bridge's upload source, refreshed each frame. */\n el,\n /** Intrinsic size, known once `ready` resolved. */\n width: 0, height: 0,\n /** Resolves with this source once metadata arrived; rejects on a camera denial or a load error. */\n ready: null,\n /** Play; resolves when playback began. */\n start() { const p = el.play(); return p && typeof p.catch === 'function' ? p.catch((e) => console.error('[host] video: play() failed: ' + e.message + '.')) : Promise.resolve(); },\n /** Pause. Chainable. */\n stop() { el.pause(); return v; },\n /** Stop, release the camera tracks, detach the element. */\n dispose() {\n el.pause();\n if (stream) { for (const t of stream.getTracks()) t.stop(); stream = null; }\n el.removeAttribute('src');\n el.srcObject = null;\n if (typeof el.remove === 'function') el.remove();\n return v;\n },\n };\n\n v.ready = new Promise((resolve, reject) => {\n const unlisten = () => { el.removeEventListener('loadedmetadata', onMeta); el.removeEventListener('error', onErr); };\n const fail = (msg) => { unlisten(); reject(new Error('[host] video: ' + msg)); };\n const onMeta = () => {\n v.width = el.videoWidth || 0; v.height = el.videoHeight || 0;\n unlisten();\n if (o.autoplay !== false) v.start();\n resolve(v);\n };\n const onErr = () => fail('failed to load ' + (o.src || 'the source') + '.');\n el.addEventListener('loadedmetadata', onMeta);\n el.addEventListener('error', onErr);\n if (o.camera) {\n const media = o.media || (typeof navigator !== 'undefined' && navigator.mediaDevices) || null;\n if (!media || typeof media.getUserMedia !== 'function') { fail('getUserMedia is unavailable here.'); return; }\n media.getUserMedia({ video: o.camera === true ? true : o.camera, audio: false })\n .then((s) => { stream = s; el.srcObject = s; })\n .catch((e) => fail('camera denied: ' + e.message + '.'));\n } else if (o.src) {\n el.loop = o.loop !== false;\n el.src = o.src;\n } else {\n fail('needs { src } or { camera }.');\n }\n });\n v.ready.catch(() => {}); // an unobserved rejection is the caller's to observe, not a crash\n return v;\n}\n\n/**\n * Draw through a 2D context and hand the result back as a texture source: an\n * ImageBitmap where OffscreenCanvas exists, else the canvas element itself.\n *\n * @param {function(CanvasRenderingContext2D, number, number):void} draw\n * @param {number} w Pixel width.\n * @param {number} h Pixel height.\n * @param {{ document?:object }} [opts] The Document for the fallback canvas.\n * @returns {ImageBitmap|HTMLCanvasElement|null}\n */\nexport function raster(draw, w, h, opts) {\n const o = opts || {};\n if (typeof OffscreenCanvas !== 'undefined') {\n const c = new OffscreenCanvas(w, h);\n draw(c.getContext('2d'), w, h);\n return c.transferToImageBitmap();\n }\n const doc = o.document || (typeof document !== 'undefined' ? document : null);\n if (!doc) { console.error('[host] raster: no OffscreenCanvas and no document.'); return null; }\n const c = doc.createElement('canvas');\n c.width = w; c.height = h;\n draw(c.getContext('2d'), w, h);\n return c;\n}\n","/**\n * @file The label layer — DOM text over the canvas, anchored in world or screen space.\n * @module host/labels\n * @license AGPL-3.0-only\n *\n * The replacement for WEBGL text() in HUDs, gizmo labels and formula\n * readouts, with the browser's own shaping. One absolutely positioned <div>\n * overlays the canvas as its next sibling, pointer-events: none, sized by\n * the canvas observer; the host sets the canvas parent to position:\n * relative when it is static, and says so in the console once.\n *\n * labels.set(id, text, x, y, z, opts) // a world anchor, projected each tick()\n * labels.setScreen(id, text, sx, sy, opts) // canvas px, the HUD form\n * labels.remove(id) · labels.clear() · labels.visible\n * labels.tick() // after the view bag is current\n *\n * opts: dx / dy pixel offsets, anchor ('center' default, 'left', 'right'),\n * class — a CSS class beside the layer's own 'host-label', frame — a\n * transient label that lives for the frame it was set in: a gizmo re-sets\n * it every draw and tick() removes it once a frame passes without. A label\n * whose window depth leaves [0, 1] or whose anchor leaves the canvas is\n * hidden, not clamped. Elements are reused by id; tick() writes transforms\n * only, text when the string changed.\n */\n\n'use strict';\n\nimport { WORLD, SCREEN, mapLocation } from '@nakednous/tree';\n\nconst _p = [0, 0, 0];\nconst _ANCHOR = { center: -50, left: 0, right: -100 };\nconst _NO_OPTS = {};\n\n/**\n * Create the label layer of a canvas. The layer is inserted at once; it\n * needs a parent, so create it after the canvas is in the document.\n *\n * @param {object} host Its canvas, view bag and size are read.\n * @param {{ document?:object }} [opts] The Document (default: the global).\n * @returns {object|null} The layer, or null without a document or a parent.\n */\nexport function createLabels(host, opts) {\n const o = opts || {};\n const doc = o.document || (typeof document !== 'undefined' ? document : null);\n const canvas = host.canvas;\n const parent = canvas && canvas.parentNode;\n if (!doc || !parent) { console.error('[host] labels: the canvas needs a parent element.'); return null; }\n\n const el = doc.createElement('div');\n el.className = 'host-labels';\n Object.assign(el.style, {\n position: 'absolute', left: '0px', top: '0px', width: '0px', height: '0px',\n pointerEvents: 'none', overflow: 'hidden',\n });\n const cs = typeof getComputedStyle === 'function' ? getComputedStyle(parent) : null;\n if (cs && cs.position === 'static') {\n parent.style.position = 'relative';\n console.info('[host] labels: set the canvas parent to position: relative for the label layer.');\n }\n parent.insertBefore(el, canvas.nextSibling);\n\n const entries = new Map(); // id → { el, text, x, y, z, dx, dy, ax, screen, cls, sx, sy, shown }\n let width = 0, height = 0, left = -1, top = -1, visible = true;\n\n const entry = (id, text, o) => {\n let e = entries.get(id);\n if (!e) {\n const span = doc.createElement('span');\n Object.assign(span.style, { position: 'absolute', left: '0px', top: '0px', whiteSpace: 'nowrap', willChange: 'transform' });\n span.style.visibility = 'hidden';\n el.appendChild(span);\n e = { el: span, text: null, x: 0, y: 0, z: 0, dx: 0, dy: 0, ax: -50, screen: false, cls: null, sx: NaN, sy: NaN, shown: false, frame: false, fresh: false };\n entries.set(id, e);\n }\n if (e.text !== text) { e.text = text; e.el.textContent = text; }\n const c = o.class || null;\n if (e.cls !== c) { e.cls = c; e.el.className = c ? 'host-label ' + c : 'host-label'; }\n e.ax = _ANCHOR[o.anchor] ?? -50;\n e.dx = o.dx || 0; e.dy = o.dy || 0;\n e.frame = !!o.frame; e.fresh = true;\n return e;\n };\n const place = (e, sx, sy) => {\n if (sx === e.sx && sy === e.sy) return;\n e.sx = sx; e.sy = sy;\n e.el.style.transform = 'translate(' + sx + 'px, ' + sy + 'px) translate(' + e.ax + '%, -50%)';\n };\n const show = (e, on) => {\n if (e.shown === on) return;\n e.shown = on;\n e.el.style.visibility = on ? '' : 'hidden';\n };\n\n const labels = {\n /** The layer element. */\n el,\n /** Whether the layer shows; false hides every label at once. */\n get visible() { return visible; },\n set visible(v) { visible = !!v; el.style.display = visible ? '' : 'none'; },\n /** Live label count. */\n get size() { return entries.size; },\n\n /**\n * Place a label at a world anchor, projected each tick().\n * @param {string} id\n * @param {string} text\n * @param {number} x, y, z World anchor.\n * @param {{ dx?:number, dy?:number, anchor?:string, class?:string, frame?:boolean }} [opts]\n * @returns {object} this\n */\n set(id, text, x, y, z, opts) {\n const e = entry(id, text, opts || _NO_OPTS);\n e.screen = false; e.x = x; e.y = y; e.z = z;\n return labels;\n },\n\n /**\n * Place a label in canvas px — the HUD form.\n * @param {string} id\n * @param {string} text\n * @param {number} sx, sy Canvas px, y down.\n * @param {{ dx?:number, dy?:number, anchor?:string, class?:string, frame?:boolean }} [opts]\n * @returns {object} this\n */\n setScreen(id, text, sx, sy, opts) {\n const e = entry(id, text, opts || _NO_OPTS);\n e.screen = true; e.x = sx; e.y = sy; e.z = 0;\n return labels;\n },\n\n /** Remove a label. */\n remove(id) {\n const e = entries.get(id);\n if (e) { el.removeChild(e.el); entries.delete(id); }\n return labels;\n },\n\n /** Remove every label. */\n clear() { for (const id of [...entries.keys()]) labels.remove(id); return labels; },\n\n /**\n * Project every world label through the view bag and write the\n * transforms; hide what falls outside the canvas or the depth range.\n * Call after the view bag is current for the frame.\n * @returns {object} this\n */\n tick() {\n const ol = canvas.offsetLeft || 0, ot = canvas.offsetTop || 0;\n if (ol !== left || ot !== top) { left = ol; top = ot; el.style.left = ol + 'px'; el.style.top = ot + 'px'; }\n const view = host.view;\n for (const [id, e] of entries) {\n if (e.frame && !e.fresh) { labels.remove(id); continue; }\n e.fresh = false;\n let sx, sy, on;\n if (e.screen) { sx = e.x; sy = e.y; on = true; }\n else if (!view || view.stale) { on = false; }\n else {\n mapLocation(_p, e.x, e.y, e.z, WORLD, SCREEN, view, view.vp, view.ndcZMin);\n sx = _p[0]; sy = _p[1];\n on = _p[2] >= 0 && _p[2] <= 1 && sx >= 0 && sx <= width && sy >= 0 && sy <= height;\n }\n if (on) place(e, sx + e.dx, sy + e.dy);\n show(e, on);\n }\n return labels;\n },\n\n /**\n * The observer's write: the layer's size in CSS px.\n * @param {number} w\n * @param {number} h\n * @returns {object} this\n */\n resize(w, h) {\n width = w; height = h;\n el.style.width = w + 'px'; el.style.height = h + 'px';\n return labels;\n },\n\n /** Remove the layer and its labels. */\n dispose() {\n entries.clear();\n if (el.parentNode) el.parentNode.removeChild(el);\n host.unregister(labels);\n return labels;\n },\n };\n labels.resize(host.width || 0, host.height || 0);\n return host.register(labels);\n}\n","/**\n * @file The orbit — the fall-through camera gesture on unclaimed pointers.\n * @module host/orbit\n * @license AGPL-3.0-only\n *\n * What the handle gate yields to: one pointer orbits the camera state about\n * its center, two pointers dolly by their distance and pan by their\n * midpoint, the wheel dollies. update() consumes only unclaimed pointers and\n * returns true when it moved the camera, so\n *\n * if (!h.update()) orbit.update()\n *\n * reads as the gate. It writes cam only; the next setCamera(cam) installs it.\n * Two-pointer motion is computed from the pointers' own coordinates, never\n * from a browser's pinch synthesis, so it reads the same on every platform;\n * the canvas gets touch-action: none while the orbit lives so the browser\n * does not scroll or zoom the page instead. `damping`, seconds, makes the\n * camera trail the gesture through a first-order lag: each step of a drag —\n * orbit, pan and dolly lanes — and each wheel notch is an impulse the camera\n * drains with that time constant through tree's coast, so it follows the\n * finger about `damping` behind and, after a release, travels the rest of\n * what the finger did and no more, a flick easing out. A fresh touch drops\n * what is still draining, so do home() and enabled = false. The default is\n * 0.2 s; 0 makes the orbit exact.\n *\n * Canvas y runs down; which world direction that is depends on the\n * projection installed in the view bag: a y-up projection (GL's, tree's\n * default) maps a downward drag to the eye's −up, a y-flipped one (p5's,\n * mat4Proj[5] < 0) to +up. The orbit reads that sign off the bag each\n * update, so a drag down always brings the scene down.\n */\n\n'use strict';\n\nimport { createCamera, cameraCopy, cameraOrbit, cameraDolly, cameraPan, pixelRatio, coastStep, coastAlive } from '@nakednous/tree';\n\nconst _clamp = { min: 0, max: Infinity };\nconst _now = () => (typeof performance !== 'undefined' && performance.now) ? performance.now() : Date.now();\nconst EPS = 1e-4; // a rate below this in every lane ends the drain\nconst DT_MAX = 0.1; // seconds, the measured frame's clamp\n\n/**\n * Create an orbit on a camera state.\n *\n * @param {object} host\n * @param {object} cam The camera state written.\n * @param {{ rotate?:number, pan?:number, zoom?:number, wheel?:number, damping?:number,\n * minDistance?:number, maxDistance?:number, enabled?:boolean }} [opts]\n * rotate: radians per pixel (default 0.005). pan / zoom / wheel:\n * scalars on the two-pointer pan, the pinch and the wheel dolly\n * (default 1). damping: the lag's time constant in seconds (default\n * 0.2; 0 exact). minDistance / maxDistance: gaze-distance clamps.\n * @returns {object} The orbit: { cam, enabled, rotate, pan, zoom, wheel, damping,\n * minDistance, maxDistance, update(dt), home(), dispose() }.\n */\nexport function createOrbit(host, cam, opts) {\n const o = opts || {};\n const canvas = host.canvas;\n const home = cameraCopy(createCamera(), cam);\n const tracked = new Map(); // pointer id → { x, y } as last consumed\n let wheelAcc = 0;\n const rate = [0, 0, 0, 0, 0]; // what is still draining: dAz, dEl, panX, panY, log dolly — per second\n const step = [0, 0, 0, 0, 0]; // one frame of it\n let lastNow = 0, wasPressed = false;\n\n const cancel = () => { for (let i = 0; i < 5; i++) rate[i] = 0; };\n const apply = (s) => {\n if (s[0] !== 0 || s[1] !== 0) cameraOrbit(cam, s[0], s[1]);\n if (s[2] !== 0 || s[3] !== 0) cameraPan(cam, s[2], s[3]);\n if (s[4] !== 0) dolly(Math.exp(s[4]));\n };\n\n const onWheel = (e) => {\n if (typeof e.preventDefault === 'function') e.preventDefault();\n const unit = e.deltaMode === 1 ? 16 : e.deltaMode === 2 ? (host.height || 1) : 1;\n wheelAcc += (e.deltaY || 0) * unit;\n };\n canvas.addEventListener('wheel', onWheel, { passive: false });\n const touchAction = canvas.style ? canvas.style.touchAction : undefined;\n if (canvas.style) canvas.style.touchAction = 'none';\n\n const track = (p) => {\n let t = tracked.get(p.id);\n if (!t) { t = { x: p.x, y: p.y }; tracked.set(p.id, t); }\n else { t.x = p.x; t.y = p.y; }\n };\n const distance = () => {\n const e = cam.eye, c = cam.center;\n return Math.hypot(e[0] - c[0], e[1] - c[1], e[2] - c[2]);\n };\n const dolly = (factor) => {\n _clamp.min = orbit.minDistance; _clamp.max = orbit.maxDistance;\n cameraDolly(cam, factor, _clamp);\n };\n\n const orbit = {\n /** The camera state written. */\n cam,\n /** False makes update() a no-op that drops its pointer memory. */\n enabled: o.enabled !== false,\n /** Radians per pixel of one-pointer drag. */\n rotate: o.rotate ?? 0.005,\n /** Scalar on the two-pointer pan. */\n pan: o.pan ?? 1,\n /** Scalar on the pinch dolly's exponent. */\n zoom: o.zoom ?? 1,\n /** Scalar on the wheel dolly. */\n wheel: o.wheel ?? 1,\n /** The lag's time constant, seconds; 0 makes the orbit exact. */\n damping: o.damping ?? 0.2,\n /** Gaze-distance clamps for every dolly. */\n minDistance: o.minDistance ?? 0,\n maxDistance: o.maxDistance ?? Infinity,\n\n /**\n * Consume this frame's unclaimed pointer motion and wheel into cam —\n * through the lag when damping is on.\n * @param {number} [dt] The frame in seconds; measured since the last update when omitted.\n * @returns {boolean} Whether the camera moved.\n */\n update(dt) {\n const now = _now();\n if (typeof dt !== 'number') dt = lastNow ? Math.min((now - lastNow) / 1000, DT_MAX) : 0;\n lastNow = now;\n if (!orbit.enabled) { tracked.clear(); wheelAcc = 0; cancel(); wasPressed = false; return false; }\n const src = host.pointer;\n let a = null, b = null;\n for (const p of src.pointers.values()) {\n // a hovering mouse has an entry without a press; only pressed, unclaimed, live pointers drive\n if (!p.down || p.owner !== null || p.up || p.cancel) { tracked.delete(p.id); continue; }\n if (a === null || p.id < a.id) { b = a; a = p; }\n else if (b === null || p.id < b.id) b = p;\n }\n for (const id of tracked.keys()) {\n if ((a === null || id !== a.id) && (b === null || id !== b.id)) tracked.delete(id);\n }\n const tau = orbit.damping > 0 ? orbit.damping : 0;\n const pressed = a !== null;\n if (pressed && !wasPressed) cancel(); // a fresh touch catches the scene: what was still draining is dropped\n wasPressed = pressed;\n let moved = false;\n let az = 0, el = 0, px = 0, py = 0, ld = 0; // this frame's step\n const view = host.view;\n const ys = view.mat4Proj[5] < 0 ? -1 : 1; // canvas-down is the eye's −up under a y-up projection, +up under p5's flip\n if (a !== null && b === null) {\n const t = tracked.get(a.id);\n if (t) {\n const dx = a.x - t.x, dy = a.y - t.y;\n if (dx !== 0 || dy !== 0) { az = -dx * orbit.rotate; el = ys * dy * orbit.rotate; }\n }\n track(a);\n } else if (a !== null && b !== null) {\n const ta = tracked.get(a.id), tb = tracked.get(b.id);\n if (ta && tb) {\n const dmx = (a.x + b.x - ta.x - tb.x) / 2, dmy = (a.y + b.y - ta.y - tb.y) / 2;\n if (dmx !== 0 || dmy !== 0) {\n const ratio = pixelRatio(view.mat4Proj, -view.vp[3] || 1, -distance(), view.ndcZMin);\n px = -dmx * ratio * orbit.pan; py = ys * dmy * ratio * orbit.pan;\n }\n const d0 = Math.hypot(ta.x - tb.x, ta.y - tb.y), d1 = Math.hypot(a.x - b.x, a.y - b.y);\n if (d0 > 0 && d1 > 0 && d0 !== d1) ld = orbit.zoom * Math.log(d0 / d1);\n }\n track(a); track(b);\n }\n // the step: exact, or — with damping — an impulse the drain below spreads over time\n if (az !== 0 || el !== 0 || px !== 0 || py !== 0 || ld !== 0) {\n if (tau > 0) { rate[0] += az / tau; rate[1] += el / tau; rate[2] += px / tau; rate[3] += py / tau; rate[4] += ld / tau; }\n else { step[0] = az; step[1] = el; step[2] = px; step[3] = py; step[4] = ld; apply(step); moved = true; }\n }\n if (wheelAcc !== 0) {\n const w = wheelAcc * 0.001 * orbit.wheel;\n wheelAcc = 0;\n if (tau > 0) rate[4] += w / tau;\n else { dolly(Math.exp(w)); moved = true; }\n }\n if (tau > 0 && coastAlive(rate, EPS)) { apply(coastStep(step, rate, dt, tau)); moved = true; }\n return moved;\n },\n\n /** Restore the pose captured at creation; whatever was draining is dropped. */\n home() { cameraCopy(cam, home); cancel(); return orbit; },\n\n /** Remove the wheel listener, restore touch-action, unregister from the host. */\n dispose() {\n canvas.removeEventListener('wheel', onWheel);\n if (canvas.style) canvas.style.touchAction = touchAction;\n tracked.clear();\n cancel();\n host.unregister(orbit);\n return orbit;\n },\n };\n return host.register(orbit);\n}\n","/**\n * @file HDR — Radiance (.hdr) RGBE bytes decoded to the pixels a bridge uploads.\n * @module host/hdr\n * @license AGPL-3.0-only\n *\n * A floating-point texture needs radiance, and no image decoder in the browser\n * gives it any: `loadImage` hands back an `ImageBitmap` of 8-bit codes, clamped\n * at 1.0, so a tone-mapping pass would have nothing left to compress. Radiance's\n * RGBE is the one high-range format a few dozen lines decode.\n *\n * ```\n * const hdr = decodeRGBE(bytes) // { data, width, height } — radiance\n * const tex = texture(gl, hdr) // the bridge's upload, RGBA32F\n * ```\n\n *\n * A pixel is three 8-bit mantissas and a shared exponent — `v · 2^(e − 136)` —\n * the format of Greg Ward's RADIANCE (Ward, *Real Pixels*, Graphics Gems II,\n * 1991). The reader follows `rgbe.c`'s structure and three.js's `HDRLoader`\n * (itself adapted from Bruce Walter's code), with the exact scale above rather\n * than that implementation's `v · 2^(e − 128) / 255`, and no `+ 0.5` — the\n * offset `rgbe.c`'s floating read carries, which lifts every pixel by half a\n * mantissa step (0.04 % of the mean on a Poly Haven HDRI) and which no file\n * declares. Rows keep the order the file states and are never flipped here: GL's\n * bottom-up space is the upload's concern (see texture.js).\n *\n * `loadHDR` — the fetch and the GL row order — is `webgl.tree`'s, and it\n * re-exports these two; a reader with no bridge to feed uses them directly. Rows\n * come back in the file's own order unless `rowOrder: 'BOTTOM_UP'` asks for GL's.\n * The decoder is trusted by round-tripping through the encoder and by agreeing\n * with three.js's `HDRLoader` and ImageMagick on real Radiance files.\n */\n\n'use strict';\n\n// Radiance's own threshold: at or below it a float holds no light, so a pixel\n// that low is written as four zero bytes and read back as black.\nconst _MIN_RADIANCE = 1e-32;\n// 16 Mpixel of RGBA32F is 256 MB of output: past this the tab is gone before\n// anything on screen says why, so the refusal comes from here.\nconst _DEFAULT_MAX_PIXELS = 16 * 1024 * 1024;\n\nconst _fv = new DataView(new ArrayBuffer(4));\n\n// The shared exponent as a float32: the bit pattern of 2^(e − 136) — mantissa\n// zero, biased exponent — read straight out of the view, no Math.pow per pixel.\n// 256 entries, made once at load, indexed by the exponent byte a pixel carries.\nconst _SCALES = new Float32Array(256);\nfor (let e = 0; e < 256; e++) {\n _fv.setUint32(0, e < 10 ? 0 : (e - 9) << 23, true); // e < 10 underflows to zero\n _SCALES[e] = _fv.getFloat32(0, true);\n}\n\n/**\n * Encode three linear radiance samples and a shared exponent to RGBE bytes.\n * The inverse of a pixel in `decodeRGBE`: the largest component becomes a byte\n * level between 128 and 255 — `level = round(v / 2^(e − 136))` with e the\n * exponent that carries it — so all eight bits are spent and the components\n * keep their ratio. The level is an integer: 0.0 comes back exactly, and\n * everything else to within half a level, the 1/512 an 8-bit mantissa costs at\n * worst.\n * @param {number} r Red, ≥ 0.\n * @param {number} g Green.\n * @param {number} b Blue.\n * @param {Uint8Array} [out] Four bytes to write; a new one when absent.\n * @returns {Uint8Array} out\n */\nexport function encodeRGBE(r, g, b, out) {\n const o = out || new Uint8Array(4);\n const max = Math.max(r, g, b);\n if (!(max >= _MIN_RADIANCE)) { o[0] = o[1] = o[2] = o[3] = 0; return o; }\n // The exponent whose scale carries max as a byte level of 128 to 255 — the\n // finest step the format has for this magnitude. The float32's own exponent\n // sets the base, one scale step below the level 255 needs, and the search\n // steps up until max fits a byte. `_SCALES` is the decoder's own table, so\n // the two cannot drift apart.\n _fv.setFloat32(0, max, true);\n let e = Math.min(255, Math.max(1, ((_fv.getUint32(0, true) >>> 23) & 0xff) - 127 + 128));\n while (e < 255 && max / _SCALES[e] > 255) e++;\n o[0] = Math.min(255, Math.round(r / _SCALES[e]));\n o[1] = Math.min(255, Math.round(g / _SCALES[e]));\n o[2] = Math.min(255, Math.round(b / _SCALES[e]));\n o[3] = e;\n return o;\n}\n\nconst _digits = (s) => {\n const m = /(\\d+)/.exec(s);\n return m ? +m[1] : 0;\n};\n\n// The header: a magic line, keyed lines and comments, a blank line, then the\n// resolution string (`-Y 512 +X 1024`). Anything before the resolution is\n// skipped — XMP and other writers put blocks there — so the walk stops at the\n// first line that states a dimension.\nfunction _headerAt(data) {\n let pos = 0, height = 0, width = 0, flipRows = false;\n const n = data.length;\n while (pos < n) {\n let end = pos;\n while (end < n && data[end] !== 10) end++;\n const line = String.fromCharCode.apply(null, data.subarray(pos, Math.min(end, pos + 400)));\n pos = end + 1;\n if (/^#\\?/.test(line)) continue;\n const res = /^\\s*([-+])([XY])\\s+(\\d+)\\s+([-+])([XY])\\s+(\\d+)\\s*$/.exec(line);\n if (res) {\n const first = res[2].toUpperCase(), second = res[5].toUpperCase();\n if (first === 'Y' && second === 'X') {\n height = +res[3]; width = +res[6];\n flipRows = res[1] === '+'; // +Y: row 0 at the bottom\n } else if (first === 'X' && second === 'Y') {\n width = +res[3]; height = +res[6];\n flipRows = res[1] === '+'; // +X: column 0 on the right\n } else {\n throw new Error('[host] hdr: the resolution names ' + first + ' then ' + second + '; -Y h +X w expected.');\n }\n return { width, height, flipRows, pos };\n }\n if (line === '') continue; // a writer may separate the keys from the resolution\n }\n throw new Error('[host] hdr: no resolution line — the file is not a Radiance image.');\n}\n\n// One scanline of RGBE bytes into `row`: either the new-style RLE (4 planes,\n// runs of 128 bytes or fewer) or the flat tuples an old writer leaves.\nfunction _scanline(data, pos, row, w, off, rowBytes) {\n const end = data.length;\n if (w >= 8 && w < 32768 && pos + 3 < end && data[pos] === 2 && data[pos + 1] === 2 && (data[pos + 2] & 0x80) === 0) {\n const scanline = (data[pos + 2] << 8) | data[pos + 3];\n if (scanline !== w) throw new Error('[host] hdr: scanline width ' + scanline + ', image width ' + w + '.');\n pos += 4;\n for (let c = 0; c < 4; c++) {\n let x = 0;\n while (x < w) {\n if (pos >= end) throw new Error('[host] hdr: the file ends inside scanline ' + (off / rowBytes) + '.');\n const count = data[pos++];\n if (count > 128) { // a run of one byte\n if (pos >= end) throw new Error('[host] hdr: the file ends inside a run.');\n const v = data[pos++];\n for (let i = 0; i < count - 128; i++) row[(x + i) * 4 + c] = v;\n x += count - 128;\n } else { // a literal run\n if (count === 0 || pos + count > end) throw new Error('[host] hdr: bad run length in scanline ' + (off / rowBytes) + '.');\n for (let i = 0; i < count; i++) row[(x + i) * 4 + c] = data[pos + i];\n pos += count;\n x += count;\n }\n if (x > w) throw new Error('[host] hdr: a run overruns scanline ' + (off / rowBytes) + '.');\n }\n }\n return pos;\n }\n // flat: 4 bytes per pixel, in file order (the scanline is one plane-less array)\n if (pos + w * 4 > end) throw new Error('[host] hdr: the file ends inside scanline ' + (off / rowBytes) + '.');\n for (let i = 0; i < w * 4; i++) row[i] = data[pos + i];\n return pos + w * 4;\n}\n\n/**\n * Decode Radiance RGBE bytes into the pixel source `texture` takes.\n * @details Every pixel becomes four float channels — R, G, B and 1 — and the\n * rows come back in the order the file states, top-down for the `-Y` every\n * writer emits. `loadHDR` is the one that turns them over for GL; a caller\n * here that wants the same passes `rowOrder: 'BOTTOM_UP'`. The decoder holds no\n * state, allocates its output once, and needs no DOM, so it runs under\n * node:test as well as in the browser.\n * @param {ArrayBuffer|Uint8Array} bytes The whole file.\n * @param {{ rowOrder?:string, maxPixels?:number }} [opts]\n * rowOrder: `FILE` (default) or `BOTTOM_UP` — the latter for GL's\n * texture space, row 0 at v = 0.\n * maxPixels: refuse past this many pixels (default 16 MPixel).\n * @returns {{ data:Float32Array, width:number, height:number }} Radiance in\n * linear light: what `texture` uploads as RGBA32F, and the range a\n * tone operator compresses.\n */\nexport function decodeRGBE(bytes, opts) {\n const o = opts || {};\n const data = bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes);\n const head = _headerAt(data);\n const { width: w, height: h } = head;\n if (!(w > 0) || !(h > 0)) throw new Error('[host] hdr: the resolution states ' + w + ' × ' + h + '.');\n const max = o.maxPixels || _DEFAULT_MAX_PIXELS;\n if (w * h > max) {\n throw new Error('[host] hdr: ' + w + ' × ' + h + ' is past maxPixels (' + max +\n '); pass a bigger one, or decode at a lower resolution.');\n }\n const flip = o.rowOrder === 'BOTTOM_UP';\n const out = new Float32Array(w * h * 4);\n const row = new Uint8Array(w * 4);\n let pos = head.pos;\n for (let y = 0; y < h; y++) {\n pos = _scanline(data, pos, row, w, y * w * 4, w * 4);\n const at = (flip ? h - 1 - y : y) * w * 4;\n for (let x = 0; x < w; x++) {\n const p = x * 4, s = _SCALES[row[p + 3]], d = at + p;\n out[d] = row[p] * s;\n out[d + 1] = row[p + 1] * s;\n out[d + 2] = row[p + 2] * s;\n out[d + 3] = 1;\n }\n }\n return { data: out, width: w, height: h };\n}\n","/**\n * @file The host context — one per canvas: pointer, view bag, players, loop, observer.\n * @module host\n * @license AGPL-3.0-only\n *\n * The signal host of a program: what it needs from the browser that is\n * neither math nor GPU — a canvas element's pointer input, the frame clock,\n * its size — and the registry its constructs tick from. Pure vanilla DOM;\n * everything it computes goes through @nakednous/tree, nothing it draws.\n *\n * const host = createHost(canvas, { onFrame })\n * host.pointer · host.view · host.players\n * host.width · host.height · host.dpr · host.dt · host.clock()\n * host.handle(opts) · host.router(handles, opts)\n * host.cameraHelm(cam, opts) · host.poseHelm(opts)\n * host.poseTrack(opts) · host.cameraTrack(cam, opts)\n * host.hid(opts) · host.gamepad(opts)\n * host.image(url) · host.video(opts) · host.raster(draw, w, h) · host.mesh(url) · host.model(url)\n * host.labels // the DOM label layer, created on first access\n * host.orbit(cam, opts)\n * host.tick(dt) // external-loop mode\n * host.dispose()\n *\n * Two loop modes. With { onFrame } the host runs requestAnimationFrame\n * (overridable through { raf, caf }): each frame computes dt (clamped to\n * 50 ms), ticks the players, calls onFrame(dt, host), then flushes the\n * pointer source. Without it the application, or the p5 adapter from\n * predraw, calls host.tick(dt) = players.tick(dt) and host.pointer.flush()\n * once its consumers ran. Nothing else in the host cares who owns the loop.\n *\n * The frame order inside onFrame: install the camera (which fills\n * host.view), update handles or routers, fall through to the orbit when\n * nothing grabbed, draw.\n */\n\n'use strict';\n\nimport { createView } from './view.js';\nimport { observeCanvas } from './canvas.js';\nimport { createPointer } from './pointer.js';\nimport { createPlayers, createLoop } from './loop.js';\nimport { Handle, validConstraint } from './handle.js';\nimport { PointerRouter } from './router.js';\nimport { cameraHelm, poseHelm } from './helm.js';\nimport { poseTrack, cameraTrack } from './track.js';\nimport { createHid, createGamepad } from './stream.js';\nimport { loadImage, createVideo, raster, loadMesh, loadModel } from './media.js';\nimport { createLabels } from './labels.js';\nimport { createOrbit } from './orbit.js';\n\nexport { createView } from './view.js';\nexport { observeCanvas, measureCanvas } from './canvas.js';\nexport { createPointer } from './pointer.js';\nexport { createPlayers, createLoop } from './loop.js';\nexport { Handle, VIEW, isConstraint, validConstraint } from './handle.js';\nexport { PointerRouter } from './router.js';\nexport { cameraHelm, poseHelm, helmBasis } from './helm.js';\nexport { poseTrack, cameraTrack, TrackHandles } from './track.js';\nexport { createHid, createGamepad, decodeSpaceNavigator, HID_FILTERS, GAMEPAD_MAP } from './stream.js';\nexport { loadImage, createVideo, raster, loadMesh, loadModel } from './media.js';\nexport { decodeRGBE, encodeRGBE } from './hdr.js';\nexport { createLabels } from './labels.js';\nexport { createOrbit } from './orbit.js';\n\nconst _now = () => (typeof performance !== 'undefined' && performance.now) ? performance.now() : Date.now();\n\n/**\n * Create the host context of a canvas.\n *\n * @param {HTMLCanvasElement} canvas\n * @param {{ ndcZMin?:number, onFrame?:function(number, object):void, raf?:function,\n * caf?:function, onSize?:function(number, number, number):void }} [opts]\n * ndcZMin: the GPU API's NDC-z convention, WEBGL (default) or WEBGPU —\n * written once, never detected. onFrame: the host's own loop; absent,\n * external-tick mode. onSize(width, height, dpr): the bridge's chance\n * to resize its drawing buffer.\n * @returns {object} The host.\n */\nexport function createHost(canvas, opts) {\n const o = opts || {};\n const t0 = _now();\n const constructs = new Set();\n let loop = null, observer = null, labels = null;\n const host = {\n canvas,\n width: 0, height: 0, dpr: 1,\n dt: 0,\n view: null, pointer: null, players: null,\n\n /** Seconds since the host was created. */\n clock() { return (_now() - t0) / 1000; },\n\n /**\n * External-loop mode: tick the players with dt (seconds). The caller\n * flushes the pointer source once its consumers ran.\n * @param {number} dt\n */\n tick(dt) { host.dt = dt; host.players.tick(dt); },\n\n /**\n * A draggable handle on this canvas — see host/handle. Returns null on\n * an invalid `constraint`.\n * @param {object} opts\n * @returns {Handle|null}\n */\n handle(opts) {\n const o = opts || {};\n if (!validConstraint(o.constraint)) {\n console.error('[host] handle: `constraint` must be SPHERE, PLANE, AXIS, DIAL, VIEW, or a contract-conforming constraint object; got ' + String(o.constraint) + '.');\n return null;\n }\n return host.register(new Handle(host, o));\n },\n\n /**\n * A shared pick over overlapping handles — see host/router.\n * @param {Handle[]} handles\n * @param {{ hover?:boolean }} [opts]\n * @returns {PointerRouter}\n */\n router(handles, opts) { return host.register(new PointerRouter(host, handles, opts)); },\n\n /** Fly a camera state body-relative from a 6-DOF rate stream — see host/helm. */\n cameraHelm(cam, opts) { return cameraHelm(host, cam, opts); },\n /** Integrate a 6-DOF rate stream into a pose in a declared frame — see host/helm. */\n poseHelm(opts) { return poseHelm(host, opts); },\n /** A core PoseTrack ticked while it plays — see host/track. */\n poseTrack(opts) { return poseTrack(host, opts); },\n /** A core CameraTrack evaluating into a camera state while it plays — see host/track. */\n cameraTrack(cam, opts) { return cameraTrack(host, cam, opts); },\n /** A WebHID 6-DOF rate stream — see host/stream. */\n hid(opts) { return createHid(host, opts); },\n /** A Gamepad rate stream, polled each tick — see host/stream. */\n gamepad(opts) { return createGamepad(host, opts); },\n /** Fetch an image into an ImageBitmap — see host/media. */\n image(url, opts) { return loadImage(url, opts); },\n /** A hidden <video> from a file or the camera, disposed with the host — see host/media. */\n video(opts) { return host.register(createVideo(opts)); },\n /** Draw through a 2D context into a texture source — see host/media. */\n raster(draw, w, h, opts) { return raster(draw, w, h, opts); },\n /** Fetch one mesh — the arrays shape with its bounds — from an OBJ or glTF file, or any format through opts.parse — see host/media. */\n mesh(url, opts) { return loadMesh(url, opts); },\n /** Fetch a model with its structure: parts, nodes, skins, clips — see host/media. */\n model(url, opts) { return loadModel(url, opts); },\n /**\n * The label layer — see host/labels. Created on first access, so a\n * canvas that never labels never gets a layer nor a repositioned parent.\n */\n get labels() {\n if (labels === null) labels = createLabels(host);\n return labels;\n },\n /** Whether the label layer exists, without creating it. */\n get hasLabels() { return labels !== null; },\n /** The fall-through camera gesture on unclaimed pointers — see host/orbit. */\n orbit(cam, opts) { return createOrbit(host, cam, opts); },\n\n /** Register a construct with dispose() so host.dispose() releases it. */\n register(c) { if (c) constructs.add(c); return c; },\n /** Unregister a construct. */\n unregister(c) { constructs.delete(c); },\n\n /** Stop the loop, disconnect the observer, remove every listener, dispose every construct. */\n dispose() {\n if (loop) loop.stop();\n for (const c of [...constructs]) { if (typeof c.dispose === 'function') c.dispose(); }\n constructs.clear();\n labels = null;\n observer.dispose();\n host.pointer.dispose();\n host.players.clear();\n },\n };\n\n host.view = createView({ ndcZMin: o.ndcZMin });\n host.players = createPlayers();\n host.pointer = createPointer(canvas, host.view);\n observer = observeCanvas(canvas, (w, h, dpr) => {\n host.width = w; host.height = h; host.dpr = dpr;\n host.view.resize(w, h);\n if (labels) labels.resize(w, h);\n if (typeof o.onSize === 'function') o.onSize(w, h, dpr);\n });\n\n if (typeof o.onFrame === 'function') {\n loop = createLoop({\n raf: o.raf, caf: o.caf,\n onFrame: (dt) => {\n host.dt = dt;\n host.players.tick(dt);\n o.onFrame(dt, host);\n host.pointer.flush();\n },\n });\n loop.start();\n }\n return host;\n}\n"],"names":["_now","_vx"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/view.js","../src/canvas.js","../src/pointer.js","../src/loop.js","../src/handle.js","../src/router.js","../src/helm.js","../src/track.js","../src/stream.js","../src/obj.js","../src/gltf.js","../src/media.js","../src/labels.js","../src/orbit.js","../src/hdr.js","../src/index.js"],"sourcesContent":["/**\n * @file The view bag — the matrices every pick, solve, label and orbit reads.\n * @module host/view\n * @license AGPL-3.0-only\n *\n * The matrices bag mapLocation takes, plus the signed viewport and the NDC\n * convention:\n *\n * view = {\n * mat4Proj, mat4View, mat4PV, mat4PVInv, // Float32Array(16) each, host-owned\n * mat4Eye, // inverse of mat4View — EYE → WORLD\n * vp, // [0, h, w, −h] — y-down, logical canvas px\n * ndcZMin, // WEBGL | WEBGPU, set once at creation\n * stale, // true until a set() with an invertible P · V\n * set(P, V) // copy P and V, recompute PV and PVInv\n * setCamera(cam) // build V and P from a camera state, then set\n * resize(width, height) // the canvas observer's write into vp\n * }\n *\n * mat4PVInv and mat4Eye are recomputed on set, once per frame, so unproject\n * and every mapping from SCREEN or EYE share them. A degenerate P · V or V\n * leaves the previous inverses and marks the bag stale; consumers treat a\n * stale bag as \"no pick this frame\".\n */\n\n'use strict';\n\nimport { WEBGL, mat4Mul, mat4Invert, cameraView, cameraProj } from '@nakednous/tree';\n\nconst _inv = new Float32Array(16); // inverse scratch: the bag keeps its previous inverse on failure\nconst _P = new Float32Array(16); // setCamera's projection\nconst _V = new Float32Array(16); // setCamera's view\n\nfunction _identity(m) {\n m.fill(0);\n m[0] = m[5] = m[10] = m[15] = 1;\n return m;\n}\n\n/**\n * Create a view bag. The matrices start at identity and the bag stale, so a\n * consumer reading it before the first set() picks nothing.\n *\n * @param {{ ndcZMin?:number, width?:number, height?:number }} [opts]\n * ndcZMin: WEBGL (−1, default) or WEBGPU (0) — written once here, never\n * detected. width / height: the initial logical canvas size.\n * @returns {object} The view bag.\n */\nexport function createView(opts) {\n const o = opts || {};\n const w = o.width || 0, h = o.height || 0;\n const view = {\n mat4Proj: _identity(new Float32Array(16)),\n mat4View: _identity(new Float32Array(16)),\n mat4PV: _identity(new Float32Array(16)),\n mat4PVInv: _identity(new Float32Array(16)),\n mat4Eye: _identity(new Float32Array(16)),\n vp: [0, h, w, -h],\n ndcZMin: o.ndcZMin === 0 ? 0 : WEBGL,\n stale: true,\n\n /**\n * Install a projection and a view: both copied, P · V with its inverse\n * and the eye matrix (V's inverse) recomputed. A singular product or\n * view keeps the previous inverses and marks the bag stale.\n * @param {ArrayLike<number>} P Projection mat4.\n * @param {ArrayLike<number>} V View mat4 (world → eye).\n * @returns {object} this\n */\n set(P, V) {\n for (let i = 0; i < 16; i++) { view.mat4Proj[i] = P[i]; view.mat4View[i] = V[i]; }\n mat4Mul(view.mat4PV, view.mat4Proj, view.mat4View);\n if (mat4Invert(_inv, view.mat4PV) === null) { view.stale = true; return view; }\n view.mat4PVInv.set(_inv);\n if (mat4Invert(_inv, view.mat4View) === null) { view.stale = true; return view; }\n view.mat4Eye.set(_inv);\n view.stale = false;\n return view;\n },\n\n /**\n * Install a camera state: cameraView and cameraProj at the viewport's\n * aspect under the bag's ndcZMin, then set(). A state with both fov and\n * halfHeight null keeps the projection already installed.\n * @param {object} cam Camera state.\n * @returns {object} this\n */\n setCamera(cam) {\n const aspect = view.vp[3] !== 0 ? view.vp[2] / -view.vp[3] : 1;\n cameraView(_V, cam);\n const P = cameraProj(_P, cam, aspect, view.ndcZMin) || view.mat4Proj;\n return view.set(P, _V);\n },\n\n /**\n * Write a new logical canvas size into vp: [0, height, width, −height].\n * @param {number} width\n * @param {number} height\n * @returns {object} this\n */\n resize(width, height) {\n view.vp[1] = height; view.vp[2] = width; view.vp[3] = -height;\n return view;\n },\n };\n return view;\n}\n","/**\n * @file The canvas observer — logical size and device pixel ratio.\n * @module host/canvas\n * @license AGPL-3.0-only\n *\n * A ResizeObserver on the canvas element plus devicePixelRatio tracking:\n * on change the observer reports the logical size in CSS px and the dpr to\n * its callback, which the context uses to update host.width / host.height /\n * host.dpr, the view bag's vp, the label layer and the bridge's onSize. The\n * observer never touches canvas.width / canvas.height — that is the\n * renderer's decision.\n *\n * Without a ResizeObserver (a headless run) the size is measured once from\n * the element's bounding rectangle, falling back to its width / height\n * attributes.\n */\n\n'use strict';\n\n/**\n * Measure a canvas: logical CSS size from its bounding rectangle when laid\n * out, else its width / height attributes; dpr from the window.\n * @param {HTMLCanvasElement} canvas\n * @param {number[]} out3 [width, height, dpr] destination.\n * @returns {number[]} out3\n */\nexport function measureCanvas(canvas, out3) {\n const r = typeof canvas.getBoundingClientRect === 'function' ? canvas.getBoundingClientRect() : null;\n const laidOut = r && r.width > 0 && r.height > 0;\n out3[0] = laidOut ? r.width : (canvas.width || 0);\n out3[1] = laidOut ? r.height : (canvas.height || 0);\n out3[2] = (typeof window !== 'undefined' && window.devicePixelRatio) || 1;\n return out3;\n}\n\n/**\n * Observe a canvas's logical size and dpr. `onChange(width, height, dpr)`\n * fires once immediately with the current measure and again on every\n * change; a change is reported only when a value differs.\n *\n * @param {HTMLCanvasElement} canvas\n * @param {function(number, number, number):void} onChange\n * @returns {{ width:number, height:number, dpr:number, measure():void, dispose():void }}\n */\nexport function observeCanvas(canvas, onChange) {\n const m = [0, 0, 1];\n const obs = { width: -1, height: 0, dpr: 1, measure, dispose };\n let ro = null;\n const onWindow = () => measure();\n\n function measure() {\n measureCanvas(canvas, m);\n if (m[0] === obs.width && m[1] === obs.height && m[2] === obs.dpr) return;\n obs.width = m[0]; obs.height = m[1]; obs.dpr = m[2];\n onChange(obs.width, obs.height, obs.dpr);\n }\n\n function dispose() {\n if (ro) { ro.disconnect(); ro = null; }\n if (typeof window !== 'undefined' && window.removeEventListener) window.removeEventListener('resize', onWindow);\n }\n\n measure(); // width −1 makes the first measure report\n if (typeof ResizeObserver !== 'undefined') {\n ro = new ResizeObserver(() => measure());\n ro.observe(canvas);\n }\n // A zoom changes devicePixelRatio and fires resize; the observer alone would miss it.\n if (typeof window !== 'undefined' && window.addEventListener) window.addEventListener('resize', onWindow);\n return obs;\n}\n","/**\n * @file The pointer source — a typed event buffer with claims, one per canvas.\n * @module host/pointer\n * @license AGPL-3.0-only\n *\n * Shared by every handle, router and orbit on a canvas. Listeners only\n * record; nothing solves in a listener:\n *\n * - pointerdown · pointermove · pointerup · pointercancel on the canvas,\n * keydown (Esc) on the window.\n * - Coordinates in screen space — the surface's logical pixels, top-left, y\n * down — through the element's bounding rectangle: (clientX − rect.left) ·\n * (width / rect.width), the logical size read off the view bag's vp. These\n * are the numbers mapLocation(SCREEN) and vp expect (a viewport of negative\n * height), so a CSS-scaled canvas maps correctly.\n * - Per pointer: an entry { id, x, y, seq, down, up, cancel, owner }, kept\n * from its press until the frame after its release; `seq` counts moves,\n * so a consumer remembers the last seq it consumed and reads only new\n * motion. Multitouch is per-pointer by construction; the mouse is one\n * more pointer.\n * - Presses queue in order for the frame (`presses`); consumers read the\n * queue inside the frame and claim what they take. Several same-frame\n * presses on different members all land.\n * - Claims: claim(id, owner) captures the pointer on the canvas so a drag\n * that leaves it keeps flowing; release(id), up and cancel release the\n * capture. An unclaimed pointer is what the orbit sees.\n * - Esc sets the cancel flag on every claimed pointer.\n * - flush() ends the frame: the press queue empties and released pointers\n * leave the map. The loop calls it after onFrame; an external loop calls\n * it after its consumers ran (the p5 adapter from postdraw).\n */\n\n'use strict';\n\n/**\n * Create the pointer source of a canvas.\n *\n * @param {HTMLCanvasElement} canvas\n * @param {object} view The view bag; vp[2] and −vp[3] are the logical size.\n * @returns {object} The source: { presses, pointers, get, claim, release,\n * ownerOf, flush, dispose }.\n */\nexport function createPointer(canvas, view) {\n const pointers = new Map(); // id → entry\n const presses = []; // this frame's presses, in order: { id, x, y }\n const xy = [0, 0];\n\n const toCanvas = (e, out) => {\n const r = canvas.getBoundingClientRect ? canvas.getBoundingClientRect() : null;\n const w = view.vp[2], h = -view.vp[3];\n if (r && r.width > 0 && r.height > 0 && w > 0 && h > 0) {\n out[0] = (e.clientX - r.left) * (w / r.width);\n out[1] = (e.clientY - r.top) * (h / r.height);\n } else {\n out[0] = e.clientX; out[1] = e.clientY;\n }\n return out;\n };\n\n const entry = (id) => {\n let p = pointers.get(id);\n if (!p) { p = { id, x: 0, y: 0, seq: 0, down: false, up: false, cancel: false, owner: null }; pointers.set(id, p); }\n return p;\n };\n\n const capture = (id, on) => {\n const f = on ? canvas.setPointerCapture : canvas.releasePointerCapture;\n if (typeof f !== 'function') return;\n try { f.call(canvas, id); } catch (_) { /* best effort: a synthetic or already-released id */ }\n };\n\n const onDown = (e) => {\n const p = entry(e.pointerId);\n toCanvas(e, xy);\n p.x = xy[0]; p.y = xy[1]; p.seq++;\n p.down = true; p.up = false; p.cancel = false;\n presses.push({ id: p.id, x: p.x, y: p.y });\n };\n const onMove = (e) => {\n const p = entry(e.pointerId);\n toCanvas(e, xy);\n p.x = xy[0]; p.y = xy[1]; p.seq++;\n };\n const onUp = (e) => {\n const p = pointers.get(e.pointerId);\n if (!p) return;\n toCanvas(e, xy);\n p.x = xy[0]; p.y = xy[1]; p.seq++;\n p.up = true;\n capture(p.id, false);\n };\n const onCancel = (e) => {\n const p = pointers.get(e.pointerId);\n if (!p) return;\n p.cancel = true;\n capture(p.id, false);\n };\n const onKey = (e) => {\n if (e.key !== 'Escape') return;\n for (const p of pointers.values()) if (p.owner !== null) p.cancel = true;\n };\n\n canvas.addEventListener('pointerdown', onDown);\n canvas.addEventListener('pointermove', onMove);\n canvas.addEventListener('pointerup', onUp);\n canvas.addEventListener('pointercancel', onCancel);\n if (typeof window !== 'undefined' && window.addEventListener) window.addEventListener('keydown', onKey);\n\n const source = {\n /** This frame's presses in order, each { id, x, y }; emptied by flush(). */\n presses,\n /** The live pointer entries by id. */\n pointers,\n\n /**\n * The entry of a pointer, or null when it is not on the canvas.\n * @param {number} id\n * @returns {object|null}\n */\n get(id) { return pointers.get(id) || null; },\n\n /**\n * Claim a pointer for an owner and capture it on the canvas. Fails when\n * another owner holds it or the pointer is unknown.\n * @param {number} id\n * @param {object} owner\n * @returns {boolean} claimed\n */\n claim(id, owner) {\n const p = pointers.get(id);\n if (!p || (p.owner !== null && p.owner !== owner)) return false;\n p.owner = owner;\n capture(id, true);\n return true;\n },\n\n /**\n * Release a claim and the capture with it. No-op for an unclaimed id.\n * @param {number} id\n */\n release(id) {\n const p = pointers.get(id);\n if (!p || p.owner === null) return;\n p.owner = null;\n capture(id, false);\n },\n\n /**\n * The owner holding a pointer, or null.\n * @param {number} id\n * @returns {object|null}\n */\n ownerOf(id) { const p = pointers.get(id); return p ? p.owner : null; },\n\n /**\n * End the frame: the press queue empties; pointers that released or\n * cancelled leave the map (their claims dropped), the rest keep their\n * position and seq.\n */\n flush() {\n presses.length = 0;\n for (const [id, p] of pointers) {\n if (p.up || p.cancel) { p.owner = null; pointers.delete(id); }\n }\n },\n\n /** Remove every listener and release every capture. */\n dispose() {\n canvas.removeEventListener('pointerdown', onDown);\n canvas.removeEventListener('pointermove', onMove);\n canvas.removeEventListener('pointerup', onUp);\n canvas.removeEventListener('pointercancel', onCancel);\n if (typeof window !== 'undefined' && window.removeEventListener) window.removeEventListener('keydown', onKey);\n for (const p of pointers.values()) if (p.owner !== null) capture(p.id, false);\n pointers.clear();\n presses.length = 0;\n },\n };\n return source;\n}\n","/**\n * @file The players registry and the frame loop.\n * @module host/loop\n * @license AGPL-3.0-only\n *\n * A player is { tick(dt) → boolean }, removed from the registry when it\n * returns false. Iteration snapshots the set, so a player may remove itself\n * or add another during a tick. Tracks register through their activation\n * hooks, helms until disposed.\n *\n * The loop is optional: with it, requestAnimationFrame (overridable — the\n * seam a WebXR session fills) drives onFrame(dt) with dt in seconds clamped\n * to 50 ms, the stalled-tab guard; without it the application ticks the\n * players from its own loop.\n */\n\n'use strict';\n\n/**\n * Create a players registry.\n * @returns {{ add(player):object, remove(player):object, has(player):boolean,\n * tick(dt:number):void, size:number, clear():void }}\n */\nexport function createPlayers() {\n const set = new Set();\n const players = {\n /** Register a player; adding one already present is a no-op. */\n add(player) { if (player) set.add(player); return players; },\n /** Unregister a player. */\n remove(player) { set.delete(player); return players; },\n /** Whether a player is registered. */\n has(player) { return set.has(player); },\n /** Tick every player with dt (seconds); one returning false is removed. */\n tick(dt) {\n for (const p of [...set]) {\n if (!set.has(p)) continue; // removed by an earlier player this tick\n if (p.tick(dt) === false) set.delete(p);\n }\n },\n /** Registered count. */\n get size() { return set.size; },\n /** Unregister every player. */\n clear() { set.clear(); },\n };\n return players;\n}\n\nconst _now = () => (typeof performance !== 'undefined' && performance.now) ? performance.now() : Date.now();\n\n/**\n * Create a frame loop. `onFrame(dt)` runs once per animation frame with the\n * clamped period in seconds; start() schedules, stop() cancels.\n *\n * @param {{ onFrame:function(number):void, raf?:function, caf?:function,\n * clampMs?:number, now?:function():number }} opts\n * raf / caf default to the window's requestAnimationFrame /\n * cancelAnimationFrame; clampMs defaults to 50.\n * @returns {{ start():object, stop():object, running:boolean, dt:number }}\n */\nexport function createLoop(opts) {\n const o = opts || {};\n const raf = o.raf || ((cb) => requestAnimationFrame(cb));\n const caf = o.caf || ((id) => cancelAnimationFrame(id));\n const now = o.now || _now;\n const clamp = (o.clampMs ?? 50) / 1000;\n let handle = null, last = 0;\n const loop = {\n running: false,\n dt: 0,\n start() {\n if (loop.running) return loop;\n loop.running = true;\n last = now();\n const frame = () => {\n if (!loop.running) return;\n const t = now();\n loop.dt = Math.min((t - last) / 1000, clamp);\n last = t;\n o.onFrame(loop.dt);\n if (loop.running) handle = raf(frame);\n };\n handle = raf(frame);\n return loop;\n },\n stop() {\n loop.running = false;\n if (handle !== null) { caf(handle); handle = null; }\n return loop;\n },\n };\n return loop;\n}\n","/**\n * @file The handle controller — a draggable constraint driven from the pointer source.\n * @module host/handle\n * @license AGPL-3.0-only\n *\n * Wraps a core Constraint (@nakednous/tree) with the transport a draggable\n * 3D control needs: presses, moves and releases from the host's pointer\n * source, a pixel → ray unprojection through the host's view bag, an\n * analytic pick against the constraint's proxy, and a host-driven update()\n * lifecycle. No drawing: a bridge draws the locus (locusLines) and the dot.\n *\n * ── update() ordering contract ─────────────────────────────────────────────\n * update() is host-driven, before the orbit, because the orbit gate depends\n * on the grab resolving first:\n *\n * onFrame() { setCamera(cam); if (!h.update()) orbit.update(); scene() }\n *\n * ── Pick ───────────────────────────────────────────────────────────────────\n * The pointer's ray is unproject(x, y, view) in WORLD; the grab size is\n * grabPx converted to world units through pixelRatio at the proxy's depth;\n * the constraint's proxy(ray, radius) answers t or Infinity. Built-in kinds\n * carry their proxy (a sphere at the point, the DIAL's ring); a custom kind\n * supplies one or gets the sphere. solve() runs in WORLD; value() converts.\n *\n * ── Pointer source ─────────────────────────────────────────────────────────\n * update() reads the frame's press queue and the tracked pointer's entry\n * (seq counts moves; up / cancel end the gesture; Esc cancels every claimed\n * pointer). A grab claims the pointer, which captures it on the canvas; a\n * miss leaves it unclaimed for the orbit. The whole gesture keys to one\n * pointerId, so on a shared surface each handle tracks its own finger.\n *\n * ── Constraint kinds ───────────────────────────────────────────────────────\n * Core SPHERE / PLANE / AXIS / DIAL pass straight through. VIEW is a core\n * PLANE re-aimed at the camera each solve — a screen-parallel drag plane\n * through the current point — reported as a world position; its constraint\n * carries `view: true`, the flag locusLines reads. A custom kind is a\n * contract-conforming object (kind / solve / value / seed, optional scalar /\n * azEl / aim / proxy / locus) passed as `constraint`.\n *\n * ── Snap / hover / cancel / from ───────────────────────────────────────────\n * snap quantises at the solve seam: an angular step for SPHERE (az/el) and\n * DIAL (θ), a world grid for PLANE / AXIS / VIEW (PLANE re-projecting).\n * hover is a lone-handle opt-in (a router provides it shared). Cancel — Esc,\n * pointercancel, cancel() — reverts to the value captured at grab, restores\n * the binding and fires onCancel instead of onRelease. `from` names the space\n * the symbolic basis (axis / normal / zero) resolves FROM into WORLD each idle\n * frame through mapDirection on the view bag — WORLD, EYE, or a mat4 —\n * frozen at grab.\n */\n\n'use strict';\n\nimport {\n createConstraint, dirFromAzEl, unproject, rayHitSphere,\n mapLocation, mapDirection, pixelRatio, mat4Invert,\n SPHERE, PLANE, AXIS, DIAL, POINT, DIRECTION, WORLD, MATRIX,\n} from '@nakednous/tree';\n\n/** The screen-parallel free-translate constraint (a core PLANE re-aimed each solve). */\nexport const VIEW = 4;\n\n// Module-level scratch — update() and value() run to completion within one\n// frame with no reentrancy across handles.\nconst _rayO = [0, 0, 0]; // pick ray origin, WORLD\nconst _rayD = [0, 0, 0]; // pick ray unit direction, WORLD\n/** The ray scratch a handle's _ray(x, y) fills — the router's shared pick reads it. */\nexport const rayScratch = { o: _rayO, d: _rayD };\nconst _v3 = [0, 0, 0]; // value() extraction scratch\nconst _q2 = [0, 0]; // az/el snap scratch\nconst _b0 = [0, 0, 0]; // resolved θ = 0 reference\nconst _b2 = [0, 0, 0]; // resolved axis / normal\nconst _frameInv = new Float32Array(16);\n\n// The mapping bag mapLocation / mapDirection take: the view's matrices plus\n// the frames a call names (a mat4 `from` or `to` is the MATRIX space).\nconst _bag = { mat4Proj: null, mat4View: null, mat4PV: null, mat4PVInv: null, mat4Eye: null,\n fromFrame: null, toFrame: null, toFrameInv: null };\nconst _isMat = (s) => s != null && typeof s !== 'string';\nconst _space = (s) => (_isMat(s) ? MATRIX : s);\n\nfunction _bagOf(view, from, to) {\n _bag.mat4Proj = view.mat4Proj; _bag.mat4View = view.mat4View;\n _bag.mat4PV = view.mat4PV; _bag.mat4PVInv = view.mat4PVInv; _bag.mat4Eye = view.mat4Eye;\n _bag.fromFrame = _isMat(from) ? from : null;\n if (_isMat(to)) { _bag.toFrame = to; _bag.toFrameInv = mat4Invert(_frameInv, to) ? _frameInv : null; }\n else { _bag.toFrame = null; _bag.toFrameInv = null; }\n return _bag;\n}\n\nconst _norm3 = (o) => {\n const l = Math.hypot(o[0], o[1], o[2]) || 1;\n o[0] /= l; o[1] /= l; o[2] /= l;\n return o;\n};\n\n// Orthonormal in-plane basis for a unit normal n, seeded from the world axis\n// least aligned with it (a DIAL's θ = 0 reference when `from` gives none).\nconst _basisFromNormal = (n, ub, vb) => {\n const ax = Math.abs(n[0]), ay = Math.abs(n[1]), az = Math.abs(n[2]);\n let rx = 0, ry = 0, rz = 0;\n if (ax <= ay && ax <= az) rx = 1; else if (ay <= az) ry = 1; else rz = 1;\n ub[0] = ry*n[2] - rz*n[1]; ub[1] = rz*n[0] - rx*n[2]; ub[2] = rx*n[1] - ry*n[0];\n _norm3(ub);\n vb[0] = n[1]*ub[2] - n[2]*ub[1]; vb[1] = n[2]*ub[0] - n[0]*ub[2]; vb[2] = n[0]*ub[1] - n[1]*ub[0];\n};\n\n// Read component i of an array or {x, y, z}, falling back to d.\nconst _vx = (v, i, d) => {\n if (v == null) return d;\n const c = i === 0 ? v.x : i === 1 ? v.y : v.z;\n return c ?? v[i] ?? d;\n};\n\n/** Contract check for a custom constraint object. */\nexport const isConstraint = (c) =>\n c && typeof c === 'object' &&\n typeof c.solve === 'function' &&\n typeof c.value === 'function' &&\n typeof c.seed === 'function';\n\n/**\n * The handle controller. Stateful and long-lived, like a track; driven from\n * the frame through update(), read with value(out, opts).\n */\nexport class Handle {\n /**\n * @param {object} host The host context (its pointer source and view bag).\n * @param {object} opts See host.handle().\n */\n constructor(host, opts) {\n this._host = host;\n this._pointer = host.pointer;\n this._view = host.view;\n\n const kind = opts.constraint;\n this._isView = (kind === VIEW);\n if (isConstraint(kind)) {\n this._constraint = kind;\n } else {\n const coreKind = this._isView ? PLANE : kind;\n // Vector opts pass straight through — the core duck-types arrays and {x, y, z}.\n this._constraint = createConstraint(coreKind, {\n radius: opts.radius, report: opts.report, anchor: opts.anchor,\n normal: opts.normal, axis: opts.axis, zero: opts.zero, extent: opts.extent,\n });\n if (this._isView) this._constraint.view = true; // the flag locusLines reads\n }\n\n // Deferred constraint frame: the symbolic basis and the space it resolves from.\n this._from = null; this._fromDir = null; this._fromZero = null;\n if (opts.from != null && opts.from !== WORLD) {\n const custom = isConstraint(kind);\n const dirOpt = (kind === PLANE) ? opts.normal : (opts.axis ?? opts.normal);\n const ok = !this._isView &&\n (kind === PLANE || kind === AXIS || kind === DIAL ||\n (custom && typeof this._constraint.aim === 'function'));\n if (!ok) {\n console.error('[host] handle: `from` needs an aimable constraint — PLANE, AXIS, DIAL, or a custom kind exposing aim(); ignoring.');\n } else if (custom && dirOpt == null) {\n console.error('[host] handle: `from` on a custom kind needs a symbolic `axis` (or `normal`) to resolve; ignoring.');\n } else {\n this._from = opts.from;\n this._fromDir = [_vx(dirOpt, 0, kind === AXIS ? 1 : 0), _vx(dirOpt, 1, kind === AXIS ? 0 : 1), _vx(dirOpt, 2, 0)];\n if (opts.zero != null) {\n this._fromZero = [_vx(opts.zero, 0, 1), _vx(opts.zero, 1, 0), _vx(opts.zero, 2, 0)];\n } else if (kind === DIAL) {\n // Derive the θ = 0 reference once, in the FROM space, so axis and zero co-rotate.\n _b2[0] = this._fromDir[0]; _b2[1] = this._fromDir[1]; _b2[2] = this._fromDir[2];\n _norm3(_b2);\n const r0 = [0, 0, 0], r1 = [0, 0, 0];\n _basisFromNormal(_b2, r0, r1);\n this._fromZero = r0;\n }\n }\n }\n\n this._enabled = opts.enabled !== false;\n this._grabPx = Number.isFinite(opts.grabPx) ? opts.grabPx : 12;\n this._snap = opts.snap ?? null;\n this._hover = opts.hover === true;\n this._hovered = false;\n this._hid = null; this._hseq = -1; // the pointer last hover-tested, and its seq then\n\n // Transport state: one pointerId per gesture, its last consumed move seq\n // and its position in logical canvas px; _routed hands the down step to a router.\n this._grabbed = false;\n this._pid = null;\n this._seq = -1;\n this._ptr = [0, 0];\n this._routed = false;\n\n // The proxy: its world position and the grab radius in world units.\n this._proxyPos = [0, 0, 0];\n this._proxyRad = 0;\n\n // Cancel state — the value (and scalar, for winding) captured at grab.\n this._saved = [0, 0, 0];\n this._savedS = 0;\n\n // Hooks — user-facing, then the lib-space seams a router or a track owns.\n this.onGrab = typeof opts.onGrab === 'function' ? opts.onGrab : null;\n this.onRelease = typeof opts.onRelease === 'function' ? opts.onRelease : null;\n this.onChange = typeof opts.onChange === 'function' ? opts.onChange : null;\n this.onCancel = typeof opts.onCancel === 'function' ? opts.onCancel : null;\n this._onGrab = null; this._onRelease = null; this._onChange = null; this._onCancel = null;\n\n // Binding — a normalised { get, set } accessor; _bindVal the reused value array.\n this._binder = null;\n this._bindVal = [0, 0, 0];\n\n if (opts.bind != null) this.bind(opts.bind);\n }\n\n // ── Lifecycle ───────────────────────────────────────────────────────────\n\n /**\n * Resolve the grab and re-solve from the pointer. Call first in the frame,\n * before the orbit; a routed handle is updated by its router. Returns the\n * grabbed state so the orbit gate can short-circuit; a disabled handle\n * returns false.\n * @returns {boolean} grabbed\n */\n update() {\n if (!this._enabled) {\n if (this._pid !== null && this._pointer) this._pointer.release(this._pid);\n this._grabbed = false; this._hovered = false; this._pid = null;\n return false;\n }\n const src = this._pointer;\n if (!src) return false;\n if (this._from && !this._grabbed) this._resolveFrame();\n\n // Fresh press (unrouted): the first unclaimed press this frame is\n // hit-tested at its pixel; a hit claims the pointer, a miss leaves it.\n if (!this._routed && this._pid === null) {\n for (const pr of src.presses) {\n if (src.ownerOf(pr.id) !== null) continue;\n this._ptr[0] = pr.x; this._ptr[1] = pr.y;\n if (this._pickAt(pr.x, pr.y)) { this._adopt(pr.id, pr.x, pr.y); break; }\n }\n }\n\n if (this._pid !== null) {\n const e = src.get(this._pid);\n if (!e) {\n this._cancelNow(); // the entry left before this handle saw its end\n } else {\n if (this._grabbed && e.seq !== this._seq && !e.cancel) {\n this._seq = e.seq;\n this._ptr[0] = e.x; this._ptr[1] = e.y;\n this._solveFromPointer(e.x, e.y);\n this._applySnap();\n this._afterSolve();\n }\n if (e.cancel) {\n this._cancelNow();\n } else if (e.up) {\n src.release(this._pid);\n this._grabbed = false;\n this._pid = null;\n this.onRelease && this.onRelease(this);\n this._onRelease && this._onRelease(this);\n }\n }\n }\n\n // Hover: a lone handle tests the latest unclaimed pointer motion.\n if (this._grabbed) {\n this._hovered = true;\n } else if (this._hover && !this._routed) {\n for (const e of src.pointers.values()) {\n if (e.owner !== null) continue;\n if (e.id === this._hid && e.seq === this._hseq) continue;\n this._hid = e.id; this._hseq = e.seq;\n this._hovered = this._pickAt(e.x, e.y);\n break;\n }\n }\n return this._grabbed;\n }\n\n _beginGrab() {\n const c = this._constraint;\n c.value(this._saved, POINT);\n this._savedS = typeof c.scalar === 'function' ? c.scalar() : 0;\n this._grabbed = true;\n this.onGrab && this.onGrab(this);\n this._onGrab && this._onGrab(this);\n }\n\n /** Router seam: adopt a pointer a shared pick decided; claims it through the source. */\n _adopt(pointerId, x, y) {\n const e = this._pointer.get(pointerId);\n this._pid = pointerId;\n this._seq = e ? e.seq : -1;\n this._ptr[0] = x; this._ptr[1] = y;\n this._pointer.claim(pointerId, this);\n this._beginGrab();\n }\n\n /**\n * Revert the drag in flight to the value captured at grab (exact θ winding\n * included), restore the binding, fire onCancel. No-op when not grabbed.\n * Chainable.\n * @returns {Handle} this\n */\n cancel() {\n if (this._grabbed) this._cancelNow();\n return this;\n }\n\n _cancelNow() {\n const c = this._constraint;\n if (this._isView) {\n c.pt[0] = this._saved[0]; c.pt[1] = this._saved[1]; c.pt[2] = this._saved[2];\n } else if (c.kind === DIAL) {\n c.s = this._savedS;\n c._dialPoint();\n } else {\n c.seed(this._saved[0], this._saved[1], this._saved[2], POINT);\n }\n if (this._binder) this._binder.set(this.value(this._bindVal));\n this._grabbed = false;\n if (this._pid !== null && this._pointer) this._pointer.release(this._pid);\n this._pid = null;\n this.onCancel && this.onCancel(this);\n this._onCancel && this._onCancel(this);\n }\n\n // ── Frame, pick, solve ──────────────────────────────────────────────────\n\n // Resolve the symbolic basis from its space into WORLD through the view\n // bag and re-aim the constraint; idle frames only.\n _resolveFrame() {\n const v = this._view, bag = _bagOf(v, this._from, null), from = _space(this._from);\n const d = this._fromDir;\n mapDirection(_b2, d[0], d[1], d[2], from, WORLD, bag, v.vp, v.ndcZMin);\n if (this._fromZero) {\n const z = this._fromZero;\n mapDirection(_b0, z[0], z[1], z[2], from, WORLD, bag, v.vp, v.ndcZMin);\n this._constraint.aim(_b2[0], _b2[1], _b2[2], _b0[0], _b0[1], _b0[2]);\n } else {\n this._constraint.aim(_b2[0], _b2[1], _b2[2]);\n }\n }\n\n // The proxy's world position and its grab radius in world units — a\n // constant grabPx canvas size at the proxy's depth.\n _proxyPrep() {\n const c = this._constraint, v = this._view, p = this._proxyPos;\n if (this._from && !this._grabbed) this._resolveFrame();\n if (c.kind === DIAL && !this._isView) {\n p[0] = c.anchor[0]; p[1] = c.anchor[1]; p[2] = c.anchor[2];\n } else {\n c.value(p, POINT);\n }\n const V = v.mat4View;\n const eyeZ = V[2]*p[0] + V[6]*p[1] + V[10]*p[2] + V[14];\n this._proxyRad = this._grabPx * pixelRatio(v.mat4Proj, -v.vp[3], eyeZ, v.ndcZMin);\n }\n\n // The analytic pick: t along the ray, or Infinity.\n _proxyT(o, d) {\n this._proxyPrep();\n const c = this._constraint;\n if (typeof c.proxy === 'function') return c.proxy(o[0], o[1], o[2], d[0], d[1], d[2], this._proxyRad);\n const p = this._proxyPos;\n return rayHitSphere(o[0], o[1], o[2], d[0], d[1], d[2], p[0], p[1], p[2], this._proxyRad);\n }\n\n /** Unproject a screen-space pixel into the ray scratch; false on a stale view. */\n _ray(x, y) {\n const v = this._view;\n if (v.stale) return false;\n return unproject(_rayO, _rayD, x, y, v, v.vp, v.ndcZMin) !== null;\n }\n\n /** Hit-test the proxy at a screen-space pixel. */\n _pickAt(x, y) {\n return this._ray(x, y) && this._proxyT(_rayO, _rayD) < Infinity;\n }\n\n _solveFromPointer(x, y) {\n if (!this._ray(x, y)) return;\n if (this._isView) this._viewUpdatePlane();\n this._constraint.solve(_rayO[0], _rayO[1], _rayO[2], _rayD[0], _rayD[1], _rayD[2]);\n }\n\n // VIEW: re-aim the plane at the camera through the current point — its\n // normal the look direction (−Z of the eye matrix), its anchor the point.\n _viewUpdatePlane() {\n const c = this._constraint, E = this._view.mat4Eye;\n c.n[0] = -E[8]; c.n[1] = -E[9]; c.n[2] = -E[10];\n _norm3(c.n);\n c.anchor[0] = c.pt[0]; c.anchor[1] = c.pt[1]; c.anchor[2] = c.pt[2];\n }\n\n // ── Snap ────────────────────────────────────────────────────────────────\n\n /** Snap step — angular (rad) for SPHERE / DIAL, a world grid for PLANE / AXIS / VIEW; null off. */\n get snap() { return this._snap; }\n set snap(v) { this._snap = v ?? null; }\n\n _applySnap() {\n const sn = this._snap;\n if (sn == null) return;\n const c = this._constraint;\n if (this._isView || c.kind === PLANE) {\n const gx = Array.isArray(sn) ? sn[0] : sn, gy = Array.isArray(sn) ? sn[1] : sn, gz = Array.isArray(sn) ? sn[2] : sn;\n _v3[0] = gx > 0 ? Math.round(c.pt[0] / gx) * gx : c.pt[0];\n _v3[1] = gy > 0 ? Math.round(c.pt[1] / gy) * gy : c.pt[1];\n _v3[2] = gz > 0 ? Math.round(c.pt[2] / gz) * gz : c.pt[2];\n if (this._isView) { c.pt[0] = _v3[0]; c.pt[1] = _v3[1]; c.pt[2] = _v3[2]; }\n else c.seed(_v3[0], _v3[1], _v3[2], POINT);\n } else if (c.kind === AXIS || c.kind === DIAL) {\n const step = Array.isArray(sn) ? sn[0] : sn;\n if (!(step > 0)) return;\n const q = Math.round(c.s / step) * step;\n c.s = q < c.min ? c.min : (q > c.max ? c.max : q);\n if (c.kind === DIAL) c._dialPoint();\n else {\n c.pt[0] = c.anchor[0] + c.s * c.u[0];\n c.pt[1] = c.anchor[1] + c.s * c.u[1];\n c.pt[2] = c.anchor[2] + c.s * c.u[2];\n }\n } else if (c.kind === SPHERE) {\n const step = Array.isArray(sn) ? sn[0] : sn;\n if (!(step > 0)) return;\n c.azEl(_q2);\n dirFromAzEl(c.dir, Math.round(_q2[0] / step) * step, Math.round(_q2[1] / step) * step);\n }\n }\n\n // ── Value and binding ───────────────────────────────────────────────────\n\n /**\n * Write the current value into `out`. `report` overrides the constraint's\n * (POINT | DIRECTION); `to` converts from WORLD to EYE, SCREEN, NDC, or a\n * mat4 frame through the view bag. Out-first, out required.\n * @param {number[]} out 3-element destination.\n * @param {{ to?:string|ArrayLike<number>, report?:number }} [opts]\n * @returns {number[]} out\n */\n value(out, opts) {\n const o = opts || {}, c = this._constraint;\n const report = (o.report === POINT || o.report === DIRECTION) ? o.report : c.report;\n const to = o.to ?? WORLD;\n c.value(_v3, report);\n if (to === WORLD) { out[0] = _v3[0]; out[1] = _v3[1]; out[2] = _v3[2]; return out; }\n const v = this._view, bag = _bagOf(v, null, to), space = _space(to);\n return report === DIRECTION\n ? mapDirection(out, _v3[0], _v3[1], _v3[2], WORLD, space, bag, v.vp, v.ndcZMin)\n : mapLocation(out, _v3[0], _v3[1], _v3[2], WORLD, space, bag, v.vp, v.ndcZMin);\n }\n\n /**\n * Bind the handle to a target it drives while dragging: a `{ get, set }`\n * accessor, or a vec3 array mutated in place (a camera state's eye or\n * center is one). get() seeds the constraint now; each solve calls\n * set(value) with the reused value array, then fires onChange. Chainable.\n *\n * The array lives in the handle's `report` space, both ways: a SPHERE handle\n * (DIRECTION by default) binds and receives a **unit heading**, not a point on\n * its sphere; a PLANE / AXIS handle binds and receives a world point. Construct\n * the handle with `report: POINT` to bind a point to a sphere instead.\n * @param {number[]|{ get:Function, set:Function }} target\n * @returns {Handle} this\n */\n bind(target) {\n let binder = null;\n if (target && typeof target.get === 'function' && typeof target.set === 'function') {\n binder = target;\n } else if (target && typeof target === 'object' && typeof target.length === 'number' && target.length >= 3) {\n binder = { get: () => target, set: (v) => { target[0] = v[0]; target[1] = v[1]; target[2] = v[2]; } };\n } else {\n console.error('[host] handle.bind: unrecognised target — pass a vec3 array or an { get, set } accessor. Leaving unbound.');\n return this;\n }\n this._binder = binder;\n if (this._from && !this._grabbed) this._resolveFrame();\n this._seedFromBinding();\n return this;\n }\n\n /** Re-seed the constraint from the bound target after it changed externally —\n * the target holds the handle's own `report` space, as the write-back does, so\n * seed → solve → write never changes what the array means. Chainable. */\n sync() {\n if (this._binder) this._seedFromBinding();\n return this;\n }\n\n _seedFromBinding() {\n const g = this._binder.get();\n if (g == null) return;\n const x = _vx(g, 0, 0), y = _vx(g, 1, 0), z = _vx(g, 2, 0);\n if (this._isView) { const pt = this._constraint.pt; pt[0] = x; pt[1] = y; pt[2] = z; }\n else this._constraint.seed(x, y, z, this._constraint.report);\n }\n\n // Push the freshly solved value to the binding and fire onChange, once per solve.\n _afterSolve() {\n const bound = this._binder !== null;\n const notify = !!(this.onChange || this._onChange);\n if (!bound && !notify) return;\n const v = this.value(this._bindVal);\n if (bound) this._binder.set(v);\n if (notify) {\n this.onChange && this.onChange(v, this);\n this._onChange && this._onChange(v, this);\n }\n }\n\n // ── Readouts and edits ──────────────────────────────────────────────────\n\n /** AXIS: the signed distance along the rail; DIAL: the accumulated angle; NaN otherwise. */\n scalar() { return typeof this._constraint.scalar === 'function' ? this._constraint.scalar() : NaN; }\n\n /** SPHERE: [az, el] of the current direction, into out2. */\n azEl(out2) {\n const o = out2 || [0, 0];\n return typeof this._constraint.azEl === 'function' ? this._constraint.azEl(o) : o;\n }\n\n /** True between grab and release. */\n grabbed() { return this._grabbed; }\n\n /** True while the pointer rests on the proxy, and while grabbed. */\n hovered() { return this._hovered; }\n\n /**\n * Move the reference point — sphere centre, plane point, axis anchor,\n * dial centre, or a VIEW handle's point; the stored point rides along.\n * Chainable.\n * @param {number[]|{x:number,y:number,z:number}} v\n * @returns {Handle} this\n */\n anchor(v) {\n const c = this._constraint;\n const t = this._isView ? c.pt : c.anchor;\n if (!t) return this;\n t[0] = _vx(v, 0, t[0]); t[1] = _vx(v, 1, t[1]); t[2] = _vx(v, 2, t[2]);\n if (!this._isView) {\n if (c.kind === DIAL) c._dialPoint();\n else if (c.kind === AXIS) {\n c.pt[0] = c.anchor[0] + c.s * c.u[0];\n c.pt[1] = c.anchor[1] + c.s * c.u[1];\n c.pt[2] = c.anchor[2] + c.s * c.u[2];\n } else if (c.kind === PLANE) c.seed(c.pt[0], c.pt[1], c.pt[2], POINT);\n }\n return this;\n }\n\n /** Runtime gate — false suspends grab / solve without disposing. */\n get enabled() { return this._enabled; }\n set enabled(v) {\n this._enabled = !!v;\n if (!this._enabled) {\n if (this._pid !== null && this._pointer) this._pointer.release(this._pid);\n this._grabbed = false; this._hovered = false; this._pid = null;\n }\n }\n\n /** Release the pointer claim and leave the host. */\n dispose() {\n if (this._pid !== null && this._pointer) this._pointer.release(this._pid);\n this._pid = null;\n this._grabbed = false;\n this._pointer = null;\n this._host.unregister(this);\n }\n}\n\n/**\n * Validate the constraint option: a built-in kind, VIEW, or a contract object.\n * @param {*} kind\n * @returns {boolean}\n */\nexport function validConstraint(kind) {\n return kind === SPHERE || kind === PLANE || kind === AXIS || kind === DIAL || kind === VIEW || !!isConstraint(kind);\n}\n","/**\n * @file The pointer router — shared arbitration for overlapping handles.\n * @module host/router\n * @license AGPL-3.0-only\n *\n * Per-handle self-picking double-grabs on overlap: two proxies under one\n * finger each test only themselves and both hit. The router replaces the\n * members' down step with one shared pick: the pointer's ray once, every\n * enabled member's proxy tested, the nearest t wins (a tie keeps the\n * earlier member, as draw order would). Members keep their own move /\n * solve / release machinery, grabbed through their injected _adopt; every\n * unclaimed press of the frame resolves, so several same-frame presses on\n * different members all land. Hover is the same test on unclaimed pointer\n * motion, shared, setting at most one hovered member.\n */\n\n'use strict';\n\nimport { rayScratch } from './handle.js';\n\n/** Shared pick over a set of handles on one host. */\nexport class PointerRouter {\n /**\n * @param {object} host The host context.\n * @param {object[]} handles Members.\n * @param {{ hover?:boolean }} [opts] hover defaults to true.\n */\n constructor(host, handles, opts) {\n const o = opts || {};\n this._host = host;\n this._pointer = host.pointer;\n this._handles = [];\n this._hover = o.hover !== false;\n this._hoveredH = null;\n this._hid = null; this._hseq = -1;\n for (const h of handles || []) this.add(h);\n }\n\n /**\n * Route a handle: its own pointerdown adoption is disabled and the shared\n * pick grabs it through _adopt. Chainable.\n * @param {object} h\n * @returns {PointerRouter} this\n */\n add(h) {\n if (!h || typeof h._proxyT !== 'function') {\n console.error('[host] router.add: not a handle — ignoring.');\n return this;\n }\n if (this._handles.includes(h)) return this;\n h._routed = true;\n h._onRelease = h._onCancel = () => this._unclaim(h);\n this._handles.push(h);\n return this;\n }\n\n /**\n * Un-route a handle; it self-picks again. Chainable.\n * @param {object} h\n * @returns {PointerRouter} this\n */\n remove(h) {\n const i = this._handles.indexOf(h);\n if (i < 0) return this;\n this._handles.splice(i, 1);\n this._unclaim(h);\n h._routed = false;\n h._onRelease = h._onCancel = null;\n if (this._hoveredH === h) { this._hoveredH = null; h._hovered = false; }\n return this;\n }\n\n /**\n * Resolve the frame's presses with one shared pick each, refresh hover on\n * pointer motion, then update every member. Call first in the frame, in\n * place of the members' own updates.\n * @returns {boolean} true if any member is grabbed.\n */\n update() {\n const hs = this._handles, src = this._pointer;\n if (!src) return false;\n for (const pr of src.presses) {\n if (src.ownerOf(pr.id) !== null) continue;\n const win = this._sharedPick(pr.x, pr.y);\n if (win && win._pid === null && win.enabled) win._adopt(pr.id, pr.x, pr.y);\n }\n if (this._hover) {\n for (const e of src.pointers.values()) {\n if (e.owner !== null) continue;\n if (e.id === this._hid && e.seq === this._hseq) continue;\n this._hid = e.id; this._hseq = e.seq;\n const win = this._sharedPick(e.x, e.y);\n this._hoveredH = win;\n for (const h of hs) h._hovered = (h === win) || h._grabbed;\n break;\n }\n }\n let g = false;\n for (const h of hs) g = h.update() || g;\n return g;\n }\n\n // One ray, every enabled member's proxy, the nearest t.\n _sharedPick(x, y) {\n const hs = this._handles;\n const first = hs.find((h) => h.enabled);\n if (!first || !first._ray(x, y)) return null;\n let win = null, best = Infinity;\n for (const h of hs) {\n if (!h.enabled) continue;\n const t = h._proxyT(rayScratch.o, rayScratch.d);\n if (t < best) { best = t; win = h; }\n }\n return win;\n }\n\n _unclaim(h) {\n const src = this._pointer;\n if (!src) return;\n for (const e of src.pointers.values()) if (e.owner === h) src.release(e.id);\n }\n\n /** The member under the pointer, or null. */\n hovered() { return this._hoveredH; }\n\n /** Un-route every member and leave the host. */\n dispose() {\n for (const h of [...this._handles]) this.remove(h);\n this._pointer = null;\n this._host.unregister(this);\n }\n}\n","/**\n * @file Helm factories — a core PoseHelm driven from the host's players.\n * @module host/helm\n * @license AGPL-3.0-only\n *\n * cameraHelm(host, cam, opts) flies a camera state body-relative: the helm is\n * seeded from the state through cameraToPose, integrates each tick in the\n * state's own eye matrix (which equals the pose written last tick, so a\n * forward push flies forward) and writes back through cameraFromPose at the\n * state's gaze distance. poseHelm(host, opts) produces a pose in a declared\n * frame — WORLD, EYE (the host's view bag), SELF (its own pose) or a mat4 —\n * and drives whatever bind() names: a camera state, an { applyPose } sink, a\n * { get, set } accessor or a { pos, rot } object. Both register a player\n * with the host until disposed.\n */\n\n'use strict';\n\nimport {\n PoseHelm, cameraEye, cameraFromPose, cameraToPose, qToMat4, WORLD, EYE, SELF,\n} from '@nakednous/tree';\n\nconst _pose = { pos: [0, 0, 0], rot: [0, 0, 0, 1] }; // step() output\nconst _self = { pos: [0, 0, 0], rot: [0, 0, 0, 1] }; // eval() readout for SELF\nconst _em = new Float32Array(16); // the resolved basis\n\nconst _rawMat4 = (m) => (m != null && m.mat4 != null) ? m.mat4 : m;\nconst _isCameraState = (c) => !!(c && c.eye && c.center && c.up);\n\nfunction _applyOpts(helm, opts) {\n if (!opts) return;\n if (opts.profile) helm.profile = opts.profile;\n if (opts.deadzone != null) helm.deadzone = opts.deadzone;\n if (opts.filter != null) helm.filter = opts.filter;\n if (opts.fullScale != null) helm.fullScale = opts.fullScale;\n}\n\n/**\n * The basis a pose helm's `from` resolves to: null for WORLD, the view bag's\n * eye matrix for EYE, the helm's own rotation for SELF, a mat4 as given.\n * Exported for a bridge's rig gizmo.\n * @param {PoseHelm} helm\n * @param {object} view The host's view bag.\n * @param {Float32Array} em 16-element scratch.\n * @returns {ArrayLike<number>|null}\n */\nexport function helmBasis(helm, view, em) {\n const from = helm.from;\n if (from != null && typeof from !== 'string') return _rawMat4(from);\n if (from === EYE) return view ? view.mat4Eye : null;\n if (from === SELF) return qToMat4(em, helm.eval(_self).rot);\n if (from === WORLD || from == null) return null;\n console.error('[host] poseHelm: `from` must be EYE, WORLD, SELF, or a mat4 frame. Falling back to WORLD.');\n return null;\n}\n\n/**\n * Fly a camera state from a live 6-DOF rate stream, body-relative.\n * @param {object} host\n * @param {object} cam A camera state ({ eye, center, up, … }).\n * @param {{ profile?:object, deadzone?:number, filter?:object, fullScale?:number }} [opts]\n * @returns {PoseHelm} The helm, with dispose().\n */\nexport function cameraHelm(host, cam, opts) {\n const helm = new PoseHelm();\n _applyOpts(helm, opts);\n if (opts && opts.from != null) {\n console.error('[host] cameraHelm: a camera helm is always body-fly and has no `from`. Ignoring it; bind the camera to a poseHelm for view- or world-relative motion.');\n }\n if (_isCameraState(cam)) helm.home(cameraToPose(_pose, cam));\n const player = {\n tick(dt) {\n helm.step(_pose, dt, _isCameraState(cam) ? cameraEye(_em, cam) : null);\n if (_isCameraState(cam)) {\n cameraFromPose(cam, _pose);\n if (helm._onApply) helm._onApply(cam);\n }\n return true;\n },\n };\n helm._onApply = null; // lib-space seam: a bridge pushes the written state to its camera\n host.players.add(player);\n helm.dispose = () => { host.players.remove(player); host.unregister(helm); return helm; };\n return host.register(helm);\n}\n\n/**\n * Integrate a live 6-DOF rate stream into a pose in a declared frame and\n * drive a bound target with it.\n * @param {object} host\n * @param {{ profile?:object, deadzone?:number, filter?:object, fullScale?:number,\n * from?:string|ArrayLike<number>, bind?:object }} [opts]\n * @returns {PoseHelm} The helm, with bind() and dispose().\n */\nexport function poseHelm(host, opts) {\n const o = opts || {};\n const helm = new PoseHelm();\n _applyOpts(helm, o);\n if (o.from != null) helm.from = o.from;\n let sink = null;\n\n const player = {\n tick(dt) {\n if (sink) {\n helm.step(_pose, dt, helmBasis(helm, host.view, _em));\n sink(_pose);\n }\n return true;\n },\n };\n host.players.add(player);\n\n /**\n * Bind the target the helm drives: a camera state (seeded from it, written\n * through cameraFromPose), an { applyPose } sink, a { get, set } accessor\n * (get() seeds, set(pose) writes) or a { pos, rot } object mutated in\n * place. Chainable.\n * @param {object} target\n * @returns {PoseHelm} this\n */\n helm.bind = (target) => {\n if (_isCameraState(target)) {\n helm.home(cameraToPose(_pose, target));\n sink = (pose) => cameraFromPose(target, pose);\n } else if (target && typeof target.get === 'function' && typeof target.set === 'function') {\n helm.home(target.get());\n sink = (pose) => target.set(pose);\n } else if (target && typeof target.applyPose === 'function') {\n sink = (pose) => target.applyPose(pose);\n } else if (target && target.pos && target.rot) {\n helm.home(target);\n sink = (pose) => {\n target.pos[0] = pose.pos[0]; target.pos[1] = pose.pos[1]; target.pos[2] = pose.pos[2];\n target.rot[0] = pose.rot[0]; target.rot[1] = pose.rot[1];\n target.rot[2] = pose.rot[2]; target.rot[3] = pose.rot[3];\n };\n } else {\n console.error('[host] poseHelm: bind() target must be a camera state, an { applyPose } sink, a { get, set } accessor, or a { pos, rot } object. Leaving unbound.');\n }\n return helm;\n };\n helm.dispose = () => { host.players.remove(player); host.unregister(helm); return helm; };\n if (o.bind != null) helm.bind(o.bind);\n return host.register(helm);\n}\n","/**\n * @file Track factories and TrackHandles — core tracks wired to the host's players.\n * @module host/track\n * @license AGPL-3.0-only\n *\n * poseTrack(host, opts) is a core PoseTrack whose activation hooks add and\n * remove its player. cameraTrack(host, cam, opts) is a core CameraTrack whose\n * player evaluates straight into the camera state `cam` — the state is the\n * keyframe shape, so track.eval(cam) is the write — while the track plays, and\n * once more on deactivate so the camera rests on the path. That bound is the\n * point: a stopped track's camera belongs to whoever else drives it — the\n * reader's orbit, the figure's own camera code — so a consumer that renders\n * from the state derives it instead, one evaluation per frame after the tick\n * that advances the transport, which carries a seek, a dragged keyframe and a\n * capture into the state as well and repeats the player's write harmlessly\n * while the track plays. add() with no argument\n * captures `cam`, add({ camera }) any camera-state object. { handles } on\n * either decorates the track with TrackHandles: one VIEW handle per\n * draggable keyframe field (pos / eye / center), an optional rot DIAL per\n * keyframe about a declared axis, all on one router.\n *\n * add(depth) — the transport panel's + button, which passes its depth slider\n * (ui's contract) — authors a keyframe where the camera is looking: on a pose\n * track the pose lands at the centre of the installed camera's frustum at\n * that depth, aimed along the camera's own eye frame; on a camera track the\n * camera state is captured, the depth having nothing to place. A panel whose\n * depth row is hidden passes no depth, which reads the panel's default, 0.5.\n * The frame is the host's view bag — the matrices the last setCamera\n * installed — so the placement is the same on every bridge and needs no\n * renderer here. remove() is the panel's −: no argument retracts the last\n * keyframe, one per call, an index staying the core track's own remove.\n */\n\n'use strict';\n\nimport { PoseTrack, CameraTrack, qFromAxisAngle, DIAL, mapLocation, NDC, WORLD } from '@nakednous/tree';\nimport { VIEW } from './handle.js';\n\n// ── Placement — the + button's depth ───────────────────────────────────────\n//\n// The transport panel hands add() a depth in [0, 1] and expects a keyframe in\n// front of the camera. Writer-free placement: unproject the frustum's centre\n// through the view bag's P · V inverse and aim the pose along the bag's eye\n// frame (E = V⁻¹, its columns right / up / back). The depth is NDC-linear, as\n// the p5 transport's was — 0 the near plane's centre, 1 the far plane's — so\n// every bridge's own ndcZMin maps it without the caller knowing the API.\n\nconst _at = [0, 0, 0]; // the unprojected frustum centre\nconst _dir = [0, 0, 0]; // the camera's forward\nconst _up = [0, 0, 0]; // the camera's up\n\n/**\n * Append a pose at the centre of the installed camera's frustum, `depth` of\n * the way from the near plane to the far one.\n *\n * @param {object} host\n * @param {function} add The track's core add, already bound.\n * @param {number} [depth] NDC-linear depth in [0, 1]; clamped, absent or NaN\n * reads the panel's own default, 0.5.\n * @returns {boolean} false when no camera is installed (a stale view bag).\n */\nfunction _addInFront(host, add, depth) {\n const view = host.view;\n if (!view || view.stale) return false;\n const d = Number.isFinite(depth) ? (depth < 0 ? 0 : depth > 1 ? 1 : depth) : 0.5;\n const ndcZ = view.ndcZMin + d * (1 - view.ndcZMin);\n mapLocation(_at, 0, 0, ndcZ, NDC, WORLD, view, view.vp, view.ndcZMin);\n const e = view.mat4Eye; // columns: right · up · back · eye\n _dir[0] = -e[8]; _dir[1] = -e[9]; _dir[2] = -e[10];\n _up[0] = e[4]; _up[1] = e[5]; _up[2] = e[6];\n add({ pos: [_at[0], _at[1], _at[2]], rot: { dir: _dir, up: _up } }, { deduplicate: false });\n return true;\n}\n\n// ── Players ────────────────────────────────────────────────────────────────\n\n// remove(): the panel's −, retracting the last authored keyframe — one per\n// click, either kind of track. An index stays the core track's own remove, so\n// a caller editing by index is unaffected; an empty track removes nothing.\nfunction _wireRemove(track) {\n const coreRemove = track.remove.bind(track);\n track.remove = function (index) {\n return coreRemove(index == null ? track.keyframes.length - 1 : index);\n };\n return track;\n}\n\nfunction _wirePoseTrack(host, track) {\n let player = null;\n track._onActivate = () => {\n player = player || { tick() { track.tick(); return track.playing; } };\n host.players.add(player);\n };\n track._onDeactivate = () => { if (player) host.players.remove(player); };\n}\n\n/**\n * A core PoseTrack ticked by the host while it plays.\n * @param {object} host\n * @param {{ handles?:boolean|object }} [opts]\n * @returns {PoseTrack}\n */\nexport function poseTrack(host, opts) {\n const o = opts || {};\n const track = new PoseTrack();\n _wirePoseTrack(host, track);\n\n // add(depth): the transport's + (see the module header). A spec, or an array\n // of specs, is the core track's own; no argument — the panel with its depth\n // row hidden — places at the panel's default depth, 0.5.\n const coreAdd = track.add.bind(track);\n let warned = false;\n track.add = function (spec, addOpts) {\n if (spec != null && typeof spec !== 'number') return coreAdd(spec, addOpts);\n if (!_addInFront(host, coreAdd, spec) && !warned) {\n warned = true;\n console.warn('[host] poseTrack: add(depth) places a pose against the installed camera, and the view bag is stale — no keyframe added. Call the bridge\\'s setCamera first.');\n }\n };\n\n if (o.handles) track.handles = new TrackHandles(host, track, o.handles, false);\n return _wireRemove(track);\n}\n\n/**\n * A core CameraTrack evaluating into the camera state `cam` while it plays, and\n * once when it stops, so the camera rests on the path.\n *\n * The write is bounded by playback on purpose: while a track is stopped the\n * camera it names belongs to whoever else drives it — the reader's orbit, the\n * figure's own camera code — and a factory writing every frame would fight\n * them. A consumer that renders *from* the state therefore derives it: evaluate\n * the track once per frame, after the tick that advances the transport. A seek,\n * a dragged keyframe and a capture reach the state that way too, and the\n * evaluation repeats the player's own write harmlessly while the track plays.\n *\n * @param {object} host\n * @param {object} cam A camera state ({ eye, center, up, fov, halfHeight, near, far }).\n * @param {{ handles?:boolean|object }} [opts]\n * @returns {CameraTrack}\n */\nexport function cameraTrack(host, cam, opts) {\n const o = opts || {};\n const track = new CameraTrack();\n const state = cam || null; // the evaluation target; track.camera is informational\n track.camera = state;\n track._onApply = null; // lib-space seam: a bridge pushes the evaluated state to its camera\n\n const coreAdd = track.add.bind(track);\n track.add = function (spec, addOpts) {\n // No spec, or the transport panel's depth: a camera keyframe *is* the\n // camera, so there is nothing a placement depth could move — capture.\n if (spec == null || typeof spec === 'number') {\n if (!state) return;\n spec = state;\n } else if (Array.isArray(spec)) {\n for (const s of spec) track.add(s, addOpts);\n return;\n } else if (spec.camera != null) {\n spec = spec.camera;\n }\n coreAdd(spec, addOpts);\n };\n\n const apply = () => {\n if (!state || track.keyframes.length === 0) return;\n track.eval(state);\n if (track._onApply) track._onApply(state);\n };\n const player = {\n tick() {\n if (!track.playing) return false;\n track.tick();\n apply();\n return track.playing;\n },\n };\n track._onActivate = () => host.players.add(player);\n track._onDeactivate = () => { host.players.remove(player); apply(); };\n\n if (o.handles) track.handles = new TrackHandles(host, track, o.handles, true);\n return _wireRemove(track);\n}\n\n// ── TrackHandles ───────────────────────────────────────────────────────────\n\nconst _vx = (v, i) => (v[i] !== undefined ? v[i] : (i === 0 ? v.x : i === 1 ? v.y : v.z));\n\n/**\n * Per-keyframe manipulators of a track — the factories' `handles` opt,\n * stored at track.handles. Members are internal handles on one router;\n * their hooks are re-exposed with keyframe coordinates: onGrab(index, field,\n * h) / onChange(value, index, field, h) / onRelease / onCancel, field one of\n * 'pos' | 'eye' | 'center' | 'rot'. update() rebuilds the members when the\n * keyframe count changes and re-seeds every idle member from its keyframe.\n * A bridge draws the members itself (`members`).\n */\nexport class TrackHandles {\n /**\n * @param {object} host\n * @param {object} track PoseTrack | CameraTrack.\n * @param {true|object} opts `true` for the defaults, or\n * { center?, rot?, rotRadius?, rotSnap?, grabPx?, snap?, hover? }.\n * @param {boolean} isCamera CameraTrack (eye / center) vs PoseTrack (pos / rot).\n */\n constructor(host, track, opts, isCamera) {\n const o = opts === true ? {} : (opts || {});\n this._host = host;\n this._track = track;\n this._isCamera = !!isCamera;\n this._members = [];\n this._rotByIndex = new Map();\n this._n = -1;\n this._enabled = true;\n /** Last-grabbed keyframe index, null until a grab. @type {number|null} */\n this.selected = null;\n\n this._grabPx = Number.isFinite(o.grabPx) ? o.grabPx : 12;\n this._snap = o.snap ?? null;\n this._rotSnap = o.rotSnap ?? null;\n this._center = this._isCamera ? (o.center !== false) : false;\n if (!this._isCamera && o.center !== undefined) console.error('[host] track handles: `center` is CameraTrack-only — ignoring.');\n this._rotAxis = null;\n this._rotRadius = Number.isFinite(o.rotRadius) ? o.rotRadius : 40;\n if (o.rot != null) {\n if (this._isCamera) {\n console.error('[host] track handles: `rot` is PoseTrack-only — a camera keyframe\\'s orientation is its center; drag that instead. Ignoring.');\n } else {\n const ax = _vx(o.rot, 0) ?? 0, ay = _vx(o.rot, 1) ?? 1, az = _vx(o.rot, 2) ?? 0;\n const l = Math.hypot(ax, ay, az) || 1;\n this._rotAxis = [ax / l, ay / l, az / l];\n }\n }\n\n this.onGrab = null; this.onChange = null; this.onRelease = null; this.onCancel = null;\n this._hover = o.hover !== false;\n this._router = null; // made on the first rebuild, once a subclass is constructed\n }\n\n // The construction seams a bridge subclass overrides so the members are\n // handles it can draw.\n _makeHandle(opts) { return this._host.handle(opts); }\n _makeRouter(opts) { return this._host.router([], opts); }\n\n /** The members, { h, index, field } each, for a bridge's draw. */\n get members() { return this._members; }\n /** Dot radius in pixels, the members' grabPx. */\n get grabPx() { return this._grabPx; }\n\n /**\n * Rebuild if the keyframe count changed, re-seed idle members, then route.\n * Call first in the frame, before the orbit.\n * @returns {boolean} true while any member is grabbed.\n */\n update() {\n if (this._track.keyframes.length !== this._n) this._rebuild();\n if (this._enabled) this._syncIdle();\n return this._router.update();\n }\n\n /** The members' router, made on the first update(). */\n get router() { return this._router; }\n\n /** Runtime gate — false suspends grab / solve and empties the pick. */\n get enabled() { return this._enabled; }\n set enabled(v) {\n this._enabled = !!v;\n for (const m of this._members) m.h.enabled = this._enabled;\n }\n\n /** True while any member is grabbed. */\n grabbed() {\n for (const m of this._members) if (m.h.grabbed()) return true;\n return false;\n }\n\n /** The keyframe index under the pointer (or grabbed), else null. */\n hovered() {\n for (const m of this._members) if (m.h.hovered()) return m.index;\n return null;\n }\n\n /** Re-seed every idle member from its keyframe. Chainable. */\n sync() { this._syncIdle(); return this; }\n\n /** Dispose the members and the router, detach from the track. */\n dispose() {\n this._teardown();\n if (this._router) this._router.dispose();\n if (this._track.handles === this) this._track.handles = null;\n }\n\n _rebuild() {\n if (!this._router) this._router = this._makeRouter({ hover: this._hover });\n this._teardown();\n const n = this._track.keyframes.length;\n this._n = n;\n for (let i = 0; i < n; i++) {\n this._addViewMember(i, this._isCamera ? 'eye' : 'pos');\n if (this._center) this._addViewMember(i, 'center');\n if (this._rotAxis) this._addRotMember(i);\n }\n if (this.selected != null && this.selected >= n) this.selected = null;\n }\n\n _teardown() {\n for (const m of this._members) { this._router.remove(m.h); m.h.dispose(); }\n this._members.length = 0;\n this._rotByIndex.clear();\n }\n\n // A VIEW member bound to kf[field] by index, so set(i, spec) replacing the\n // keyframe never strands it.\n _addViewMember(index, field) {\n const track = this._track;\n const h = this._makeHandle({\n constraint: VIEW, grabPx: this._grabPx, snap: this._snap,\n bind: {\n get: () => track.keyframes[index] ? track.keyframes[index][field] : null,\n set: (v) => {\n const k = track.keyframes[index];\n if (!k) return;\n const a = k[field];\n a[0] = _vx(v, 0); a[1] = _vx(v, 1); a[2] = _vx(v, 2);\n },\n },\n });\n if (!h) return;\n this._wire(h, index, field);\n this._members.push({ h, index, field });\n this._router.add(h);\n }\n\n // A rot member: one DIAL about the declared axis at the keyframe's\n // position, unbound — θ lands in kf.rot through the hooks.\n _addRotMember(index) {\n const kf = this._track.keyframes[index];\n const h = this._makeHandle({\n constraint: DIAL, anchor: [kf.pos[0], kf.pos[1], kf.pos[2]],\n axis: this._rotAxis, radius: this._rotRadius, grabPx: this._grabPx, snap: this._rotSnap,\n });\n if (!h) return;\n this._wire(h, index, 'rot');\n const m = { h, index, field: 'rot' };\n this._members.push(m);\n this._rotByIndex.set(index, m);\n this._router.add(h);\n this._syncRot(m);\n }\n\n _wire(h, index, field) {\n const rotWrite = () => {\n const k = this._track.keyframes[index];\n if (k) { const u = this._rotAxis; qFromAxisAngle(k.rot, u[0], u[1], u[2], h.scalar()); }\n };\n h.onGrab = () => {\n this.selected = index;\n if (this.onGrab) this.onGrab(index, field, h);\n };\n h.onChange = (v) => {\n if (field === 'rot') rotWrite();\n else if (field === 'pos') {\n // Forward the dragged position into the keyframe's rot ring now, so\n // the ring never trails the dot by a frame.\n const rm = this._rotByIndex.get(index);\n const k = this._track.keyframes[index];\n if (rm && k) rm.h.anchor(k.pos);\n }\n if (this.onChange) this.onChange(v, index, field, h);\n };\n h.onRelease = () => { if (this.onRelease) this.onRelease(index, field, h); };\n h.onCancel = () => {\n if (field === 'rot') rotWrite(); // a DIAL is unbound: re-derive from the reverted θ\n if (this.onCancel) this.onCancel(index, field, h);\n };\n }\n\n _syncIdle() {\n for (const m of this._members) {\n if (m.h.grabbed()) continue;\n if (m.field === 'rot') this._syncRot(m);\n else m.h.sync();\n }\n }\n\n // Anchor the ring at the live keyframe position and set θ to the twist of\n // kf.rot about the axis: θ = 2·atan2(q.xyz · u, q.w).\n _syncRot(m) {\n const k = this._track.keyframes[m.index];\n if (!k) return;\n m.h.anchor(k.pos);\n const u = this._rotAxis;\n const th = 2 * Math.atan2(k.rot[0] * u[0] + k.rot[1] * u[1] + k.rot[2] * u[2], k.rot[3]);\n const c = m.h._constraint;\n if (c.s !== th) { c.s = th; c._dialPoint(); }\n }\n}\n","/**\n * @file Device streams — WebHID and Gamepad rate sources that feed a helm.\n * @module host/stream\n * @license AGPL-3.0-only\n *\n * The measure-by-subscription transports. Each yields lin[3] / ang[3] in raw\n * device units and, once bind(helm) ran, calls helm.feed(lin, ang) every\n * tick of the host's players — the helm's profile does all scaling, so a\n * stream carries no configuration beyond identification and decoding.\n *\n * hid — WebHID. connect() must run from a user gesture; reports land\n * out of band into the stream's buffers and the frame reads the\n * latest (last-write-wins). Permissions-Policy gates\n * requestDevice to top-level documents: a stream in an iframe\n * without allow=\"hid\" reports available === false and never\n * prompts.\n * gamepad — the Gamepad API, polled once per tick from\n * navigator.getGamepads(); an absent axis reads exactly 0.\n *\n * Both expose available and connected for a UI to reflect, and bind(helm),\n * unbind(), dispose().\n */\n\n'use strict';\n\nconst _nav = () => (typeof navigator !== 'undefined' ? navigator : null);\n\n/** The 3Dconnexion vendor ids: the SpaceNavigator and its successors. */\nexport const HID_FILTERS = [{ vendorId: 0x046d }, { vendorId: 0x256f }];\n\n/**\n * The SpaceNavigator decode: report 1 carries translation, report 2\n * rotation, each three int16 little-endian lanes; a firmware that packs all\n * six lanes into one report fills both halves from it.\n * @param {DataView} report The report's data (the id byte excluded).\n * @param {number} reportId\n * @param {number[]} lin Translation lanes, written.\n * @param {number[]} ang Rotation lanes, written.\n */\nexport function decodeSpaceNavigator(report, reportId, lin, ang) {\n if (report.byteLength >= 12) {\n for (let i = 0; i < 3; i++) { lin[i] = report.getInt16(2 * i, true); ang[i] = report.getInt16(6 + 2 * i, true); }\n return;\n }\n if (report.byteLength < 6) return;\n const t = reportId === 1 ? lin : reportId === 2 ? ang : null;\n if (!t) return;\n for (let i = 0; i < 3; i++) t[i] = report.getInt16(2 * i, true);\n}\n\n/** Whether WebHID's requestDevice is allowed in this document. */\nfunction _hidAllowed() {\n if (typeof document !== 'undefined' && document.featurePolicy && typeof document.featurePolicy.allowsFeature === 'function') {\n return document.featurePolicy.allowsFeature('hid');\n }\n if (typeof window !== 'undefined' && 'top' in window) return window.top === window.self;\n return true;\n}\n\nfunction _stream(host, lin, ang) {\n let helm = null;\n const s = {\n /** The latest translation lanes, raw device units. */\n lin,\n /** The latest rotation lanes, raw device units. */\n ang,\n /** The bound helm, or null. */\n get helm() { return helm; },\n /**\n * Feed a helm every tick. Chainable.\n * @param {object} target A PoseHelm (anything with feed(lin, ang)).\n * @returns {object} this\n */\n bind(target) {\n if (!target || typeof target.feed !== 'function') {\n console.error('[host] stream: bind() target must have feed(lin, ang). Leaving unbound.');\n return s;\n }\n helm = target;\n return s;\n },\n /** Stop feeding; the helm sees its last rate until it is fed again. */\n unbind() { helm = null; return s; },\n };\n const feed = () => { if (helm) helm.feed(lin, ang); };\n return { s, feed };\n}\n\n/**\n * A WebHID rate stream.\n *\n * @param {object} host\n * @param {{ filters?:object[], decode?:function, bind?:object, resume?:boolean,\n * hid?:object }} [opts]\n * filters: the requestDevice filters (default HID_FILTERS). decode:\n * decode(report, reportId, lin, ang) (default decodeSpaceNavigator).\n * bind: a helm to bind at once. resume (default true): attach a device\n * this origin was already granted, without a prompt. hid: the WebHID\n * interface (default navigator.hid) — the seam a test fills.\n * @returns {object} The stream: { available, connected, device, lin, ang,\n * connect(), bind(helm), unbind(), dispose() }.\n */\nexport function createHid(host, opts) {\n const o = opts || {};\n const hid = o.hid || (_nav() && _nav().hid) || null;\n const filters = o.filters || HID_FILTERS;\n const decode = typeof o.decode === 'function' ? o.decode : decodeSpaceNavigator;\n const lin = [0, 0, 0], ang = [0, 0, 0];\n const { s, feed } = _stream(host, lin, ang);\n let device = null;\n\n const onReport = (e) => decode(e.data, e.reportId, lin, ang);\n const onDisconnect = (e) => { if (device && e.device === device) detach(); };\n const matches = (d) => filters.length === 0 || filters.some((f) =>\n (f.vendorId == null || f.vendorId === d.vendorId) && (f.productId == null || f.productId === d.productId));\n\n function detach() {\n if (!device) return;\n device.removeEventListener('inputreport', onReport);\n if (device.opened && typeof device.close === 'function') device.close().catch(() => {});\n device = null;\n s.connected = false;\n lin[0] = lin[1] = lin[2] = ang[0] = ang[1] = ang[2] = 0;\n }\n\n async function attach(d) {\n detach();\n try { if (!d.opened) await d.open(); }\n catch (e) { console.error('[host] hid: open() failed: ' + e.message + '.'); return false; }\n device = d;\n d.addEventListener('inputreport', onReport);\n s.connected = true;\n return true;\n }\n\n Object.assign(s, {\n /** Whether WebHID exists and requestDevice is allowed here. */\n available: !!(hid && typeof hid.requestDevice === 'function') && _hidAllowed(),\n /** Whether a device is open and reporting. */\n connected: false,\n\n /**\n * Prompt for a device (a user gesture is required) and attach the choice.\n * @returns {Promise<boolean>} attached\n */\n async connect() {\n if (!s.available) { console.error('[host] hid: WebHID is unavailable here (a top-level Chromium document over https or localhost).'); return false; }\n let devices;\n try { devices = await hid.requestDevice({ filters }); }\n catch (e) { console.error('[host] hid: requestDevice rejected: ' + e.message + '.'); return false; }\n if (!devices || !devices.length) return false;\n return attach(devices[0]);\n },\n\n /**\n * Attach a device this origin was already granted, without a prompt.\n * @returns {Promise<boolean>} attached\n */\n async resume() {\n if (!hid || typeof hid.getDevices !== 'function') return false;\n let devices;\n try { devices = await hid.getDevices(); } catch (_) { return false; }\n const d = (devices || []).find(matches);\n return d ? attach(d) : false;\n },\n\n /** Close the device, remove every listener, unregister from the host. */\n dispose() {\n detach();\n if (hid && typeof hid.removeEventListener === 'function') hid.removeEventListener('disconnect', onDisconnect);\n host.players.remove(player);\n host.unregister(s);\n return s;\n },\n });\n\n /** The open HIDDevice, or null. */\n Object.defineProperty(s, 'device', { get: () => device, enumerable: true });\n\n const player = { tick() { feed(); return true; } };\n host.players.add(player);\n if (hid && typeof hid.addEventListener === 'function') hid.addEventListener('disconnect', onDisconnect);\n if (o.bind) s.bind(o.bind);\n if (s.available && o.resume !== false) s.resume();\n return host.register(s);\n}\n\n/**\n * The default gamepad map, the standard layout: left stick → lin[0] / lin[1],\n * right stick → ang[1] / ang[0], the triggers → lin[2] (right minus left).\n */\nexport const GAMEPAD_MAP = { lin: [0, 1, { buttons: [6, 7] }], ang: [3, 2, null] };\n\nfunction _lane(gp, spec) {\n if (spec == null) return 0;\n if (typeof spec === 'number') { const v = gp.axes[spec]; return typeof v === 'number' ? v : 0; }\n if (spec.buttons) {\n const n = gp.buttons[spec.buttons[0]], p = gp.buttons[spec.buttons[1]];\n return (p ? p.value : 0) - (n ? n.value : 0);\n }\n if (spec.button) { const b = gp.buttons[spec.button]; return b ? b.value : 0; }\n return 0;\n}\n\n/**\n * A Gamepad rate stream, polled once per tick.\n *\n * @param {object} host\n * @param {{ index?:number, map?:object, bind?:object, gamepads?:function }} [opts]\n * index: which gamepad (default: the first connected). map: { lin,\n * ang }, each three lane specs — an axis index, { buttons: [neg,\n * pos] }, { button } or null (default GAMEPAD_MAP). bind: a helm to\n * bind at once. gamepads: the poll (default navigator.getGamepads) —\n * the seam a test fills.\n * @returns {object} The stream: { available, connected, index, lin, ang,\n * bind(helm), unbind(), dispose() }.\n */\nexport function createGamepad(host, opts) {\n const o = opts || {};\n const nav = _nav();\n const poll = o.gamepads || (nav && typeof nav.getGamepads === 'function' ? () => nav.getGamepads() : null);\n const map = o.map || GAMEPAD_MAP;\n const lin = [0, 0, 0], ang = [0, 0, 0];\n const { s, feed } = _stream(host, lin, ang);\n\n Object.assign(s, {\n /** Whether the Gamepad API exists. */\n available: !!poll,\n /** Whether the last poll found a gamepad. */\n connected: false,\n /** The gamepad index polled, or null for the first connected. */\n index: o.index ?? null,\n /** Stop polling, unregister from the host. */\n dispose() { host.players.remove(player); host.unregister(s); return s; },\n });\n\n const player = {\n tick() {\n let gp = null;\n if (poll) {\n const list = poll() || [];\n if (s.index != null) gp = list[s.index] || null;\n else for (let i = 0; i < list.length; i++) if (list[i]) { gp = list[i]; break; }\n }\n s.connected = !!gp;\n for (let i = 0; i < 3; i++) {\n lin[i] = gp ? _lane(gp, map.lin[i]) : 0;\n ang[i] = gp ? _lane(gp, map.ang[i]) : 0;\n }\n feed();\n return true;\n },\n };\n host.players.add(player);\n if (o.bind) s.bind(o.bind);\n return host.register(s);\n}\n","/**\n * @file OBJ text → the arrays shape a bridge's buffer upload takes.\n * @module host/obj\n * @license AGPL-3.0-only\n *\n * Positions, texture coordinates and normals. Faces are fan-triangulated — a\n * quad as 0 1 2 · 2 3 0 — and each distinct position / uv / normal triple\n * becomes one vertex, in order of first use. Indices are 1-based, or negative\n * counting back from the last declared element. Groups, objects, smoothing and\n * materials are ignored.\n */\n\n'use strict';\n\nconst _index = (s, count) => {\n const i = parseInt(s, 10);\n return i < 0 ? count + i : i - 1;\n};\n\n/**\n * Parse OBJ text into `{ position, normal?, texcoord?, indices }`; normal and\n * texcoord only when some face vertex names one.\n * @param {string} text\n * @returns {{ position:{numComponents:number,data:Float32Array},\n * normal?:{numComponents:number,data:Float32Array},\n * texcoord?:{numComponents:number,data:Float32Array},\n * indices:{numComponents:number,data:Uint32Array} }}\n */\nexport function parseObj(text) {\n const v = [], vt = [], vn = [];\n const position = [], texcoord = [], normal = [], indices = [];\n const seen = new Map();\n let uvs = false, normals = false;\n\n const vertex = (token) => {\n const [ps, ts, ns] = token.split('/');\n const p = _index(ps, v.length / 3);\n const t = ts ? _index(ts, vt.length / 2) : -1;\n const n = ns ? _index(ns, vn.length / 3) : -1;\n const key = p + '/' + t + '/' + n;\n let id = seen.get(key);\n if (id !== undefined) return id;\n position.push(v[3 * p], v[3 * p + 1], v[3 * p + 2]);\n if (t >= 0) { texcoord.push(vt[2 * t], vt[2 * t + 1]); uvs = true; } else texcoord.push(0, 0);\n if (n >= 0) { normal.push(vn[3 * n], vn[3 * n + 1], vn[3 * n + 2]); normals = true; } else normal.push(0, 0, 0);\n id = position.length / 3 - 1;\n seen.set(key, id);\n return id;\n };\n\n for (const raw of text.split('\\n')) {\n const line = raw.trim();\n if (!line || line[0] === '#') continue;\n const parts = line.split(/\\s+/);\n switch (parts[0]) {\n case 'v': v.push(+parts[1], +parts[2], +parts[3]); break;\n case 'vt': vt.push(+parts[1], +(parts[2] ?? 0)); break;\n case 'vn': vn.push(+parts[1], +parts[2], +parts[3]); break;\n case 'f': {\n const ids = parts.slice(1).map(vertex);\n if (ids.length === 4) indices.push(ids[0], ids[1], ids[2], ids[2], ids[3], ids[0]);\n else for (let i = 1; i + 1 < ids.length; i++) indices.push(ids[0], ids[i], ids[i + 1]);\n break;\n }\n }\n }\n\n const out = {\n position: { numComponents: 3, data: new Float32Array(position) },\n indices: { numComponents: 3, data: new Uint32Array(indices) },\n };\n if (normals) out.normal = { numComponents: 3, data: new Float32Array(normal) };\n if (uvs) out.texcoord = { numComponents: 2, data: new Float32Array(texcoord) };\n return out;\n}\n","/**\n * @file glTF 2.0 → meshes in the arrays shape, the node hierarchy, skins and animation clips.\n * @module host/gltf\n * @license AGPL-3.0-only\n *\n * The format is glTF 2.0 (Khronos Group): a JSON document plus binary buffers,\n * or both in one GLB container. parseGlb splits a container; parseGltf reads\n * the document over its buffers into what a bridge uploads and what tree's\n * skin functions (clipSample, poseWorld, jointPalette) take as they are.\n *\n * Read: triangle primitives (POSITION, NORMAL, TANGENT, TEXCOORD_0, JOINTS_0,\n * WEIGHTS_0, indices), morph targets (POSITION and NORMAL deltas), the\n * material's base colour factor, nodes, skins, animations. Normalised integer\n * accessors arrive as floats; interleaved views are unpacked. Not read:\n * textures, cameras, other primitive modes, sparse accessors and compressed\n * geometry (Draco, meshopt) — the last two throw.\n *\n * Nodes are re-indexed parents first, and every node index in the result\n * (a mesh's, a skin's joints, a channel's) is the new one.\n */\n\n'use strict';\n\nimport { mat4ToTransform } from '@nakednous/tree';\n\nconst GLB_MAGIC = 0x46546C67, CHUNK_JSON = 0x4E4F534A, CHUNK_BIN = 0x004E4942;\n\nconst COMPONENTS = { SCALAR: 1, VEC2: 2, VEC3: 3, VEC4: 4, MAT2: 4, MAT3: 9, MAT4: 16 };\nconst TYPES = {\n 5120: Int8Array, 5121: Uint8Array, 5122: Int16Array, 5123: Uint16Array, 5125: Uint32Array, 5126: Float32Array,\n};\nconst NORMALISED = { 5120: 127, 5121: 255, 5122: 32767, 5123: 65535 };\nconst ATTRIBUTES = {\n POSITION: 'position', NORMAL: 'normal', TANGENT: 'tangent', TEXCOORD_0: 'texcoord',\n JOINTS_0: 'joints', WEIGHTS_0: 'weights',\n};\nconst IDENTITY = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n\n/**\n * Split a GLB container into its JSON document and binary chunk.\n * @param {ArrayBuffer} buffer\n * @returns {{ json:object, bin:ArrayBuffer|null }}\n */\nexport function parseGlb(buffer) {\n const view = new DataView(buffer);\n if (view.getUint32(0, true) !== GLB_MAGIC) throw new Error('[host] gltf: not a GLB container.');\n if (view.getUint32(4, true) !== 2) throw new Error('[host] gltf: GLB version ' + view.getUint32(4, true) + ', 2 expected.');\n const end = Math.min(view.getUint32(8, true), buffer.byteLength);\n let json = null, bin = null;\n for (let at = 12; at + 8 <= end;) {\n const length = view.getUint32(at, true), type = view.getUint32(at + 4, true);\n const start = at + 8;\n if (type === CHUNK_JSON) json = JSON.parse(new TextDecoder().decode(new Uint8Array(buffer, start, length)));\n else if (type === CHUNK_BIN && !bin) bin = buffer.slice(start, start + length);\n at = start + length + (-length & 3);\n }\n if (!json) throw new Error('[host] gltf: GLB without a JSON chunk.');\n return { json, bin };\n}\n\n/**\n * Read a glTF document over its buffers.\n *\n * A part is one triangle primitive under one node: `mesh` in the\n * arrays shape (position, normal?, tangent?, texcoord?, joints?, weights?,\n * indices), `targets` its morph targets as delta arrays, `color` the\n * material's base colour factor, `node` the node it hangs from and `skin` its\n * skin's index or −1. A rigid mesh draws under its node's world matrix; a\n * skinned one under its skin's joint palette.\n *\n * @param {object} json The glTF document.\n * @param {ArrayBuffer[]} buffers One per `json.buffers` entry.\n * @returns {{ parts:{ name:string, node:number, skin:number, mesh:object,\n * targets:{ name:string, position?:object, normal?:object }[], color:number[] }[],\n * nodes:{ names:string[], parents:Int32Array, rest:Float32Array },\n * skins:{ name:string, joints:Uint16Array, inverseBind:Float32Array }[],\n * clips:{ name:string, duration:number, channels:object[] }[] }}\n * nodes.rest: the rest pose, ten numbers per node (translation, rotation\n * [x,y,z,w], scale). A clip channel: { node, path, interp, times, values }.\n */\nexport function parseGltf(json, buffers) {\n for (const ext of json.extensionsRequired || []) {\n if (/draco|meshopt/i.test(ext)) throw new Error('[host] gltf: ' + ext + ' is not supported.');\n }\n const cache = new Map();\n\n const accessor = (index) => {\n if (cache.has(index)) return cache.get(index);\n const a = json.accessors[index];\n if (a.sparse) throw new Error('[host] gltf: sparse accessors are not supported.');\n const n = COMPONENTS[a.type], Type = TYPES[a.componentType], scale = a.normalized && NORMALISED[a.componentType];\n const data = new (scale ? Float32Array : Type)(a.count * n);\n if (a.bufferView !== undefined) {\n const bv = json.bufferViews[a.bufferView];\n const base = (bv.byteOffset || 0) + (a.byteOffset || 0), size = Type.BYTES_PER_ELEMENT;\n const stride = bv.byteStride || n * size;\n const view = new DataView(buffers[bv.buffer]);\n const get = {\n 5120: 'getInt8', 5121: 'getUint8', 5122: 'getInt16', 5123: 'getUint16', 5125: 'getUint32', 5126: 'getFloat32',\n }[a.componentType];\n for (let i = 0; i < a.count; i++) {\n for (let c = 0; c < n; c++) {\n const v = view[get](base + i * stride + c * size, true);\n data[i * n + c] = scale ? Math.max(v / scale, -1) : v;\n }\n }\n }\n const out = { numComponents: n, data };\n cache.set(index, out);\n return out;\n };\n\n // nodes, parents first\n const src = json.nodes || [], parentOf = new Array(src.length).fill(-1);\n src.forEach((node, i) => { for (const c of node.children || []) parentOf[c] = i; });\n const order = [], remap = new Array(src.length).fill(-1);\n const visit = (i) => { remap[i] = order.length; order.push(i); for (const c of src[i].children || []) visit(c); };\n src.forEach((_, i) => { if (parentOf[i] < 0) visit(i); });\n\n const names = [], parents = new Int32Array(order.length), rest = new Float32Array(order.length * 10);\n const xf = { pos: [0, 0, 0], rot: [0, 0, 0, 1], scl: [1, 1, 1] };\n order.forEach((old, i) => {\n const node = src[old];\n names.push(node.name || '');\n parents[i] = parentOf[old] < 0 ? -1 : remap[parentOf[old]];\n let t = node.translation || [0, 0, 0], r = node.rotation || [0, 0, 0, 1], s = node.scale || [1, 1, 1];\n if (node.matrix) { mat4ToTransform(xf, node.matrix); t = xf.pos; r = xf.rot; s = xf.scl; }\n rest.set(t, i * 10); rest.set(r, i * 10 + 3); rest.set(s, i * 10 + 7);\n });\n\n // parts: one per triangle primitive per node\n const primitives = (json.meshes || []).map((mesh) => {\n const out = [];\n for (const prim of mesh.primitives) {\n if ((prim.mode ?? 4) !== 4 || prim.attributes.POSITION === undefined) continue;\n const arrays = {};\n for (const [semantic, key] of Object.entries(ATTRIBUTES)) {\n if (prim.attributes[semantic] !== undefined) arrays[key] = accessor(prim.attributes[semantic]);\n }\n const count = arrays.position.data.length / 3;\n const data = prim.indices !== undefined\n ? Uint32Array.from(accessor(prim.indices).data)\n : Uint32Array.from({ length: count }, (_, i) => i);\n arrays.indices = { numComponents: 3, data };\n const targetNames = (mesh.extras && mesh.extras.targetNames) || [];\n const targets = (prim.targets || []).map((target, i) => {\n const t = { name: targetNames[i] || '' };\n if (target.POSITION !== undefined) t.position = accessor(target.POSITION);\n if (target.NORMAL !== undefined) t.normal = accessor(target.NORMAL);\n return t;\n });\n const material = prim.material !== undefined ? json.materials[prim.material] : null;\n const pbr = material && material.pbrMetallicRoughness;\n out.push({ arrays, targets, color: (pbr && pbr.baseColorFactor ? pbr.baseColorFactor : [1, 1, 1, 1]).slice() });\n }\n return { name: mesh.name || '', primitives: out };\n });\n\n const parts = [];\n order.forEach((old, i) => {\n const node = src[old];\n if (node.mesh === undefined) return;\n const mesh = primitives[node.mesh];\n for (const p of mesh.primitives) {\n parts.push({ name: mesh.name || names[i], node: i, skin: node.skin ?? -1, mesh: p.arrays, targets: p.targets, color: p.color });\n }\n });\n\n const skins = (json.skins || []).map((skin) => {\n const joints = Uint16Array.from(skin.joints, j => remap[j]);\n const inverseBind = skin.inverseBindMatrices !== undefined\n ? Float32Array.from(accessor(skin.inverseBindMatrices).data)\n : Float32Array.from({ length: joints.length * 16 }, (_, k) => IDENTITY[k % 16]);\n return { name: skin.name || '', joints, inverseBind };\n });\n\n const clips = (json.animations || []).map((anim) => {\n let duration = 0;\n const channels = [];\n for (const ch of anim.channels) {\n if (ch.target.node === undefined) continue;\n const sampler = anim.samplers[ch.sampler];\n const times = accessor(sampler.input).data, values = accessor(sampler.output).data;\n if (times.length) duration = Math.max(duration, times[times.length - 1]);\n channels.push({ node: remap[ch.target.node], path: ch.target.path, interp: sampler.interpolation || 'LINEAR', times, values });\n }\n return { name: anim.name || '', duration, channels };\n });\n\n return { parts, nodes: { names, parents, rest }, skins, clips };\n}\n","/**\n * @file Media sources — images, video and Canvas2D rasters for a bridge's textures, models for its buffers.\n * @module host/media\n * @license AGPL-3.0-only\n *\n * A mesh arrives as arrays for a bridge's buffer upload, its bounds beside\n * them: loadMesh. A model keeps a file's structure — parts, hierarchy, skins,\n * clips: loadModel. Both read OBJ (host/obj) and glTF 2.0 (host/gltf), or\n * another format through a parser the caller passes.\n *\n * What a texture upload reads from: an ImageBitmap fetched from a URL, a\n * hidden <video> element from a file or the user's camera, a bitmap drawn\n * through a 2D context (the text path — glyph strips, billboard tags,\n * anything Canvas2D can typeset). No orientation option anywhere: whether\n * rows flip is the bridge's upload, since it depends on the GPU API's\n * texture space.\n */\n\n'use strict';\n\nimport { parseObj } from './obj.js';\nimport { parseGlb, parseGltf } from './gltf.js';\nimport { meshNormals, meshBounds, meshGroups, meshFlatten } from '@nakednous/tree';\n\n/**\n * Fetch an image into an ImageBitmap.\n * @param {string} url\n * @param {{ fetch?:object, bitmap?:object }} [opts]\n * fetch: the fetch init (credentials, mode, …). bitmap: the\n * createImageBitmap options (premultiplyAlpha, colorSpaceConversion, …).\n * @returns {Promise<ImageBitmap>}\n */\nexport async function loadImage(url, opts) {\n const o = opts || {};\n const res = await fetch(url, o.fetch);\n if (!res.ok) throw new Error('[host] image: ' + url + ' → ' + res.status);\n const blob = await res.blob();\n return o.bitmap ? createImageBitmap(blob, o.bitmap) : createImageBitmap(blob);\n}\n\nconst _ONE_NODE = () => ({ names: [''], parents: Int32Array.of(-1), rest: Float32Array.of(0, 0, 0, 0, 0, 0, 1, 1, 1, 1) });\nconst _part = (mesh) => ({ name: '', node: 0, skin: -1, mesh, targets: [], color: [1, 1, 1, 1] });\n\n// A morph target's deltas expanded through its mesh's indices; a target carries no indices of its own.\nfunction _flatTarget(target, indices) {\n const flat = meshFlatten(target, indices);\n delete flat.indices;\n return flat;\n}\n\n// The normals option applied to every part, then each mesh's bounds; parts sharing a mesh share the result.\n// undefined / true the file's normals; smooth ones where a mesh has none\n// 'smooth' always recomputed, summed per position (tree's meshGroups), so a faceted file smooths\n// 'flat' always recomputed on the flattened mesh (tree's meshFlatten), morph targets flattened with it\n// false nothing computed\nfunction _finish(model, o) {\n const mode = o.normals === undefined || o.normals === true ? 'fill' : o.normals;\n if (mode !== 'fill' && mode !== 'smooth' && mode !== 'flat' && mode !== false) {\n throw new Error(\"[host] model: normals is one of 'smooth', 'flat', false, or left out.\");\n }\n const done = new Map();\n for (const part of model.parts) {\n const source = part.mesh;\n if (done.has(source)) {\n part.mesh = done.get(source);\n if (mode === 'flat') part.targets = part.targets.map(t => _flatTarget(t, source.indices.data));\n continue;\n }\n let mesh = source;\n const bounds = meshBounds({ min: [0, 0, 0], max: [0, 0, 0], center: [0, 0, 0], diag: 0 }, mesh.position.data);\n if (mode === 'flat') {\n mesh = meshFlatten(source);\n const p = mesh.position.data;\n mesh.normal = { numComponents: 3, data: meshNormals(new Float32Array(p.length), p, mesh.indices.data) };\n part.targets = part.targets.map(t => _flatTarget(t, source.indices.data));\n } else if (mode === 'smooth' || (mode === 'fill' && !mesh.normal)) {\n const p = mesh.position.data;\n const groups = meshGroups(new Int32Array(p.length / 3), p, 1e-6 * bounds.diag);\n mesh.normal = { numComponents: 3, data: meshNormals(new Float32Array(p.length), p, mesh.indices.data, { groups }) };\n }\n mesh.bounds = bounds;\n done.set(source, mesh);\n part.mesh = mesh;\n }\n return model;\n}\n\n// Fetch and parse into the model shape, before the normals and bounds.\nasync function _load(url, o, what) {\n const get = async (at, init) => {\n const res = await fetch(at, init);\n if (!res.ok) throw new Error('[host] ' + what + ': ' + at + ' → ' + res.status);\n return res;\n };\n if (typeof o.parse === 'function') {\n const mesh = await o.parse(await (await get(url, o.fetch)).arrayBuffer());\n return { parts: [_part(mesh)], nodes: _ONE_NODE(), skins: [], clips: [] };\n }\n const format = (o.format || (/\\.(\\w+)(?:[?#].*)?$/.exec(url) || [])[1] || '').toLowerCase();\n if (format !== 'obj' && format !== 'glb' && format !== 'gltf') {\n throw new Error('[host] ' + what + ': ' + url + ' → unknown format; opts.format is one of obj, glb, gltf, or pass opts.parse.');\n }\n const res = await get(url, o.fetch);\n if (format === 'obj') return { parts: [_part(parseObj(await res.text()))], nodes: _ONE_NODE(), skins: [], clips: [] };\n if (format === 'glb') {\n const { json, bin } = parseGlb(await res.arrayBuffer());\n return parseGltf(json, [bin]);\n }\n const json = await res.json();\n const base = typeof location !== 'undefined' ? new URL(url, location.href) : url;\n const resolve = (uri) => {\n if (/^data:/.test(uri)) return uri;\n try { return String(new URL(uri, base)); } catch (e) { return url.replace(/[^/]*$/, '') + uri; }\n };\n const buffers = await Promise.all((json.buffers || []).map(async b => (await get(resolve(b.uri), o.fetch)).arrayBuffer()));\n return parseGltf(json, buffers);\n}\n\n/**\n * Fetch a mesh: one object in the arrays shape — position, indices, and\n * normal, tangent, texcoord, color, joints, weights when the file carries them\n * — with `bounds`, its extent `{ min, max, center, diag }`, beside them. A\n * bridge's buffer upload takes it as it is; `size / mesh.bounds.diag` is the\n * scale that fits any file to `size`.\n *\n * Formats: OBJ (host/obj), and glTF 2.0 as `.glb` or `.gltf` (host/gltf) when\n * the file holds one part. A file of several parts rejects, naming loadModel:\n * a mesh is never silently the first of many. `opts.parse` reads any other\n * format: it receives the fetched ArrayBuffer and returns the arrays shape.\n *\n * Normals. Left out, the option keeps the file's normals and gives smooth\n * ones to a mesh that has none. 'smooth' always recomputes them, summed per\n * position, so a file that arrives faceted or cut along a texture seam\n * smooths too. 'flat' always recomputes them on the flattened mesh — every\n * triangle owning its vertices, so the vertex count grows and the indices\n * count up. false computes nothing. The procedure, its limits (no crease\n * angle; grouping by grid cell, at 1e-6 of the bounds' diagonal) and its\n * sources are tree/mesh's. glTF viewers compute flat normals for a file\n * without any; here that is `normals: 'flat'`.\n *\n * @param {string} url\n * @param {{ fetch?:object, format?:string, parse?:function(ArrayBuffer):object,\n * normals?:'smooth'|'flat'|false }} [opts] fetch: the fetch init. format: 'obj' |\n * 'glb' | 'gltf' when the URL's extension does not say. parse: a parser for another\n * format. normals: as above.\n * @returns {Promise<object>} The mesh.\n */\nexport async function loadMesh(url, opts) {\n const o = opts || {};\n const model = await _load(url, o, 'mesh');\n if (model.parts.length !== 1) {\n throw new Error('[host] mesh: ' + url + ' → ' + model.parts.length + ' parts; loadModel keeps them apart.');\n }\n return _finish(model, o).parts[0].mesh;\n}\n\n/**\n * Fetch a model with its structure — what a rig, morph targets or animation\n * need; a single mesh is loadMesh's:\n *\n * { parts: [{ name, node, skin, mesh, targets, color }], nodes, skins, clips }\n *\n * A part is one triangle primitive under one node: `mesh` as loadMesh returns\n * it (the arrays shape with `bounds`, in the part's own space), `targets` its\n * morph targets as delta arrays, `color` its base colour [r, g, b, a], `node`\n * the node it hangs from and `skin` its skin's index or −1. `nodes` is the\n * hierarchy `{ names, parents, rest }`, parents first, `rest` a pose of ten\n * numbers per node; `skins` are `{ name, joints, inverseBind }` and `clips`\n * `{ name, duration, channels }` — what tree's clipSample, poseWorld and\n * jointPalette take. A rigid part draws under its node's world matrix, a\n * skinned one under its skin's joint palette. An OBJ file is one white part\n * under one identity node.\n *\n * The options are loadMesh's; `normals` applies to every part, 'flat'\n * flattening each part's morph targets with its mesh.\n *\n * @param {string} url\n * @param {{ fetch?:object, format?:string, parse?:function(ArrayBuffer):object,\n * normals?:'smooth'|'flat'|false }} [opts]\n * @returns {Promise<{ parts:object[], nodes:{ names:string[], parents:Int32Array, rest:Float32Array },\n * skins:object[], clips:object[] }>}\n */\nexport async function loadModel(url, opts) {\n const o = opts || {};\n return _finish(await _load(url, o, 'model'), o);\n}\n\n/**\n * A hidden, muted, inline <video> element from a file or the user's camera.\n * `ready` resolves once metadata arrived (width / height known); a camera\n * denial rejects it. Inside an iframe a camera source needs allow=\"camera\"\n * on the frame.\n *\n * @param {{ src?:string, camera?:boolean|object, loop?:boolean, autoplay?:boolean,\n * document?:object, media?:object }} opts\n * src: a media URL. camera: true or getUserMedia video constraints\n * ({ facingMode, width, height }). loop (default true for src).\n * autoplay (default true): start() once ready. document / media: the\n * Document and MediaDevices to use (defaults: the globals) — the seam\n * a test fills.\n * @returns {{ el:HTMLVideoElement, ready:Promise<object>, width:number, height:number,\n * start():Promise<void>, stop():object, dispose():object }}\n */\nexport function createVideo(opts) {\n const o = opts || {};\n const doc = o.document || (typeof document !== 'undefined' ? document : null);\n if (!doc) { console.error('[host] video: no document.'); return null; }\n const el = doc.createElement('video');\n el.muted = true;\n el.playsInline = true;\n el.setAttribute('playsinline', '');\n el.setAttribute('muted', '');\n el.style.display = 'none';\n let stream = null;\n\n const v = {\n /** The <video> element — the bridge's upload source, refreshed each frame. */\n el,\n /** Intrinsic size, known once `ready` resolved. */\n width: 0, height: 0,\n /** Resolves with this source once metadata arrived; rejects on a camera denial or a load error. */\n ready: null,\n /** Play; resolves when playback began. */\n start() { const p = el.play(); return p && typeof p.catch === 'function' ? p.catch((e) => console.error('[host] video: play() failed: ' + e.message + '.')) : Promise.resolve(); },\n /** Pause. Chainable. */\n stop() { el.pause(); return v; },\n /** Stop, release the camera tracks, detach the element. */\n dispose() {\n el.pause();\n if (stream) { for (const t of stream.getTracks()) t.stop(); stream = null; }\n el.removeAttribute('src');\n el.srcObject = null;\n if (typeof el.remove === 'function') el.remove();\n return v;\n },\n };\n\n v.ready = new Promise((resolve, reject) => {\n const unlisten = () => { el.removeEventListener('loadedmetadata', onMeta); el.removeEventListener('error', onErr); };\n const fail = (msg) => { unlisten(); reject(new Error('[host] video: ' + msg)); };\n const onMeta = () => {\n v.width = el.videoWidth || 0; v.height = el.videoHeight || 0;\n unlisten();\n if (o.autoplay !== false) v.start();\n resolve(v);\n };\n const onErr = () => fail('failed to load ' + (o.src || 'the source') + '.');\n el.addEventListener('loadedmetadata', onMeta);\n el.addEventListener('error', onErr);\n if (o.camera) {\n const media = o.media || (typeof navigator !== 'undefined' && navigator.mediaDevices) || null;\n if (!media || typeof media.getUserMedia !== 'function') { fail('getUserMedia is unavailable here.'); return; }\n media.getUserMedia({ video: o.camera === true ? true : o.camera, audio: false })\n .then((s) => { stream = s; el.srcObject = s; })\n .catch((e) => fail('camera denied: ' + e.message + '.'));\n } else if (o.src) {\n el.loop = o.loop !== false;\n el.src = o.src;\n } else {\n fail('needs { src } or { camera }.');\n }\n });\n v.ready.catch(() => {}); // an unobserved rejection is the caller's to observe, not a crash\n return v;\n}\n\n/**\n * Draw through a 2D context and hand the result back as a texture source: an\n * ImageBitmap where OffscreenCanvas exists, else the canvas element itself.\n *\n * @param {function(CanvasRenderingContext2D, number, number):void} draw\n * @param {number} w Pixel width.\n * @param {number} h Pixel height.\n * @param {{ document?:object }} [opts] The Document for the fallback canvas.\n * @returns {ImageBitmap|HTMLCanvasElement|null}\n */\nexport function raster(draw, w, h, opts) {\n const o = opts || {};\n if (typeof OffscreenCanvas !== 'undefined') {\n const c = new OffscreenCanvas(w, h);\n draw(c.getContext('2d'), w, h);\n return c.transferToImageBitmap();\n }\n const doc = o.document || (typeof document !== 'undefined' ? document : null);\n if (!doc) { console.error('[host] raster: no OffscreenCanvas and no document.'); return null; }\n const c = doc.createElement('canvas');\n c.width = w; c.height = h;\n draw(c.getContext('2d'), w, h);\n return c;\n}\n","/**\n * @file The label layer — DOM text over the canvas, anchored in world or screen space.\n * @module host/labels\n * @license AGPL-3.0-only\n *\n * The replacement for WEBGL text() in HUDs, gizmo labels and formula\n * readouts, with the browser's own shaping. One absolutely positioned <div>\n * overlays the canvas as its next sibling, pointer-events: none, sized by\n * the canvas observer; the host sets the canvas parent to position:\n * relative when it is static, and says so in the console once.\n *\n * labels.set(id, text, x, y, z, opts) // a world anchor, projected each tick()\n * labels.setScreen(id, text, sx, sy, opts) // canvas px, the HUD form\n * labels.remove(id) · labels.clear() · labels.visible\n * labels.tick() // after the view bag is current\n *\n * opts: dx / dy pixel offsets, anchor ('center' default, 'left', 'right'),\n * class — a CSS class beside the layer's own 'host-label', frame — a\n * transient label that lives for the frame it was set in: a gizmo re-sets\n * it every draw and tick() removes it once a frame passes without. A label\n * whose window depth leaves [0, 1] or whose anchor leaves the canvas is\n * hidden, not clamped. Elements are reused by id; tick() writes transforms\n * only, text when the string changed.\n */\n\n'use strict';\n\nimport { WORLD, SCREEN, mapLocation } from '@nakednous/tree';\n\nconst _p = [0, 0, 0];\nconst _ANCHOR = { center: -50, left: 0, right: -100 };\nconst _NO_OPTS = {};\n\n/**\n * Create the label layer of a canvas. The layer is inserted at once; it\n * needs a parent, so create it after the canvas is in the document.\n *\n * @param {object} host Its canvas, view bag and size are read.\n * @param {{ document?:object }} [opts] The Document (default: the global).\n * @returns {object|null} The layer, or null without a document or a parent.\n */\nexport function createLabels(host, opts) {\n const o = opts || {};\n const doc = o.document || (typeof document !== 'undefined' ? document : null);\n const canvas = host.canvas;\n const parent = canvas && canvas.parentNode;\n if (!doc || !parent) { console.error('[host] labels: the canvas needs a parent element.'); return null; }\n\n const el = doc.createElement('div');\n el.className = 'host-labels';\n Object.assign(el.style, {\n position: 'absolute', left: '0px', top: '0px', width: '0px', height: '0px',\n pointerEvents: 'none', overflow: 'hidden',\n });\n const cs = typeof getComputedStyle === 'function' ? getComputedStyle(parent) : null;\n if (cs && cs.position === 'static') {\n parent.style.position = 'relative';\n console.info('[host] labels: set the canvas parent to position: relative for the label layer.');\n }\n parent.insertBefore(el, canvas.nextSibling);\n\n const entries = new Map(); // id → { el, text, x, y, z, dx, dy, ax, screen, cls, sx, sy, shown }\n let width = 0, height = 0, left = -1, top = -1, visible = true;\n\n const entry = (id, text, o) => {\n let e = entries.get(id);\n if (!e) {\n const span = doc.createElement('span');\n Object.assign(span.style, { position: 'absolute', left: '0px', top: '0px', whiteSpace: 'nowrap', willChange: 'transform' });\n span.style.visibility = 'hidden';\n el.appendChild(span);\n e = { el: span, text: null, x: 0, y: 0, z: 0, dx: 0, dy: 0, ax: -50, screen: false, cls: null, sx: NaN, sy: NaN, shown: false, frame: false, fresh: false };\n entries.set(id, e);\n }\n if (e.text !== text) { e.text = text; e.el.textContent = text; }\n const c = o.class || null;\n if (e.cls !== c) { e.cls = c; e.el.className = c ? 'host-label ' + c : 'host-label'; }\n e.ax = _ANCHOR[o.anchor] ?? -50;\n e.dx = o.dx || 0; e.dy = o.dy || 0;\n e.frame = !!o.frame; e.fresh = true;\n return e;\n };\n const place = (e, sx, sy) => {\n if (sx === e.sx && sy === e.sy) return;\n e.sx = sx; e.sy = sy;\n e.el.style.transform = 'translate(' + sx + 'px, ' + sy + 'px) translate(' + e.ax + '%, -50%)';\n };\n const show = (e, on) => {\n if (e.shown === on) return;\n e.shown = on;\n e.el.style.visibility = on ? '' : 'hidden';\n };\n\n const labels = {\n /** The layer element. */\n el,\n /** Whether the layer shows; false hides every label at once. */\n get visible() { return visible; },\n set visible(v) { visible = !!v; el.style.display = visible ? '' : 'none'; },\n /** Live label count. */\n get size() { return entries.size; },\n\n /**\n * Place a label at a world anchor, projected each tick().\n * @param {string} id\n * @param {string} text\n * @param {number} x, y, z World anchor.\n * @param {{ dx?:number, dy?:number, anchor?:string, class?:string, frame?:boolean }} [opts]\n * @returns {object} this\n */\n set(id, text, x, y, z, opts) {\n const e = entry(id, text, opts || _NO_OPTS);\n e.screen = false; e.x = x; e.y = y; e.z = z;\n return labels;\n },\n\n /**\n * Place a label in canvas px — the HUD form.\n * @param {string} id\n * @param {string} text\n * @param {number} sx, sy Canvas px, y down.\n * @param {{ dx?:number, dy?:number, anchor?:string, class?:string, frame?:boolean }} [opts]\n * @returns {object} this\n */\n setScreen(id, text, sx, sy, opts) {\n const e = entry(id, text, opts || _NO_OPTS);\n e.screen = true; e.x = sx; e.y = sy; e.z = 0;\n return labels;\n },\n\n /** Remove a label. */\n remove(id) {\n const e = entries.get(id);\n if (e) { el.removeChild(e.el); entries.delete(id); }\n return labels;\n },\n\n /** Remove every label. */\n clear() { for (const id of [...entries.keys()]) labels.remove(id); return labels; },\n\n /**\n * Project every world label through the view bag and write the\n * transforms; hide what falls outside the canvas or the depth range.\n * Call after the view bag is current for the frame.\n * @returns {object} this\n */\n tick() {\n const ol = canvas.offsetLeft || 0, ot = canvas.offsetTop || 0;\n if (ol !== left || ot !== top) { left = ol; top = ot; el.style.left = ol + 'px'; el.style.top = ot + 'px'; }\n const view = host.view;\n for (const [id, e] of entries) {\n if (e.frame && !e.fresh) { labels.remove(id); continue; }\n e.fresh = false;\n let sx, sy, on;\n if (e.screen) { sx = e.x; sy = e.y; on = true; }\n else if (!view || view.stale) { on = false; }\n else {\n mapLocation(_p, e.x, e.y, e.z, WORLD, SCREEN, view, view.vp, view.ndcZMin);\n sx = _p[0]; sy = _p[1];\n on = _p[2] >= 0 && _p[2] <= 1 && sx >= 0 && sx <= width && sy >= 0 && sy <= height;\n }\n if (on) place(e, sx + e.dx, sy + e.dy);\n show(e, on);\n }\n return labels;\n },\n\n /**\n * The observer's write: the layer's size in CSS px.\n * @param {number} w\n * @param {number} h\n * @returns {object} this\n */\n resize(w, h) {\n width = w; height = h;\n el.style.width = w + 'px'; el.style.height = h + 'px';\n return labels;\n },\n\n /** Remove the layer and its labels. */\n dispose() {\n entries.clear();\n if (el.parentNode) el.parentNode.removeChild(el);\n host.unregister(labels);\n return labels;\n },\n };\n labels.resize(host.width || 0, host.height || 0);\n return host.register(labels);\n}\n","/**\n * @file The orbit — the fall-through camera gesture on unclaimed pointers.\n * @module host/orbit\n * @license AGPL-3.0-only\n *\n * What the handle gate yields to: one pointer orbits the camera state about\n * its center, two pointers dolly by their distance and pan by their\n * midpoint, the wheel dollies. update() consumes only unclaimed pointers and\n * returns true when it moved the camera, so\n *\n * if (!h.update()) orbit.update()\n *\n * reads as the gate. It writes cam only; the next setCamera(cam) installs it.\n * Two-pointer motion is computed from the pointers' own coordinates, never\n * from a browser's pinch synthesis, so it reads the same on every platform;\n * the canvas gets touch-action: none while the orbit lives so the browser\n * does not scroll or zoom the page instead. `damping`, seconds, makes the\n * camera trail the gesture through a first-order lag: each step of a drag —\n * orbit, pan and dolly lanes — and each wheel notch is an impulse the camera\n * drains with that time constant through tree's coast, so it follows the\n * finger about `damping` behind and, after a release, travels the rest of\n * what the finger did and no more, a flick easing out. A fresh touch drops\n * what is still draining, so do home() and enabled = false. The default is\n * 0.2 s; 0 makes the orbit exact.\n *\n * Canvas y runs down; which world direction that is depends on the\n * projection installed in the view bag: a y-up projection (GL's, tree's\n * default) maps a downward drag to the eye's −up, a y-flipped one (p5's,\n * mat4Proj[5] < 0) to +up. The orbit reads that sign off the bag each\n * update, so a drag down always brings the scene down.\n */\n\n'use strict';\n\nimport { createCamera, cameraCopy, cameraOrbit, cameraDolly, cameraPan, pixelRatio, coastStep, coastAlive } from '@nakednous/tree';\n\nconst _clamp = { min: 0, max: Infinity };\nconst _now = () => (typeof performance !== 'undefined' && performance.now) ? performance.now() : Date.now();\nconst EPS = 1e-4; // a rate below this in every lane ends the drain\nconst DT_MAX = 0.1; // seconds, the measured frame's clamp\n\n/**\n * Create an orbit on a camera state.\n *\n * @param {object} host\n * @param {object} cam The camera state written.\n * @param {{ rotate?:number, pan?:number, zoom?:number, wheel?:number, damping?:number,\n * minDistance?:number, maxDistance?:number, enabled?:boolean }} [opts]\n * rotate: radians per pixel (default 0.005). pan / zoom / wheel:\n * scalars on the two-pointer pan, the pinch and the wheel dolly\n * (default 1). damping: the lag's time constant in seconds (default\n * 0.2; 0 exact). minDistance / maxDistance: gaze-distance clamps.\n * @returns {object} The orbit: { cam, enabled, rotate, pan, zoom, wheel, damping,\n * minDistance, maxDistance, update(dt), home(), dispose() }.\n */\nexport function createOrbit(host, cam, opts) {\n const o = opts || {};\n const canvas = host.canvas;\n const home = cameraCopy(createCamera(), cam);\n const tracked = new Map(); // pointer id → { x, y } as last consumed\n let wheelAcc = 0;\n const rate = [0, 0, 0, 0, 0]; // what is still draining: dAz, dEl, panX, panY, log dolly — per second\n const step = [0, 0, 0, 0, 0]; // one frame of it\n let lastNow = 0, wasPressed = false;\n\n const cancel = () => { for (let i = 0; i < 5; i++) rate[i] = 0; };\n const apply = (s) => {\n if (s[0] !== 0 || s[1] !== 0) cameraOrbit(cam, s[0], s[1]);\n if (s[2] !== 0 || s[3] !== 0) cameraPan(cam, s[2], s[3]);\n if (s[4] !== 0) dolly(Math.exp(s[4]));\n };\n\n const onWheel = (e) => {\n if (typeof e.preventDefault === 'function') e.preventDefault();\n const unit = e.deltaMode === 1 ? 16 : e.deltaMode === 2 ? (host.height || 1) : 1;\n wheelAcc += (e.deltaY || 0) * unit;\n };\n canvas.addEventListener('wheel', onWheel, { passive: false });\n const touchAction = canvas.style ? canvas.style.touchAction : undefined;\n if (canvas.style) canvas.style.touchAction = 'none';\n\n const track = (p) => {\n let t = tracked.get(p.id);\n if (!t) { t = { x: p.x, y: p.y }; tracked.set(p.id, t); }\n else { t.x = p.x; t.y = p.y; }\n };\n const distance = () => {\n const e = cam.eye, c = cam.center;\n return Math.hypot(e[0] - c[0], e[1] - c[1], e[2] - c[2]);\n };\n const dolly = (factor) => {\n _clamp.min = orbit.minDistance; _clamp.max = orbit.maxDistance;\n cameraDolly(cam, factor, _clamp);\n };\n\n const orbit = {\n /** The camera state written. */\n cam,\n /** False makes update() a no-op that drops its pointer memory. */\n enabled: o.enabled !== false,\n /** Radians per pixel of one-pointer drag. */\n rotate: o.rotate ?? 0.005,\n /** Scalar on the two-pointer pan. */\n pan: o.pan ?? 1,\n /** Scalar on the pinch dolly's exponent. */\n zoom: o.zoom ?? 1,\n /** Scalar on the wheel dolly. */\n wheel: o.wheel ?? 1,\n /** The lag's time constant, seconds; 0 makes the orbit exact. */\n damping: o.damping ?? 0.2,\n /** Gaze-distance clamps for every dolly. */\n minDistance: o.minDistance ?? 0,\n maxDistance: o.maxDistance ?? Infinity,\n\n /**\n * Consume this frame's unclaimed pointer motion and wheel into cam —\n * through the lag when damping is on.\n * @param {number} [dt] The frame in seconds; measured since the last update when omitted.\n * @returns {boolean} Whether the camera moved.\n */\n update(dt) {\n const now = _now();\n if (typeof dt !== 'number') dt = lastNow ? Math.min((now - lastNow) / 1000, DT_MAX) : 0;\n lastNow = now;\n if (!orbit.enabled) { tracked.clear(); wheelAcc = 0; cancel(); wasPressed = false; return false; }\n const src = host.pointer;\n let a = null, b = null;\n for (const p of src.pointers.values()) {\n // a hovering mouse has an entry without a press; only pressed, unclaimed, live pointers drive\n if (!p.down || p.owner !== null || p.up || p.cancel) { tracked.delete(p.id); continue; }\n if (a === null || p.id < a.id) { b = a; a = p; }\n else if (b === null || p.id < b.id) b = p;\n }\n for (const id of tracked.keys()) {\n if ((a === null || id !== a.id) && (b === null || id !== b.id)) tracked.delete(id);\n }\n const tau = orbit.damping > 0 ? orbit.damping : 0;\n const pressed = a !== null;\n if (pressed && !wasPressed) cancel(); // a fresh touch catches the scene: what was still draining is dropped\n wasPressed = pressed;\n let moved = false;\n let az = 0, el = 0, px = 0, py = 0, ld = 0; // this frame's step\n const view = host.view;\n const ys = view.mat4Proj[5] < 0 ? -1 : 1; // canvas-down is the eye's −up under a y-up projection, +up under p5's flip\n if (a !== null && b === null) {\n const t = tracked.get(a.id);\n if (t) {\n const dx = a.x - t.x, dy = a.y - t.y;\n if (dx !== 0 || dy !== 0) { az = -dx * orbit.rotate; el = ys * dy * orbit.rotate; }\n }\n track(a);\n } else if (a !== null && b !== null) {\n const ta = tracked.get(a.id), tb = tracked.get(b.id);\n if (ta && tb) {\n const dmx = (a.x + b.x - ta.x - tb.x) / 2, dmy = (a.y + b.y - ta.y - tb.y) / 2;\n if (dmx !== 0 || dmy !== 0) {\n const ratio = pixelRatio(view.mat4Proj, -view.vp[3] || 1, -distance(), view.ndcZMin);\n px = -dmx * ratio * orbit.pan; py = ys * dmy * ratio * orbit.pan;\n }\n const d0 = Math.hypot(ta.x - tb.x, ta.y - tb.y), d1 = Math.hypot(a.x - b.x, a.y - b.y);\n if (d0 > 0 && d1 > 0 && d0 !== d1) ld = orbit.zoom * Math.log(d0 / d1);\n }\n track(a); track(b);\n }\n // the step: exact, or — with damping — an impulse the drain below spreads over time\n if (az !== 0 || el !== 0 || px !== 0 || py !== 0 || ld !== 0) {\n if (tau > 0) { rate[0] += az / tau; rate[1] += el / tau; rate[2] += px / tau; rate[3] += py / tau; rate[4] += ld / tau; }\n else { step[0] = az; step[1] = el; step[2] = px; step[3] = py; step[4] = ld; apply(step); moved = true; }\n }\n if (wheelAcc !== 0) {\n const w = wheelAcc * 0.001 * orbit.wheel;\n wheelAcc = 0;\n if (tau > 0) rate[4] += w / tau;\n else { dolly(Math.exp(w)); moved = true; }\n }\n if (tau > 0 && coastAlive(rate, EPS)) { apply(coastStep(step, rate, dt, tau)); moved = true; }\n return moved;\n },\n\n /** Restore the pose captured at creation; whatever was draining is dropped. */\n home() { cameraCopy(cam, home); cancel(); return orbit; },\n\n /** Remove the wheel listener, restore touch-action, unregister from the host. */\n dispose() {\n canvas.removeEventListener('wheel', onWheel);\n if (canvas.style) canvas.style.touchAction = touchAction;\n tracked.clear();\n cancel();\n host.unregister(orbit);\n return orbit;\n },\n };\n return host.register(orbit);\n}\n","/**\n * @file HDR — Radiance (.hdr) RGBE bytes decoded to the pixels a bridge uploads.\n * @module host/hdr\n * @license AGPL-3.0-only\n *\n * A floating-point texture needs radiance, and no image decoder in the browser\n * gives it any: `loadImage` hands back an `ImageBitmap` of 8-bit codes, clamped\n * at 1.0, so a tone-mapping pass would have nothing left to compress. Radiance's\n * RGBE is the one high-range format a few dozen lines decode.\n *\n * ```\n * const hdr = decodeRGBE(bytes) // { data, width, height } — radiance\n * const tex = texture(gl, hdr) // the bridge's upload, RGBA32F\n * ```\n\n *\n * A pixel is three 8-bit mantissas and a shared exponent — `v · 2^(e − 136)` —\n * the format of Greg Ward's RADIANCE (Ward, *Real Pixels*, Graphics Gems II,\n * 1991). The reader follows `rgbe.c`'s structure and three.js's `HDRLoader`\n * (itself adapted from Bruce Walter's code), with the exact scale above rather\n * than that implementation's `v · 2^(e − 128) / 255`, and no `+ 0.5` — the\n * offset `rgbe.c`'s floating read carries, which lifts every pixel by half a\n * mantissa step (0.04 % of the mean on a Poly Haven HDRI) and which no file\n * declares. Rows keep the order the file states and are never flipped here: GL's\n * bottom-up space is the upload's concern (see texture.js).\n *\n * `loadHDR` — the fetch and the GL row order — is `webgl.tree`'s, and it\n * re-exports these two; a reader with no bridge to feed uses them directly. Rows\n * come back in the file's own order unless `rowOrder: 'BOTTOM_UP'` asks for GL's.\n * The decoder is trusted by round-tripping through the encoder and by agreeing\n * with three.js's `HDRLoader` and ImageMagick on real Radiance files.\n */\n\n'use strict';\n\n// Radiance's own threshold: at or below it a float holds no light, so a pixel\n// that low is written as four zero bytes and read back as black.\nconst _MIN_RADIANCE = 1e-32;\n// 16 Mpixel of RGBA32F is 256 MB of output: past this the tab is gone before\n// anything on screen says why, so the refusal comes from here.\nconst _DEFAULT_MAX_PIXELS = 16 * 1024 * 1024;\n\nconst _fv = new DataView(new ArrayBuffer(4));\n\n// The shared exponent as a float32: the bit pattern of 2^(e − 136) — mantissa\n// zero, biased exponent — read straight out of the view, no Math.pow per pixel.\n// 256 entries, made once at load, indexed by the exponent byte a pixel carries.\nconst _SCALES = new Float32Array(256);\nfor (let e = 0; e < 256; e++) {\n _fv.setUint32(0, e < 10 ? 0 : (e - 9) << 23, true); // e < 10 underflows to zero\n _SCALES[e] = _fv.getFloat32(0, true);\n}\n\n/**\n * Encode three linear radiance samples and a shared exponent to RGBE bytes.\n * The inverse of a pixel in `decodeRGBE`: the largest component becomes a byte\n * level between 128 and 255 — `level = round(v / 2^(e − 136))` with e the\n * exponent that carries it — so all eight bits are spent and the components\n * keep their ratio. The level is an integer: 0.0 comes back exactly, and\n * everything else to within half a level, the 1/512 an 8-bit mantissa costs at\n * worst.\n * @param {number} r Red, ≥ 0.\n * @param {number} g Green.\n * @param {number} b Blue.\n * @param {Uint8Array} [out] Four bytes to write; a new one when absent.\n * @returns {Uint8Array} out\n */\nexport function encodeRGBE(r, g, b, out) {\n const o = out || new Uint8Array(4);\n const max = Math.max(r, g, b);\n if (!(max >= _MIN_RADIANCE)) { o[0] = o[1] = o[2] = o[3] = 0; return o; }\n // The exponent whose scale carries max as a byte level of 128 to 255 — the\n // finest step the format has for this magnitude. The float32's own exponent\n // sets the base, one scale step below the level 255 needs, and the search\n // steps up until max fits a byte. `_SCALES` is the decoder's own table, so\n // the two cannot drift apart.\n _fv.setFloat32(0, max, true);\n let e = Math.min(255, Math.max(1, ((_fv.getUint32(0, true) >>> 23) & 0xff) - 127 + 128));\n while (e < 255 && max / _SCALES[e] > 255) e++;\n o[0] = Math.min(255, Math.round(r / _SCALES[e]));\n o[1] = Math.min(255, Math.round(g / _SCALES[e]));\n o[2] = Math.min(255, Math.round(b / _SCALES[e]));\n o[3] = e;\n return o;\n}\n\nconst _digits = (s) => {\n const m = /(\\d+)/.exec(s);\n return m ? +m[1] : 0;\n};\n\n// The header: a magic line, keyed lines and comments, a blank line, then the\n// resolution string (`-Y 512 +X 1024`). Anything before the resolution is\n// skipped — XMP and other writers put blocks there — so the walk stops at the\n// first line that states a dimension.\nfunction _headerAt(data) {\n let pos = 0, height = 0, width = 0, flipRows = false;\n const n = data.length;\n while (pos < n) {\n let end = pos;\n while (end < n && data[end] !== 10) end++;\n const line = String.fromCharCode.apply(null, data.subarray(pos, Math.min(end, pos + 400)));\n pos = end + 1;\n if (/^#\\?/.test(line)) continue;\n const res = /^\\s*([-+])([XY])\\s+(\\d+)\\s+([-+])([XY])\\s+(\\d+)\\s*$/.exec(line);\n if (res) {\n const first = res[2].toUpperCase(), second = res[5].toUpperCase();\n if (first === 'Y' && second === 'X') {\n height = +res[3]; width = +res[6];\n flipRows = res[1] === '+'; // +Y: row 0 at the bottom\n } else if (first === 'X' && second === 'Y') {\n width = +res[3]; height = +res[6];\n flipRows = res[1] === '+'; // +X: column 0 on the right\n } else {\n throw new Error('[host] hdr: the resolution names ' + first + ' then ' + second + '; -Y h +X w expected.');\n }\n return { width, height, flipRows, pos };\n }\n if (line === '') continue; // a writer may separate the keys from the resolution\n }\n throw new Error('[host] hdr: no resolution line — the file is not a Radiance image.');\n}\n\n// One scanline of RGBE bytes into `row`: either the new-style RLE (4 planes,\n// runs of 128 bytes or fewer) or the flat tuples an old writer leaves.\nfunction _scanline(data, pos, row, w, off, rowBytes) {\n const end = data.length;\n if (w >= 8 && w < 32768 && pos + 3 < end && data[pos] === 2 && data[pos + 1] === 2 && (data[pos + 2] & 0x80) === 0) {\n const scanline = (data[pos + 2] << 8) | data[pos + 3];\n if (scanline !== w) throw new Error('[host] hdr: scanline width ' + scanline + ', image width ' + w + '.');\n pos += 4;\n for (let c = 0; c < 4; c++) {\n let x = 0;\n while (x < w) {\n if (pos >= end) throw new Error('[host] hdr: the file ends inside scanline ' + (off / rowBytes) + '.');\n const count = data[pos++];\n if (count > 128) { // a run of one byte\n if (pos >= end) throw new Error('[host] hdr: the file ends inside a run.');\n const v = data[pos++];\n for (let i = 0; i < count - 128; i++) row[(x + i) * 4 + c] = v;\n x += count - 128;\n } else { // a literal run\n if (count === 0 || pos + count > end) throw new Error('[host] hdr: bad run length in scanline ' + (off / rowBytes) + '.');\n for (let i = 0; i < count; i++) row[(x + i) * 4 + c] = data[pos + i];\n pos += count;\n x += count;\n }\n if (x > w) throw new Error('[host] hdr: a run overruns scanline ' + (off / rowBytes) + '.');\n }\n }\n return pos;\n }\n // flat: 4 bytes per pixel, in file order (the scanline is one plane-less array)\n if (pos + w * 4 > end) throw new Error('[host] hdr: the file ends inside scanline ' + (off / rowBytes) + '.');\n for (let i = 0; i < w * 4; i++) row[i] = data[pos + i];\n return pos + w * 4;\n}\n\n/**\n * Decode Radiance RGBE bytes into the pixel source `texture` takes.\n * @details Every pixel becomes four float channels — R, G, B and 1 — and the\n * rows come back in the order the file states, top-down for the `-Y` every\n * writer emits. `loadHDR` is the one that turns them over for GL; a caller\n * here that wants the same passes `rowOrder: 'BOTTOM_UP'`. The decoder holds no\n * state, allocates its output once, and needs no DOM, so it runs under\n * node:test as well as in the browser.\n * @param {ArrayBuffer|Uint8Array} bytes The whole file.\n * @param {{ rowOrder?:string, maxPixels?:number }} [opts]\n * rowOrder: `FILE` (default) or `BOTTOM_UP` — the latter for GL's\n * texture space, row 0 at v = 0.\n * maxPixels: refuse past this many pixels (default 16 MPixel).\n * @returns {{ data:Float32Array, width:number, height:number }} Radiance in\n * linear light: what `texture` uploads as RGBA32F, and the range a\n * tone operator compresses.\n */\nexport function decodeRGBE(bytes, opts) {\n const o = opts || {};\n const data = bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes);\n const head = _headerAt(data);\n const { width: w, height: h } = head;\n if (!(w > 0) || !(h > 0)) throw new Error('[host] hdr: the resolution states ' + w + ' × ' + h + '.');\n const max = o.maxPixels || _DEFAULT_MAX_PIXELS;\n if (w * h > max) {\n throw new Error('[host] hdr: ' + w + ' × ' + h + ' is past maxPixels (' + max +\n '); pass a bigger one, or decode at a lower resolution.');\n }\n const flip = o.rowOrder === 'BOTTOM_UP';\n const out = new Float32Array(w * h * 4);\n const row = new Uint8Array(w * 4);\n let pos = head.pos;\n for (let y = 0; y < h; y++) {\n pos = _scanline(data, pos, row, w, y * w * 4, w * 4);\n const at = (flip ? h - 1 - y : y) * w * 4;\n for (let x = 0; x < w; x++) {\n const p = x * 4, s = _SCALES[row[p + 3]], d = at + p;\n out[d] = row[p] * s;\n out[d + 1] = row[p + 1] * s;\n out[d + 2] = row[p + 2] * s;\n out[d + 3] = 1;\n }\n }\n return { data: out, width: w, height: h };\n}\n","/**\n * @file The host context — one per canvas: pointer, view bag, players, loop, observer.\n * @module host\n * @license AGPL-3.0-only\n *\n * The signal host of a program: what it needs from the browser that is\n * neither math nor GPU — a canvas element's pointer input, the frame clock,\n * its size — and the registry its constructs tick from. Pure vanilla DOM;\n * everything it computes goes through @nakednous/tree, nothing it draws.\n *\n * const host = createHost(canvas, { onFrame })\n * host.pointer · host.view · host.players\n * host.width · host.height · host.dpr · host.dt · host.clock()\n * host.handle(opts) · host.router(handles, opts)\n * host.cameraHelm(cam, opts) · host.poseHelm(opts)\n * host.poseTrack(opts) · host.cameraTrack(cam, opts)\n * host.hid(opts) · host.gamepad(opts)\n * host.image(url) · host.video(opts) · host.raster(draw, w, h) · host.mesh(url) · host.model(url)\n * host.labels // the DOM label layer, created on first access\n * host.orbit(cam, opts)\n * host.tick(dt) // external-loop mode\n * host.dispose()\n *\n * Two loop modes. With { onFrame } the host runs requestAnimationFrame\n * (overridable through { raf, caf }): each frame computes dt (clamped to\n * 50 ms), ticks the players, calls onFrame(dt, host), flushes the pointer\n * source, then calls afterFrame(dt, host) when one was given — the frame's\n * last draw, a pointer handler's included, which is where a WebGPU bridge\n * submits its command encoder. Without it the application, or the p5\n * adapter from predraw, calls host.tick(dt) = players.tick(dt) and\n * host.pointer.flush() once its consumers ran: external tick gains no\n * frame end, so afterFrame belongs to the host's own loop. Nothing else in\n * the host cares who owns the loop.\n *\n * The frame order inside onFrame: install the camera (which fills\n * host.view), update handles or routers, fall through to the orbit when\n * nothing grabbed, draw.\n */\n\n'use strict';\n\nimport { createView } from './view.js';\nimport { observeCanvas } from './canvas.js';\nimport { createPointer } from './pointer.js';\nimport { createPlayers, createLoop } from './loop.js';\nimport { Handle, validConstraint } from './handle.js';\nimport { PointerRouter } from './router.js';\nimport { cameraHelm, poseHelm } from './helm.js';\nimport { poseTrack, cameraTrack } from './track.js';\nimport { createHid, createGamepad } from './stream.js';\nimport { loadImage, createVideo, raster, loadMesh, loadModel } from './media.js';\nimport { createLabels } from './labels.js';\nimport { createOrbit } from './orbit.js';\n\nexport { createView } from './view.js';\nexport { observeCanvas, measureCanvas } from './canvas.js';\nexport { createPointer } from './pointer.js';\nexport { createPlayers, createLoop } from './loop.js';\nexport { Handle, VIEW, isConstraint, validConstraint } from './handle.js';\nexport { PointerRouter } from './router.js';\nexport { cameraHelm, poseHelm, helmBasis } from './helm.js';\nexport { poseTrack, cameraTrack, TrackHandles } from './track.js';\nexport { createHid, createGamepad, decodeSpaceNavigator, HID_FILTERS, GAMEPAD_MAP } from './stream.js';\nexport { loadImage, createVideo, raster, loadMesh, loadModel } from './media.js';\nexport { decodeRGBE, encodeRGBE } from './hdr.js';\nexport { createLabels } from './labels.js';\nexport { createOrbit } from './orbit.js';\n\nconst _now = () => (typeof performance !== 'undefined' && performance.now) ? performance.now() : Date.now();\n\n/**\n * Create the host context of a canvas.\n *\n * @param {HTMLCanvasElement} canvas\n * @param {{ ndcZMin?:number, onFrame?:function(number, object):void,\n * afterFrame?:function(number, object):void, raf?:function,\n * caf?:function, onSize?:function(number, number, number):void }} [opts]\n * ndcZMin: the GPU API's NDC-z convention, WEBGL (default) or WEBGPU —\n * written once, never detected. onFrame: the host's own loop; absent,\n * external-tick mode. afterFrame: called after the pointer source\n * flushes, so the frame's last draw — a pointer handler's included —\n * is behind it; the submit seam of a WebGPU bridge, which ends its\n * command encoder there. The host's loop only: an external tick has\n * no frame end but the one its caller writes. dispose() clears it.\n * onSize(width, height, dpr): the bridge's chance to resize its\n * drawing buffer.\n * @returns {object} The host.\n */\nexport function createHost(canvas, opts) {\n const o = opts || {};\n const t0 = _now();\n const constructs = new Set();\n let loop = null, observer = null, labels = null;\n let afterFrame = typeof o.afterFrame === 'function' ? o.afterFrame : null;\n const host = {\n canvas,\n width: 0, height: 0, dpr: 1,\n dt: 0,\n view: null, pointer: null, players: null,\n\n /** Seconds since the host was created. */\n clock() { return (_now() - t0) / 1000; },\n\n /**\n * External-loop mode: tick the players with dt (seconds). The caller\n * flushes the pointer source once its consumers ran.\n * @param {number} dt\n */\n tick(dt) { host.dt = dt; host.players.tick(dt); },\n\n /**\n * A draggable handle on this canvas — see host/handle. Returns null on\n * an invalid `constraint`.\n * @param {object} opts\n * @returns {Handle|null}\n */\n handle(opts) {\n const o = opts || {};\n if (!validConstraint(o.constraint)) {\n console.error('[host] handle: `constraint` must be SPHERE, PLANE, AXIS, DIAL, VIEW, or a contract-conforming constraint object; got ' + String(o.constraint) + '.');\n return null;\n }\n return host.register(new Handle(host, o));\n },\n\n /**\n * A shared pick over overlapping handles — see host/router.\n * @param {Handle[]} handles\n * @param {{ hover?:boolean }} [opts]\n * @returns {PointerRouter}\n */\n router(handles, opts) { return host.register(new PointerRouter(host, handles, opts)); },\n\n /** Fly a camera state body-relative from a 6-DOF rate stream — see host/helm. */\n cameraHelm(cam, opts) { return cameraHelm(host, cam, opts); },\n /** Integrate a 6-DOF rate stream into a pose in a declared frame — see host/helm. */\n poseHelm(opts) { return poseHelm(host, opts); },\n /** A core PoseTrack ticked while it plays — see host/track. */\n poseTrack(opts) { return poseTrack(host, opts); },\n /** A core CameraTrack evaluating into a camera state while it plays — see host/track. */\n cameraTrack(cam, opts) { return cameraTrack(host, cam, opts); },\n /** A WebHID 6-DOF rate stream — see host/stream. */\n hid(opts) { return createHid(host, opts); },\n /** A Gamepad rate stream, polled each tick — see host/stream. */\n gamepad(opts) { return createGamepad(host, opts); },\n /** Fetch an image into an ImageBitmap — see host/media. */\n image(url, opts) { return loadImage(url, opts); },\n /** A hidden <video> from a file or the camera, disposed with the host — see host/media. */\n video(opts) { return host.register(createVideo(opts)); },\n /** Draw through a 2D context into a texture source — see host/media. */\n raster(draw, w, h, opts) { return raster(draw, w, h, opts); },\n /** Fetch one mesh — the arrays shape with its bounds — from an OBJ or glTF file, or any format through opts.parse — see host/media. */\n mesh(url, opts) { return loadMesh(url, opts); },\n /** Fetch a model with its structure: parts, nodes, skins, clips — see host/media. */\n model(url, opts) { return loadModel(url, opts); },\n /**\n * The label layer — see host/labels. Created on first access, so a\n * canvas that never labels never gets a layer nor a repositioned parent.\n */\n get labels() {\n if (labels === null) labels = createLabels(host);\n return labels;\n },\n /** Whether the label layer exists, without creating it. */\n get hasLabels() { return labels !== null; },\n /** The fall-through camera gesture on unclaimed pointers — see host/orbit. */\n orbit(cam, opts) { return createOrbit(host, cam, opts); },\n\n /** Register a construct with dispose() so host.dispose() releases it. */\n register(c) { if (c) constructs.add(c); return c; },\n /** Unregister a construct. */\n unregister(c) { constructs.delete(c); },\n\n /** Stop the loop, disconnect the observer, remove every listener, dispose every construct. */\n dispose() {\n afterFrame = null;\n if (loop) loop.stop();\n for (const c of [...constructs]) { if (typeof c.dispose === 'function') c.dispose(); }\n constructs.clear();\n labels = null;\n observer.dispose();\n host.pointer.dispose();\n host.players.clear();\n },\n };\n\n host.view = createView({ ndcZMin: o.ndcZMin });\n host.players = createPlayers();\n host.pointer = createPointer(canvas, host.view);\n observer = observeCanvas(canvas, (w, h, dpr) => {\n host.width = w; host.height = h; host.dpr = dpr;\n host.view.resize(w, h);\n if (labels) labels.resize(w, h);\n if (typeof o.onSize === 'function') o.onSize(w, h, dpr);\n });\n\n if (typeof o.onFrame === 'function') {\n loop = createLoop({\n raf: o.raf, caf: o.caf,\n onFrame: (dt) => {\n host.dt = dt;\n host.players.tick(dt);\n o.onFrame(dt, host);\n host.pointer.flush();\n if (afterFrame !== null) afterFrame(dt, host);\n },\n });\n loop.start();\n }\n return host;\n}\n"],"names":["_now","_vx"],"mappings":"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"}