Commit Graph
132 Commits
Author SHA1 Message Date
Æmotion Studio 40c70bdba4 Merge pull request #21 from AEmotionStudio/bolt/optimize-render-overlays-1998194206652878890
⚡ Bolt: Optimize rendering loop by hoisting getBoundingClientRect
2026-01-15 22:28:43 -08:00
Æmotion Studio 9092cfd0ac Merge pull request #20 from AEmotionStudio/sentinel-validation-fix-2381716828487744723
🛡️ Sentinel: [MEDIUM] Add input validation for info panel settings
2026-01-15 22:28:27 -08:00
google-labs-jules[bot] 6d5791eb3c perf: hoist getBoundingClientRect out of render loop
- Moves `litegraphCanvas.getBoundingClientRect()` call outside the widget loop in `renderHtmlOverlays`.
- Reuses the `dpr` calculated at the top level.
- Adds regression test `tests/unit/MagnifyGlassRenderOptim.test.ts`.

Improves rendering performance by reducing forced reflows during magnification.
2026-01-16 04:57:01 +00:00
google-labs-jules[bot] fe771ef87e feat(security): implement strict input validation for InfoPanel settings
Add validation for all InfoPanel settings loaded in StateManager to prevent
injection of invalid values (e.g. out-of-bounds numbers, invalid colors).
This mitigates risks of degraded stability or potential injection via
manipulated settings storage.

- Add validateNumber, validateColor, validateStringOption helpers
- Update StateManager.loadSettings to validate all keys
- Add unit tests for validation logic
2026-01-16 04:45:01 +00:00
google-labs-jules[bot] d7f6b99051 feat(a11y): associate labels with form controls in sidebar
- Export form creation helpers for testing
- Add unique ID generation for sliders, selects, and color pickers
- Associate labels with inputs using `htmlFor`
- Add unit tests to verify accessibility attributes
2026-01-16 04:37:17 +00: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
Æmotion Studio 6ce27c62a3 Merge pull request #17 from AEmotionStudio/palette/accessible-toggles-10339516210084959098
feat: make sidebar toggle switches accessible
2026-01-14 21:41:39 -08:00
google-labs-jules[bot] bc872f58f6 fix: ensure keyboard events stop propagation in toggles
- Pass event object to handleToggle from keydown listener
- Ensure stopPropagation() is called for keyboard events
- Maintain consistency between mouse and keyboard interaction behavior
2026-01-15 05:33:39 +00:00
Æmotion Studio a8b6877ef7 Merge pull request #16 from AEmotionStudio/bolt/spatial-culling-optimization-6920908164080507849
⚡ Bolt: Implement spatial culling for magnified overlays
2026-01-14 21:24:55 -08:00
google-labs-jules[bot] b73705a106 fix: synchronize aria-checked state in settings panel
- Update Require Alt Key toggle sync to include aria-checked attribute
- Update Reset Position button to clear aria-checked on Follow Cursor toggle
- Add regression tests for sidebar interaction state synchronization
2026-01-15 05:19:31 +00:00
google-labs-jules[bot] b488e89379 fix: add division-by-zero guard for canvasScale in culling logic
Prevents Infinity values and potential culling errors when canvasScale is 0.
2026-01-15 05:16:30 +00:00
google-labs-jules[bot] 1109ca9f06 feat: make sidebar toggle switches accessible
- Add `role="switch"` and `aria-checked` to toggle elements
- Add `tabIndex="0"` for keyboard focus
- Add keyboard event listeners for Enter and Space keys
- Add `aria-labelledby` to associate toggles with their labels
- Enable toggling by clicking the label text
- Export `createToggle` for testing
- Add unit tests for accessibility and interaction logic
2026-01-15 04:59:19 +00:00
google-labs-jules[bot] 8dc8f2449e perf: implement spatial culling for magnified overlays
Reduces layout thrashing by filtering nodes based on their graph position before accessing their DOM widgets. This significantly improves performance on large graphs when using the magnifying glass.

- Calculates visible graph area based on cursor position and zoom.
- Checks intersection of node bounding box with visible area.
- Skips widget processing for off-screen nodes.
2026-01-15 04:58:23 +00:00
google-labs-jules[bot] f928f848e5 feat(security): add input validation for configuration settings
- Implement `validateNumber` and `validateColor` in `ConfigManager`.
- Clamp numeric settings (zoom, size, borders) to safe ranges.
- Validate color settings against hex regex.
- Update `ConfigManager` unit tests to cover validation logic.

This enhancement prevents invalid configuration states and potential stability issues caused by malformed or extreme setting values.
2026-01-15 04:56:22 +00:00
AEmotionStudio 3f2abfdc42 fix: ensure updatePreviews is restored in finally blocks (PR review) 2026-01-14 13:28:14 -08:00
AEmotionStudio 978b3d0521 fix: resolve cloned video play abort errors and other console noise 2026-01-14 13:19:48 -08:00
AEmotionStudio 83a2b3f7ea Fix Reset All Settings and console deprecation warnings 2026-01-13 23:54:15 -08:00
AEmotionStudio 65aa46a862 Fix Reset All Settings to include accessibility options and refresh UI 2026-01-13 23:43:27 -08:00
AEmotionStudio df89ecace2 Fix Position tooltip and Reset All Settings behavior for hover controls 2026-01-13 23:30:44 -08:00
AEmotionStudio e0471b716a Merge branch 'pr/11'
# Conflicts:
#	src/info-panel/UIManager.ts
2026-01-13 22:14:27 -08:00
Æmotion Studio 811e34b85a Merge pull request #10 from AEmotionStudio/bolt/optimize-mousemove-handler-11564229325542646943
⚡ Bolt: Optimize mousemove handler with requestAnimationFrame
2026-01-13 21:59:13 -08:00
google-labs-jules[bot] 5e5c49a99c fix(security): handle non-string inputs in escapeHtml to prevent crashes
- Update `escapeHtml` to explicitly coerce input to string
- Handle null/undefined values safely
- Add unit tests for non-string input types (numbers, booleans, objects)
2026-01-14 05:56:33 +00: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] 4cf3e9f50b fix(security): allow trusted html in info panel while sanitizing user input
- Add `isHtml` flag to `Focus Node` button to bypass escaping
- Update `UIManager` to check for `isHtml` flag before formatting/escaping
- Add regression tests for trusted HTML rendering logic
2026-01-14 04:56:25 +00:00
google-labs-jules[bot] 7bef79daa1 perf: throttle mousemove events with requestAnimationFrame
Prevents excessive layout thrashing and calculations by syncing
updates to the browser's refresh rate.

- Wraps update logic in `EventHandler.ts` with `requestAnimationFrame`.
- Updates `lastKnownMousePosition` synchronously to ensure accuracy.
- Reduces CPU usage during rapid mouse movement.
- Properly cancels animation frame on cleanup.
2026-01-14 04:49:58 +00: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] 416090376e feat(security): sanitize user input in info panel to prevent XSS
- Add `escapeHtml` utility to `src/shared/utils.ts`
- Sanitize rendered values in `src/info-panel/ValueFormatter.ts`
- Sanitize node titles, types, and labels in `src/info-panel/UIManager.ts`
- Add unit tests verifying XSS prevention in `tests/unit/Security.test.ts`
2026-01-14 04:38:38 +00:00
google-labs-jules[bot] 80e98a9391 perf: throttle mousemove events with requestAnimationFrame
Prevents excessive layout thrashing and calculations by syncing
updates to the browser's refresh rate.

- Wraps update logic in `EventHandler.ts` with `requestAnimationFrame`.
- Updates `lastKnownMousePosition` synchronously to ensure accuracy.
- Reduces CPU usage during rapid mouse movement.
2026-01-14 04:37:48 +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
Æmotion Studio 11e350ae03 Merge pull request #7 from AEmotionStudio/refactor/remove-info-panel-force-hide-9563554677483014410
refactor: remove info panel force-hide workaround
2026-01-09 06:11:22 -08:00
google-labs-jules[bot] 6587753d7d refactor: remove info panel force-hide workaround
Removes the `forceHideInfoPanel` method and its related helper methods (`removeForceHide`, `ensureForceHideCssRule`) from `MagnifyGlass.ts`. This workaround manually manipulated the DOM to hide the info panel, bypassing the intended state management via the `InfoPanel` class which hooks into `MagnifyGlass` visibility changes.

Testing:
- Verified that `MagnifyGlass.ts` compiles without errors.
- Verified that unit tests pass.
- Verified that `InfoPanel` logic correctly handles hiding via `hookIntoMagnifyGlass`.
2026-01-09 14:02:20 +00:00
google-labs-jules[bot] 962afa2b29 docs: update comments for sticky mode logic
Removed 'FIX:' prefix from comments in UIManager.ts as the logic
to prevent bouncing in Sticky Mode is already correctly implemented.
The comments now accurately describe the existing behavior without
implying a pending task.
2026-01-09 14:00:50 +00:00
AEmotionStudio 6a59d1cffb fix: magnify glass icon placement from sidebar to the bottom toolbar 2026-01-07 19:02:47 -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 2ee502dcce feat: Enable PopOutManager script in popout viewer and update cache version. 2026-01-06 00:29:03 -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 dcab6a749b feat: Add copy-to-clipboard button to pop-out viewer values, improve UI responsiveness, and update cache version. 2026-01-05 23:57:31 -08:00
AEmotionStudio b533136469 style: Improve popout viewer node property layout and readability, and update cache version. 2026-01-05 23:51:49 -08:00
AEmotionStudio d13fb7de56 feat: enhance pop-out viewer UI for node details with improved styling, icons, and layout. 2026-01-05 23:47:12 -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