Skip to content

Comments

fix: space bar panning over Vue nodes in standard nav mode#8998

Draft
christian-byrne wants to merge 2 commits intomainfrom
fix/space-var
Draft

fix: space bar panning over Vue nodes in standard nav mode#8998
christian-byrne wants to merge 2 commits intomainfrom
fix/space-var

Conversation

@christian-byrne
Copy link
Contributor

@christian-byrne christian-byrne commented Feb 20, 2026

Summary

Fix space bar panning mode so it correctly pans the canvas (instead of dragging nodes or scrolling widgets) when the user holds space and drags/scrolls over Vue nodes in standard (scroll-to-pan) navigation mode.

Changes

  • What: Bridge LGraphCanvas.read_only to Vue reactivity via an onReadOnlyChanged callback invoked from the read_only setter. canvasStore stores a reactive isReadOnly ref synced by this callback. shouldHandleNodePointerEvents now reads from this ref instead of the non-reactive canvas?.read_only. Also adds pointermove forwarding to canvas during panning mode and wheel event forwarding in standard mode when space is held.

Review Focus

  • The onReadOnlyChanged callback pattern mirrors the existing onChanged callback used by DragAndScale. All 3 call sites for read_only go through the setter (verified by grep).
  • handlePointer in useCanvasInteractions still reads canvas.read_only imperatively for legacy mode — intentionally unchanged since legacy mode doesn't use the computed guard.

Fixes #7806

┆Issue is synchronized with this Notion page by Unito

@christian-byrne christian-byrne requested a review from a team as a code owner February 20, 2026 05:03
@christian-byrne christian-byrne self-assigned this Feb 20, 2026
@dosubot dosubot bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Feb 20, 2026
@github-actions
Copy link

github-actions bot commented Feb 20, 2026

Playwright: ✅ 528 passed, 0 failed · 3 flaky

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

@github-actions
Copy link

github-actions bot commented Feb 20, 2026

🎨 Storybook Build Status

Build completed successfully!

⏰ Completed at: 02/22/2026, 05:41:53 AM UTC

🔗 Links


🎉 Your Storybook is ready for review!

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 20, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The changes implement a callback-based synchronization mechanism for read-only state in the canvas. The LGraphCanvas now exposes an optional onReadOnlyChanged callback, which the canvas store subscribes to in order to keep its reactive isReadOnly flag in sync with runtime state changes. Components consuming the store use this flag instead of direct property access.

Changes

Cohort / File(s) Summary
Read-Only State Callback
src/lib/litegraph/src/LGraphCanvas.ts
Added optional onReadOnlyChanged callback property. When read_only setter is invoked, the callback is triggered with the new boolean value after state and cursor updates.
Canvas Store Synchronization
src/renderer/core/canvas/canvasStore.ts, src/renderer/core/canvas/canvasStore.test.ts
Added reactive isReadOnly flag to the canvas store. Synchronizes initial value from newCanvas.read_only and subscribes to onReadOnlyChanged callback for runtime updates. Exposed in store's public API. New test file validates initial synchronization and dynamic callback-driven updates.
Component Consumer Updates
src/renderer/core/canvas/useCanvasInteractions.ts, src/renderer/core/canvas/useCanvasInteractions.test.ts
Updated shouldHandleNodePointerEvents to use canvasStore.isReadOnly instead of direct canvas?.read_only access. Mock store in tests updated to include isReadOnly: false.

Sequence Diagram(s)

sequenceDiagram
    participant Canvas as LGraphCanvas
    participant CB as Callback
    participant Store as Canvas Store
    participant Comp as Components

    Note over Canvas,Comp: Initial Setup
    Canvas->>Store: canvas.value assigned
    Store->>Canvas: Subscribe to onReadOnlyChanged
    Canvas->>Store: isReadOnly.value = canvas.read_only
    Store->>Comp: isReadOnly exposed in store

    Note over Canvas,Comp: Runtime State Change
    Comp->>Canvas: set read_only = true
    Canvas->>CB: onReadOnlyChanged(true)
    CB->>Store: isReadOnly.value = true
    Store->>Comp: Reactive update triggers
    Comp->>Comp: Re-evaluate (shouldHandleNodePointerEvents)
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Poem

🐰 A callback springs to life so bright,
When read-only shifts left and right,
The store now dances, synced with care,
Through reactive flows the state we share,
Panning smooth, from left to right! 🎪

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 20.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The PR title 'fix: space bar panning over Vue nodes in standard nav mode' accurately describes the main objective and primary fix addressed in the changes.
Description check ✅ Passed The PR description is well-structured with a clear summary, specific changes listed, review focus points, and issue reference. It meets the template requirements with substantive content beyond the minimum.
Linked Issues check ✅ Passed The PR addresses the core requirements of issue #7806: bridges LGraphCanvas.read_only to Vue reactivity to enable reliable space-bar panning in standard navigation mode when hovering over Vue nodes.
Out of Scope Changes check ✅ Passed All changes are scoped to supporting space-bar panning in standard navigation mode: LGraphCanvas callback, canvasStore reactivity, and useCanvasInteractions integration. No unrelated modifications detected.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch fix/space-var

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

@github-actions
Copy link

github-actions bot commented Feb 20, 2026

📦 Bundle: 4.37 MB gzip 🟢 -146 B

Details

Summary

  • Raw size: 20.5 MB baseline 20.5 MB — 🟢 -479 B
  • Gzip: 4.37 MB baseline 4.37 MB — 🟢 -146 B
  • Brotli: 3.37 MB baseline 3.37 MB — 🟢 -197 B
  • Bundles: 223 current • 223 baseline • 104 added / 104 removed

Category Glance
Utilities & Hooks 🟢 -279 B (58 kB) · Data & Services 🟢 -123 B (2.51 MB) · Graph Workspace 🟢 -77 B (942 kB) · Vendor & Third-Party ⚪ 0 B (8.83 MB) · Other ⚪ 0 B (7.61 MB) · Panels & Settings ⚪ 0 B (436 kB) · + 5 more

App Entry Points — 21.5 kB (baseline 21.5 kB) • ⚪ 0 B

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-D2fj7-Ld.js (removed) 21.5 kB 🟢 -21.5 kB 🟢 -7.03 kB 🟢 -6.1 kB
assets/index-DGs5FsSH.js (new) 21.5 kB 🔴 +21.5 kB 🔴 +7.02 kB 🔴 +6.11 kB

Status: 1 added / 1 removed

Graph Workspace — 942 kB (baseline 942 kB) • 🟢 -77 B

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-ObfVunH2.js (removed) 942 kB 🟢 -942 kB 🟢 -202 kB 🟢 -154 kB
assets/GraphView-Cf1gWvpV.js (new) 942 kB 🔴 +942 kB 🔴 +202 kB 🔴 +154 kB

Status: 1 added / 1 removed

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

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CloudSurveyView-JQFocYw1.js (new) 15.5 kB 🔴 +15.5 kB 🔴 +3.32 kB 🔴 +2.83 kB
assets/CloudSurveyView-lEPS6SX2.js (removed) 15.5 kB 🟢 -15.5 kB 🟢 -3.32 kB 🟢 -2.82 kB
assets/CloudLoginView-2nVnMCJ0.js (new) 10 kB 🔴 +10 kB 🔴 +2.93 kB 🔴 +2.56 kB
assets/CloudLoginView-D13_a_xh.js (removed) 10 kB 🟢 -10 kB 🟢 -2.93 kB 🟢 -2.58 kB
assets/UserCheckView-BBdtESta.js (new) 8.41 kB 🔴 +8.41 kB 🔴 +2.22 kB 🔴 +1.95 kB
assets/UserCheckView-uLlkIavh.js (removed) 8.41 kB 🟢 -8.41 kB 🟢 -2.23 kB 🟢 -1.94 kB
assets/CloudSignupView-D3tFW5Se.js (removed) 7.41 kB 🟢 -7.41 kB 🟢 -2.32 kB 🟢 -2.04 kB
assets/CloudSignupView-DvKA_2H7.js (new) 7.41 kB 🔴 +7.41 kB 🔴 +2.32 kB 🔴 +2.03 kB
assets/CloudLayoutView-CZYpuv_8.js (new) 6.43 kB 🔴 +6.43 kB 🔴 +2.1 kB 🔴 +1.84 kB
assets/CloudLayoutView-D1jpFgVu.js (removed) 6.43 kB 🟢 -6.43 kB 🟢 -2.1 kB 🟢 -1.83 kB
assets/CloudForgotPasswordView-d-T3jTQL.js (removed) 5.56 kB 🟢 -5.56 kB 🟢 -1.93 kB 🟢 -1.72 kB
assets/CloudForgotPasswordView-DvUJRok5.js (new) 5.56 kB 🔴 +5.56 kB 🔴 +1.94 kB 🔴 +1.71 kB
assets/CloudAuthTimeoutView-BSN3jff1.js (removed) 4.91 kB 🟢 -4.91 kB 🟢 -1.77 kB 🟢 -1.56 kB
assets/CloudAuthTimeoutView-guAkHEXH.js (new) 4.91 kB 🔴 +4.91 kB 🔴 +1.77 kB 🔴 +1.55 kB
assets/CloudSubscriptionRedirectView-DNQdLsgx.js (new) 4.71 kB 🔴 +4.71 kB 🔴 +1.78 kB 🔴 +1.58 kB
assets/CloudSubscriptionRedirectView-VFAjFhek.js (removed) 4.71 kB 🟢 -4.71 kB 🟢 -1.78 kB 🟢 -1.57 kB
assets/UserSelectView-34y_VSab.js (removed) 4.5 kB 🟢 -4.5 kB 🟢 -1.64 kB 🟢 -1.46 kB
assets/UserSelectView-BLk3Hosa.js (new) 4.5 kB 🔴 +4.5 kB 🔴 +1.64 kB 🔴 +1.47 kB
assets/CloudSorryContactSupportView-Bi8IsTTh.js 1.02 kB 1.02 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/layout-vBPh8yaQ.js 296 B 296 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 9 added / 9 removed

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

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/SecretsPanel-BTjZKGFn.js (new) 21.5 kB 🔴 +21.5 kB 🔴 +5.3 kB 🔴 +4.67 kB
assets/SecretsPanel-DAs6oZS9.js (removed) 21.5 kB 🟢 -21.5 kB 🟢 -5.3 kB 🟢 -4.65 kB
assets/LegacyCreditsPanel-BfoVE7u0.js (removed) 20.6 kB 🟢 -20.6 kB 🟢 -5.56 kB 🟢 -4.88 kB
assets/LegacyCreditsPanel-BWSbN-Ow.js (new) 20.6 kB 🔴 +20.6 kB 🔴 +5.57 kB 🔴 +4.89 kB
assets/SubscriptionPanel-_Gexdr-S.js (new) 18.6 kB 🔴 +18.6 kB 🔴 +4.73 kB 🔴 +4.17 kB
assets/SubscriptionPanel-Bd_QaTjq.js (removed) 18.6 kB 🟢 -18.6 kB 🟢 -4.73 kB 🟢 -4.16 kB
assets/KeybindingPanel-DsAmo9cq.js (new) 12.3 kB 🔴 +12.3 kB 🔴 +3.57 kB 🔴 +3.17 kB
assets/KeybindingPanel-htFI7OP8.js (removed) 12.3 kB 🟢 -12.3 kB 🟢 -3.57 kB 🟢 -3.17 kB
assets/AboutPanel-BiYlVayn.js (removed) 9.79 kB 🟢 -9.79 kB 🟢 -2.73 kB 🟢 -2.46 kB
assets/AboutPanel-DpXAkPvG.js (new) 9.79 kB 🔴 +9.79 kB 🔴 +2.73 kB 🔴 +2.46 kB
assets/ExtensionPanel-CFRP1WAx.js (new) 9.38 kB 🔴 +9.38 kB 🔴 +2.65 kB 🔴 +2.36 kB
assets/ExtensionPanel-DQ6WNmvU.js (removed) 9.38 kB 🟢 -9.38 kB 🟢 -2.65 kB 🟢 -2.36 kB
assets/ServerConfigPanel-B0eEnK4b.js (new) 6.44 kB 🔴 +6.44 kB 🔴 +2.12 kB 🔴 +1.91 kB
assets/ServerConfigPanel-Cx0MdqCM.js (removed) 6.44 kB 🟢 -6.44 kB 🟢 -2.12 kB 🟢 -1.93 kB
assets/UserPanel-BRmDg9F9.js (new) 6.16 kB 🔴 +6.16 kB 🔴 +1.99 kB 🔴 +1.75 kB
assets/UserPanel-sBrM1N37.js (removed) 6.16 kB 🟢 -6.16 kB 🟢 -1.99 kB 🟢 -1.75 kB
assets/cloudRemoteConfig-DBZAHAo2.js (removed) 1.44 kB 🟢 -1.44 kB 🟢 -706 B 🟢 -609 B
assets/cloudRemoteConfig-DN6COezP.js (new) 1.44 kB 🔴 +1.44 kB 🔴 +707 B 🔴 +609 B
assets/refreshRemoteConfig-D8X1js8Q.js (new) 1.14 kB 🔴 +1.14 kB 🔴 +520 B 🔴 +458 B
assets/refreshRemoteConfig-DW4pBrB9.js (removed) 1.14 kB 🟢 -1.14 kB 🟢 -518 B 🟢 -455 B
assets/config-QxkqTZy6.js 996 B 996 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-3cK4vYSX.js 27.9 kB 27.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-AqJa7Oe1.js 28.7 kB 28.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BOcWl0Qp.js 34.2 kB 34.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BodhSOuG.js 30.5 kB 30.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CCD8qxmc.js 27.8 kB 27.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CVDNuOXV.js 23.9 kB 23.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DLodCRRz.js 24.5 kB 24.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DLqeCT09.js 38.5 kB 38.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DP-OgTXN.js 29.9 kB 29.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DRIXyZ_Z.js 28.8 kB 28.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-IRk9rDbu.js 32.4 kB 32.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 10 added / 10 removed

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

Authentication, profile, and account management bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/auth-BIK3SUAh.js (new) 3.4 kB 🔴 +3.4 kB 🔴 +1.18 kB 🔴 +990 B
assets/auth-DYdW3x48.js (removed) 3.4 kB 🟢 -3.4 kB 🟢 -1.18 kB 🟢 -992 B
assets/SignUpForm-BLtGam5v.js (removed) 3.01 kB 🟢 -3.01 kB 🟢 -1.23 kB 🟢 -1.09 kB
assets/SignUpForm-CzfUpiZx.js (new) 3.01 kB 🔴 +3.01 kB 🔴 +1.23 kB 🔴 +1.1 kB
assets/UpdatePasswordContent-CO4UkEid.js (new) 2.37 kB 🔴 +2.37 kB 🔴 +1.07 kB 🔴 +945 B
assets/UpdatePasswordContent-D8OytA6G.js (removed) 2.37 kB 🟢 -2.37 kB 🟢 -1.07 kB 🟢 -947 B
assets/firebaseAuthStore-DVmQ5747.js (removed) 790 B 🟢 -790 B 🟢 -387 B 🟢 -347 B
assets/firebaseAuthStore-N1Qfz7ck.js (new) 790 B 🔴 +790 B 🔴 +387 B 🔴 +348 B
assets/auth-CvUqDF8e.js (removed) 357 B 🟢 -357 B 🟢 -225 B 🟢 -193 B
assets/auth-E9nxFMpf.js (new) 357 B 🔴 +357 B 🔴 +224 B 🔴 +191 B
assets/PasswordFields-koUYSkkX.js 4.51 kB 4.51 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WorkspaceProfilePic-BRX_wv6S.js 1.57 kB 1.57 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 5 added / 5 removed

Editors & Dialogs — 738 B (baseline 738 B) • ⚪ 0 B

Modals, dialogs, drawers, and in-app editors

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useSubscriptionDialog-CZSP6N_L.js (removed) 738 B 🟢 -738 B 🟢 -379 B 🟢 -330 B
assets/useSubscriptionDialog-WokutY1G.js (new) 738 B 🔴 +738 B 🔴 +378 B 🔴 +334 B

Status: 1 added / 1 removed

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

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useTerminalTabs-CcqFZhhJ.js (removed) 9.85 kB 🟢 -9.85 kB 🟢 -3.4 kB 🟢 -3 kB
assets/useTerminalTabs-fdg0po_C.js (new) 9.85 kB 🔴 +9.85 kB 🔴 +3.4 kB 🔴 +2.99 kB
assets/ComfyQueueButton-CxW7Rhsd.js (new) 8.02 kB 🔴 +8.02 kB 🔴 +2.49 kB 🔴 +2.23 kB
assets/ComfyQueueButton-k43bDCA0.js (removed) 8.02 kB 🟢 -8.02 kB 🟢 -2.49 kB 🟢 -2.22 kB
assets/SubscribeButton-B55PgoCY.js (removed) 2.35 kB 🟢 -2.35 kB 🟢 -1.02 kB 🟢 -892 B
assets/SubscribeButton-DEHViNkS.js (new) 2.35 kB 🔴 +2.35 kB 🔴 +1.02 kB 🔴 +888 B
assets/cloudFeedbackTopbarButton-BAWlvSVe.js (removed) 1.6 kB 🟢 -1.6 kB 🟢 -856 B 🟢 -767 B
assets/cloudFeedbackTopbarButton-BUHRx-a5.js (new) 1.6 kB 🔴 +1.6 kB 🔴 +856 B 🔴 +768 B
assets/ComfyQueueButton-DXl7AkcN.js (removed) 795 B 🟢 -795 B 🟢 -394 B 🟢 -353 B
assets/ComfyQueueButton-DZMc5K9V.js (new) 795 B 🔴 +795 B 🔴 +392 B 🔴 +350 B
assets/Button-DcjgQBBu.js 2.98 kB 2.98 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudBadge-lmHOydPu.js 1.24 kB 1.24 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ScrubableNumberInput-D7H0v_Kw.js 5.94 kB 5.94 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/TopbarBadge-0OM2g_KN.js 7.45 kB 7.45 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserAvatar-DkTACzmk.js 1.17 kB 1.17 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetButton-DRxh3QrM.js 1.84 kB 1.84 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 5 added / 5 removed

Data & Services — 2.51 MB (baseline 2.51 MB) • 🟢 -123 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/dialogService-wInoeRww.js (removed) 1.73 MB 🟢 -1.73 MB 🟢 -386 kB 🟢 -292 kB
assets/dialogService-DlFjtvaa.js (new) 1.73 MB 🔴 +1.73 MB 🔴 +386 kB 🔴 +292 kB
assets/api-CrvfADel.js (new) 652 kB 🔴 +652 kB 🔴 +147 kB 🔴 +118 kB
assets/api-e7D_HF0A.js (removed) 652 kB 🟢 -652 kB 🟢 -147 kB 🟢 -117 kB
assets/load3dService-DdC0ZWf2.js (new) 91 kB 🔴 +91 kB 🔴 +19.1 kB 🔴 +16.4 kB
assets/load3dService-DvZsgV1R.js (removed) 91 kB 🟢 -91 kB 🟢 -19.1 kB 🟢 -16.4 kB
assets/systemStatsStore-BN5nhRAN.js (removed) 12.7 kB 🟢 -12.7 kB 🟢 -4.42 kB 🟢 -3.89 kB
assets/systemStatsStore-D2Aj2jV3.js (new) 12.7 kB 🔴 +12.7 kB 🔴 +4.42 kB 🔴 +3.9 kB
assets/releaseStore-BkO34GsL.js (removed) 7.96 kB 🟢 -7.96 kB 🟢 -2.22 kB 🟢 -1.95 kB
assets/releaseStore-Crzbfdbi.js (new) 7.96 kB 🔴 +7.96 kB 🔴 +2.21 kB 🔴 +1.95 kB
assets/keybindingService-CMNv4l35.js (removed) 6.52 kB 🟢 -6.52 kB 🟢 -1.71 kB 🟢 -1.47 kB
assets/keybindingService-DDsPe5RS.js (new) 6.52 kB 🔴 +6.52 kB 🔴 +1.71 kB 🔴 +1.47 kB
assets/bootstrapStore-aIvR2Hw4.js (removed) 2.08 kB 🟢 -2.08 kB 🟢 -868 B 🟢 -791 B
assets/bootstrapStore-DlDLnV6J.js (new) 2.08 kB 🔴 +2.08 kB 🔴 +871 B 🔴 +789 B
assets/userStore-BsvM6nV6.js (new) 1.85 kB 🔴 +1.85 kB 🔴 +719 B 🔴 +641 B
assets/userStore-CMW3_kV4.js (removed) 1.85 kB 🟢 -1.85 kB 🟢 -722 B 🟢 -636 B
assets/audioService-811FP1Qj.js (removed) 1.73 kB 🟢 -1.73 kB 🟢 -851 B 🟢 -729 B
assets/audioService-CQqZSvDl.js (new) 1.73 kB 🔴 +1.73 kB 🔴 +846 B 🔴 +726 B
assets/releaseStore-BKS1_jE5.js (new) 762 B 🔴 +762 B 🔴 +383 B 🔴 +345 B
assets/releaseStore-CkwuyrKV.js (removed) 762 B 🟢 -762 B 🟢 -383 B 🟢 -344 B
assets/settingStore-Crt9VMAl.js (new) 746 B 🔴 +746 B 🔴 +387 B 🔴 +345 B
assets/settingStore-D5d5onMD.js (removed) 746 B 🟢 -746 B 🟢 -388 B 🟢 -345 B
assets/workflowDraftStore-DEeLtHTM.js (new) 738 B 🔴 +738 B 🔴 +378 B 🔴 +338 B
assets/workflowDraftStore-pa3XOUSt.js (removed) 738 B 🟢 -738 B 🟢 -378 B 🟢 -335 B
assets/dialogService-COFtxAVS.js (new) 727 B 🔴 +727 B 🔴 +370 B 🔴 +330 B
assets/dialogService-K09LhXLQ.js (removed) 727 B 🟢 -727 B 🟢 -368 B 🟢 -329 B
assets/serverConfigStore-B17wcfZ1.js 2.32 kB 2.32 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 13 added / 13 removed

Utilities & Hooks — 58 kB (baseline 58.3 kB) • 🟢 -279 B

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useLoad3d-BDqTa549.js (new) 14.6 kB 🔴 +14.6 kB 🔴 +3.63 kB 🔴 +3.21 kB
assets/useLoad3d-gcipGpGz.js (removed) 14.6 kB 🟢 -14.6 kB 🟢 -3.63 kB 🟢 -3.21 kB
assets/useLoad3dViewer-6tZVy8Lq.js (removed) 14.1 kB 🟢 -14.1 kB 🟢 -3.15 kB 🟢 -2.8 kB
assets/useLoad3dViewer-DB0ecIdJ.js (new) 14.1 kB 🔴 +14.1 kB 🔴 +3.15 kB 🔴 +2.8 kB
assets/useFeatureFlags-CatuxnVl.js (removed) 4.14 kB 🟢 -4.14 kB 🟢 -1.23 kB 🟢 -1.05 kB
assets/useFeatureFlags-CBaMZZpE.js (new) 3.86 kB 🔴 +3.86 kB 🔴 +1.18 kB 🔴 +1.01 kB
assets/useWorkspaceUI-C1I81TPO.js (removed) 3 kB 🟢 -3 kB 🟢 -822 B 🟢 -704 B
assets/useWorkspaceUI-n3Jhiatb.js (new) 3 kB 🔴 +3 kB 🔴 +821 B 🔴 +698 B
assets/useSubscriptionCredits-D2_rYaQv.js (removed) 2.75 kB 🟢 -2.75 kB 🟢 -1.04 kB 🟢 -905 B
assets/useSubscriptionCredits-LPVvRRUZ.js (new) 2.75 kB 🔴 +2.75 kB 🔴 +1.04 kB 🔴 +907 B
assets/subscriptionCheckoutUtil-B6v8cCL-.js (new) 2.53 kB 🔴 +2.53 kB 🔴 +1.06 kB 🔴 +956 B
assets/subscriptionCheckoutUtil-BGIDXchf.js (removed) 2.53 kB 🟢 -2.53 kB 🟢 -1.06 kB 🟢 -956 B
assets/useErrorHandling-CJDUqwXd.js (removed) 1.5 kB 🟢 -1.5 kB 🟢 -630 B 🟢 -565 B
assets/useErrorHandling-CROGv8pf.js (new) 1.5 kB 🔴 +1.5 kB 🔴 +627 B 🔴 +532 B
assets/useWorkspaceSwitch-CNTh3-Dc.js (new) 1.25 kB 🔴 +1.25 kB 🔴 +541 B 🔴 +483 B
assets/useWorkspaceSwitch-d3FKzwZs.js (removed) 1.25 kB 🟢 -1.25 kB 🟢 -542 B 🟢 -483 B
assets/useLoad3d-akqjgnJw.js (new) 861 B 🔴 +861 B 🔴 +424 B 🔴 +382 B
assets/useLoad3d-Bi8he90E.js (removed) 861 B 🟢 -861 B 🟢 -426 B 🟢 -382 B
assets/audioUtils-CY0DFyNL.js (new) 858 B 🔴 +858 B 🔴 +499 B 🔴 +408 B
assets/audioUtils-DlCMNwbM.js (removed) 858 B 🟢 -858 B 🟢 -497 B 🟢 -420 B
assets/useLoad3dViewer-DAVwOY7L.js (new) 840 B 🔴 +840 B 🔴 +408 B 🔴 +374 B
assets/useLoad3dViewer-uMDxSNMm.js (removed) 840 B 🟢 -840 B 🟢 -410 B 🟢 -372 B
assets/useCurrentUser-DquunuME.js (new) 724 B 🔴 +724 B 🔴 +373 B 🔴 +327 B
assets/useCurrentUser-DR2wRlVq.js (removed) 724 B 🟢 -724 B 🟢 -374 B 🟢 -327 B
assets/_plugin-vue_export-helper-CY4XIWDa.js 315 B 315 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/colorUtil-m-0Os8lq.js 7 kB 7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/envUtil-BQSmRN2Q.js 466 B 466 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/markdownRendererUtil-DOdPeMQc.js 1.56 kB 1.56 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SkeletonUtils-BputJAFn.js 133 B 133 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useExternalLink-D8coCOeM.js 1.66 kB 1.66 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 12 added / 12 removed

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

External libraries and shared vendor chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/vendor-axios-Cp6hch1I.js 70.7 kB 70.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-chart-BxkFiWzp.js 399 kB 399 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-firebase-BvMr43CG.js 836 kB 836 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-i18n-DccD0mxo.js 133 kB 133 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-markdown-D5S6AC80.js 103 kB 103 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-other-BzNZEmD_.js 1.52 MB 1.52 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-Ca9moc73.js 1.73 MB 1.73 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-reka-ui-CWMIYdD2.js 379 kB 379 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-sentry-SQwstEKc.js 182 kB 182 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-three-LBLOE6BD.js 1.8 MB 1.8 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-tiptap-CHaNo_rA.js 634 kB 634 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vue-core-CmHHRvL9.js 311 kB 311 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vueuse-B4hGe0IQ.js 113 kB 113 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-vkxZGffR.js 374 kB 374 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-yjs-CP_4YO8u.js 143 kB 143 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-zod-DcCUUPIi.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Other — 7.61 MB (baseline 7.61 MB) • ⚪ 0 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/core-DlOIT2MQ.js (removed) 72.8 kB 🟢 -72.8 kB 🟢 -18.8 kB 🟢 -16.1 kB
assets/core-VObRZVMU.js (new) 72.8 kB 🔴 +72.8 kB 🔴 +18.8 kB 🔴 +16.1 kB
assets/groupNode-B3CQ38bC.js (new) 71.8 kB 🔴 +71.8 kB 🔴 +17.6 kB 🔴 +15.5 kB
assets/groupNode-DgKtGULC.js (removed) 71.8 kB 🟢 -71.8 kB 🟢 -17.6 kB 🟢 -15.5 kB
assets/WidgetSelect-BuryI-ua.js (removed) 57.6 kB 🟢 -57.6 kB 🟢 -12.2 kB 🟢 -10.5 kB
assets/WidgetSelect-DMwcxSgE.js (new) 57.6 kB 🔴 +57.6 kB 🔴 +12.2 kB 🔴 +10.5 kB
assets/SubscriptionRequiredDialogContentWorkspace-BvCBMg3C.js (new) 45.8 kB 🔴 +45.8 kB 🔴 +8.56 kB 🔴 +7.4 kB
assets/SubscriptionRequiredDialogContentWorkspace-BxSzGWwW.js (removed) 45.8 kB 🟢 -45.8 kB 🟢 -8.56 kB 🟢 -7.43 kB
assets/Load3DControls-C6HX-qBY.js (new) 30.9 kB 🔴 +30.9 kB 🔴 +5.34 kB 🔴 +4.64 kB
assets/Load3DControls-wlRIuCyY.js (removed) 30.9 kB 🟢 -30.9 kB 🟢 -5.34 kB 🟢 -4.65 kB
assets/WorkspacePanelContent-1I_5rCFG.js (new) 29.3 kB 🔴 +29.3 kB 🔴 +6.14 kB 🔴 +5.38 kB
assets/WorkspacePanelContent-U_mKQNy5.js (removed) 29.3 kB 🟢 -29.3 kB 🟢 -6.14 kB 🟢 -5.39 kB
assets/SubscriptionRequiredDialogContent-CAtqJill.js (new) 26.2 kB 🔴 +26.2 kB 🔴 +6.57 kB 🔴 +5.78 kB
assets/SubscriptionRequiredDialogContent-DqLxdUdU.js (removed) 26.2 kB 🟢 -26.2 kB 🟢 -6.57 kB 🟢 -5.79 kB
assets/Load3dViewerContent-4Tiuy91l.js (removed) 23 kB 🟢 -23 kB 🟢 -5.18 kB 🟢 -4.49 kB
assets/Load3dViewerContent-CdLa6_Gl.js (new) 23 kB 🔴 +23 kB 🔴 +5.18 kB 🔴 +4.49 kB
assets/WidgetImageCrop-BGhtFpAk.js (removed) 22.1 kB 🟢 -22.1 kB 🟢 -5.5 kB 🟢 -4.84 kB
assets/WidgetImageCrop-CyHdrQpf.js (new) 22.1 kB 🔴 +22.1 kB 🔴 +5.5 kB 🔴 +4.84 kB
assets/SubscriptionPanelContentWorkspace-C8NjDNp4.js (new) 21.6 kB 🔴 +21.6 kB 🔴 +5.02 kB 🔴 +4.43 kB
assets/SubscriptionPanelContentWorkspace-Q4MvKdM1.js (removed) 21.6 kB 🟢 -21.6 kB 🟢 -5.02 kB 🟢 -4.43 kB
assets/CurrentUserPopoverWorkspace-BEKU2JmQ.js (new) 19.8 kB 🔴 +19.8 kB 🔴 +4.86 kB 🔴 +4.33 kB
assets/CurrentUserPopoverWorkspace-Dp-PWHPY.js (removed) 19.8 kB 🟢 -19.8 kB 🟢 -4.86 kB 🟢 -4.34 kB
assets/SignInContent-BlFc1XwN.js (removed) 18.9 kB 🟢 -18.9 kB 🟢 -4.78 kB 🟢 -4.19 kB
assets/SignInContent-NZXcRoi7.js (new) 18.9 kB 🔴 +18.9 kB 🔴 +4.78 kB 🔴 +4.2 kB
assets/WidgetInputNumber-DN-HVrS0.js (removed) 18.6 kB 🟢 -18.6 kB 🟢 -4.71 kB 🟢 -4.18 kB
assets/WidgetInputNumber-XnA1b_xL.js (new) 18.6 kB 🔴 +18.6 kB 🔴 +4.71 kB 🔴 +4.18 kB
assets/WidgetRecordAudio-CiNIK0qz.js (removed) 17.3 kB 🟢 -17.3 kB 🟢 -4.94 kB 🟢 -4.42 kB
assets/WidgetRecordAudio-rgaqUM_O.js (new) 17.3 kB 🔴 +17.3 kB 🔴 +4.94 kB 🔴 +4.42 kB
assets/Load3D-CJFTBS-E.js (removed) 16.2 kB 🟢 -16.2 kB 🟢 -4.03 kB 🟢 -3.52 kB
assets/Load3D-ClfSyFjQ.js (new) 16.2 kB 🔴 +16.2 kB 🔴 +4.03 kB 🔴 +3.53 kB
assets/load3d-CC8oWO5P.js (new) 14.7 kB 🔴 +14.7 kB 🔴 +4.19 kB 🔴 +3.63 kB
assets/load3d-vUz4_MmC.js (removed) 14.7 kB 🟢 -14.7 kB 🟢 -4.19 kB 🟢 -3.63 kB
assets/AudioPreviewPlayer-69Srazr3.js (removed) 10.9 kB 🟢 -10.9 kB 🟢 -3.19 kB 🟢 -2.87 kB
assets/AudioPreviewPlayer-DOQBYsQw.js (new) 10.9 kB 🔴 +10.9 kB 🔴 +3.19 kB 🔴 +2.88 kB
assets/changeTracker-B9anPN7s.js (removed) 9.38 kB 🟢 -9.38 kB 🟢 -2.89 kB 🟢 -2.55 kB
assets/changeTracker-mpxtKQbr.js (new) 9.38 kB 🔴 +9.38 kB 🔴 +2.89 kB 🔴 +2.54 kB
assets/nodeTemplates-DvhOktud.js (new) 9.3 kB 🔴 +9.3 kB 🔴 +3.26 kB 🔴 +2.86 kB
assets/nodeTemplates-WLNngtsZ.js (removed) 9.3 kB 🟢 -9.3 kB 🟢 -3.26 kB 🟢 -2.86 kB
assets/InviteMemberDialogContent-Cf23n965.js (removed) 7.38 kB 🟢 -7.38 kB 🟢 -2.29 kB 🟢 -2 kB
assets/InviteMemberDialogContent-GjUuwyuP.js (new) 7.38 kB 🔴 +7.38 kB 🔴 +2.29 kB 🔴 +2.01 kB
assets/Load3DConfiguration-1_HmWKRx.js (removed) 6.27 kB 🟢 -6.27 kB 🟢 -1.91 kB 🟢 -1.68 kB
assets/Load3DConfiguration-CR5b7N9-.js (new) 6.27 kB 🔴 +6.27 kB 🔴 +1.91 kB 🔴 +1.67 kB
assets/CreateWorkspaceDialogContent-3C9nOOWi.js (removed) 5.53 kB 🟢 -5.53 kB 🟢 -1.99 kB 🟢 -1.74 kB
assets/CreateWorkspaceDialogContent-D4ZcoWoK.js (new) 5.53 kB 🔴 +5.53 kB 🔴 +1.99 kB 🔴 +1.74 kB
assets/EditWorkspaceDialogContent-Dou6A46O.js (new) 5.33 kB 🔴 +5.33 kB 🔴 +1.95 kB 🔴 +1.7 kB
assets/EditWorkspaceDialogContent-Du2XNWKd.js (removed) 5.33 kB 🟢 -5.33 kB 🟢 -1.94 kB 🟢 -1.7 kB
assets/ValueControlPopover-Cf_-GduL.js (removed) 4.92 kB 🟢 -4.92 kB 🟢 -1.76 kB 🟢 -1.59 kB
assets/ValueControlPopover-DfAXtBU4.js (new) 4.92 kB 🔴 +4.92 kB 🔴 +1.76 kB 🔴 +1.58 kB
assets/Preview3d-Bg-IhjyX.js (removed) 4.82 kB 🟢 -4.82 kB 🟢 -1.56 kB 🟢 -1.37 kB
assets/Preview3d-C6J5D2nQ.js (new) 4.82 kB 🔴 +4.82 kB 🔴 +1.57 kB 🔴 +1.36 kB
assets/CancelSubscriptionDialogContent-CGU8MCi0.js (removed) 4.79 kB 🟢 -4.79 kB 🟢 -1.78 kB 🟢 -1.57 kB
assets/CancelSubscriptionDialogContent-ChTuexhw.js (new) 4.79 kB 🔴 +4.79 kB 🔴 +1.78 kB 🔴 +1.57 kB
assets/DeleteWorkspaceDialogContent-BAASXect.js (new) 4.23 kB 🔴 +4.23 kB 🔴 +1.63 kB 🔴 +1.42 kB
assets/DeleteWorkspaceDialogContent-DWPgoWzv.js (removed) 4.23 kB 🟢 -4.23 kB 🟢 -1.63 kB 🟢 -1.42 kB
assets/WidgetWithControl-DNOpAWP3.js (new) 4.11 kB 🔴 +4.11 kB 🔴 +1.78 kB 🔴 +1.61 kB
assets/WidgetWithControl-h---G96u.js (removed) 4.11 kB 🟢 -4.11 kB 🟢 -1.78 kB 🟢 -1.6 kB
assets/LeaveWorkspaceDialogContent-BZcKZuCA.js (new) 4.06 kB 🔴 +4.06 kB 🔴 +1.58 kB 🔴 +1.37 kB
assets/LeaveWorkspaceDialogContent-EUbnOfo0.js (removed) 4.06 kB 🟢 -4.06 kB 🟢 -1.57 kB 🟢 -1.37 kB
assets/RemoveMemberDialogContent-CaH1WLwX.js (new) 4.04 kB 🔴 +4.04 kB 🔴 +1.53 kB 🔴 +1.34 kB
assets/RemoveMemberDialogContent-R-xbgnSD.js (removed) 4.04 kB 🟢 -4.04 kB 🟢 -1.52 kB 🟢 -1.33 kB
assets/RevokeInviteDialogContent-BFARow4X.js (new) 3.96 kB 🔴 +3.96 kB 🔴 +1.54 kB 🔴 +1.36 kB
assets/RevokeInviteDialogContent-BXHXAI0p.js (removed) 3.96 kB 🟢 -3.96 kB 🟢 -1.54 kB 🟢 -1.36 kB
assets/InviteMemberUpsellDialogContent-BnH0swFC.js (new) 3.83 kB 🔴 +3.83 kB 🔴 +1.4 kB 🔴 +1.23 kB
assets/InviteMemberUpsellDialogContent-Dww-bCeD.js (removed) 3.83 kB 🟢 -3.83 kB 🟢 -1.4 kB 🟢 -1.23 kB
assets/saveMesh-CQtGcoIV.js (new) 3.38 kB 🔴 +3.38 kB 🔴 +1.46 kB 🔴 +1.29 kB
assets/saveMesh-DguHmpE9.js (removed) 3.38 kB 🟢 -3.38 kB 🟢 -1.46 kB 🟢 -1.3 kB
assets/cloudSessionCookie-DlgyJqmE.js (removed) 3.1 kB 🟢 -3.1 kB 🟢 -1.09 kB 🟢 -960 B
assets/cloudSessionCookie-DrQ4PK7W.js (new) 3.1 kB 🔴 +3.1 kB 🔴 +1.09 kB 🔴 +967 B
assets/GlobalToast-COfjtFKK.js (removed) 2.91 kB 🟢 -2.91 kB 🟢 -1.21 kB 🟢 -1.06 kB
assets/GlobalToast-DmS8caHb.js (new) 2.91 kB 🔴 +2.91 kB 🔴 +1.21 kB 🔴 +1.06 kB
assets/SubscribeToRun-Bwv-hOet.js (new) 2.2 kB 🔴 +2.2 kB 🔴 +1.01 kB 🔴 +884 B
assets/SubscribeToRun-T3AGbrnT.js (removed) 2.2 kB 🟢 -2.2 kB 🟢 -1.01 kB 🟢 -876 B
assets/CloudRunButtonWrapper-B6IbtKQU.js (removed) 1.68 kB 🟢 -1.68 kB 🟢 -785 B 🟢 -719 B
assets/CloudRunButtonWrapper-BsTTU4g3.js (new) 1.68 kB 🔴 +1.68 kB 🔴 +784 B 🔴 +713 B
assets/cloudBadges-Ct5ZciaL.js (new) 1.37 kB 🔴 +1.37 kB 🔴 +705 B 🔴 +612 B
assets/cloudBadges-D54q3DPi.js (removed) 1.37 kB 🟢 -1.37 kB 🟢 -705 B 🟢 -618 B
assets/cloudSubscription-DkUhIMqv.js (removed) 1.33 kB 🟢 -1.33 kB 🟢 -655 B 🟢 -571 B
assets/cloudSubscription-ngsqilJG.js (new) 1.33 kB 🔴 +1.33 kB 🔴 +655 B 🔴 +567 B
assets/Load3D-DBBUCr3q.js (removed) 1.07 kB 🟢 -1.07 kB 🟢 -500 B 🟢 -447 B
assets/Load3D-DdkCdM4p.js (new) 1.07 kB 🔴 +1.07 kB 🔴 +497 B 🔴 +445 B
assets/nightlyBadges-CMMhiCOM.js (removed) 1 kB 🟢 -1 kB 🟢 -533 B 🟢 -475 B
assets/nightlyBadges-CMRQWO35.js (new) 1 kB 🔴 +1 kB 🔴 +534 B 🔴 +462 B
assets/Load3dViewerContent-Cv-G2mkz.js (new) 995 B 🔴 +995 B 🔴 +466 B 🔴 +415 B
assets/Load3dViewerContent-jOQFCOi3.js (removed) 995 B 🟢 -995 B 🟢 -469 B 🟢 -421 B
assets/SubscriptionPanelContentWorkspace-DHatqdbi.js (new) 932 B 🔴 +932 B 🔴 +436 B 🔴 +385 B
assets/SubscriptionPanelContentWorkspace-IpsCoavz.js (removed) 932 B 🟢 -932 B 🟢 -437 B 🟢 -384 B
assets/graphHasMissingNodes-DKr0RQ4w.js (new) 761 B 🔴 +761 B 🔴 +371 B 🔴 +317 B
assets/graphHasMissingNodes-HocIUYu1.js (removed) 761 B 🟢 -761 B 🟢 -373 B 🟢 -332 B
assets/changeTracker-BbFwdqhZ.js (new) 759 B 🔴 +759 B 🔴 +383 B 🔴 +340 B
assets/changeTracker-DI4gxUlW.js (removed) 759 B 🟢 -759 B 🟢 -386 B 🟢 -342 B
assets/WidgetLegacy-BVLktBZp.js (removed) 747 B 🟢 -747 B 🟢 -384 B 🟢 -339 B
assets/WidgetLegacy-Cg4GzGPI.js (new) 747 B 🔴 +747 B 🔴 +384 B 🔴 +340 B
assets/WidgetInputNumber-BnDemwYV.js (new) 469 B 🔴 +469 B 🔴 +264 B 🔴 +228 B
assets/WidgetInputNumber-BVMW5tPX.js (removed) 469 B 🟢 -469 B 🟢 -263 B 🟢 -227 B
assets/AnimationControls-BuN89WBW.js 4.61 kB 4.61 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ApiNodesSignInContent-1YjVaHoW.js 2.69 kB 2.69 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/auto-BTnZwrs2.js 1.7 kB 1.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/BaseViewTemplate-sbUO3_hD.js 1.78 kB 1.78 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/comfy-logo-single-DhnNuB-i.js 198 B 198 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ComfyOrgHeader-CKD9vwNi.js 910 B 910 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BIWmUVEc.js 16.9 kB 16.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BOt38VCw.js 16.1 kB 16.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-C0NcxRH3.js 18.8 kB 18.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-C2xuXGb5.js 17.5 kB 17.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CmiKIQwc.js 16.1 kB 16.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DMwP8S5e.js 16.7 kB 16.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DwBt3HhT.js 15.9 kB 15.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-JX559A2n.js 15.1 kB 15.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-n_2KJWcD.js 15.2 kB 15.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-OO-8nFm9.js 16.1 kB 16.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-wq2Y-YKn.js 17.5 kB 17.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/constants-BIWjk1ar.js 579 B 579 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-_ix-_aGb.js 518 kB 518 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-Bx5xAAgN.js 199 B 199 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/LazyImage-QLfyKhBu.js 12.3 kB 12.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BA2V8d-C.js 139 kB 139 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BccLgA47.js 168 kB 168 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-C-ZfUqj4.js 194 kB 194 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-C1DJg0HU.js 123 kB 123 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CjFsXT_Y.js 160 kB 160 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CNIsXuKE.js 147 kB 147 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CqcSAz7B.js 144 kB 144 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DDxNg4P1.js 174 kB 174 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DQHvUyvV.js 139 kB 139 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Dr-RBucI.js 122 kB 122 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Gap3UP2p.js 142 kB 142 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Media3DTop-D3QRJ6eZ.js 1.82 kB 1.82 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaAudioTop-vXuump5i.js 1.43 kB 1.43 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaImageTop-XsW6Reb5.js 1.75 kB 1.75 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaOtherTop-Crhpst_D.js 1.02 kB 1.02 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaTextTop-DLkC3BlW.js 1.01 kB 1.01 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaVideoTop-Dxvkupp8.js 2.77 kB 2.77 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-2U4KtUml.js 360 kB 360 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-5rcOJVex.js 391 kB 391 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BTBSP0IQ.js 480 kB 480 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BZEpP7w6.js 383 kB 383 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-C-Tw-7I_.js 407 kB 407 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-C76rbmLh.js 441 kB 441 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CxxD1ymF.js 395 kB 395 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DciNsuYe.js 392 kB 392 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-G7wcMpUD.js 356 kB 356 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-nGdg-hIO.js 388 kB 388 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-xiPSrG6S.js 440 kB 440 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/OBJLoader2WorkerModule-DTMpvldF.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Popover-BFioAN8e.js 3.65 kB 3.65 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/previousFullPath-DeIFnh1k.js 665 B 665 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/rolldown-runtime-DLICfi3-.js 1.97 kB 1.97 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SelectValue-bibvA8E3.js 8.94 kB 8.94 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/signInSchema-CHXN3L2F.js 1.53 kB 1.53 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Slider-DdhXSGsd.js 3.52 kB 3.52 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/src-1EXhnvTZ.js 251 B 251 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/telemetry-zZf2dHJ2.js 226 B 226 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/types-DT3N7am7.js 204 B 204 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/VideoPlayOverlay-vVfixIxQ.js 1.35 kB 1.35 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widget-DTUjK0ZE.js 445 B 445 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-BPh1lTyF.js 283 B 283 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-xcXafMSV.js 3.19 kB 3.19 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetChart-tDqjft7_.js 2.21 kB 2.21 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetColorPicker-cmpN9z2D.js 2.9 kB 2.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetGalleria-BaSczjNZ.js 3.61 kB 3.61 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCompare-BV2GfN2g.js 3.1 kB 3.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputText-Cu2WRFHM.js 1.86 kB 1.86 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetLayoutField-1Fl4ror4.js 1.95 kB 1.95 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetMarkdown-DbQVdecX.js 2.93 kB 2.93 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetPropFilter-COB1L9Pj.js 1.1 kB 1.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetTextarea-Dw918e6W.js 3.13 kB 3.13 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetToggleSwitch-VrAZFEEv.js 6.8 kB 6.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetTypes-BtuQMzwn.js 393 B 393 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 47 added / 47 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: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/renderer/core/canvas/useCanvasInteractions.ts`:
- Around line 67-71: The panning branch is bypassed when
wheelCapturedByFocusedElement prevents handling, so modify handleWheel (and
forwardEventToCanvas if needed) to prioritize space‑panning: move the panning
check (shouldHandleNodePointerEvents) before the wheelCapturedByFocusedElement
early return or call forwardEventToCanvas with a force/bypass flag when
shouldHandleNodePointerEvents is false; update forwardEventToCanvas
signature/usage (and any callers/tests) to accept and honor a force boolean so
focused wheel‑capture elements are ignored during space‑panning while normal
wheel capture behavior remains unchanged.

In
`@src/renderer/extensions/vueNodes/composables/useNodePointerInteractions.test.ts`:
- Around line 12-21: The test currently exposes a global mutable ref
(shouldHandleNodePointerEventsRef) used inside the useCanvasInteractions mock
which can leak state between tests; replace that global with a hoisted value via
vi.hoisted(() => ref(true)) and have the mocked useCanvasInteractions return
that hoisted ref and forwardEventToCanvasMock, so each test can reset or modify
shouldHandleNodePointerEvents via the hoisted factory without global mutation;
update the mock declaration that returns useCanvasInteractions to reference the
hoisted variable instead of the top-level ref.

In `@src/renderer/extensions/vueNodes/composables/useNodePointerInteractions.ts`:
- Around line 68-72: When onPointermove and onPointerup detect panning mode
(shouldHandleNodePointerEvents.value is false) you must first end any active
node drag before forwarding events to the canvas; call the existing
safeDragEnd() (or equivalent cleanup) when hasDraggingStarted or
layoutStore.isDraggingVueNodes is true, then forwardEventToCanvas(event) and
return. Update the onPointermove and onPointerup handlers (names shown in the
diff) to perform this conditional cleanup so hasDraggingStarted and
layoutStore.isDraggingVueNodes are cleared before early-returning.

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.

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@src/renderer/core/canvas/useCanvasInteractions.ts`:
- Around line 65-69: handleWheel currently returns early when
shouldForwardWheelEvent is false, which still allows focused wheel‑capture
elements to block space‑panning; ensure the panning branch runs regardless of
shouldForwardWheelEvent by checking the space‑panning condition
(shouldHandleNodePointerEvents.value) before or independent of the
shouldForwardWheelEvent check so forwardEventToCanvas(event) is invoked when in
panning mode. Update the control flow in handleWheel to evaluate
shouldHandleNodePointerEvents.value (and call forwardEventToCanvas) before doing
the early return based on shouldForwardWheelEvent, keeping existing behavior for
non‑panning cases.

Comment on lines +119 to +122
isReadOnly.value = newCanvas.read_only
newCanvas.onReadOnlyChanged = (value: boolean) => {
isReadOnly.value = value
}
Copy link
Contributor Author

Choose a reason for hiding this comment

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

This cannot be the best way to do this.

@christian-byrne christian-byrne marked this pull request as draft February 20, 2026 07:40
Bridge LGraphCanvas.read_only to Vue reactivity via onReadOnlyChanged
callback so the existing CSS pointer-events-auto/none toggle on
LGraphNode.vue and NodeWidgets.vue re-evaluates when space key
toggles panning mode. Events then fall through to the LiteGraph
canvas naturally — no per-handler forwarding or force flags needed.

Fixes #7806

Amp-Thread-ID: https://ampcode.com/threads/T-019c796c-e83c-769d-85f4-20a349994bad
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.

🧹 Nitpick comments (1)
src/lib/litegraph/src/LGraphCanvas.ts (1)

401-407: Guard the read-only callback to avoid redundant notifications.

onReadOnlyChanged will fire even when the value hasn’t changed (e.g., repeated space keydown). Consider short‑circuiting to reduce unnecessary reactive updates while still refreshing the cursor.

♻️ Suggested refinement
 set read_only(value: boolean) {
-  this.state.readOnly = value
-  this._updateCursorStyle()
-  this.onReadOnlyChanged?.(value)
+  if (this.state.readOnly === value) return this._updateCursorStyle()
+  this.state.readOnly = value
+  this._updateCursorStyle()
+  this.onReadOnlyChanged?.(value)
 }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/lib/litegraph/src/LGraphCanvas.ts` around lines 401 - 407, The read_only
setter currently always calls onReadOnlyChanged even when the value hasn't
changed—modify the setter for read_only to compare the incoming value to
this.state.readOnly and only invoke the onReadOnlyChanged callback when they
differ, while still always assigning this.state.readOnly and calling
this._updateCursorStyle(); use the existing onReadOnlyChanged? guard when
invoking the callback to avoid redundant notifications.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@src/lib/litegraph/src/LGraphCanvas.ts`:
- Around line 401-407: The read_only setter currently always calls
onReadOnlyChanged even when the value hasn't changed—modify the setter for
read_only to compare the incoming value to this.state.readOnly and only invoke
the onReadOnlyChanged callback when they differ, while still always assigning
this.state.readOnly and calling this._updateCursorStyle(); use the existing
onReadOnlyChanged? guard when invoking the callback to avoid redundant
notifications.

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.

Spacebar panning in Nodes 2.0

2 participants