Animation-loop frame-start hook. Fired right before per-frame
work begins. Subscribers (e.g., stats.js-backed
PerformanceMonitor) use this to drive their begin/end timing.
Animation-loop frame-end hook. Fired right after per-frame
work — including post-processing render — completes. Pair with
frame-start for timing.
Aggregate loading progress from the data layer. Used by the loading-monitor UI to render the progress bar / spinner.
A node's geometry was committed (or re-committed) to the GPU — the same
moment the pick buffer is invalidated. Consumers that derive something from
WHAT IS RESIDENT (the scene-derived environment capture in
rendering/environment/) mark themselves stale on it and rebuild once the
loader settles, rather than polling the scene graph.
Toggle the named UI panel. Panels are internal-state-aware: each subscriber decides whether to open or close based on its own visibility flag, so the publisher doesn't need to know the current state.
Cycle the named UI panel through its display states (e.g.,
hidden → mini → expanded → hidden). Distinct from panel-toggle
because the data-monitor has more than two visibility states.
Hide the named panel. Used by the panel-coordinator close-all flow.
Catalog of cross-layer events. Each entry maps an event name to its payload type. Publishers and subscribers both type-check against this map, so adding an event in one place forces the consumer to adapt at the type level.