Commit Graph
97 Commits
Author SHA1 Message Date
Æmotion StudioandClaude Opus 5.5 892d2c911b Keep the Inspector's node on the way to the panel and over other UI
Moving from a node to the panel crossed empty canvas or other nodes and
changed what it showed, so Lock and the editors were out of reach without
Sticky. Hover now holds the node while the pointer heads for the panel,
until it rests, and only reads the canvas, DOM widgets and Vue nodes, so
the sidebar no longer exposes nodes behind it. With Follow Cursor the
glass holds still on the way.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-04 12:26:14 -08:00
Æmotion StudioandClaude Opus 5.5 95060a4f3f Fix the Inspector hit test at canvas zooms other than 100%
Over a DOM widget such as a prompt text box, node_over is empty and the
Inspector falls back to its own hit test. That divided the offset by the
scale, so it missed at any zoom but 100%. It now uses LiteGraph's
ds.convertCanvasToOffset, and the try/catch that hid this is gone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-04 12:26:00 -08:00
Æmotion StudioandClaude Opus 5.5 5c51f01877 Hide the frontend's $$ preview widgets from the Inspector rows
Load Image listed its internal $$canvas-image-preview widget as a row in
the Inspector and the pop-out.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-04 11:43:54 -08:00
Æmotion StudioandClaude Opus 5.5 b325ea9d4c Fix the Inspector highlight recursing after a Nodes 2.0 toggle
The frontend wraps canvas.onDrawForeground again whenever its DOM widgets
mount, and the wrapper calls the highlighter's hook, which then called the
wrapper. The hook now keeps every function it replaced and goes one level
down per call, so each runs once.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-04 11:20:26 -08:00
Æmotion StudioandClaude Opus 5.5 f748f7b333 Fix reconnecting, duplicated tabs and idle rendering in the pop-out viewer
- Listen for the viewer once ComfyUI is set up, so a viewer left open over a reload connects fully
- A duplicated tab starts its own session instead of sharing the viewer
- Ignore requests from a viewer that is not connected
- Stop the render loop while the glass is hidden and the viewer shows no frames
- Do not place the panel again on the 250 ms refresh
- Build output URLs from filename, subfolder and type only
- Viewer: skip undecodable frames, tolerate showPicker and blocked storage, keep the channel open on unload, shorten "Go to node…"

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-04 10:39:27 -08:00
Æmotion StudioandClaude Opus 5.5 7852897c1d Add Inputs and Outputs links to the pop-out viewer
Each slot lists the nodes it links to as chips that jump to them, and flags
required inputs with nothing connected. Links to a subgraph's own input or
output show as plain chips.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-04 10:14:49 -08:00
Æmotion StudioandClaude Opus 5.5 278f8504d8 Add output previews to the pop-out viewer
The shown node's live previews or last results appear as thumbnails under the
header, and the Output view shows one in place of the frame.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-04 10:05:19 -08:00
Æmotion StudioandClaude Opus 5.5 94cdf46a72 Add queue progress and errors to the pop-out viewer
Forward ComfyUI's execution events as a throttled run message while the
viewer is connected: a run bar, node badges, an error banner and marked rows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-04 09:53:54 -08:00
Æmotion StudioandClaude Opus 5.5 1aad893f6f Make the pop-out navigate and edit like the Inspector
Add the Inspector's header, nav row, breadcrumb and searchable node picker,
run panel actions through UIManager.runAction, and bring the editors, copy
buttons and viewer keys in line with the Inspector.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-04 09:29:53 -08:00
Æmotion StudioandClaude Opus 5.5 bbbbd3e53a Make the pop-out show the Inspector's rows and edit through InfoPanel
InfoPanel builds the payload, applies the Inspector's edit guards and refreshes
the viewer on a 250 ms tick while connected, also when the glass is off.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-04 08:59:55 -08:00
Æmotion StudioandClaude Opus 5.5 e4cee7214e Fix Nodes 2.0 support and glass title emphasis
- Paint Vue nodes under the glass from the DOM, since the canvas capture
  has none of them.
- Resolve the Inspector's hovered node from the Vue node element under
  the cursor, falling back to the canvas hit test in pan mode.
- Fit the node highlight to collapsed nodes in both modes.
- Draw Node Title Emphasis on the title bar instead of the first slot
  row, and skip nodes without a title bar such as Reroute.
- Fill the glass with the page background so it is not half-empty at
  the canvas edge or wrong at zoom 1.5 and above.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-04 07:57:36 -08:00
Æmotion StudioandClaude Opus 5.5 4b06ee92bb Update the Inspector panel look, navigation and editing
Restyle the panel on ComfyUI palette tokens and drop the built-in themes.
Add a header with Back/Forward, Prev/Next, Focus, Lock and a searchable
Go to node picker, a subgraph/group breadcrumb, and simplified modes:
Follow glass or Float, plus Sticky, Follow selection and Lock to node
(replaces Hold).

Fix widget edits (step2 steps, INT/FLOAT, commit on Enter/blur, undo),
subgraph lookups, orphaned dropdown menus, global arrow-key capture,
the pop-out editor, and remove Google Fonts loading and dead code.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-04 06:47:21 -08:00
Æmotion StudioandClaude Opus 5.5 f738714925 Make the Inspector panel toggle fully disable the panel
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 19:59:49 -08:00
Æmotion Studio e08a0b257b fix: ghost cursor interactions persisting after hiding info panel 2026-02-07 18:55:42 -08:00
google-labs-jules[bot] f6a9e5faa7 security(ui): eliminate XSS vector by replacing isHtml bypass with strict specialType
Removed the `isHtml` flag support in `UIManager`, which allowed bypassing HTML escaping.
Replaced it with a `specialType` mechanism (specifically 'focus-node') to render trusted
HTML structures internally while ensuring dynamic values are always escaped.
Updated `Security.test.ts` to verify the fix and prevent regression.

Fixes: Potential XSS vulnerability via unchecked HTML injection.
2026-01-19 05:05:28 +00:00
AEmotionStudio 8954d2d44d perf: disable sourcemaps, remove build artifacts, and adjust default glass Y offset 2026-01-18 18:24:00 -08:00
AEmotionStudio 2927c140dc feat: sync popout widget edits and improve inspector parameter visibility
- Implemented 'onWidgetEdit' listener in 'InfoPanel' to force refresh when popout widgets change.
- Refactored 'NodeDataExtractor' to display all widgets in the inspector (matching popout behavior) and removed aggressive deduplication.
- Fixed theme update logic in 'UIManager' to correctly handle hyphenated theme names.
- Enhanced combo box editing in 'popout-viewer.html' with better selection and blur handling.
2026-01-18 11:51:41 -08:00
AEmotionStudio 8bdfbedf46 feat: add new themes and enhance popout viewer interaction
- Added 'Obsidian', 'Obsidian Dark', and 'Milk White' themes to Info Panel and PopOut viewer.
- Improved theme detection in 'StateManager' to support new themes.
- Implemented button widget support in PopOut viewer with 'button-click' event handling.
- Enhanced widget options handling in 'PopOutManager' for combo widgets.
- Updated dropdown accessibility tests.
2026-01-18 11:02:06 -08:00
AEmotionStudio 8213a086ab feat: add inline action buttons to inspector and improve widget handling
- Added support for inline action buttons in the inspector panel.
- Implemented `InlineControlFactory.createInlineButton` to execute widget callbacks.
- Enhanced `WidgetSyncManager` to detect 'button' widgets via type or heuristics.
- Updated `UIManager` and `NodeDataExtractor` to process actionable widgets.
- Added styles for inline action buttons.
- Added `Escape` key handler to slider widget editor.
- Refactored canvas coordinate calculations in `MagnifyGlass` for better accuracy.
2026-01-18 00:21:06 -08:00
AEmotionStudio 45bc6a4d35 feat(ui): add node navigation hotkeys and update documentation
- Added '*' hotkey to focus the currently inspected node
- Added 'ArrowLeft' and 'ArrowRight' hotkeys to navigate nodes by execution order
- Updated README.md and CHANGELOG.md with the new hotkeys and navigation features
2026-01-17 19:43:07 -08:00
AEmotionStudio da7c8b17f9 feat(ui): enhance keyboard navigation and hotkeys
- Added full keyboard support (Arrows, Enter, Esc) for all dropdown types
- Implemented global '*' hotkey to center canvas on currently inspected node
- Improved event handling to reliably intercept keys before ComfyUI canvas
- Fixed memory leaks in dropdown event listeners
2026-01-17 18:46:55 -08:00
AEmotionStudio f8784432f5 Improve widget editing UX and dropdown behavior
- Allow precise value input by removing automatic step rounding in sync manager
- Standardize stepper button increment to 1 for finer control
- Ensure dropdowns close when clicking the canvas
2026-01-17 18:13:32 -08:00
AEmotionStudio 1a4b6b8a23 fix(widget-editors): update DragValueController logic and build 2026-01-17 17:59:00 -08:00
AEmotionStudio 61a0b9aca6 chore(build): update production build artifacts 2026-01-17 17:51:20 -08:00
AEmotionStudio 09ce2fb78a WIP: My local changes 2026-01-17 17:38:06 -08:00
AEmotionStudio 6ff4f2712c feat(ui): Implement custom dropdown system and High Contrast mode
- Replaced native select elements with a viewport-aware 'CustomDropdown' for better reliability and positioning.
- Added 'High Contrast Text' mode for improved legibility in inputs and values.
- Implemented parameter value deduplication in 'NodeDataExtractor' to reduce panel clutter.
- Expanded Google Font selection with 10+ new styles.
- Switched UI dimensions to relative units (em) for consistent scaling.
- Fixed layout 'bouncing' in sticky mode by removing hover transforms.
2026-01-16 16:13:35 -08:00
AEmotionStudio 1a5d7eab43 feat(ui): Add copy-to-clipboard functionality and improve dropdown stability
- Added a copy-to-clipboard button for 'Category' and 'Path' node details in the Inspector panel.
- Enhanced dropdown interaction stability by using 'mousedown' capture phase and broad event propagation prevention in 'InlineControlFactory'.
- Updated 'build' script to ensure CSS files are correctly synchronized from 'css/' to 'web/'.
- Standardized copy icon and styling, including a subtle checkmark feedback on success.
- Fixed an issue where the Inspector panel would 'bounce' due to hover transforms while in sticky mode.
- Improved dropdown closure logic to handle clicks both outside and within the panel content area.
2026-01-16 15:01:36 -08:00
AEmotionStudio dd6b787ad6 style(ui): Refine sticky mode layout and inline control interactions
- Optimized 'persist-active' mode to use viewport-based height limits and proper flex scrolling.
- Enhanced event propagation handling in 'InlineControlFactory' for better dropdown stability.
- Standardized panel font sizes and updated inline dropdowns to match the green theme.
- Added theme-specific CSS overrides for Light and GitHub themes in widget editors.
- Simplified copy-to-clipboard UI feedback.
2026-01-16 12:41:33 -08:00
AEmotionStudio d2ea6d965f feat(ui): Implement inline widget controls and drag value adjustments
- Added 'InlineControlFactory' to create inline toggle switches and combo boxes for supported widget types, replacing the click-to-edit modal for these types.
- Added 'DragValueController' to enable adjusting numeric values by dragging on the value display.
- Updated 'UIManager' to integrate these new controls, manage their lifecycle, and properly clean them up.
- Enhanced 'WidgetEditorFactory' to handle Enter key for confirming edits.
- Removed the copy button from string values to reduce clutter.
- Updated 'index.ts' to export the new components.
2026-01-16 04:19:29 -08:00
AEmotionStudio 51ad38bfb6 feat: Add video playback support and settings validation
- Implemented a continuous animation loop in 'MagnifyGlass' that activates automatically when video widgets are detected, ensuring smooth playback for standard videos and VHS previews.
- Added robust validation to 'StateManager' for loading settings, including bounds checking for dimensions/opacity and format verification for colors and enums.
- Updated widget detection logic to correctly identify and handle 'videopreview' and 'audiopreview' widgets.
- Ensured animation loops are properly stopped when the glass is hidden or destroyed to preserve resources.
2026-01-16 02:05:42 -08:00
AEmotionStudio 0cf992d528 fix: address final PR review issues 2026-01-15 17:38:38 -08:00
AEmotionStudio 837fe7da87 fix: address additional PR review issues 2026-01-15 17:24:05 -08:00
AEmotionStudio 3c17fc34ff fix: address PR review - add constraints to data attrs and fix boolean coercion 2026-01-15 17:12:48 -08:00
AEmotionStudio 1434e703e0 feat: add Inspector Value Editing - inline widget editing from Inspector Panel 2026-01-15 17:01:58 -08:00
AEmotionStudio 978b3d0521 fix: resolve cloned video play abort errors and other console noise 2026-01-14 13:19:48 -08:00
AEmotionStudio 83de031400 build: update artifacts after pr/11 merge 2026-01-13 22:14:46 -08:00
AEmotionStudio 9f16a72420 Merge PR #9: Accessibility improvements and rebuild artifacts 2026-01-13 21:32:37 -08:00
AEmotionStudio 608904d1a7 refactor: improve component visibility management and styling 2026-01-13 21:23:10 -08:00
google-labs-jules[bot] 11062e4748 fix: ensure aria-expanded is correct on init
- Updated `UIManager.createPanel` to call `updateMinimizedState()` if the panel is initialized in a minimized state.
- This ensures the `aria-expanded` attribute on the minimize button correctly reflects the initial state (false) instead of defaulting to true.
2026-01-14 04:47:35 +00:00
google-labs-jules[bot] fe8df50f48 feat: add aria labels and state attributes to icon buttons
- Added `aria-label` to all icon-only buttons in the Info Panel and Magnify Glass toggle.
- Implemented dynamic `aria-pressed` state updates for toggle buttons (pin, lock, persist, etc.).
- Added `aria-expanded` state for the minimize/maximize button.
- Added `aria-label` to the copy-to-clipboard button.
- Ensures better screen reader compatibility and accessibility compliance.
2026-01-14 04:37:02 +00:00
AEmotionStudio 4de67e52a9 fix: Clear blue node highlight when magnifying glass is disabled 2026-01-13 20:33:52 -08:00
AEmotionStudio 2a10f9392f Remove CSS transition from node highlight for better responsiveness 2026-01-10 20:43:40 -08:00
AEmotionStudio c8b0290193 Refactor node highlighter to use DOM-based element for better precision and performance 2026-01-10 20:33:30 -08:00
AEmotionStudio 1cd6bf9f29 Fix node highlighter to include title bar height 2026-01-10 16:47:18 -08:00
AEmotionStudio fe48d7ec05 feat: add keyboard shortcut indicators to info panel persist and hold button tooltips 2026-01-06 01:24:25 -08:00
AEmotionStudio c21d1c731b refactor: Group glass settings, add new appearance and behavior options 2026-01-06 01:09:47 -08:00
AEmotionStudio ee45d627f1 feat: replace hover clipboard icon with interactive copy button and clipboard functionality for info panel values 2026-01-06 00:09:42 -08:00
AEmotionStudio 88a04b117e feat: Add 'Focus Node' button to info panel and popout to center canvas on the selected node. 2026-01-05 17:57:41 -08:00
AEmotionStudio c8ac92e7d3 feat: improve canvas highlight hook robustness and update node highlight style to a thicker blue border. 2026-01-05 17:34:42 -08:00
AEmotionStudio 444614f574 fix: Remove node type display from info panel 2026-01-05 17:27:03 -08:00