-
Notifications
You must be signed in to change notification settings - Fork 399
[feat] TransformPane - Viewport synchronization layer for Vue nodes #4304
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 33 commits
Commits
Show all changes
38 commits
Select commit
Hold shift + click to select a range
eca48a8
[docs] Add Vue node system architecture and implementation plans
christian-byrne 0ec98e3
[feat] Add slot type color definitions
christian-byrne a041f40
[feat] Implement Vue-based node rendering components
christian-byrne 065e292
[feat] Add TransformPane for Vue node coordinate synchronization
christian-byrne 992d79b
[feat] Vue node lifecycle management implementation
christian-byrne 3dc7686
[feat] Add widget renderer composable
christian-byrne 95c291d
[fix] Fix WidgetSelect component for combo widgets
christian-byrne 6bbd285
[feat] Update NodeWidgets to use safe widget data
christian-byrne 39603dd
[feat] Update Vue node components with proper typing
christian-byrne 04e9a79
[feat] Update GraphCanvas with VueNodeData typing
christian-byrne 222a52d
[feat] Add feature flags and utility updates
christian-byrne 124db59
[feat] Implement callback-driven widget updates
christian-byrne cd3296f
[feat] Add viewport debug overlay for TransformPane
christian-byrne 122170f
[fix] Fix widget value synchronization between Vue and LiteGraph
christian-byrne 0de3b8a
[feat] Add QuadTree spatial data structure for node indexing
christian-byrne a23d8be
[feat] Add Vue-based node rendering system with widget support
christian-byrne c3023e4
[fix] Remove FPS tracking to prevent memory leaks
christian-byrne cdd940e
[fix] Add proper cleanup for nodeManager to prevent memory leaks
christian-byrne 95ab702
[test] Add test helper utilities for Vue node system testing
christian-byrne a58a354
[test] Add comprehensive tests for transform and spatial composables
christian-byrne 32ddf72
[test] Add TransformPane component tests
christian-byrne c246326
[test] Add performance tests for transform operations
christian-byrne 71c3c72
[feat] Implement LOD (Level of Detail) system for Vue nodes
christian-byrne 290906e
[refactor] Improve type safety across Vue node widget system
christian-byrne 5cb9ba1
[feat] Add CSS LOD classes for Vue node rendering optimization
christian-byrne d6315a1
[feat] Add debug type definitions for spatial indexing system
christian-byrne 7d7dc09
[perf] Optimize TransformPane interaction tracking for better perform…
christian-byrne d29ce21
[refactor] Remove unused variables in GraphCanvas to fix TypeScript w…
christian-byrne 57b09da
[test] Add missing useWidgetValue import in test file
christian-byrne 18854d7
[cleanup] Remove temporary documentation and planning files
christian-byrne 555e806
[perf] Optimize widget rendering performance
christian-byrne 9a93764
[refactor] Extract canvas transform sync to dedicated composables
christian-byrne 4304bb3
[test] Relocate and update test files
christian-byrne 30728c1
[cleanup] Remove unused viewport culling settings and variables
christian-byrne 32c8d0c
[refactor] Move QuadTreeBenchmark to test directory
christian-byrne 1098d3b
[feat] Enhanced LOD system with component-driven approach (#4371)
christian-byrne 108e54c
[perf] Global CSS optimizations for LOD system (#4379)
christian-byrne c6422da
Vue Node Body (#4387)
benceruleanlu File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -637,3 +637,95 @@ audio.comfy-audio.empty-audio-widget { | |
| width: calc(100vw - env(titlebar-area-width, 100vw)); | ||
| } | ||
| /* End of [Desktop] Electron window specific styles */ | ||
|
|
||
| /* Vue Node LOD (Level of Detail) System */ | ||
| /* These classes control rendering detail based on zoom level */ | ||
|
|
||
| /* Minimal LOD (zoom <= 0.4) - Title only for performance */ | ||
| .lg-node--lod-minimal { | ||
| min-height: 32px; | ||
| transition: min-height 0.2s ease; | ||
| } | ||
|
|
||
| .lg-node--lod-minimal .lg-node-body { | ||
| display: none !important; | ||
| } | ||
|
|
||
| /* Reduced LOD (0.4 < zoom <= 0.8) - Essential widgets, simplified styling */ | ||
| .lg-node--lod-reduced { | ||
| transition: opacity 0.1s ease; | ||
| } | ||
|
|
||
| .lg-node--lod-reduced .lg-widget-label, | ||
| .lg-node--lod-reduced .lg-slot-label { | ||
| display: none; | ||
| } | ||
|
|
||
| .lg-node--lod-reduced .lg-slot { | ||
| opacity: 0.6; | ||
| font-size: 0.75rem; | ||
| } | ||
|
|
||
| .lg-node--lod-reduced .lg-widget { | ||
| margin: 2px 0; | ||
| font-size: 0.875rem; | ||
| } | ||
|
|
||
| /* Full LOD (zoom > 0.8) - Complete detail rendering */ | ||
| .lg-node--lod-full { | ||
| /* Uses default styling - no overrides needed */ | ||
| } | ||
|
|
||
| /* Smooth transitions between LOD levels */ | ||
| .lg-node { | ||
| transition: min-height 0.2s ease; | ||
| /* Disable text selection on all nodes */ | ||
| user-select: none; | ||
| -webkit-user-select: none; | ||
| -moz-user-select: none; | ||
| -ms-user-select: none; | ||
| } | ||
|
|
||
| .lg-node .lg-slot, | ||
| .lg-node .lg-widget { | ||
| transition: opacity 0.1s ease, font-size 0.1s ease; | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Other systems will animate when crossing LOD thresholds but it causes layerization. I feel it's not worth it. |
||
| } | ||
|
|
||
| /* LOD (Level of Detail) CSS classes for Vue nodes */ | ||
|
|
||
| /* Full detail - zoom > 0.8 */ | ||
| .lg-node--lod-full { | ||
| /* All elements visible, full interactivity */ | ||
| } | ||
|
|
||
| /* Reduced detail - 0.4 < zoom <= 0.8 */ | ||
| .lg-node--lod-reduced { | ||
| /* Simplified rendering, essential widgets only */ | ||
| } | ||
|
|
||
| .lg-node--lod-reduced .lg-node-header { | ||
| font-size: 0.875rem; /* Slightly smaller text */ | ||
| } | ||
|
|
||
| .lg-node--lod-reduced .lg-node-widgets { | ||
| /* Only essential widgets shown */ | ||
| } | ||
|
|
||
| .lg-node--lod-reduced .text-xs { | ||
| font-size: 0.625rem; /* Even smaller auxiliary text */ | ||
| } | ||
|
|
||
| /* Minimal detail - zoom <= 0.4 */ | ||
| .lg-node--lod-minimal { | ||
| /* Only header visible, no body content */ | ||
| min-height: auto !important; | ||
| } | ||
|
|
||
| .lg-node--lod-minimal .lg-node-header { | ||
| font-size: 0.75rem; /* Smaller header text */ | ||
| padding: 0.25rem 0.5rem; /* Reduced padding */ | ||
| } | ||
|
|
||
| .lg-node--lod-minimal .lg-node-header__control { | ||
| display: none; /* Hide controls at minimal zoom */ | ||
| } | ||
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
When the text is selectable, it always gets accidentally selected when trying to navigate with mouse drag.