You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Added
Viewer camera — pan & zoom. The graph canvas gains a camera composed as
a pure post-transform on the fit-to-content view (identity renders exactly
the previous scene): cursor-anchored wheel zoom (up to 4×), drag-to-pan with
a 4px threshold that keeps click/dblclick/hover semantics intact, dblclick
on empty canvas to animate back to fit, and an elastic below-fit overscroll
that springs home. New engine API: getCamera() / setCamera() / callbacks.onCameraChange.
Screen-area LOD. Per-frame dot budgets driven by on-screen frame area
(canvas/lod.js, ~the old 22-dot look at fit on normal frames, fewer on
squeezed ones — the dense-project fit view finally breathes; all members
reveal as you zoom), with a deterministic scattered reveal order, per-file
labels past 64px dot spacing, inter-frame edges receding at high zoom, and
sub-frame detail shedding during overscroll.
Viewport culling + per-tick geometry cache — large graphs (activator)
hold ~120fps at fit and deep zoom.
Embeddable engine unit.adaptProjectData moved into canvas/adapt.js
(re-exported from app/data.ts), and createEngine accepts optional isLight and storagePrefix — the canvas/ modules + app/{entity-store,ws-client}.js now form a dependency-free unit an
embedder (Mesh) can vendor. Documented in docs/architecture/viewer-sync-engine.md.
Changed
Frame-member adaptation no longer pre-slices to 22 nodes (MAX_FRAME_NODES
removed); the LOD budget decides draw-time counts.