* Add Reroute
- Initial Reroute implementation
- LLink and Reroute both implement the new LinkSegment interface
- LinkSegments can have a parentId, which always points to a Reroute
* Narrow TS type of schema v0.4 extras
* Add reroutes to schema 0.4
Use extras.reroutes to store additional data
* Add Reroute POC to LLink
* Add Reroute rendering
* Add Reroute context menu - Delete Reroute
* Update delete selected - include reroutes & groups
* Add Reroute select & move
* Include reroutes in area-select
* Move disconnect link logic to LLink
* Add Reroute connect
* nit
* Add Reroute support - connecting links
* Add Add Reroute from link menu (menu)
* nit
* Add shift-drag from reroute to add new link
* Prevent Reroutes from disappearing
Add keepReroutes option to prevent Reroute GC
* Add fourth param to connectInputToOutput
* Allow both connecting in/out to be null
* Move ConnectingLink start pos to Reroute
* Add link render options
* Refactor renderLink - spline / bezier
* Refactor renderLink - linear, straight
* Fix centre points on all link types
Improves link render time
* [Refactor] Generic recursive interface / flat set
* nit
* Allow Reroutes to be members of groups
* Start links from the closest reroute
For the "shift-click drag link from link" feature
* Add Reroutes using alt-click on link paths
* nit - Refactor
* nit - Refactor
* Fix reroute deselect UX
Temporary workaround
* Add Reroute link centre-marker handling
* Add optional link arrow markers
Add enum for link markers
-> Pointing the way forward ->
Set default centre marker to arrow
* Add module export: LinkMarkerShape
* Add link arrow direction for all link types
* Add Reroute auto-swivel with custom curves
* Add state switch to disable reroutes
Works at root of all canvas interactions, should leave existing reroutes untouched but invisible until e.g. links are edited / changed.
* Fix cannot deselect when reroutes disabled
* Include reroutes in select-all
* animateToNodes
- modify existing animation method to support passing multiple nodes, in which case the view is fit to the bounding box around them
* animateToBounds
* amend
* format
* amend
* nit
* Add LGraph state POCO
Moves last_link_id, last_node_id and creates same for group and reroute
fix import
* Add new serialisation to LGraph
Add LGraph schema 1
Remove reroute from old serialised graph
Remove brittle inherited types
Ensure stale links are not kept when clearing graph
* Add serialisable exports
* Ensure valid LGraph.state during deserialise
* Backport group header from frontend
* nit - TS types & redundant code
* Refactor - simplify group resize
* Fix group resize can be inverted
* Move group resize check to group class
* Add config for group padding & default colour
* nit - Remove redundant code
* Add multi-select all canvas items (groups, nodes)
* Add Feat: Group & Node Multi-Select / Nesting
- Groups can now contain groups
- Nested groups re-order on top of parent groups
- Groups can be added / removed from selection
- Uses new Positionable interface - easily extensible to new types
* Enhance add / remove from selection UX
More in line with normal desktop UX. Structured for keys to be customisable (if impl. later).
* Fix regression in link highlight
Legacy selection code still in use
* Allow nested groups to align perfectly on edges
* Remove group-move position rounding
Did not work under all circumstances, and resulted in misalignment more often than it helped.
* Add Positionable interface to canvas elements
* Add group resizeTo children
Refactor out duplicated code from Node
* Remove redundant "is_selected" check
* Improve measure pass - interface, caching
Node bounds once per render
Cached results
* Use cached bounds for repeat canvas calls
- Removes margin param from getNodeOnPos
- Removes margin param from getGroupOnPos
- Hitboxes now uniform for render / mouse features
- Simplifies code
* nit - Refactor
* Fix top-left edge of hitbox missing
* Add ID to groups