Skip to content

Fix crosshair cursor in vue mode#8120

Merged
AustinMroz merged 3 commits intomainfrom
austin/fix-vue-crosshairs
Jan 18, 2026
Merged

Fix crosshair cursor in vue mode#8120
AustinMroz merged 3 commits intomainfrom
austin/fix-vue-crosshairs

Conversation

@AustinMroz
Copy link
Collaborator

@AustinMroz AustinMroz commented Jan 17, 2026

When the mouse cursor is at the very edge of a a node in vue mode, a crosshair cursor will sometimes display. This happens because the mouse is over the canvas, and LGraphCanvas.processMouseMove determines the cursor is still above the node.

This fix feels kinda ick. I don't believe that we can trust the getNodeOnPos call to be accurate when in vue mode, but this change could likely have side effects. Perhaps the check should be performed in processMouseMove instead?

┆Issue is synchronized with this Notion page by Unito

@AustinMroz AustinMroz requested a review from a team as a code owner January 17, 2026 03:56
@dosubot dosubot bot added the size:XS This PR changes 0-9 lines, ignoring generated files. label Jan 17, 2026
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 17, 2026

📝 Walkthrough

Walkthrough

The PR modifies node hit-testing in LGraphCanvas pointer event handlers (processMouseMove, processMouseDown). When Vue nodes mode is enabled, hit-testing is bypassed to delegate node interactions to Vue-based handling instead of LiteGraph's native hit-detection.

Changes

Cohort / File(s) Summary
Vue nodes mode pointer hit-testing bypass
src/lib/litegraph/src/LGraphCanvas.ts
Conditional logic updated: when LiteGraph.vueNodesMode is true, node hit-testing is skipped (node set to null) in processMouseMove and processMouseDown methods; otherwise, graph.getNodeOnPos is called as before. Delegates pointer interactions to Vue-based handling when Vue nodes mode is active.

Possibly related PRs

Suggested reviewers

  • DrJKL
  • jtydhr88
  • christian-byrne
✨ Finishing touches
  • 📝 Generate docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions
Copy link

github-actions bot commented Jan 17, 2026

🎨 Storybook Build Status

Build completed successfully!

⏰ Completed at: 01/18/2026, 09:12:48 AM UTC

🔗 Links


🎉 Your Storybook is ready for review!

@github-actions
Copy link

github-actions bot commented Jan 17, 2026

🎭 Playwright Tests: ⚠️ Passed with flaky tests

Results: 505 passed, 0 failed, 1 flaky, 8 skipped (Total: 514)

❌ Failed Tests

📊 Browser Reports
  • chromium: View Report (✅ 495 / ❌ 0 / ⚠️ 0 / ⏭️ 8)
  • chromium-2x: View Report (✅ 2 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • chromium-0.5x: View Report (✅ 1 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • mobile-chrome: View Report (✅ 7 / ❌ 0 / ⚠️ 1 / ⏭️ 0)

@github-actions
Copy link

github-actions bot commented Jan 17, 2026

Bundle Size Report

Summary

  • Raw size: 19.2 MB baseline 19.2 MB — 🔴 +32 B
  • Gzip: 4.05 MB baseline 4.05 MB — 🔴 +72 B
  • Brotli: 3.09 MB baseline 3.09 MB — 🔴 +24 B
  • Bundles: 155 current • 155 baseline • 65 added / 65 removed

Category Glance
Data & Services 🔴 +32 B (2.75 MB) · Vendor & Third-Party ⚪ 0 B (9.09 MB) · Other ⚪ 0 B (5.91 MB) · Graph Workspace ⚪ 0 B (878 kB) · Panels & Settings ⚪ 0 B (385 kB) · Views & Navigation ⚪ 0 B (66.6 kB) · + 5 more

Per-category breakdown
App Entry Points — 18.1 kB (baseline 18.1 kB) • ⚪ 0 B

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-cjeoWfvj.js (new) 18.1 kB 🔴 +18.1 kB 🔴 +6 kB 🔴 +5.24 kB
assets/index-zDpv5mc5.js (removed) 18.1 kB 🟢 -18.1 kB 🟢 -6.01 kB 🟢 -5.25 kB

Status: 1 added / 1 removed

Graph Workspace — 878 kB (baseline 878 kB) • ⚪ 0 B

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-BkR6kzVC.js (new) 878 kB 🔴 +878 kB 🔴 +183 kB 🔴 +141 kB
assets/GraphView-D6Y63Hg8.js (removed) 878 kB 🟢 -878 kB 🟢 -183 kB 🟢 -141 kB

Status: 1 added / 1 removed

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

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CloudSurveyView-Bhu4UfrB.js (removed) 15.5 kB 🟢 -15.5 kB 🟢 -3.37 kB 🟢 -2.87 kB
assets/CloudSurveyView-BksPj_En.js (new) 15.5 kB 🔴 +15.5 kB 🔴 +3.37 kB 🔴 +2.86 kB
assets/CloudLoginView-D9kgGy6s.js (removed) 9.75 kB 🟢 -9.75 kB 🟢 -2.83 kB 🟢 -2.47 kB
assets/CloudLoginView-Du4BUQla.js (new) 9.75 kB 🔴 +9.75 kB 🔴 +2.83 kB 🔴 +2.47 kB
assets/UserCheckView-D-QJO7Bo.js (removed) 8.2 kB 🟢 -8.2 kB 🟢 -2.15 kB 🟢 -1.86 kB
assets/UserCheckView-DX7fvdP5.js (new) 8.2 kB 🔴 +8.2 kB 🔴 +2.15 kB 🔴 +1.86 kB
assets/CloudSignupView-B6yXFRh4.js (new) 6.96 kB 🔴 +6.96 kB 🔴 +2.17 kB 🔴 +1.89 kB
assets/CloudSignupView-CLDWrmOZ.js (removed) 6.96 kB 🟢 -6.96 kB 🟢 -2.16 kB 🟢 -1.89 kB
assets/CloudLayoutView-Cj-axRuz.js (removed) 6.18 kB 🟢 -6.18 kB 🟢 -2.01 kB 🟢 -1.74 kB
assets/CloudLayoutView-DX0D7Xa2.js (new) 6.18 kB 🔴 +6.18 kB 🔴 +2.02 kB 🔴 +1.75 kB
assets/CloudForgotPasswordView-BELM1dhz.js (new) 5.31 kB 🔴 +5.31 kB 🔴 +1.85 kB 🔴 +1.61 kB
assets/CloudForgotPasswordView-CxOs-hWa.js (removed) 5.31 kB 🟢 -5.31 kB 🟢 -1.85 kB 🟢 -1.61 kB
assets/CloudAuthTimeoutView-B2Dgivk5.js (removed) 4.71 kB 🟢 -4.71 kB 🟢 -1.69 kB 🟢 -1.47 kB
assets/CloudAuthTimeoutView-CAkElP3E.js (new) 4.71 kB 🔴 +4.71 kB 🔴 +1.69 kB 🔴 +1.47 kB
assets/CloudSubscriptionRedirectView-BvbdZLOt.js (removed) 4.37 kB 🟢 -4.37 kB 🟢 -1.65 kB 🟢 -1.45 kB
assets/CloudSubscriptionRedirectView-C0qHShBz.js (new) 4.37 kB 🔴 +4.37 kB 🔴 +1.65 kB 🔴 +1.45 kB
assets/UserSelectView-BDSbBwl_.js (removed) 4.34 kB 🟢 -4.34 kB 🟢 -1.56 kB 🟢 -1.4 kB
assets/UserSelectView-M04eshF3.js (new) 4.34 kB 🔴 +4.34 kB 🔴 +1.57 kB 🔴 +1.4 kB
assets/CloudSorryContactSupportView-Bq5r0bm1.js 958 B 958 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/layout-DPXamnO6.js 296 B 296 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 9 added / 9 removed

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

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/LegacyCreditsPanel-B_Ged_A0.js (new) 20.5 kB 🔴 +20.5 kB 🔴 +5.5 kB 🔴 +4.81 kB
assets/LegacyCreditsPanel-ChNSquU2.js (removed) 20.5 kB 🟢 -20.5 kB 🟢 -5.49 kB 🟢 -4.82 kB
assets/SubscriptionPanel-C4CCxDOm.js (removed) 18.2 kB 🟢 -18.2 kB 🟢 -4.62 kB 🟢 -4.08 kB
assets/SubscriptionPanel-DiohCvwc.js (new) 18.2 kB 🔴 +18.2 kB 🔴 +4.62 kB 🔴 +4.05 kB
assets/KeybindingPanel-C6JTtofg.js (new) 12.3 kB 🔴 +12.3 kB 🔴 +3.5 kB 🔴 +3.07 kB
assets/KeybindingPanel-ConlqGN_.js (removed) 12.3 kB 🟢 -12.3 kB 🟢 -3.49 kB 🟢 -3.07 kB
assets/ExtensionPanel-BHLOWPPN.js (new) 9.18 kB 🔴 +9.18 kB 🔴 +2.57 kB 🔴 +2.27 kB
assets/ExtensionPanel-BW5SoU5o.js (removed) 9.18 kB 🟢 -9.18 kB 🟢 -2.57 kB 🟢 -2.27 kB
assets/AboutPanel-BMK80may.js (removed) 8.26 kB 🟢 -8.26 kB 🟢 -2.31 kB 🟢 -2.08 kB
assets/AboutPanel-ClReBhlJ.js (new) 8.26 kB 🔴 +8.26 kB 🔴 +2.31 kB 🔴 +2.08 kB
assets/ServerConfigPanel-22DueYPi.js (removed) 6.27 kB 🟢 -6.27 kB 🟢 -2.03 kB 🟢 -1.81 kB
assets/ServerConfigPanel-F2n9pqp6.js (new) 6.27 kB 🔴 +6.27 kB 🔴 +2.03 kB 🔴 +1.82 kB
assets/UserPanel-B-gjFvwd.js (removed) 5.92 kB 🟢 -5.92 kB 🟢 -1.84 kB 🟢 -1.61 kB
assets/UserPanel-B9Q_mtfG.js (new) 5.92 kB 🔴 +5.92 kB 🔴 +1.84 kB 🔴 +1.62 kB
assets/cloudRemoteConfig-oZcy8DWb.js (removed) 1.71 kB 🟢 -1.71 kB 🟢 -815 B 🟢 -704 B
assets/cloudRemoteConfig-rlmfDFeG.js (new) 1.71 kB 🔴 +1.71 kB 🔴 +814 B 🔴 +697 B
assets/remoteConfig-BUDSMhNf.js 180 B 180 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/remoteConfig-ChJ6chsD.js 842 B 842 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-B4tKvhju.js 25.9 kB 25.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CaRugk0T.js 31.4 kB 31.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-Cc_5ZmNN.js 22.9 kB 22.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CGqeatFl.js 25.7 kB 25.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CmdWWupL.js 26.7 kB 26.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CUG7K3Yo.js 22.3 kB 22.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-D-sRfyAY.js 28.3 kB 28.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DiaIkXsJ.js 27.5 kB 27.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DNazWeKW.js 26.6 kB 26.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-Dx2hk4FX.js 35.4 kB 35.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-NGLy8ZAc.js 29.2 kB 29.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 8 added / 8 removed

User & Accounts — 4.22 kB (baseline 4.22 kB) • ⚪ 0 B

Authentication, profile, and account management bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/auth-C8c2RFXf.js (new) 3.29 kB 🔴 +3.29 kB 🔴 +1.14 kB 🔴 +952 B
assets/auth-u0Ub4MG9.js (removed) 3.29 kB 🟢 -3.29 kB 🟢 -1.14 kB 🟢 -951 B
assets/firebaseAuthStore-BAG0L1md.js (new) 638 B 🔴 +638 B 🔴 +332 B 🔴 +292 B
assets/firebaseAuthStore-Bsx-TsEM.js (removed) 638 B 🟢 -638 B 🟢 -328 B 🟢 -296 B
assets/auth-CJ02mhmr.js (removed) 288 B 🟢 -288 B 🟢 -192 B 🟢 -171 B
assets/auth-CXZ8oIUv.js (new) 288 B 🔴 +288 B 🔴 +192 B 🔴 +167 B

Status: 3 added / 3 removed

Editors & Dialogs — 2.85 kB (baseline 2.85 kB) • ⚪ 0 B

Modals, dialogs, drawers, and in-app editors

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useSubscriptionDialog-CH0SSb0J.js (removed) 2.22 kB 🟢 -2.22 kB 🟢 -1.14 kB 🟢 -997 B
assets/useSubscriptionDialog-DMiqa9Qq.js (new) 2.22 kB 🔴 +2.22 kB 🔴 +1.13 kB 🔴 +995 B
assets/useSubscriptionDialog-BAETYpaF.js (removed) 631 B 🟢 -631 B 🟢 -327 B 🟢 -287 B
assets/useSubscriptionDialog-IJoftDKa.js (new) 631 B 🔴 +631 B 🔴 +330 B 🔴 +289 B

Status: 2 added / 2 removed

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

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/SubscribeButton-BsUoNMDA.js (removed) 10.7 kB 🟢 -10.7 kB 🟢 -2.73 kB 🟢 -2.43 kB
assets/SubscribeButton-DNtjXVAb.js (new) 10.7 kB 🔴 +10.7 kB 🔴 +2.73 kB 🔴 +2.44 kB
assets/ComfyQueueButton-DOveKdbd.js (new) 7.07 kB 🔴 +7.07 kB 🔴 +2.28 kB 🔴 +2.04 kB
assets/ComfyQueueButton-DWm9AAfZ.js (removed) 7.07 kB 🟢 -7.07 kB 🟢 -2.28 kB 🟢 -2.04 kB
assets/CloudBadge-DAbcDbZK.js (new) 1.14 kB 🔴 +1.14 kB 🔴 +571 B 🔴 +491 B
assets/CloudBadge-V3j0JP2L.js (removed) 1.14 kB 🟢 -1.14 kB 🟢 -571 B 🟢 -497 B
assets/cloudFeedbackTopbarButton-C30V84KY.js (removed) 1.09 kB 🟢 -1.09 kB 🟢 -632 B 🟢 -545 B
assets/cloudFeedbackTopbarButton-DE6BhLQA.js (new) 1.09 kB 🔴 +1.09 kB 🔴 +636 B 🔴 +539 B
assets/ComfyQueueButton-B6hTmGQ4.js (new) 643 B 🔴 +643 B 🔴 +337 B 🔴 +296 B
assets/ComfyQueueButton-DjPXbqNv.js (removed) 643 B 🟢 -643 B 🟢 -333 B 🟢 -300 B
assets/Button-DXbPXIj1.js 2.86 kB 2.86 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserAvatar-CRJy-LDw.js 1.11 kB 1.11 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetButton-CKnjYR8V.js 1.71 kB 1.71 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 5 added / 5 removed

Data & Services — 2.75 MB (baseline 2.75 MB) • 🔴 +32 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/dialogService-CYc9gq1e.js (removed) 1.65 MB 🟢 -1.65 MB 🟢 -367 kB 🟢 -282 kB
assets/dialogService-DsfIVwK1.js (new) 1.65 MB 🔴 +1.65 MB 🔴 +367 kB 🔴 +282 kB
assets/api-CJ9pHvqb.js (new) 1.08 MB 🔴 +1.08 MB 🔴 +228 kB 🔴 +181 kB
assets/api-CBxpbEvJ.js (removed) 1.08 MB 🟢 -1.08 MB 🟢 -228 kB 🟢 -180 kB
assets/releaseStore-DwU5uBiC.js (new) 7.91 kB 🔴 +7.91 kB 🔴 +2.16 kB 🔴 +1.9 kB
assets/releaseStore-DzcrPU2s.js (removed) 7.91 kB 🟢 -7.91 kB 🟢 -2.16 kB 🟢 -1.9 kB
assets/keybindingService-8ryaqJF_.js (new) 6.04 kB 🔴 +6.04 kB 🔴 +1.6 kB 🔴 +1.38 kB
assets/keybindingService-FCvzkf50.js (removed) 6.04 kB 🟢 -6.04 kB 🟢 -1.6 kB 🟢 -1.4 kB
assets/userStore-BkqJe_Lc.js (removed) 1.83 kB 🟢 -1.83 kB 🟢 -703 B 🟢 -618 B
assets/userStore-CV_3bZvb.js (new) 1.83 kB 🔴 +1.83 kB 🔴 +705 B 🔴 +617 B
assets/audioService-DjEVud5u.js (removed) 1.66 kB 🟢 -1.66 kB 🟢 -817 B 🟢 -708 B
assets/audioService-Us593OZu.js (new) 1.66 kB 🔴 +1.66 kB 🔴 +820 B 🔴 +708 B
assets/releaseStore-CivxTaxp.js (new) 610 B 🔴 +610 B 🔴 +328 B 🔴 +282 B
assets/releaseStore-eNGWmwS-.js (removed) 610 B 🟢 -610 B 🟢 -324 B 🟢 -285 B
assets/serverConfigStore-D6d48Q0y.js 2.3 kB 2.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 7 added / 7 removed

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

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useErrorHandling-B-kZ5LJS.js (removed) 4.51 kB 🟢 -4.51 kB 🟢 -1.32 kB 🟢 -1.15 kB
assets/useErrorHandling-C6dkjriV.js (new) 4.51 kB 🔴 +4.51 kB 🔴 +1.32 kB 🔴 +1.15 kB
assets/subscriptionCheckoutUtil-B1VCLd--.js (removed) 1.63 kB 🟢 -1.63 kB 🟢 -740 B 🟢 -647 B
assets/subscriptionCheckoutUtil-BdEQx7lf.js (new) 1.63 kB 🔴 +1.63 kB 🔴 +739 B 🔴 +648 B
assets/audioUtils-B74K55TI.js (removed) 1.04 kB 🟢 -1.04 kB 🟢 -538 B 🟢 -475 B
assets/audioUtils-Ce5Yq-5f.js (new) 1.04 kB 🔴 +1.04 kB 🔴 +537 B 🔴 +470 B
assets/useCurrentUser-C30DzR-i.js (removed) 572 B 🟢 -572 B 🟢 -313 B 🟢 -277 B
assets/useCurrentUser-EC3SWWy8.js (new) 572 B 🔴 +572 B 🔴 +317 B 🔴 +275 B
assets/_plugin-vue_export-helper-DkXvIbNw.js 218 B 218 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/colorUtil-Cvq9baIq.js 6.89 kB 6.89 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/markdownRendererUtil-BgHJHHDI.js 1.49 kB 1.49 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeFilterUtil-DTOFbnOf.js 242 B 242 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 4 added / 4 removed

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

External libraries and shared vendor chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/vendor-chart-vHYiiHjX.js 398 kB 398 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-other-bLc542qk.js 4.34 MB 4.34 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-Dn50BkoY.js 1.71 MB 1.71 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-reka-ui-Dfa--nkF.js 97.9 kB 97.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-three-ROpDBAgW.js 1.84 MB 1.84 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-tiptap-S96Ju_Nb.js 185 kB 185 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vue-B8djomGx.js 131 kB 131 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-C9PB687x.js 397 kB 397 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Other — 5.91 MB (baseline 5.91 MB) • ⚪ 0 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/core-DJDYy24-.js (new) 165 kB 🔴 +165 kB 🔴 +40.5 kB 🔴 +34.2 kB
assets/core-opwYm210.js (removed) 165 kB 🟢 -165 kB 🟢 -40.5 kB 🟢 -34.2 kB
assets/Load3D-B-L5M4Jv.js (new) 46.7 kB 🔴 +46.7 kB 🔴 +8.16 kB 🔴 +7.12 kB
assets/Load3D-CR4miFxx.js (removed) 46.7 kB 🟢 -46.7 kB 🟢 -8.16 kB 🟢 -7.14 kB
assets/WidgetSelect-BCtBy9b6.js (removed) 42.4 kB 🟢 -42.4 kB 🟢 -9.97 kB 🟢 -8.84 kB
assets/WidgetSelect-BY7TforU.js (new) 42.4 kB 🔴 +42.4 kB 🔴 +9.97 kB 🔴 +8.81 kB
assets/SubscriptionRequiredDialogContent-B339gC46.js (removed) 25.2 kB 🟢 -25.2 kB 🟢 -6.26 kB 🟢 -5.48 kB
assets/SubscriptionRequiredDialogContent-B4dM8vr0.js (new) 25.2 kB 🔴 +25.2 kB 🔴 +6.26 kB 🔴 +5.49 kB
assets/WidgetRecordAudio-BVMlubPs.js (removed) 16.9 kB 🟢 -16.9 kB 🟢 -4.8 kB 🟢 -4.31 kB
assets/WidgetRecordAudio-Dpor0Xll.js (new) 16.9 kB 🔴 +16.9 kB 🔴 +4.8 kB 🔴 +4.29 kB
assets/WidgetImageCrop-5AK9dGnY.js (removed) 16.5 kB 🟢 -16.5 kB 🟢 -4.1 kB 🟢 -3.58 kB
assets/WidgetImageCrop-DWUcPV8w.js (new) 16.5 kB 🔴 +16.5 kB 🔴 +4.09 kB 🔴 +3.58 kB
assets/WidgetInputNumber-1CYdrKwv.js (removed) 14.7 kB 🟢 -14.7 kB 🟢 -4.04 kB 🟢 -3.59 kB
assets/WidgetInputNumber-C_ij9J9D.js (new) 14.7 kB 🔴 +14.7 kB 🔴 +4.04 kB 🔴 +3.58 kB
assets/PanelTemplate-CCrFZjy7.js (new) 14.5 kB 🔴 +14.5 kB 🔴 +5.1 kB 🔴 +4.47 kB
assets/PanelTemplate-CET3r_xp.js (removed) 14.5 kB 🟢 -14.5 kB 🟢 -5.09 kB 🟢 -4.47 kB
assets/AudioPreviewPlayer-DvYbXgEq.js (new) 11 kB 🔴 +11 kB 🔴 +3.12 kB 🔴 +2.8 kB
assets/AudioPreviewPlayer-Z2DBNzHO.js (removed) 11 kB 🟢 -11 kB 🟢 -3.12 kB 🟢 -2.81 kB
assets/ValueControlPopover-B9CHqiJW.js (removed) 4.87 kB 🟢 -4.87 kB 🟢 -1.71 kB 🟢 -1.53 kB
assets/ValueControlPopover-BcL4enSJ.js (new) 4.87 kB 🔴 +4.87 kB 🔴 +1.71 kB 🔴 +1.53 kB
assets/WidgetWithControl-BsyTK1ns.js (new) 3.62 kB 🔴 +3.62 kB 🔴 +1.59 kB 🔴 +1.44 kB
assets/WidgetWithControl-Bv4zzQbB.js (removed) 3.62 kB 🟢 -3.62 kB 🟢 -1.6 kB 🟢 -1.44 kB
assets/WidgetAudioUI-Bp5lqMj-.js (new) 2.94 kB 🔴 +2.94 kB 🔴 +1.26 kB 🔴 +1.13 kB
assets/WidgetAudioUI-C2-AxCT8.js (removed) 2.94 kB 🟢 -2.94 kB 🟢 -1.27 kB 🟢 -1.13 kB
assets/cloudSessionCookie-BqF-ZjRb.js (new) 2.82 kB 🔴 +2.82 kB 🔴 +986 B 🔴 +856 B
assets/cloudSessionCookie-DdMzmVbf.js (removed) 2.82 kB 🟢 -2.82 kB 🟢 -984 B 🟢 -862 B
assets/GlobalToast-CDGMPDiJ.js (new) 2.28 kB 🔴 +2.28 kB 🔴 +940 B 🔴 +787 B
assets/GlobalToast-Iwp7Hgnb.js (removed) 2.28 kB 🟢 -2.28 kB 🟢 -938 B 🟢 -783 B
assets/SubscribeToRun-_D0Gh0Bk.js (removed) 2.05 kB 🟢 -2.05 kB 🟢 -952 B 🟢 -835 B
assets/SubscribeToRun-DNWibZPp.js (new) 2.05 kB 🔴 +2.05 kB 🔴 +953 B 🔴 +843 B
assets/BaseViewTemplate-Bnc3OZpn.js (removed) 1.69 kB 🟢 -1.69 kB 🟢 -885 B 🟢 -786 B
assets/BaseViewTemplate-DcCrNRFB.js (new) 1.69 kB 🔴 +1.69 kB 🔴 +886 B 🔴 +804 B
assets/CloudRunButtonWrapper-BR2b5GlN.js (removed) 1.42 kB 🟢 -1.42 kB 🟢 -680 B 🟢 -593 B
assets/CloudRunButtonWrapper-DSDEoIQQ.js (new) 1.42 kB 🔴 +1.42 kB 🔴 +679 B 🔴 +588 B
assets/cloudBadges-D-JVVoyP.js (removed) 1.12 kB 🟢 -1.12 kB 🟢 -596 B 🟢 -513 B
assets/cloudBadges-yvjXzvsW.js (new) 1.12 kB 🔴 +1.12 kB 🔴 +595 B 🔴 +510 B
assets/cloudSubscription-Bdhg3Zx-.js (removed) 1.07 kB 🟢 -1.07 kB 🟢 -552 B 🟢 -473 B
assets/cloudSubscription-uD59Pv-v.js (new) 1.07 kB 🔴 +1.07 kB 🔴 +554 B 🔴 +469 B
assets/WidgetSelect-BvIT_Ip6.js (new) 779 B 🔴 +779 B 🔴 +406 B 🔴 +349 B
assets/WidgetSelect-CqN_fyIy.js (removed) 779 B 🟢 -779 B 🟢 -401 B 🟢 -348 B
assets/graphHasMissingNodes-Cl7Dz0Mp.js (removed) 696 B 🟢 -696 B 🟢 -340 B 🟢 -293 B
assets/graphHasMissingNodes-zfxSocXu.js (new) 696 B 🔴 +696 B 🔴 +341 B 🔴 +291 B
assets/AudioPreviewPlayer-BUQrlXBx.js (new) 684 B 🔴 +684 B 🔴 +354 B 🔴 +312 B
assets/AudioPreviewPlayer-BX78fL_n.js (removed) 684 B 🟢 -684 B 🟢 -352 B 🟢 -308 B
assets/Load3D-Bhc6xb6L.js (removed) 613 B 🟢 -613 B 🟢 -329 B 🟢 -289 B
assets/Load3D-BpRsQV3l.js (new) 613 B 🔴 +613 B 🔴 +333 B 🔴 +292 B
assets/WidgetLegacy-BKDmLeWW.js (new) 595 B 🔴 +595 B 🔴 +328 B 🔴 +283 B
assets/WidgetLegacy-HP9zfmn3.js (removed) 595 B 🟢 -595 B 🟢 -324 B 🟢 -279 B
assets/WidgetInputNumber-BD2XZxxs.js (removed) 353 B 🟢 -353 B 🟢 -216 B 🟢 -203 B
assets/WidgetInputNumber-BT9Hvttv.js (new) 353 B 🔴 +353 B 🔴 +216 B 🔴 +200 B
assets/auto-C5ZGWZyn.js 1.7 kB 1.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-7Rm2ilks.js 16 kB 16 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-B2T0Tiqb.js 18 kB 18 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BfbWPTP5.js 14.4 kB 14.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Bk5Hy71M.js 15.2 kB 15.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BKiU7Msm.js 15.4 kB 15.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-C1rCoJIk.js 15.4 kB 15.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-C7GUJ-mt.js 14.6 kB 14.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CdWPfhpt.js 15.4 kB 15.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CVH8YfJ3.js 16.8 kB 16.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DEW8TY9B.js 16.7 kB 16.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DSsDsJlz.js 16.3 kB 16.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/LazyImage-HSfoff1Z.js 12.1 kB 12.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-AUd7zUBg.js 115 kB 115 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BpCCP66k.js 114 kB 114 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CBw3AB4l.js 130 kB 130 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CI-qDj4D.js 113 kB 113 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CIHIfV-1.js 141 kB 141 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-D3JtHwOI.js 101 kB 101 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DlyqN1PJ.js 120 kB 120 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Dw03OKYD.js 117 kB 117 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-NAIvZE28.js 137 kB 137 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-OFh0xigr.js 101 kB 101 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-sEff9s2e.js 157 kB 157 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Media3DTop-lnE1c3Rz.js 1.76 kB 1.76 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaAudioTop-D8F3P6nT.js 1.37 kB 1.37 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaImageTop-C2q25E_R.js 1.64 kB 1.64 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaVideoTop-BekXmdBL.js 2.19 kB 2.19 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/mixpanel.module-CB67EPbl.js 92 B 92 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-a476Kb1a.js 339 kB 339 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BoysRuhG.js 352 kB 352 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-C1DGym0y.js 310 kB 310 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CFwsX_m-.js 381 kB 381 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CiPSzZ9E.js 339 kB 339 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-COhYgldT.js 343 kB 343 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-D1eJ3MWg.js 313 kB 313 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-D5AbIjlp.js 336 kB 336 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Dj0hpilf.js 415 kB 415 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Dm25Ay8M.js 381 kB 381 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-h4f9Qpyk.js 333 kB 333 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/OBJLoader2WorkerModule-DTMpvldF.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/preservedQueryNamespaces-8IvUKrEM.js 2.7 kB 2.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/previousFullPath-BVSCtPLU.js 603 B 603 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/rolldown-runtime-uYyVBMFy.js 1.34 kB 1.34 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Slider-hv4kjqwF.js 3.42 kB 3.42 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/src-DWRIFAAP.js 191 B 191 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widget-B5EDHllb.js 383 B 383 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-BMqKTQRe.js 168 B 168 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-U1eyr0w3.js 3.89 kB 3.89 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetChart-BEyqUpBQ.js 2.15 kB 2.15 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetColorPicker-B9aMCXIf.js 2.81 kB 2.81 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetGalleria--Zrc3dqq.js 3.55 kB 3.55 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCompare-lotcrt8e.js 2.99 kB 2.99 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputText-BLNJPSNx.js 1.76 kB 1.76 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetLayoutField-DB5JMJv7.js 1.84 kB 1.84 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetMarkdown-kMx3IKl7.js 2.52 kB 2.52 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetPropFilter-BOgWBAuV.js 1.04 kB 1.04 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetTextarea-DzYOr75r.js 2.7 kB 2.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetToggleSwitch-B9y-IUIh.js 2.26 kB 2.26 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 25 added / 25 removed

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/lib/litegraph/src/LGraph.ts (1)

1097-1103: Guard disables node hit-testing in Vue mode.

getNodeOnPos now always returns null when LiteGraph.vueNodesMode is active, which can break selection/dragging/linking/hover logic that still relies on this hit-test in Vue mode. The reported bug is cursor-only at the edge; this change suppresses all node hit detection globally. Please confirm Vue mode interactions still work and consider moving the suppression to LGraphCanvas.processMouseMove (cursor decision point) or gating it to the specific edge/canvas-overlap scenario instead of blanket disabling.

Run this to inspect call sites and the cursor logic:

#!/bin/bash
# Find getNodeOnPos call sites and inspect processMouseMove behavior
rg -n -C3 '\bgetNodeOnPos\b' src/lib/litegraph
rg -n -C3 '\bprocessMouseMove\b' src/lib/litegraph/src/LGraphCanvas.ts

@AustinMroz AustinMroz marked this pull request as draft January 17, 2026 04:22
@AustinMroz
Copy link
Collaborator Author

PR causes a regression with requiring a draggedlink to be directly over a vue node to connect instead of just being near to one.

@AustinMroz AustinMroz marked this pull request as ready for review January 17, 2026 18:23
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@src/lib/litegraph/src/LGraphCanvas.ts`:
- Around line 3190-3193: The current change in LGraphCanvas (where node is set
to null when LiteGraph.vueNodesMode is true) disables hit-testing and breaks
link-snapping; instead, call graph.getNodeOnPos(x, y, this.visible_nodes) in all
modes (so processMouseMove still receives a node) but when Vue mode is active
suppress the cursor/hover logic by masking out CanvasItem.Node (i.e., gate the
cursor crosshair/hover checks in processMouseMove by checking
LiteGraph.vueNodesMode before using the CanvasItem.Node flag); return undefined
rather than null to follow litegraph conventions and ensure no other code treats
the value as a deliberate null.

Comment on lines +3190 to 3193
const node = LiteGraph.vueNodesMode
? null
: graph.getNodeOnPos(x, y, this.visible_nodes)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Regression risk: disabling node hit-testing breaks link snapping in Vue mode.

Setting node to null in Vue mode bypasses all slot/hover/link highlight logic in processMouseMove, which matches the reported regression where dragged links only connect when directly over the node. Keep hit-testing, and instead suppress the cursor crosshair by gating the CanvasItem.Node flag. Also prefer undefined over null for litegraph internals.

✅ Suggested fix (preserve hit-testing, suppress cursor)
-    const node = LiteGraph.vueNodesMode
-      ? null
-      : graph.getNodeOnPos(x, y, this.visible_nodes)
+    const node = graph.getNodeOnPos(x, y, this.visible_nodes) ?? undefined
+    const allowNodeHover = !LiteGraph.vueNodesMode
@@
-      if (node) {
-        underPointer |= CanvasItem.Node
+      if (node) {
+        if (allowNodeHover) underPointer |= CanvasItem.Node

As per coding guidelines, prefer returning undefined over null in litegraph code.

🤖 Prompt for AI Agents
In `@src/lib/litegraph/src/LGraphCanvas.ts` around lines 3190 - 3193, The current
change in LGraphCanvas (where node is set to null when LiteGraph.vueNodesMode is
true) disables hit-testing and breaks link-snapping; instead, call
graph.getNodeOnPos(x, y, this.visible_nodes) in all modes (so processMouseMove
still receives a node) but when Vue mode is active suppress the cursor/hover
logic by masking out CanvasItem.Node (i.e., gate the cursor crosshair/hover
checks in processMouseMove by checking LiteGraph.vueNodesMode before using the
CanvasItem.Node flag); return undefined rather than null to follow litegraph
conventions and ensure no other code treats the value as a deliberate null.

@AustinMroz AustinMroz merged commit 6db4750 into main Jan 18, 2026
27 checks passed
@AustinMroz AustinMroz deleted the austin/fix-vue-crosshairs branch January 18, 2026 19:00
godwiniheuwa pushed a commit to godwiniheuwa/ComfyUI_frontend that referenced this pull request Jan 22, 2026
When the mouse cursor is at the very edge of a a node in vue mode, a
crosshair cursor will sometimes display. This happens because the mouse
is over the canvas, and `LGraphCanvas.processMouseMove` determines the
cursor is still above the node.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8120-Fix-crosshair-cursor-in-vue-mode-2eb6d73d36508116a3cfdd407c5e1e9c)
by [Unito](https://www.unito.io)

---------

Co-authored-by: Alexander Brown <drjkl@comfy.org>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XS This PR changes 0-9 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants