summaryrefslogtreecommitdiff
path: root/src/SomhairlesDream.Frontend/Bindings.fs
diff options
context:
space:
mode:
authorSomhairle H. Marisol <[email protected]>2026-09-21 07:02:13 +0800
committerSomhairle H. Marisol <[email protected]>2026-09-21 07:02:13 +0800
commite8eebe49407de8947bf509d5cf04d9080ee4edf7 (patch)
treecd7d5b1b2cb2efca2e19786041e49aa4b5e5b72e /src/SomhairlesDream.Frontend/Bindings.fs
parent13479cd194cd992c67805093e59f8b1dd1b5f3a2 (diff)
downloadsomhairles-dream-fsharp-e8eebe49407de8947bf509d5cf04d9080ee4edf7.tar.gz
Real historical replay: timeline pins load run's own checkpoint GLBs
- renderTimeline rebuilds #timeline-track after each snapshot and wires click-to-pin on completed checkpoints (kept placeholder nodes otherwise) - selection loads the pinned run's own steps/<n>-*.glb (generation/ ownership guards apply), pins survive live snapshots, 跟随最新 restores live scope, replay pauses/scrubs through 已完成 versions - placeholder fallback now clearly labeled (占位…) only before any run - acceptance: historical_replay_regression (9 checks) pins mid-run, asserts no auto-follow strays, late-older-response precedence, served checkpoint sha256 vs CLI reference, and viewport geometry change - fix: timeline-track id missing in index.html crashed renderTimeline (null firstChild), leaving static placeholder nodes non-clickable - driver: 71/71 checks, zero console/page errors
Diffstat (limited to 'src/SomhairlesDream.Frontend/Bindings.fs')
-rw-r--r--src/SomhairlesDream.Frontend/Bindings.fs3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/SomhairlesDream.Frontend/Bindings.fs b/src/SomhairlesDream.Frontend/Bindings.fs
index 2822e33..e7c567d 100644
--- a/src/SomhairlesDream.Frontend/Bindings.fs
+++ b/src/SomhairlesDream.Frontend/Bindings.fs
@@ -103,6 +103,9 @@ let createVector3 () : ThreeVector = jsNative
[<Emit("window.SOMHAIRLES_VIEWER = { camera: $0, scene: $1, group: $2, canvas: $3 }")>]
let exposeViewerDebug (camera: ThreeCamera) (scene: ThreeNode) (group: ThreeNode) (canvas: obj) : unit = jsNative
+[<Emit("var child; while ((child = $0.firstChild)) { $0.removeChild(child); }")>]
+let clearChildren (node: obj) : unit = jsNative
+
[<Emit("new THREE.WebGLRenderer($0)")>]
let createRenderer (options: obj) : ThreeRenderer = jsNative