Skip to content

Conversation

@Myestery
Copy link
Collaborator

@Myestery Myestery commented Oct 24, 2025

This pull request refactors the node selection and pointer interaction logic in the Vue node graph editor to improve multi-selection behavior, clarify event handling, and enhance test coverage. The main change is to defer multi-select toggle actions (such as ctrl+click for selection/deselection) from pointer down to pointer up, preventing premature selection state changes and making drag interactions more robust. The drag initiation logic is also refined to only start dragging after the pointer moves beyond a threshold, and new composable methods are introduced for granular node selection control.

Node selection and pointer event handling improvements:

  • Refactored multi-select (ctrl/cmd/shift+click) logic in useNodeEventHandlersIndividual: selection toggling is now deferred to pointer up, and pointer down only brings the node to front without changing selection state. The previous hasMultipleNodesSelected function and related logic were removed for clarity. [1] [2] [3] [4]
  • Added new composable methods deselectNode and toggleNodeSelectionAfterPointerUp to useNodeEventHandlersIndividual for more granular control over node selection, and exposed them in the returned API. [1] [2]

Pointer interaction and drag behavior changes:

  • Updated useNodePointerInteractions to track pointer down/up state and only start dragging after the pointer moves beyond a pixel threshold. Multi-select toggling is now handled on pointer up, not pointer down, and selection state is read from the actual node manager for accuracy. [1] [2] [3] [4] [5] [6]

Test suite enhancements:

  • Improved and expanded tests for pointer interactions and selection logic, including new cases for ctrl+click selection toggling on pointer up, drag threshold behavior, and mocking of new composable methods. [1] [2] [3] [4] [5] [6] [7] [8]
  • Updated test setup and assertions for node event handlers, ensuring selection changes are only triggered at the correct event phase and that drag and multi-select logic is covered. [1] [2]

These changes make node selection more predictable and user-friendly, and ensure drag and multi-select actions behave consistently in both the UI and the test suite.

fix #6128

Screen.Recording.2025-11-15.at.00.29.10.mov

@github-actions
Copy link

github-actions bot commented Oct 24, 2025

🎭 Playwright Test Results

⚠️ Tests passed with flaky tests

⏰ Completed at: 11/15/2025, 12:22:33 AM UTC

📈 Summary

  • Total Tests: 500
  • Passed: 468 ✅
  • Failed: 0
  • Flaky: 2 ⚠️
  • Skipped: 30 ⏭️

📊 Test Reports by Browser

  • chromium: View Report • ✅ 459 / ❌ 0 / ⚠️ 2 / ⏭️ 30
  • chromium-2x: View Report • ✅ 2 / ❌ 0 / ⚠️ 0 / ⏭️ 0
  • chromium-0.5x: View Report • ✅ 1 / ❌ 0 / ⚠️ 0 / ⏭️ 0
  • mobile-chrome: View Report • ✅ 6 / ❌ 0 / ⚠️ 0 / ⏭️ 0

🎉 Click on the links above to view detailed test results for each browser configuration.

@github-actions
Copy link

github-actions bot commented Oct 24, 2025

🎨 Storybook Build Status

Build completed successfully!

⏰ Completed at: 11/15/2025, 12:12:34 AM UTC

🔗 Links


🎉 Your Storybook is ready for review!

@Myestery Myestery changed the title Toolbox Reposition Fix Node Event Handlers for Shift Click Nov 12, 2025
@Myestery Myestery force-pushed the toolbox-repositioning branch from ea3fe09 to 24a0ce4 Compare November 12, 2025 23:24
@github-actions
Copy link

github-actions bot commented Nov 12, 2025

Bundle Size Report

Summary

  • Raw size: 13.6 MB baseline 13.6 MB — 🔴 +1.53 kB
  • Gzip: 2.73 MB baseline 2.73 MB — 🔴 +198 B
  • Brotli: 2.14 MB baseline 2.14 MB — 🔴 +300 B
  • Bundles: 88 current • 88 baseline • 34 added / 34 removed

Category Glance
Graph Workspace 🔴 +1.53 kB (804 kB) · Vendor & Third-Party ⚪ 0 B (5.32 MB) · Other ⚪ 0 B (3.92 MB) · App Entry Points ⚪ 0 B (2.98 MB) · Panels & Settings ⚪ 0 B (307 kB) · UI Components ⚪ 0 B (210 kB) · + 3 more

Per-category breakdown
App Entry Points — 2.98 MB (baseline 2.98 MB) • ⚪ 0 B

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-CPyBkrsz.js (new) 2.62 MB 🔴 +2.62 MB 🔴 +551 kB 🔴 +419 kB
assets/index-nxpJPNQ0.js (removed) 2.62 MB 🟢 -2.62 MB 🟢 -551 kB 🟢 -419 kB
assets/index-DN3nsAPx.js (new) 365 kB 🔴 +365 kB 🔴 +75.3 kB 🔴 +61.4 kB
assets/index-QK9uZ2Fg.js (removed) 365 kB 🟢 -365 kB 🟢 -75.3 kB 🟢 -61.4 kB
assets/index-31Z_t9nz.js (new) 345 B 🔴 +345 B 🔴 +243 B 🔴 +209 B
assets/index-CnuSv4ys.js (removed) 345 B 🟢 -345 B 🟢 -245 B 🟢 -210 B

Status: 3 added / 3 removed

Graph Workspace — 804 kB (baseline 803 kB) • 🔴 +1.53 kB

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-Co5YlWZQ.js (new) 804 kB 🔴 +804 kB 🔴 +157 kB 🔴 +121 kB
assets/GraphView-iX_zdQJ_.js (removed) 803 kB 🟢 -803 kB 🟢 -157 kB 🟢 -121 kB

Status: 1 added / 1 removed

Views & Navigation — 8.03 kB (baseline 8.03 kB) • ⚪ 0 B

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/UserSelectView-BJdpPzHc.js (new) 8.03 kB 🔴 +8.03 kB 🔴 +2.44 kB 🔴 +2.14 kB
assets/UserSelectView-Bt_0itTi.js (removed) 8.03 kB 🟢 -8.03 kB 🟢 -2.44 kB 🟢 -2.15 kB

Status: 1 added / 1 removed

Panels & Settings — 307 kB (baseline 307 kB) • ⚪ 0 B

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CreditsPanel-CaiJpN9M.js (new) 23 kB 🔴 +23 kB 🔴 +5.47 kB 🔴 +4.78 kB
assets/CreditsPanel-DEVfL5uF.js (removed) 23 kB 🟢 -23 kB 🟢 -5.47 kB 🟢 -4.79 kB
assets/KeybindingPanel-DF7SS_lf.js (new) 15.1 kB 🔴 +15.1 kB 🔴 +3.74 kB 🔴 +3.29 kB
assets/KeybindingPanel-DGIyCbH3.js (removed) 15.1 kB 🟢 -15.1 kB 🟢 -3.74 kB 🟢 -3.29 kB
assets/ExtensionPanel-Bx3NIBhp.js (new) 12 kB 🔴 +12 kB 🔴 +2.8 kB 🔴 +2.47 kB
assets/ExtensionPanel-CK23bQ9H.js (removed) 12 kB 🟢 -12 kB 🟢 -2.81 kB 🟢 -2.47 kB
assets/AboutPanel-BtLwOXha.js (removed) 10.2 kB 🟢 -10.2 kB 🟢 -2.63 kB 🟢 -2.34 kB
assets/AboutPanel-NUMx7dV5.js (new) 10.2 kB 🔴 +10.2 kB 🔴 +2.63 kB 🔴 +2.31 kB
assets/ServerConfigPanel-b6wUt2Nz.js (removed) 8.09 kB 🟢 -8.09 kB 🟢 -2.13 kB 🟢 -1.89 kB
assets/ServerConfigPanel-CVrBpFLC.js (new) 8.09 kB 🔴 +8.09 kB 🔴 +2.13 kB 🔴 +1.89 kB
assets/UserPanel-C6UDO_RC.js (new) 7.8 kB 🔴 +7.8 kB 🔴 +2.04 kB 🔴 +1.78 kB
assets/UserPanel-CUixwagV.js (removed) 7.8 kB 🟢 -7.8 kB 🟢 -2.04 kB 🟢 -1.78 kB
assets/settings-BXTtSH4O.js 33.3 kB 33.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-C9Pzn-NG.js 25.2 kB 25.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CCy2fA_h.js 27.3 kB 27.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CQpqEFfl.js 26.6 kB 26.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DHcnxypw.js 21.7 kB 21.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DhFTK9fY.js 25.1 kB 25.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DlT4t_ui.js 25.9 kB 25.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DRgSrIdD.js 24.2 kB 24.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-tjkeqiZq.js 21.1 kB 21.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 6 added / 6 removed

UI Components — 210 kB (baseline 210 kB) • ⚪ 0 B

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/Load3D.vue_vue_type_script_setup_true_lang-j0-xT9lj.js (removed) 128 kB 🟢 -128 kB 🟢 -21.3 kB 🟢 -17.4 kB
assets/Load3D.vue_vue_type_script_setup_true_lang-xPRezQzh.js (new) 128 kB 🔴 +128 kB 🔴 +21.3 kB 🔴 +17.4 kB
assets/WidgetSelect.vue_vue_type_script_setup_true_lang-Bh1lBrgU.js (new) 47.9 kB 🔴 +47.9 kB 🔴 +10.4 kB 🔴 +9 kB
assets/WidgetSelect.vue_vue_type_script_setup_true_lang-Cef1Evxc.js (removed) 47.9 kB 🟢 -47.9 kB 🟢 -10.4 kB 🟢 -9.01 kB
assets/ComfyQueueButton-C7f2Ov22.js (removed) 11.2 kB 🟢 -11.2 kB 🟢 -2.79 kB 🟢 -2.47 kB
assets/ComfyQueueButton-Cu18-VRe.js (new) 11.2 kB 🔴 +11.2 kB 🔴 +2.79 kB 🔴 +2.47 kB
assets/WidgetSelectButton-aRy3b9ik.js (removed) 6.59 kB 🟢 -6.59 kB 🟢 -1.95 kB 🟢 -1.71 kB
assets/WidgetSelectButton-BXEV9Djl.js (new) 6.59 kB 🔴 +6.59 kB 🔴 +1.95 kB 🔴 +1.71 kB
assets/WidgetLayoutField.vue_vue_type_script_setup_true_lang-BiVgXLJE.js (new) 2.16 kB 🔴 +2.16 kB 🔴 +811 B 🔴 +707 B
assets/WidgetLayoutField.vue_vue_type_script_setup_true_lang-Dx-3E2Ax.js (removed) 2.16 kB 🟢 -2.16 kB 🟢 -810 B 🟢 -706 B
assets/LazyImage.vue_vue_type_script_setup_true_lang-CYFSl-yC.js 10.7 kB 10.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserAvatar.vue_vue_type_script_setup_true_lang-D2s8tnS2.js 1.26 kB 1.26 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetButton-ByrPd5jr.js 1.62 kB 1.62 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 5 added / 5 removed

Data & Services — 12.6 kB (baseline 12.6 kB) • ⚪ 0 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/keybindingService-lJlmkepP.js (removed) 7.6 kB 🟢 -7.6 kB 🟢 -1.84 kB 🟢 -1.59 kB
assets/keybindingService-zJs7L_f1.js (new) 7.6 kB 🔴 +7.6 kB 🔴 +1.84 kB 🔴 +1.59 kB
assets/audioService-BssY33B1.js (new) 2.2 kB 🔴 +2.2 kB 🔴 +961 B 🔴 +824 B
assets/audioService-Cxc9N1qn.js (removed) 2.2 kB 🟢 -2.2 kB 🟢 -962 B 🟢 -822 B
assets/serverConfigStore-CLQ4OLsV.js 2.79 kB 2.79 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 2 added / 2 removed

Utilities & Hooks — 5.87 kB (baseline 5.87 kB) • ⚪ 0 B

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/audioUtils-BcdPDzyH.js (removed) 1.41 kB 🟢 -1.41 kB 🟢 -651 B 🟢 -549 B
assets/audioUtils-dCNvLnKU.js (new) 1.41 kB 🔴 +1.41 kB 🔴 +650 B 🔴 +547 B
assets/mathUtil-CTARWQ-l.js 1.07 kB 1.07 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeFilterUtil-CXKCRJ-m.js 460 B 460 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useTransformCompatOverlayProps-YaCpDdzr.js 486 B 486 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useWidgetValue-IC6pgigJ.js 2.45 kB 2.45 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 1 added / 1 removed

Vendor & Third-Party — 5.32 MB (baseline 5.32 MB) • ⚪ 0 B

External libraries and shared vendor chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/vendor-other-BD-fEGPG.js 3.22 MB 3.22 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-PESgPnbc.js 517 B 517 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-three-aR6ntw5X.js 1.37 MB 1.37 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-tiptap-_bKlu4y-.js 232 kB 232 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vue-DkPfYpIU.js 92.6 kB 92.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-BZLod3g9.js 407 kB 407 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Other — 3.92 MB (baseline 3.92 MB) • ⚪ 0 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/WidgetRecordAudio-BgTyY0wq.js (removed) 22.2 kB 🟢 -22.2 kB 🟢 -5.59 kB 🟢 -4.94 kB
assets/WidgetRecordAudio-TFVafOAS.js (new) 22.2 kB 🔴 +22.2 kB 🔴 +5.59 kB 🔴 +4.94 kB
assets/AudioPreviewPlayer-CPvfw-rr.js (new) 14.9 kB 🔴 +14.9 kB 🔴 +3.72 kB 🔴 +3.32 kB
assets/AudioPreviewPlayer-CXcBCxYn.js (removed) 14.9 kB 🟢 -14.9 kB 🟢 -3.72 kB 🟢 -3.32 kB
assets/WidgetInputNumber-BjJv3akj.js (removed) 14.6 kB 🟢 -14.6 kB 🟢 -3.79 kB 🟢 -3.36 kB
assets/WidgetInputNumber-C98WsA_Z.js (new) 14.6 kB 🔴 +14.6 kB 🔴 +3.79 kB 🔴 +3.36 kB
assets/WidgetGalleria-B2FT6k-V.js (removed) 5.62 kB 🟢 -5.62 kB 🟢 -1.75 kB 🟢 -1.55 kB
assets/WidgetGalleria-xo3xg5IA.js (new) 5.62 kB 🔴 +5.62 kB 🔴 +1.75 kB 🔴 +1.55 kB
assets/WidgetColorPicker-DF8gf72m.js (new) 4.91 kB 🔴 +4.91 kB 🔴 +1.68 kB 🔴 +1.48 kB
assets/WidgetColorPicker-UNnYMboA.js (removed) 4.91 kB 🟢 -4.91 kB 🟢 -1.68 kB 🟢 -1.48 kB
assets/WidgetMarkdown-CYvZCXS_.js (removed) 4.88 kB 🟢 -4.88 kB 🟢 -1.7 kB 🟢 -1.47 kB
assets/WidgetMarkdown-kdxukeir.js (new) 4.88 kB 🔴 +4.88 kB 🔴 +1.7 kB 🔴 +1.47 kB
assets/WidgetAudioUI-CsQwuVRt.js (new) 4.49 kB 🔴 +4.49 kB 🔴 +1.49 kB 🔴 +1.33 kB
assets/WidgetAudioUI-DsE5uiMw.js (removed) 4.49 kB 🟢 -4.49 kB 🟢 -1.49 kB 🟢 -1.33 kB
assets/WidgetMultiSelect-BDUWuBWu.js (new) 4.3 kB 🔴 +4.3 kB 🔴 +1.45 kB 🔴 +1.27 kB
assets/WidgetMultiSelect-BLxbQJtS.js (removed) 4.3 kB 🟢 -4.3 kB 🟢 -1.46 kB 🟢 -1.27 kB
assets/WidgetTreeSelect-CB02v56o.js (removed) 4.03 kB 🟢 -4.03 kB 🟢 -1.38 kB 🟢 -1.21 kB
assets/WidgetTreeSelect-Fbb5UibF.js (new) 4.03 kB 🔴 +4.03 kB 🔴 +1.38 kB 🔴 +1.21 kB
assets/WidgetTextarea-Bl6TsSXf.js (removed) 3.74 kB 🟢 -3.74 kB 🟢 -1.29 kB 🟢 -1.14 kB
assets/WidgetTextarea-MeVpIEyU.js (new) 3.74 kB 🔴 +3.74 kB 🔴 +1.29 kB 🔴 +1.13 kB
assets/WidgetInputText-C2QPY8kP.js (new) 3.66 kB 🔴 +3.66 kB 🔴 +1.27 kB 🔴 +1.13 kB
assets/WidgetInputText-DJNk-B4D.js (removed) 3.66 kB 🟢 -3.66 kB 🟢 -1.27 kB 🟢 -1.13 kB
assets/WidgetToggleSwitch-B0b5TJw_.js (removed) 3.52 kB 🟢 -3.52 kB 🟢 -1.22 kB 🟢 -1.07 kB
assets/WidgetToggleSwitch-D8MoTzgo.js (new) 3.52 kB 🔴 +3.52 kB 🔴 +1.22 kB 🔴 +1.1 kB
assets/WidgetSelect-80WLZO0N.js (removed) 2.33 kB 🟢 -2.33 kB 🟢 -731 B 🟢 -619 B
assets/WidgetSelect-CqGqET9w.js (new) 2.33 kB 🔴 +2.33 kB 🔴 +729 B 🔴 +617 B
assets/Load3D-DVLltF3P.js (new) 2.01 kB 🔴 +2.01 kB 🔴 +607 B 🔴 +507 B
assets/Load3D-kYcmvkOM.js (removed) 2.01 kB 🟢 -2.01 kB 🟢 -608 B 🟢 -508 B
assets/WidgetLegacy-BnEm6n9U.js (removed) 1.95 kB 🟢 -1.95 kB 🟢 -572 B 🟢 -508 B
assets/WidgetLegacy-CtKo38ic.js (new) 1.95 kB 🔴 +1.95 kB 🔴 +571 B 🔴 +513 B
assets/commands-_6uSNVYB.js 14.9 kB 14.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BaAvtVOT.js 14.7 kB 14.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BRKOlMPq.js 15.4 kB 15.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-C1kmJUO0.js 14.9 kB 14.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CHLkz7NH.js 17.4 kB 17.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-cLsDwHMQ.js 14 kB 14 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Ct50VUT9.js 16.2 kB 16.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DOEnM922.js 14.1 kB 14.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Ds4Sq2CW.js 15.7 kB 15.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BjHbZI-o.js 97.5 kB 97.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BsmSUEg9.js 75.9 kB 75.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-C1dqVsBC.js 103 kB 103 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CTcPPkuZ.js 87.4 kB 87.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CwX98cQA.js 89.7 kB 89.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DFyT7zKX.js 84.8 kB 84.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DHvyJYQT.js 74.9 kB 74.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-ruI2u5eb.js 118 kB 118 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-UdMyOcTd.js 86.4 kB 86.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-_Px5dSNW.js 306 kB 306 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-7z21KPoS.js 285 kB 285 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BWKZzBPK.js 346 kB 346 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CGbgH4Yl.js 320 kB 320 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CjjjdWkV.js 313 kB 313 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CVrNtxvj.js 288 kB 288 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DLRSA0IK.js 309 kB 309 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DQV2gnwA.js 372 kB 372 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-ofqLG5vz.js 310 kB 310 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetChart-4dlndULn.js 2.44 kB 2.44 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetFileUpload-Cx6dGznS.js 11.9 kB 11.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCompare-Ds3K3ULR.js 2.15 kB 2.15 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetPropFilter-BIbGSUAt.js 1.28 kB 1.28 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 15 added / 15 removed

- Move node click deselection logic from useNodePointerInteractions to useNodeEventHandlers
- Fix TypeScript issues by properly accessing nodeData.value
- Remove unused isLGraphNode import and hasMultipleNodesSelected function
- Simplify node selection logic in handleNodeSelect
- Add handleNodeClickDeselect to centralize deselection handling
@Myestery Myestery force-pushed the toolbox-repositioning branch from 24a0ce4 to ba35a30 Compare November 13, 2025 02:22
@Myestery Myestery marked this pull request as ready for review November 13, 2025 02:23
@dosubot dosubot bot added the size:M This PR changes 30-99 lines, ignoring generated files. label Nov 13, 2025
@Myestery Myestery requested a review from DrJKL November 13, 2025 02:23
DrJKL
DrJKL previously approved these changes Nov 13, 2025
@DrJKL DrJKL force-pushed the toolbox-repositioning branch from 73ab849 to 95b9b18 Compare November 14, 2025 05:32
…threshold

- Defer shift-click selection toggle until pointer up to enable shift+drag
- Add 3px drag threshold to distinguish clicks from drags
- Track node selection state from LGraphNode (not Vue reactive data) for accuracy
- Add toggleNodeSelectionAfterPointerUp handler for deferred toggle logic
- Refactor handleNodeSelect to skip selection changes when shift is held

Behavior:
- Shift+click unselected node: Adds to selection (if not dragging)
- Shift+click selected node: Removes from selection (if not dragging)
- Shift+drag selected/unselected nodes: Drags without changing selection
- Regular click: Single select

Fixes shift-click toggle not working due to immediate selection changes
preventing drag detection, and fixes state sync issues between Vue
reactive data and LGraphNode state.
…specs

- Rewrite test descriptions to specify pointer down vs pointer up behavior
- Replace negative assertions with positive behavior descriptions
- Add new test coverage for shift key and drag scenarios

Changes to useNodeEventHandlers.test.ts:
- "defers selection changes" → "on pointer down with ctrl+click: brings node to front only, no selection changes"
- Add shift key test for completeness
- "selects/deselects node" → "on pointer up with multi-select: selects/deselects node that was unselected/selected at pointer down"
- Clarify that regular clicks handled elsewhere (not by toggle handler)

Changes to useNodePointerInteractions.test.ts:
- Split single vague test into two specific scenarios
- Add "on ctrl+click: calls toggleNodeSelectionAfterPointerUp on pointer up (not pointer down)"
- Add "on ctrl+drag: does NOT call toggleNodeSelectionAfterPointerUp"

Test count: 14 → 20 tests (6 new/improved)
All tests now clearly specify WHEN (pointer down/up) and WHAT behavior occurs.
@Myestery Myestery force-pushed the toolbox-repositioning branch from 95b9b18 to 6b0f89b Compare November 14, 2025 23:26
@dosubot dosubot bot added size:L This PR changes 100-499 lines, ignoring generated files. and removed size:M This PR changes 30-99 lines, ignoring generated files. labels Nov 14, 2025
@Myestery Myestery requested a review from DrJKL November 14, 2025 23:31
Fixed an issue where pinned nodes could be dragged despite being pinned.
The problem was that isPointerDown was set to true before checking if
the node was pinned, allowing handlePointerMove to trigger drag detection.

Changed the order of operations in handlePointerDown:
1. Track selection state
2. Call onNodeSelect (allows selecting pinned nodes)
3. Check if pinned and return early
4. Only then set up drag state (startPosition, isPointerDown, startDrag)

This ensures pinned nodes remain selectable but cannot be dragged.

Fixes browser_tests/tests/vueNodes/interactions/node/select.spec.ts:63
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L This PR changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

(on Mac with trackpad) The drag select nodes does not select the nodes if the drag gets released while the mouse is still moving

3 participants