Release/1.17.1 - #11
Merged
Merged
Conversation
added 4 commits
August 12, 2026 16:15
…bles Switching workspaces could land on an invisible graph. InteractionManager pins sigma's normalization bbox on every node mousedown (drag stability) and nothing but fitView ever released it, so the frozen bbox rendered any workspace with a different coordinate range (grid [0, cols*100] vs circular [-r, r]) off-screen or subpixel. The pin is now released where its lifetime actually ends — on mouseup — and every full render() re-derives normalization from the current node extent as a backstop. Rapid re-switching could hang a switch forever: the bundled animateNodes never invokes its completion callback when cancelled, so a tween cancelled by a newer switch stranded the older changeLayout awaiting its promise (skipping history.reset and its finally). The cancel handle now resolves explicitly, and a cancelled run early-returns, handing nodeRef mirroring, the bubble fade and the cancel handle to the newer transition. Bubble hulls no longer trail the position tween or flash the incoming groups' colors on the outgoing shape: changeLayout hides both bubble canvases instantly before any incoming state (styles, visibility, group sync) can repaint them, and the reveal refits deferred outlines synchronously (BubbleSetLayer.refitNow) before easing back in — never showing a hull the refit deferral left at stale positions. A switch cancelled mid-tween leaves the reveal to its successor. Hardening: the try in changeLayout/addLayout/relayoutWorkspace now starts immediately after holdLoading(), so a throw in the formerly unprotected window (e.g. #selectView naming a deleted workspace) can no longer leak the hold and block every hideLoading() until reload.
handleLayoutChangeLoadingEvent raised cache.layoutChanged and nothing ever reset it, so the first Arrange/Re-layout of a session forced the full re-indexing render() branch onto every later style- or filter-only update. decideToRenderOrDraw now clears the flag once a render succeeds; a failed render keeps it up so the next call re-renders.
The empty-name check in the creation dialog called window.alert() — the last native dialog in a codebase that uses Popup everywhere, and one that blocks the renderer thread outright (an automation harness hangs on it with no diagnostic). An empty submit now marks the input via the constraint validation API (setCustomValidity + reportValidity), keeps the dialog open, and clears the mark as soon as the user types.
Patch release: workspace-switch visibility/normalization fixes, bubble transition choreography, cancelled-tween resolution, overlay-hold hardening, inline workspace-name validation, and the layoutChanged render-branch fix.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
1.17.1 — workspace switching fixes
Switching workspaces could land on an invisible graph: dragging (or even clicking) a node pinned sigma's normalization bbox and nothing released it, so workspaces with different coordinate ranges (grid vs circular templates) rendered off-screen. The pin is now scoped to the drag gesture, and every full render re-derives normalization from the current node extent.
Also in this release:
animateNodesskips the callback on cancel), stranding the older switch's cleanup and history reset.tryin changeLayout/addLayout/relayoutWorkspace now starts right afterholdLoading(), so an early throw can't leak the hold and block everyhideLoading()until reload.layoutChangedis consumed after a successful render, previously the first Arrange forced full re-indexing renders for the rest of the session.window.alert().