Commit Graph

99 Commits

Author SHA1 Message Date
Chenlei Hu
4844311f3b Add ts-strict-ignore plugin (#443)
* Add ts-strict-ignore plugin

* nit
2025-02-03 15:49:58 -05:00
Chenlei Hu
0ee671843b Use consistent low_quality threshold in LGraphCanvas (#442)
* Use consistent low_quality threshold in LGraphCanvas

* Add LGraphCanvas.low_quality_zoom_threshold
2025-02-03 15:04:04 -05:00
Chenlei Hu
5ba6472c70 Remove LGraphCanvas.render_title_colored (#440)
* Remove LGraphCanvas.render_title_colored

* Simplify logic
2025-02-03 14:12:04 -05:00
Chenlei Hu
3e133b71e6 [Refactor] Add LGraphNode.title_mode (#439) 2025-02-03 13:57:14 -05:00
Chenlei Hu
817214e6da [Refactor] Move strokeShape from LGraphCanvas to draw (#435)
* [Refactor] Move strokeShape from LGraphCanvas to draw

* Fix round radius

* nit

* nit

* nit
2025-02-02 22:29:26 -05:00
Chenlei Hu
a4791f6e6b Remove unused LGraphCanvas.onConnectingChange (#434) 2025-01-30 15:40:55 -08:00
christian-byrne
b1f8afea2f fix nullish condition 2025-01-04 20:27:42 -05:00
bymyself
06b6da1353 Update src/LGraphCanvas.ts
Co-authored-by: filtered <176114999+webfiltered@users.noreply.github.com>
2025-01-04 20:27:42 -05:00
christian-byrne
6c037ca629 Fix dragging behavior in LGraphCanvas to depend on pointer state 2025-01-04 20:27:42 -05:00
filtered
a548a72f66 Fix selection box is always a square 2025-01-03 11:11:11 -05:00
filtered
c64c81882c Add workaround for Firefox pointer events (#412)
* Add workaround for Firefox pointer events

Co-Authored-By: catboxanon <122327233+catboxanon@users.noreply.github.com>

* nit

---------

Co-authored-by: catboxanon <122327233+catboxanon@users.noreply.github.com>
Co-authored-by: huchenlei <huchenlei@proton.me>
2025-01-01 19:34:58 -05:00
Chenlei Hu
edaf2933e1 Track LGraphState.draggingCanvas (#409)
* Track LGraphState.draggingCanvas

* nit
2024-12-30 00:20:01 -05:00
Chenlei Hu
7d77fceffa Properly update cursor style on mouse/keyboard events (#407)
* Properly update cursor style on mouse/keyboard events

* nit
2024-12-30 00:10:26 -05:00
Chenlei Hu
8856983597 Upstream cursor style (#405) 2024-12-29 23:39:23 -05:00
Chenlei Hu
54d7292d24 Stricter return value check on LGraphCanvas.getExtraMenuOptions (#401) 2024-12-27 13:51:31 -05:00
filtered
e6efff040d Resolve #395 - thick selection rectangle (#397) 2024-12-25 21:25:37 -05:00
bymyself
57dd8392db Don't process hidden links or reroutes (#396) 2024-12-25 21:25:15 -05:00
Chenlei Hu
11ce8e0f7b Fix NODE_DEFAULT_SHAPE (#389)
* Fix NODE_DEFAULT_SHAPE

* update snapshot
2024-12-23 20:04:32 -05:00
Chenlei Hu
e442732a09 Emit node-double-click event (#383)
* Emit node-double-click event

* nit
2024-12-19 16:37:29 -08:00
Chenlei Hu
7f0c3b02fb Fix slider value display when widget.label is present (#381) 2024-12-15 12:47:53 -08:00
Chenlei Hu
0048b5a0fe [i18n] Add INodeSlot.localized_name field (#376)
* [i18n] Add INodeSlot.localized_name field

* nit
2024-12-13 12:01:21 -08:00
filtered
1c1241bdb1 Optimise positionableItems / empty getters (#373)
* 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
2024-12-07 00:00:29 -05:00
Chenlei Hu
a9940da05f Add LGraph.empty (#371) 2024-12-06 17:49:50 -05:00
filtered
1238f83728 Prevent distortion of area select rectangle (#368) 2024-12-05 11:33:51 -05:00
filtered
8cda1ac48a Add CanvasPointer callback for node widgets (#363)
* Add CanvasPointer callback for node widgets

* Add API documentation

* nit - Docs
2024-12-01 20:31:48 -05:00
filtered
91077aa20b Redesign invalid node indicator (#358)
* nit

* Remove unused code

Gradient can (and should) be impl. directly by caching a CanvasGradient.

* nit

* nit - Refactor

* Remove redundant code

* Add line width & colour options to shape stroke

* Rename drawSelectionBounding to strokeShape

* nit - Doc

* Fix rounded corners not scaling with padding

* Optimise node badge draw

* Redesign invalid node visual indication

Customisable boundary indicator now used, replacing red background.

* Update snapshot

---------

Co-authored-by: huchenlei <huchenlei@proton.me>
2024-11-29 16:26:25 -05:00
filtered
24db9e2572 Add maximum FPS feature (#356) 2024-11-28 09:45:59 -05:00
filtered
304e229dc2 Fix custom widget pointerup receives NaN pos (#351) 2024-11-27 12:40:39 -05:00
filtered
f6e885f015 Ensure click_time is available to custom widgets (#349) 2024-11-26 13:05:47 -05:00
filtered
ffa2a24cb1 Fix slider regression caused by CanvasPointer (#347) 2024-11-26 13:05:24 -05:00
filtered
e35748faa4 Fix widget.mouse callback does not receive pointerup events (#342)
* 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.
2024-11-25 11:05:50 -05:00
filtered
a95d8ebc87 Fix invalid callback return value preventing canvas redraw (#343)
* 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.
2024-11-25 10:43:28 -05:00
filtered
696b8b2c63 Fix custom widget mouseover (#339) 2024-11-23 17:44:13 -05:00
filtered
2d69a87419 Use device scaling for drag-from-link checks (#334) 2024-11-22 10:57:37 -05:00
filtered
a6c3f5c1c7 Fix widget changed callback not called (#333) 2024-11-22 10:48:35 -05:00
filtered
ae6422bad1 Fix custom widgets not receiving pointermove events (#335) 2024-11-22 10:45:39 -05:00
filtered
75960485d3 Snapsize (#331)
* 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
2024-11-21 14:11:38 -05:00
filtered
ee45593558 Move Snap to Grid control to LiteGraphGlobal (#329)
* Fix snap to grid - now toggled at app level

Was impl. as per workflow.

* Update test expectations
2024-11-21 10:19:00 -05:00
filtered
f79133659f Clean up JSDoc (#327)
* Convert comments to JSDoc

* Clean JSdoc

* nit

* Clean up all JSDoc & ESLint warnings

Disables max-len for now
Removes redundant JSDoc tags (empty, same name, wrong name, etc)
2024-11-21 10:11:53 -05:00
filtered
5469bfdd52 Add ESLint, pre-commit hook & format all files (#319)
* Add ESLint config

* Add ESLint packages

* Add prettier config

* Fix ESLint package version

* Format all files

* Format static assets

* Format project root config

* Add pre-commit code formatting

Formats .css & .js files automatically.  If any .ts or .mts files are staged, the entire project is type-checked.

Packages:
- lint-staged
- husky
- prettier
2024-11-20 21:50:58 -05:00
filtered
b4b68c7e75 Fix fast widget conversion (#323) 2024-11-20 09:28:33 -05:00
filtered
ecb7fa4f0b Fix widget not updating on combo click (#321) 2024-11-19 18:26:36 -05:00
filtered
31c25b4ea1 Fixes pinned group contents moving (#316) 2024-11-18 13:17:24 -05:00
pythongosssss
1bec315427 Adds highlight to advanced widgets (#317)
* Adds highlight to advanced widgets

* Update snapshot
2024-11-18 13:16:52 -05:00
filtered
c0e8b33716 Snap everything to grid (#315)
* 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
2024-11-18 10:12:20 -05:00
filtered
b29a32c1ae Add CanvasPointer API (#308)
* Add position rounding feature

Replaces previous impls. which only worked on some items, and were triggered when unexpected e.g. clicking a node that hadn't been moved.

Update test expectations

* Narrow TS types - readonly

* nit - Clean up, Doc

* nit - Clean up legacy accessors

Marks as deprecated

* Fix TS type - IContextMenuOptions.scale

* [Refactor] dist2 for use in pointer API

* Add CanvasPointer - API for pointer events

Add TS strict types
Add final click drag distance math
Add option to retain events

* nit - Rename

* nit

* Remove Subgraph - unused & not maintained

* Remove live_mode

Unused, not maintained.

* Update README

Remove live_mode reference

* Update delete selected - include reroutes & groups

* Bypass link menu if alt/shift pressed

* Remove old dragged_node interface

Incomplete impl. - unused.
Superceded by selectedItems

* Fix top/left edge of rectangles not in hitbox

* [Refactor] Match function names to interface names

* Add interface to find widgets by Point

LGraphNode.getWidgetOnPos

* Add widget search param - includeDisabled

* nit - Doc

* Rewrite canvas mouse handling

- Rewrites most pointer handling to use CanvasPointer callbacks
- All callbacks are declared ahead of time during the initial pointerdown event, logically grouped together
- Drastically simplifies the alteration or creation of new click / drag interactions
- Click events are all clicks, rather than some processed on mouse down, others on mouse up

- Functions return instead of setting and repeatedly checking multiple state vars
- Removes all lines that needed THIRTEEN tab indents

* Split middle click out from processMouseDown

* Use pointer API for link menus

* Narrow canvas event interfaces

* Fix canvas event types

Replaces original workarounds with final types

* Refactor - deprecated isInsideRectangle

* Add canvas hovering over state

- Centralises cursor set behaviour
- Provides simple downstream override

* nit

* [Refactor] Use measure functions

* Add double-click API to CanvasPointer

a

* nit - Doc

* Allow larger gap between double click events

* Rewrite double-click into CanvasPointer actions

* Improve double-click UX

Prefer down events over up events

* Add production defaults

* Add middle-click handling

* Remove debug code

* Remove redundant code

* Fix add reroute alt-click adds two undo steps

* Fix click on connected input disconnects

Old behaviour was to disconnect, then recreate a new link on drop.

* Add module export: CanvasPointer
2024-11-16 17:35:30 -05:00
Chenlei Hu
f26f7dbe2c Revert "Add canvas update events (#297)" (#310)
This reverts commit 0e8f02f32f.
2024-11-16 17:32:53 -05:00
ArtificialLab
0e8f02f32f Add canvas update events (#297)
* (add) onNodeUpdated, onPositionChanged and onZoomChanged

* (fix) onPositionChanged

* (add) onNodeWidgetChanged callback
2024-11-16 07:01:59 +04:00
filtered
cc084811d9 Copy & Paste all items (#302)
* Add copy & paste of groups & reroutes

Complete rewrite of copy & paste
Fixes a bug where failure to clone a node would corrupt all subsequent nodes
No longer mutates nodes when copying

* Fix name collision

* Fix cannot copy specified nodes to clipboard

* Allow mapping of original IDs to pasted clones
2024-11-13 10:21:23 -05:00
filtered
3d6adf0225 Add Reroutes (#301)
* 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
2024-11-12 11:18:48 -05:00