v0.9.0
LatestNew `combo-force` layout for graphs with combos (groups) — extends the existing force-directed simulation with a centroid spring that pulls combo siblings together and centroid-to-centroid repulsion that translates whole combos as rigid clusters. Combo rectangles are visibly tighter than under `force`, with no other rendering changes. Plus a rendering tweak so combo boundaries stay visible at every zoom level, not just when zoomed in.
-
combo-forcelayout — physics-based variant offorcetuned for combo-heavy graphs. Per-combo centroid spring (defaultcomboStrength: 0.15) pulls members toward their combo centroid each iteration; inter-combo centroid-to-centroid Coulomb repulsion (defaultcomboRepelStrength: 0.5) is applied uniformly to every member of each combo, so whole combos translate apart as rigid clusters instead of deforming. Opt in withlayout: 'combo-force'; the existingforcelayout is byte-identical (the new behavior runs through subclass hooks, not edits to force-layout.ts). Selectable from/play's Layout dropdown and from the in-canvas Layout selector buttons. On a representative production topo (156 nodes / 16 combos), average per-combo bounding-box area shrinks ~58% vs.force
- Combo (group) boundary rectangles now render at every zoom level. Previously they were gated behind the same level-of-detail threshold as node strokes and dropped at zoom < 0.3 — which is roughly where the SDK's auto-fit lands for large topos, so on first paint you saw a node soup until you scrolled in. Boundaries are now always painted; only the combo label text is suppressed at the lower zoom levels where it would be illegible
- The in-canvas Layout selector (the row of buttons rendered inside the graph view) now lists every registered layout, not just the seven shipped before. Previously the selector kept its own hardcoded layout list that drifted from the
OPTIONS.layoutsmanifest used by/play's topbar dropdown — so newly-registered layouts likecombo-forceappeared in/playbut were missing from the in-canvas buttons