Commit Graph

74 Commits

Author SHA1 Message Date
filtered
8b8f38f4de Widget promotion (#1100) 2025-07-02 17:49:15 -07:00
filtered
bcaaa00770 Add Subgraphs (#1000) 2025-06-28 15:21:56 -07:00
filtered
b86f2b58e6 Remove node edge resize (#1066) 2025-05-26 22:10:41 +00:00
filtered
71928af112 Allow node resize from any corner or edge (#1063) 2025-05-26 06:36:03 +00:00
filtered
de32560816 [TS] Improve types and (#1043) 2025-05-12 19:02:57 +00:00
filtered
c2a88d3088 [Refactor] Use Rectangle for canvas visible area (#1041) 2025-05-12 11:01:36 +00:00
filtered
c6df437662 [CodeHealth] Replace temporary TS conversion widget types (#1019) 2025-05-06 19:53:49 +10:00
filtered
75df19521b Widget overhaul (#1010)
### Widget text overhaul

#### Current
- Numbers and text overlap
- Combo boxes truncate the value before the label

![image](https://github.com/user-attachments/assets/c991b0b6-879f-4455-92d4-4254ef25b55c)

#### Proposed

**By default, widgets will now truncate their labels before their
values.**


https://github.com/user-attachments/assets/296ea5ab-d2ff-44f2-9139-5d97789e4f12

- Changes the way widget text is rendered, calculated, and truncated
- Truncation now applies in a standard way to the following widgets:
  - Text
  - Combo
  - Number
- Centralises widget draw routines in base class

### Config

```ts
// Truncate **both** widgets and labels evenly
LiteGraph.truncateWidgetTextEvenly = true

// Swap the default from truncating labels before values, to truncating values first (restores legacy behaviour)
// truncateWidgetTextEvenly **must** be `false`.
LiteGraph.truncateWidgetValuesFirst = true
```

### API / interfaces  

- Adds rich `Rectangle` concrete impl., with many methods and helpful
accessors (e.g. `right`, `bottom`)
- Actually _improves_ performance due to switch from Float32Array to
Float64Array
- Impact vs plain Float64Array was not detectable outside of a 2M+
instantiation-loop with random data
  - Lazy `pos` & `size` `subarray` properties
- Adds `ReadOnlySize`
- Adds higher-level text draw functions to abstract the nitty gritty in
a performant way (binary search)

- Resolves Comfy-Org/ComfyUI_frontend/issues/457
2025-05-05 10:48:06 +10:00
filtered
ee89fc575f [Cleanup] Removes unused code (#996)
- Removes unused code
- Removes unnecessary globalAlpha reset when drawing reroute highlight
2025-05-01 22:38:54 +00:00
filtered
388a3d64cc [Refactor] Split node slot code out to base class (#994)
Foundational work for subgraph.
2025-05-01 22:26:25 +00:00
filtered
b3d030e36b [API] Add LLink.resolve static / instance methods (#974)
- `LLink.resolve`: Resolves all IDs on the link to their respective
objects (node IDs, slot indexes)
- `LinkNetwork.getLink`: a more concise pattern to resolve links
2025-04-26 20:51:41 +00:00
filtered
8e414ab133 [Refactor] Abstract legacy link colour properties (#972)
Replaces colour context interface with a simple abstraction object /
interface.
2025-04-26 20:31:43 +00:00
filtered
79ce3199d4 [Cleanup] Documentation (#963)
Adds / cleans JSDoc.
2025-04-24 22:47:20 +10:00
filtered
2ad1481f02 Remove LayoutElement, resolve root TS issues (#953)
- Converts type assertions to use inference via discriminated unions
- Removes the LayoutElement class (only used by node slots, and recently
reduced to a single function)
- Splits `boundingRect` property out from `Positionable` interface
- Slots now use the standard `boundingRect` property
- Perf improvements / Removes redundant code
2025-04-21 22:23:09 +10:00
filtered
f7a0a92f3a [CodeHealth] Standardise code (#951)
Refactors & standardises code.
2025-04-20 15:02:54 +00:00
filtered
cc5aece6b6 [API] Mark ContextMenu methods as deprecated, cleanup (#948)
- Marks unused static methods as deprecated
- Removes redundant / orphaned code
- Uses existing AbortController to remove all root listeners
2025-04-20 11:25:25 +00:00
Chenlei Hu
453257cd30 [Bug] Remove unused prop LayoutElement.value (#940)
Resolves https://github.com/Comfy-Org/litegraph.js/issues/939

The prop is unused and is causing object clone circular ref issue.
2025-04-19 22:23:49 -04:00
filtered
6cafeeff19 Fix corruption of selected link highlights (#897)
Occurred when deselecting one side of a link when both sides were
selected.
2025-04-06 14:30:22 +00:00
Chenlei Hu
184ba3915a [TS] Properly type slot widget (#876)
INodeSlot.widget is not real widget references at runtime. This PR
narrows the type so that we don't run into unexpected issues.
2025-04-01 14:54:14 -04:00
Chenlei Hu
df279024c4 Upstream render of slot error (#872)
Upstream slot error rendering from ComfyUI_frontend.


![image](https://github.com/user-attachments/assets/d14b49a1-7943-4249-a20a-8b3d33df8ddb)
2025-03-30 17:40:44 -04:00
filtered
2dbd5f4cf0 Allow creating floating reroutes from new link menu (#818)
Adds an `Add Reroute` option to the new link menu. Creates a new
floating reroute connected to the source slot.
2025-03-22 09:23:20 +11:00
filtered
87aeab16a0 [API] Fix several floating links issues & add Reroute.totalLinks (#815)
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
2025-03-21 19:17:54 +00:00
filtered
a043e7a72e [API] Add reroute convenience methods (#812)
Adds `LGraph.getReroute`, which accepts null & undefined IDs. Interface
overloads result in `never` when given a _known_ `undefined` or `null`
value.
2025-03-21 18:58:07 +00:00
filtered
e6a914117b Add floating reroutes (#773)
### 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.
2025-03-13 19:56:57 +00:00
filtered
18811f50fc Add serialisation support for floating links (#771)
Adds the serialisation code to support the new floating links impl.
2025-03-13 15:20:14 +00:00
filtered
2e9f877bbd [Cleanup] Reroute and serialisation (#767)
- Fixes root cause of minor in-memory-only corruption when deleting
reroutes from output slots
  - Already automatically corrected via serialisation
- If `reroutes` or `links` are empty arrays, removes them from newer
object-based serialised output entirely
- Minor refactors
- Removes unused code
- Fixes some serialisation types
- Adds `ReadonlyLinkNetwork` interface
2025-03-13 14:40:12 +00:00
filtered
5ed264ce8e Allow reroutes to be re-connected (#749)
- Resolves #305
- Allows links to be dragged from inputs to reroutes
2025-03-11 13:47:26 +00:00
filtered
c5cb4cea43 [TS] Clean up serialisation interfaces (#733)
Removes legacy generic & dynamic typing, and standardises TS styles.
2025-03-10 15:07:56 +00:00
filtered
e632f5c69b Fix all unknown slot props are serialised (#732)
Ensures only specified properties are cloned for serialisation.
2025-03-10 12:20:34 +00:00
filtered
c0bfe5489f [API] Add LinkConnector - replaces connecting_links (#726)
### 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.
2025-03-08 23:48:45 +00:00
filtered
3e44f6a0c1 [API] Add improved slot locator functions (#716)
- Returns object with slot, index, and pos
- Locate-by-type returns object with slot & index
- Uses standard `undefined` return for concise chaining & validation
- Free 10x perf increase over getConnectionPos (used basic random data
to test, out of curiosity)
2025-03-07 13:18:06 +00:00
filtered
e4a41669f6 Fix moving output links loses subsequent reroutes
Now maintains any level of reroute chain complexity when moving links.
2025-03-04 07:25:10 +11:00
filtered
b227eefbdd Improve connecting link logic (#697)
### Current

- Connections are disconnected the moment a link starts being dragged
- Reseating a connection where it came from creates a new connection
- If the process is somehow interrupted, the links are already gone

### Proposed

- Connection is disconnected after a new connection is made
- Rendering is bypassed for the link segment being moved
- Does nothing if dropping a link exactly where it came from
- Adds early return when trying to connect a node to itself
2025-03-03 17:03:31 +00:00
filtered
78175e2c1b [TS] Add strict nullability to LGraphCanvas (#669)
- Updates typing in copy & paste
- Clean up
2025-03-02 08:34:26 +00:00
filtered
539fa91b0d [TS] Use strict mode in LGraphCanvas (#664)
- Prefer `undefined` over `null`
- Primarily nullable type updates
2025-03-01 21:58:50 +00:00
filtered
c4faaf4210 [TS] Fix ContextMenu types (#649)
- No runtime changes
- Drastically improves ContextMenu type accuracy / safety
- Allows TS strict conversion
2025-02-28 14:52:07 +00:00
filtered
b877312336 [Refactor] Fix TS types, remove redundant code (#648)
Minor clean up and graph null deref checks.

Minor runtime change: due to optional chaining, it is possible a
downstream consumer is catching this extremely rare behaviour on purpose
and handling it.
2025-02-28 11:13:23 +00:00
filtered
a43109d58a [TS] Use strict mode in ContextMenu (#618)
- Adds minor type coercions to resolve type errors
- Uses the same type-coercion behaviour of the target DOM object
properties
- Resolves a long-standing type issue in context menu interfaces
(converts to generic - `unknown` by default)
- Fixes several incorrect types
- Adds ts-ignore that must be removed later
2025-02-26 14:29:45 +00:00
filtered
5cdd0581fa Add import / export sort rules (#612)
- Adds ESLint package
- Applies import/export rules to all files
- Uses newline delineated grouping, with type-only imports first
2025-02-26 09:21:33 +00:00
filtered
9ded97d189 [Doc] Add JSDoc linter & general comment clean up (#611)
- 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)
2025-02-26 08:54:18 +00:00
Chenlei Hu
dbe016b934 Move widget prop to INodeInputSlot (#606)
Ref: https://github.com/Comfy-Org/ComfyUI_frontend/pull/2728
2025-02-25 19:37:40 -05:00
filtered
f39e1d96e8 [TS] Use strict mode in LLink & Reroute (#602)
- Adds fallback colour if reroute colour is somehow nullish
2025-02-25 18:00:33 +00:00
filtered
4636367de2 [TS] Use strict mode in LGraphNode - initial (#598)
- Part of effort to convert LGraphNode to TS strict
- Adds some small runtime changes - no impact expected, but it is
possible
- Runtime changes are in separate commits from compile-time type changes
- Risk of downstream impact is low
2025-02-25 17:19:27 +00:00
filtered
c8ffacf172 [TS] Use strict mode in LGraph (#579)
* [TS] Undefined is not a valid object key

* Deprecate unused code

Adds ts-expect-error to TS strict issues on unmaintained public interfaces.

* [TS] Fix nullability: asSerialisable return type

* nit - Remove outdated comment

* [TS] Strict mode: LGraph

- Adds minor coercion changes; would need extremely specific hacks performed to result in runtime change

* [TMP] Work around typescript-strict-plugin

Must be reverted once plugin removed.
See #578
2025-02-24 11:12:46 +00:00
Chenlei Hu
f300e37a89 Remove NodeSlot.pos when serializing WidgetInputSlot (#570) 2025-02-23 16:11:56 -05:00
Chenlei Hu
86f823b7d5 [nit] Move isColorable out of interfaces.ts (#564) 2025-02-23 13:06:03 -05:00
Chenlei Hu
7bab620986 Fix IColorable.getColorOption (#551)
* Fix IColorable.getColorOption

* nit
2025-02-19 14:57:29 -05:00
Chenlei Hu
6b1e40a011 Add IColorable interface (#549)
* Add IColorable interface

* Set color option

* nit

* nit

* nit
2025-02-19 13:56:08 -05:00
Chenlei Hu
ce44cea409 Split layout and draw for slots (#524)
* Split layout and draw for slots

* nit

* nit

* Fix serialization

* Move effect (highlight/invalid) to layout calculation

* nit

* Fix type issue

* Resolve review comments
2025-02-13 20:20:57 -05:00
Chenlei Hu
a0d275f223 Type widget (#474)
* Type INodeSlot.widget

* nit
2025-02-07 14:29:42 -05:00