309 Commits
Author SHA1 Message Date
Æmotion Studio f4f55f8ad0 Merge pull request #31 from AEmotionStudio/palette/editable-color-picker-6542475088779009480
🎨 Palette: Editable Hex Code in Color Picker
2026-02-09 19:57:30 -08:00
Æmotion Studio a512c1838d Merge pull request #32 from AEmotionStudio/perf-optimize-node-rendering-1447179187303014016
⚡ Bolt: Optimize OffscreenRenderer node iterations
2026-02-09 19:57:09 -08:00
Æmotion Studio b362e008e7 Merge pull request #33 from AEmotionStudio/sentinel-xss-fix-sanitize-dom-10816560148840849990
🛡️ Sentinel: [HIGH] Fix XSS vulnerability in DOM cloning
2026-02-09 19:43:27 -08:00
google-labs-jules[bot]andAEmotionStudio 09da6a1d7b feat(security): enhance DOM sanitization to strip dangerous URIs
Updated `sanitizeElement` to strictly remove whitespace and control characters from URI attributes before validation.
This prevents bypasses like `java\tscript:` in `href`, `src`, `action`, and `formaction` attributes.
Added comprehensive unit tests covering these bypass vectors.

Co-authored-by: AEmotionStudio <163354043+AEmotionStudio@users.noreply.github.com>
2026-02-10 03:35:57 +00:00
google-labs-jules[bot]andAEmotionStudio 49f1efeeb1 feat(security): sanitize cloned DOM elements to prevent XSS
Added `sanitizeElement` utility to recursively remove inline event handlers (on*) and javascript: URIs from HTML elements.
Applied sanitization in `MagnifyGlass.renderHtmlOverlays` when cloning nodes for the magnifying glass view.
Added unit tests to verify sanitization logic.

Co-authored-by: AEmotionStudio <163354043+AEmotionStudio@users.noreply.github.com>
2026-02-10 03:24:55 +00:00
google-labs-jules[bot]andAEmotionStudio ff56bbd111 feat(sidebar): add editable hex code input to color picker
- Replaced read-only hex code span with an editable text input in `createColorPicker`
- Implemented bidirectional sync between text input and color picker
- Added validation for hex codes and auto-correction on change/blur
- Ensured keydown propagation is stopped to prevent triggering global shortcuts
- Added aria-label for accessibility
- Updated unit tests to verify sync logic and event handling
- Added CSS styles for `magnify-color-preview` input to match UI design
- Ran build script to update `web/` artifacts

Co-authored-by: AEmotionStudio <163354043+AEmotionStudio@users.noreply.github.com>
2026-02-09 23:47:38 +00:00
google-labs-jules[bot]andAEmotionStudio 6e1740e72b feat(security): sanitize cloned DOM elements to prevent XSS
Added `sanitizeElement` utility to recursively remove inline event handlers (on*) from HTML elements.
Applied sanitization in `MagnifyGlass.renderHtmlOverlays` when cloning nodes for the magnifying glass view.
Added unit tests to verify sanitization logic.

Co-authored-by: AEmotionStudio <163354043+AEmotionStudio@users.noreply.github.com>
2026-02-09 23:28:33 +00:00
google-labs-jules[bot]andAEmotionStudio d739c8ea37 perf: optimize node rendering (verified)
Re-verified tests after checking PR comments.
Optimized node rendering by caching visible nodes.

Reduced redundant iterations over `app.graph._nodes` in `OffscreenRenderer`.
Implemented `getVisibleNodes` to calculate visible nodes once per frame (O(N)) and reused this list for text, title, and image preview rendering passes (O(M)).
This improves performance for large graphs by replacing multiple O(N) traversals with a single O(N) traversal followed by O(M) traversals where M << N.

Added unit tests in `tests/unit/OffscreenRenderer.test.ts` to verify node visibility culling logic.
Updated `.jules/bolt.md` with performance learnings.

Co-authored-by: AEmotionStudio <163354043+AEmotionStudio@users.noreply.github.com>
2026-02-09 23:28:08 +00:00
google-labs-jules[bot]andAEmotionStudio 07374a8306 feat(sidebar): add editable hex code input to color picker
- Replaced read-only hex code span with an editable text input in `createColorPicker`
- Implemented bidirectional sync between text input and color picker
- Added validation for hex codes and auto-correction on change/blur
- Ensured keydown propagation is stopped to prevent triggering global shortcuts
- Added aria-label for accessibility
- Updated unit tests to verify sync logic and event handling
- Added CSS styles for `magnify-color-preview` input to match UI design

Co-authored-by: AEmotionStudio <163354043+AEmotionStudio@users.noreply.github.com>
2026-02-09 23:27:45 +00:00
google-labs-jules[bot]andAEmotionStudio 85a0a6fa33 perf: optimize node rendering by caching visible nodes
Reduced redundant iterations over `app.graph._nodes` in `OffscreenRenderer`.
Implemented `getVisibleNodes` to calculate visible nodes once per frame (O(N)) and reused this list for text, title, and image preview rendering passes (O(M)).
This improves performance for large graphs by replacing multiple O(N) traversals with a single O(N) traversal followed by O(M) traversals where M << N.

Added unit tests in `tests/unit/OffscreenRenderer.test.ts` to verify node visibility culling logic.
Updated `.jules/bolt.md` with performance learnings.

Co-authored-by: AEmotionStudio <163354043+AEmotionStudio@users.noreply.github.com>
2026-02-09 16:18:12 +00:00
google-labs-jules[bot]andAEmotionStudio 6bd509bdf7 feat(sidebar): add editable hex code input to color picker
- Replaced read-only hex code span with an editable text input in `createColorPicker`
- Implemented bidirectional sync between text input and color picker
- Added validation for hex codes and auto-correction on blur
- Ensured keydown propagation is stopped to prevent triggering global shortcuts
- Added aria-label for accessibility
- Updated unit tests to verify sync logic and event handling
- Added CSS styles for `magnify-color-preview` input to match UI design

Co-authored-by: AEmotionStudio <163354043+AEmotionStudio@users.noreply.github.com>
2026-02-09 16:09:24 +00:00
Æmotion Studio 7ac655da1c chore: bump version to 1.13.1, update changelog and readme 2026-02-07 19:54:19 -08:00
Æmotion Studio 274e562f16 fix: use pointer events for glass drag to fix Firefox/Brave canvas corruption 2026-02-07 19:48:09 -08:00
Æmotion Studio 9359a42f3b fix: prevent LiteGraph canvas state corruption after glass drag 2026-02-07 19:38:35 -08:00
Æmotion Studio 9e0da38f75 fix: rewrite glass drag to use pointer capture for reliable cursor reset 2026-02-07 19:13:09 -08:00
Æmotion Studio 79cb020c85 fix: glass drag cursor stuck in grab mode after release 2026-02-07 19:04:09 -08:00
Æmotion Studio e08a0b257b fix: ghost cursor interactions persisting after hiding info panel 2026-02-07 18:55:42 -08:00
AEmotionStudio d259091bd4 Verison bump and project toml update 2026-01-19 14:16:44 -08:00
AEmotionStudio ddaf08a797 docs: update accessibility feature image in README 2026-01-19 01:31:32 -08:00
AEmotionStudio 2d7d679213 docs: update multi-monitor pop-out feature image in README 2026-01-19 01:21:23 -08:00
AEmotionStudio dbea0b1d73 docs: update sidebar integration feature image in README 2026-01-19 01:13:48 -08:00
AEmotionStudio a64d6f60f2 docs: update inspector panel feature image in README 2026-01-19 01:03:10 -08:00
AEmotionStudio 4f0c470d05 docs: update magnifying glass feature image in README 2026-01-19 00:11:19 -08:00
AEmotionStudio a7ed8f5920 updated image placement in readme 2026-01-18 23:17:41 -08:00
AEmotionStudio 591cfa7135 docs: add intro image to README 2026-01-18 23:15:55 -08:00
AEmotionStudio bbac28dd88 fix(popout): broaden action button detection in popout viewer 2026-01-18 21:53:27 -08:00
AEmotionStudio ea2f96b015 perf: optimize magnified view update by caching canvas rect to avoid layout thrashing 2026-01-18 21:37:06 -08:00
Æmotion Studio 6db4b2a576 Merge pull request #29 from AEmotionStudio/bolt/layout-thrashing-fix-5688373778482661560
⚡ Bolt: Prevent layout thrashing in magnifier update loop
2026-01-18 21:20:05 -08:00
Æmotion Studio 089098df90 Merge pull request #30 from AEmotionStudio/sentinel/fix-xss-bypass-uimanager-7199572335326487852
🛡️ Sentinel: [HIGH] Fix XSS vulnerability in UIManager by removing isHtml bypass
2026-01-18 21:19:54 -08:00
Æmotion Studio ad0cc473bb Merge pull request #28 from AEmotionStudio/palette-accessibility-focus-2231388305888170951
🎨 Palette: Improve keyboard accessibility for sidebar settings
2026-01-18 21:13:06 -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
google-labs-jules[bot] bb9c545eda perf: prevent layout thrashing in magnifier update loop
Refactors `MagnifyGlass.updateMagnifiedView` and `calculateSourceRegion` to accept an optional cached `DOMRect`. This allows `EventHandler` to pass the canvas dimensions it read before updating the glass position, preventing a forced synchronous reflow (Read-Write-Read cycle) that was previously occurring on every mouse move frame.

Optimizes the hot path for mouse movement and magnifier updates.
2026-01-19 05:00:41 +00:00
google-labs-jules[bot] ac4ba5e5de fix: correct css order for focus-visible on selects
Ensures that the focus-visible outline is not overridden by the generic focus rule.
2026-01-19 04:52:15 +00:00
google-labs-jules[bot] 1fe803d8fb feat: improve keyboard accessibility for sidebar settings
- Add visible focus indicators for interactive elements in the sidebar
- Add aria-valuetext to sliders to announce values with units
- Update journal with accessibility learnings
2026-01-19 04:41:54 +00:00
AEmotionStudio acc96254a6 fix: persist menu toggle button across Vue re-renders using MutationObserver 2026-01-18 20:40:38 -08:00
AEmotionStudio 0522d7e90b feat: add inline slider support to popout viewer 2026-01-18 20:29:04 -08:00
AEmotionStudio 8954d2d44d perf: disable sourcemaps, remove build artifacts, and adjust default glass Y offset 2026-01-18 18:24:00 -08:00
AEmotionStudio c57fe228e0 update known issues in readme 2026-01-18 16:29:59 -08:00
AEmotionStudio 8d50f6744f chore: release version 1.12.0 2026-01-18 13:42:29 -08:00
AEmotionStudio bdc9b31935 docs: update changelog with unreleased changes 2026-01-18 13:35:38 -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 cb589761c8 feat: add grid layout support for batch images in OffscreenRenderer
- Updated `drawNodeImages` to render multiple images from `node.imgs[]` in a grid.
- Implemented aspect-ratio-preserving centering for each image within its grid cell.
- Added configurable gap between images in the grid.
2026-01-18 01:24:21 -08:00
AEmotionStudio 6f99468ff7 docs: add click to watch on youtube statement to video links in README 2026-01-18 00:24:52 -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
Æmotion Studio 093bde19e0 Merge pull request #25 from AEmotionStudio/bolt/optimize-render-overlays-9313858051447850514
⚡ Bolt: Optimize renderHtmlOverlays loop
2026-01-17 22:15:16 -08:00
Æmotion Studio 75d6285678 Merge pull request #27 from AEmotionStudio/sentinel-fix-webgl-xss-17500734846144735282
🛡️ Sentinel: [MEDIUM] Fix potential XSS in WebGL error toast
2026-01-17 22:12:13 -08:00
Æmotion Studio 223ea86d45 Merge pull request #26 from AEmotionStudio/palette-sidebar-a11y-7261823567868187712
🎨 Palette: Sidebar A11y Improvements
2026-01-17 22:11:09 -08:00
google-labs-jules[bot] dd4e34df6f fix(security): prevent XSS in WebGL error toast by using DOM API
- Refactor `showWebGLError` to use `document.createElement` instead of `innerHTML`
- Replace inline `onclick` handler with `addEventListener` for CSP compliance
- Add unit test to verify XSS prevention and button functionality
2026-01-18 04:50:44 +00:00
google-labs-jules[bot] 5606a86256 feat(sidebar): improve accessibility of settings and inspector sections
- Add role="button", tabindex="0", and aria-expanded to section headers
- Implement keyboard navigation (Enter/Space) for expanding/collapsing sections
- Generate unique IDs for aria-controls to link headers and content bodies
- Ensure proper accessibility attributes for sidebar inspector panel

This change improves keyboard navigation and screen reader support for the
sidebar settings and inspector panels.
2026-01-18 04:43:22 +00:00