* Optimise LGraph.empty() getter
* Optimise positionableItems getters
- No change to internal functionality
- Replaces forced spread of all items on every property access with generator function
- Consumers that require an array can very cleanly spread into one
* Provide pointerup events to widget.mouse callback
* Fix regression in widget mouse cb
pointerup events are now sent to mouse() callback regardless of CanvasPointer state.
* Fix invalid callback prevents redraw
When widget.mouse() is incorrectly implemented (no return value), it evaluates as falsy and prevents canvas redraw.
Changes default behaviour to ignore the return value when nullish.
* Fix pointermove for custom widget outside nodes
Events are now also sent when the pointer moves outside the bounds of the node.
* Improve group resize UX
Removes the teleport of the group corner to the pointer, on the first move event.
* Select groups when clicking titles
* Add snap to grid for groups
* Apply new group resize UX to nodes
* Implement snap to grid
- Moves positioning logic to LGraph
- Simplifies code
- Adds Pointer API to alt-clone node
- Removes always_round_positions, replaced by always snap to grid (default size is 1 when always snapping)
Fix refator error
* Fix group items snapped without group
* Allow snapping of all items
- Add snapToGrid to Positionable
- Impl. on all types
- Deprecated: alignToGrid is now a wrapper
* Fix test import alias, update expectations
* Prevent desync of before / after change events
Adds ability to perform late binding of finally() during drag start.
* nit - Refactor
* Fix unwanted snap on node/group add
* nit - Doc
* Add shift key state tracking for snap to grid
Private impl., no state API as yet.
* Add snap guides rendering
Nodes, reroutes
* Optimisation - reroute rendering
Fixes exponential redraw
* Add snap guidelines for groups