Resolves several issues with floating links. Highlights:
- Caches floating links on slots, removing some loop checks (inefficient
/ does not scale)
- Simpler APIs
- Adds `Reroute.totalLinks` (regular and floating
- Fixes TS types
- Various bug fixes for reroute / link (re)connect
- Adds reroute snap circle when connecting links
- Validates reroutes on drop (part of larger work)
- Prevent nodes linking to themselves
### Floating reroutes
Native reroutes can now be kept in a disconnected state.
Link chains may be kept provided they are connected to _either_ an input
or an output. By design, reroutes will be automatically removed if both
sides are disconnected.
### LinkConnector
Replaces the minimal-change effort of `connecting_links` with a more
reliable implementation.
- Subscribable, event-based API
- Uses browser-standard `e.preventDefault()` to cancel `before-*` events
- Uses standard `state` POJO - can be proxied without issue
- Structures code and separates concerns out of `LGraphCanvas`
- Link creation calls can now be made from anywhere, without the need
for a rewrite
- New canvas sub-components now live in `src/canvas/`
### Rendering
- Skips link segments by setting a `_dragging` bool flag on the LLink or
Reroute
- Moves some previously nested code to event listeners, configured in
the `LGraphCanvas` constructor
### Deprecation
`LGraphCanvas.connecting_links` is now deprecated and will later be
removed.
Until it is removed, to prevent breaking extensions it will continue to
be set and cleared by a legacy callback. The contents of this property
are ignored; code search revealed no exentsions actually modifying the
array.
- Prefer comments above lines over end-of-line comments
- Makes auto-formatting easier
- Subjective, but it is generally easier to read in JS
- Standardises JSdoc format
- Auto-fixes for many issues (applies on save w/ESLint extension)
* 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
* Fix intermittent links bug - graph.links Map()
Replaces graph.links with Map()
Adds a Proxy to provide for...in and indexer access
Temporarily uses merged Map+Record type, to ease downstream migration
* nit - Remove redundant code
* nit - Remove redundant null checks
* Add Serializable interface, used in LLink
Allows LLink to be serialised as an object rather than an array, bringing it inline with the rest of LiteGraph.
* Format only
* Revert accidental change
* Fix redundant falsy check - uninit. var
* nit - Refactor const/let
* nit - Refactor const/let (manual)
* nit - Redeclared params
* Add TS types & minor refactor only
* Refactor - Clean up / reformat
- Add strings.ts helper functions
- Remove unused vars & local function params
- Simplifies code
- Rename vars for clarity
- Add TODOs and other comments
- Add ts-expect-error
* Redirect draw.ts enums to global file (temp.)
Should be revisited after TS merge complete
Corrects import of types from draw.ts into interfaces
* Add measure.ts - move util funcs from Global
* Add all imports required for TS conversion
* Refactor - TS narrowing
* nit - TS types & minor refactor
* Add missing types from recent PRs
Removes duplicate declarations
Fixes some type mismatches
* nit - Refactor recent PRs
* Revert incorrect decls backported
* Remove unused params
* Add TS types only
* Fix minor TS type coercion issues
Also removes redundant code
* nit - Refactor
* Remove @ts-nocheck
* Fix refactor regression - drag link to output
Issue was the result of fixing var declared outside of closure
* Restore original logic
---------
Co-authored-by: huchenlei <huchenlei@proton.me>
* Convert litegraph.js to TS
* Overhaul static litegraph.d.ts with updated types
* Fix rename oversights and revert fix unused param
- Some functions were broken by merging updated TS function signatures which included param renames
- Removal of unused params does not belong in the TS conversion PR, and has been reverted
* Remove legacy static .d.ts file
* Add callback decl from #180
Support allowing links to widgets (#180)
c23e610c11
* Convert NodeId to string | number
Results in significantly less downstream changes, despite being a change from the old static file.
---------
Co-authored-by: filtered <176114999+webfiltered@users.noreply.github.com>