GSoC/DMP Week 7-8: feat(masonry): Add tower disconnection and dragging of tower in Workspace #450
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.
Summary
This PR adds full support for disconnecting and dragging towers of bricks within the MusicBlocks‑v4 Masonry workspace. It wires up pointer events, updates the Recoil state, and ensures towers can be picked up, moved, and dropped as independent structures.
Key Features:
Brick disconnection: Added
TowerModel.disconnectSubtreeandhandleBrickDisconnectto pick up a brick (and its subtree) as a new tower on drag‑out.Tower utilities & traversal: Introduced
getNodeChildren,getAllDescendants, and related helpers for nested, argument, and stacked node traversal.Bounding‑box & layout fixes: Fixed edge cases in path‑based bounding‑box calculations and iteration logic through nested/stacked children, with new unit tests.
Workspace refactor & typing cleanup: Refactored canvas logic into
WorkspaceView, updated imports, and replaced all any casts in drag handlers with precise MouseEvent typings.Screenshots:
Recording.2025-07-30.144314.mp4