Skip to content

fix: prevent persistent loading state when cycling batches with identical URLs#8999

Open
christian-byrne wants to merge 2 commits intomainfrom
fix/cycling-batches-vue-nodes
Open

fix: prevent persistent loading state when cycling batches with identical URLs#8999
christian-byrne wants to merge 2 commits intomainfrom
fix/cycling-batches-vue-nodes

Conversation

@christian-byrne
Copy link
Contributor

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

Summary

Fix persistent loading/skeleton state when cycling through batch images or videos that share the same URL (common on Cloud).

Changes

  • What: In setCurrentIndex() for both ImagePreview.vue and VideoPreview.vue, only start the loader when the target URL differs from the current URL. When batch items share the same URL, the browser doesn't fire a new load/loadeddata event since src didn't change, so the loader was never dismissed.
  • Also fixes VideoPreview.vue navigation dots using hardcoded bg-white instead of semantic bg-base-foreground tokens.

Review Focus

This bug has regressed 3+ times (PRs #6521, #7094, #8366). The regression tests specifically target the root cause — cycling through identical URLs — to prevent future reintroduction.

Fixes https://www.notion.so/comfy-org/Bug-Cycling-through-image-batches-results-in-persistent-loading-state-on-Cloud-30c6d73d3650816e9738d5dbea52c47d

┆Issue is synchronized with this Notion page by Unito

…ical URLs

In setCurrentIndex(), only start the loader when the target URL differs
from the current URL. When batch images/videos share the same URL (common
on Cloud), the browser doesn't fire a new load event since src didn't
change, leaving the skeleton loader visible permanently.

Also fix VideoPreview navigation dots using bg-white instead of semantic
bg-base-foreground tokens.

Amp-Thread-ID: https://ampcode.com/threads/T-019c796c-8895-74a2-b0d8-c9052a8772f3
@christian-byrne christian-byrne requested a review from a team as a code owner February 20, 2026 05:03
@christian-byrne christian-byrne added the verified bug Something isn't working (confirmed by the team) label Feb 20, 2026
@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: ✅ 518 passed, 0 failed · 4 flaky

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

@github-actions
Copy link

github-actions bot commented Feb 20, 2026

🎨 Storybook Build Status

Build completed successfully!

⏰ Completed at: 02/20/2026, 05:59:26 AM UTC

🔗 Links


🎉 Your Storybook is ready for review!

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 20, 2026

No actionable comments were generated in the recent review. 🎉


📝 Walkthrough

Walkthrough

Updates add tests and adjust ImagePreview and VideoPreview to avoid resetting loader/dimensions when cycling to the same URL; loader is triggered only on actual URL changes. VideoPreview navigation dot classes are updated to use base-foreground tokens. New tests cover identical vs different URL cycling.

Changes

Cohort / File(s) Summary
Tests
src/renderer/extensions/vueNodes/VideoPreview.test.ts, src/renderer/extensions/vueNodes/components/ImagePreview.test.ts
Adds VideoPreview tests and expands ImagePreview tests to cover cycling behavior with identical vs different URLs. Tests use fake timers and simulate media load events to assert aria-busy loader behavior.
Component behavior
src/renderer/extensions/vueNodes/VideoPreview.vue, src/renderer/extensions/vueNodes/components/ImagePreview.vue
Refactors setCurrentIndex() to early-return for same index and to reset dimensions/show loader only when the URL actually changes; preserves other state resets (e.g., error).
Styling/Classes
src/renderer/extensions/vueNodes/VideoPreview.vue
Updates navigation dot class generation to use cn(...) and switches active/inactive classes to base-foreground tokens and hover variants.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

🐇 I hopped through frames both old and new,

same URL — no flustered view.
When links diverge, I show the spin,
neat dots now glow with base-foreground grin.
Cheers — a rabbit’s tiny debugging cue.

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The pull request title accurately and concisely describes the main change: preventing persistent loading state when cycling through batch items with identical URLs.
Description check ✅ Passed The description includes a summary explaining the bug fix, detailed changes for both components, and review focus. It follows the required template structure with all critical sections completed.

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

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch fix/cycling-batches-vue-nodes

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.26 MB gzip 🔴 +39 B

Details

Summary

  • Raw size: 20 MB baseline 20 MB — 🔴 +252 B
  • Gzip: 4.26 MB baseline 4.26 MB — 🔴 +39 B
  • Brotli: 3.3 MB baseline 3.3 MB — 🔴 +43 B
  • Bundles: 219 current • 219 baseline • 2 added / 2 removed

Category Glance
Graph Workspace 🔴 +252 B (914 kB) · Vendor & Third-Party ⚪ 0 B (8.69 MB) · Other ⚪ 0 B (7.38 MB) · Data & Services ⚪ 0 B (2.4 MB) · Panels & Settings ⚪ 0 B (430 kB) · Views & Navigation ⚪ 0 B (68.6 kB) · + 5 more

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

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-BtWTqsaw.js (removed) 21.4 kB 🟢 -21.4 kB 🟢 -6.99 kB 🟢 -6.07 kB
assets/index-Cn4Nb86h.js (new) 21.4 kB 🔴 +21.4 kB 🔴 +6.98 kB 🔴 +6.09 kB

Status: 1 added / 1 removed

Graph Workspace — 914 kB (baseline 914 kB) • 🔴 +252 B

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-BYGgqMsH.js (new) 914 kB 🔴 +914 kB 🔴 +196 kB 🔴 +149 kB
assets/GraphView-BD9SOPK1.js (removed) 914 kB 🟢 -914 kB 🟢 -196 kB 🟢 -149 kB

Status: 1 added / 1 removed

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

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CloudAuthTimeoutView-BnUtrlqh.js 4.88 kB 4.88 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudForgotPasswordView-BO2JpwAD.js 5.53 kB 5.53 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudLayoutView-FZVJheTE.js 6.4 kB 6.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudLoginView-DlL7sOh4.js 10 kB 10 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudSignupView-DUjxXSG6.js 7.38 kB 7.38 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudSorryContactSupportView-D9UxxFTg.js 1.02 kB 1.02 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudSubscriptionRedirectView-Gv0xsL9P.js 4.68 kB 4.68 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudSurveyView-DRYH6ryv.js 15.5 kB 15.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/layout-Bn5Nxcmc.js 296 B 296 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserCheckView-LVuSGj3I.js 8.41 kB 8.41 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserSelectView-DmHiviWL.js 4.5 kB 4.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Panels & Settings — 430 kB (baseline 430 kB) • ⚪ 0 B

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/AboutPanel-BtqaTW3w.js 8.53 kB 8.53 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/cloudRemoteConfig-CJ4CDE9Y.js 1.41 kB 1.41 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/config-C5QaqZix.js 996 B 996 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ExtensionPanel-DOORkZJB.js 9.35 kB 9.35 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/KeybindingPanel-C_5Vku7-.js 12.3 kB 12.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/LegacyCreditsPanel-DfyCG7CC.js 20.6 kB 20.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/refreshRemoteConfig-DC-SJU4x.js 1.14 kB 1.14 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SecretsPanel-DwlvPZX5.js 21.5 kB 21.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ServerConfigPanel-BlIDd3hn.js 6.41 kB 6.41 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-B0mOvnTo.js 32 kB 32 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BcrCrxYO.js 27.4 kB 27.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BdMQ9yxb.js 24.2 kB 24.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BMpJMaIw.js 33.7 kB 33.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-C-rh-es6.js 30.1 kB 30.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CgiUGcth.js 23.6 kB 23.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CzjpXwlp.js 38 kB 38 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CzpC_oh3.js 28.4 kB 28.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-Dp3u6l4N.js 29.5 kB 29.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DZjzU5N0.js 28.4 kB 28.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-rQc1NwAI.js 27.6 kB 27.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscriptionPanel-BbL2skun.js 18.5 kB 18.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserPanel-C3Jde4DB.js 6.13 kB 6.13 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
User & Accounts — 16 kB (baseline 16 kB) • ⚪ 0 B

Authentication, profile, and account management bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/auth-Ch5QGsX-.js 357 B 357 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/auth-CKLXCr7I.js 3.4 kB 3.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/firebaseAuthStore-qCdAm4pT.js 758 B 758 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/PasswordFields-ChCYPNPm.js 4.51 kB 4.51 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SignUpForm-ne7JPefJ.js 3.01 kB 3.01 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UpdatePasswordContent-qmazMGgN.js 2.34 kB 2.34 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WorkspaceProfilePic-DwMbocAN.js 1.57 kB 1.57 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Editors & Dialogs — 706 B (baseline 706 B) • ⚪ 0 B

Modals, dialogs, drawers, and in-app editors

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useSubscriptionDialog-CyItR4Ez.js 706 B 706 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
UI Components — 42.3 kB (baseline 42.3 kB) • ⚪ 0 B

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/Button-CC5RleXn.js 2.98 kB 2.98 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudBadge-OjhGOi8-.js 1.24 kB 1.24 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/cloudFeedbackTopbarButton-BpqTgxt4.js 1.56 kB 1.56 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ComfyQueueButton-BRWR-muM.js 763 B 763 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ComfyQueueButton-cOb8247v.js 7.17 kB 7.17 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ScrubableNumberInput-DabUIV79.js 5.96 kB 5.96 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscribeButton-B2stgrS0.js 2.35 kB 2.35 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/TopbarBadge-VWWyqurE.js 7.45 kB 7.45 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserAvatar-DsMH6rUM.js 1.17 kB 1.17 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useTerminalTabs-6aysGxj7.js 9.81 kB 9.81 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetButton-DwYqMhCJ.js 1.84 kB 1.84 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Data & Services — 2.4 MB (baseline 2.4 MB) • ⚪ 0 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/api-QGtyGNO8.js 648 kB 648 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/audioService-uHAeRyK7.js 1.73 kB 1.73 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/bootstrapStore-K2CXw5-5.js 2.08 kB 2.08 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/dialogService-BJ8CgYOs.js 695 B 695 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/dialogService-CyHDGI9s.js 1.62 MB 1.62 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/keybindingService-BpYwtN6b.js 6.52 kB 6.52 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/load3dService-4uvZy3F8.js 90.9 kB 90.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/releaseStore-CRLa52Hg.js 730 B 730 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/releaseStore-nKFBiRjS.js 7.96 kB 7.96 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/serverConfigStore-DWKub1Pu.js 2.32 kB 2.32 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settingStore-Bg7-kvKY.js 714 B 714 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/systemStatsStore-Bif9zb9o.js 12.2 kB 12.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/userStore-DVkPm28v.js 1.85 kB 1.85 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/workflowDraftStore-GdOG_5i2.js 706 B 706 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
Utilities & Hooks — 57.6 kB (baseline 57.6 kB) • ⚪ 0 B

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/_plugin-vue_export-helper-CY4XIWDa.js 315 B 315 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/audioUtils-eGzaAPVs.js 858 B 858 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/colorUtil-CeP50apf.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-Cu9hIV7U.js 1.56 kB 1.56 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SkeletonUtils-Dbobu-mZ.js 133 B 133 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/subscriptionCheckoutUtil-Dht0M5G3.js 2.53 kB 2.53 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useCurrentUser-sGDawnsL.js 692 B 692 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useErrorHandling-BIQP3N7P.js 1.5 kB 1.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useExternalLink-CT2LWObJ.js 1.66 kB 1.66 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useFeatureFlags-DRaxmk3F.js 3.5 kB 3.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useLoad3d-BLK6tKql.js 14.6 kB 14.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useLoad3d-D9Xrkmwo.js 829 B 829 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useLoad3dViewer-CP_g29-u.js 808 B 808 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useLoad3dViewer-DGVSLHxP.js 14.1 kB 14.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useSubscriptionCredits-D6A6yf1L.js 2.75 kB 2.75 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useWorkspaceSwitch-C3vO0Yet.js 1.25 kB 1.25 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useWorkspaceUI-BIs5N5q9.js 3 kB 3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Vendor & Third-Party — 8.69 MB (baseline 8.69 MB) • ⚪ 0 B

External libraries and shared vendor chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/vendor-axios-C4mPrLmU.js 70.3 kB 70.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-chart-BVph5xqx.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-cR3vmlFu.js 131 kB 131 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-markdown-oliHT-H5.js 102 kB 102 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-other-DJyFg6na.js 1.52 MB 1.52 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-gefG45vj.js 1.73 MB 1.73 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-reka-ui-DAi_xVZa.js 255 kB 255 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-DSpQy18i.js 1.8 MB 1.8 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-tiptap-Bi_34iZD.js 625 kB 625 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vue-core-BjA-tjXK.js 311 kB 311 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vueuse-DcEOrMQz.js 112 kB 112 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-C4cqihSk.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.38 MB (baseline 7.38 MB) • ⚪ 0 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/AnimationControls-BzKwvrey.js 4.61 kB 4.61 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ApiNodesSignInContent-DPS3_zY7.js 2.69 kB 2.69 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/AudioPreviewPlayer-DLXYlsmA.js 10.8 kB 10.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/auto-P6cmVFBq.js 1.7 kB 1.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/BaseViewTemplate-CPWbq97h.js 1.78 kB 1.78 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CancelSubscriptionDialogContent-BSDXF90p.js 4.76 kB 4.76 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/changeTracker-CHo4arbo.js 9.38 kB 9.38 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/changeTracker-CIyypa7g.js 727 B 727 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/cloudBadges-Cj45cMR6.js 1.34 kB 1.34 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudRunButtonWrapper-DNg-RfDb.js 1.65 kB 1.65 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/cloudSessionCookie-D7bVyLWE.js 3.07 kB 3.07 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/cloudSubscription-DJhON_2p.js 1.3 kB 1.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/comfy-logo-single-Bzuu84gN.js 198 B 198 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ComfyOrgHeader-CR3OyyCW.js 910 B 910 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-6ntdtqc9.js 16.6 kB 16.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-B4RbG9Th.js 17.2 kB 17.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BmIbopvA.js 14.9 kB 14.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Br2FiHkj.js 17.1 kB 17.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BrlWvwVz.js 15.7 kB 15.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BV_NDvWz.js 15.5 kB 15.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CSxUmE31.js 14.7 kB 14.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-D3gGGUgv.js 16.3 kB 16.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DBqn--Z9.js 15.8 kB 15.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DgX9pWvG.js 15.8 kB 15.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DlSpFU8-.js 18.4 kB 18.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/constants-BKU8e69-.js 579 B 579 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/core-DX3V6Vwo.js 72.3 kB 72.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CreateWorkspaceDialogContent-B8-U8Tjt.js 5.5 kB 5.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CurrentUserPopoverWorkspace-Cu4uTtfo.js 19.8 kB 19.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/DeleteWorkspaceDialogContent-DTIOxdtx.js 4.2 kB 4.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/EditWorkspaceDialogContent-D5NszCh5.js 5.3 kB 5.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/GlobalToast-DmDwDpJE.js 2.91 kB 2.91 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/graphHasMissingNodes-9Xe1ko4t.js 761 B 761 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/groupNode-CdpDJNQV.js 72.1 kB 72.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-B21P2kuA.js 199 B 199 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-BPsuwzFt.js 505 kB 505 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/InviteMemberDialogContent-T1h71iE9.js 7.35 kB 7.35 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/InviteMemberUpsellDialogContent-CJ4m3jv8.js 3.79 kB 3.79 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/LazyImage-C812ZTaN.js 12.3 kB 12.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/LeaveWorkspaceDialogContent-svL4U2f2.js 4.03 kB 4.03 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Load3D-65sEo9ac.js 1.04 kB 1.04 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/load3d-D27OscDv.js 14.7 kB 14.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Load3D-PkaGex_e.js 16.2 kB 16.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Load3DConfiguration-C_FbZxHD.js 6.27 kB 6.27 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Load3DControls-PpKMGGVl.js 30.9 kB 30.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Load3dViewerContent-CGsVBAzC.js 963 B 963 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Load3dViewerContent-jA36aSpC.js 23 kB 23 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Bg-1LcRk.js 120 kB 120 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BhTuc8pp.js 144 kB 144 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BjNyGyrP.js 136 kB 136 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Bl8Fy3rY.js 141 kB 141 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Bo3hm2ug.js 190 kB 190 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-C-XiaTzV.js 157 kB 157 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-D-LaWT4q.js 121 kB 121 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DkPPQYpL.js 170 kB 170 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-paKyiK5-.js 137 kB 137 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-wXc1MGIE.js 139 kB 139 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-XEp46eGp.js 164 kB 164 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Media3DTop-uVW6UxXn.js 1.82 kB 1.82 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaAudioTop-Bo-yoCQs.js 1.43 kB 1.43 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaImageTop-BWaFQR3Q.js 1.75 kB 1.75 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaVideoTop-_lQOgDGQ.js 2.23 kB 2.23 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nightlyBadges-93FGyyg2.js 971 B 971 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Bheu43Bb.js 391 kB 391 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BPuceShu.js 346 kB 346 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BvgDpig6.js 377 kB 377 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BZpu0NoU.js 463 kB 463 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Cev_L1ap.js 381 kB 381 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CGC_NG3k.js 369 kB 369 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Cj5X8IGf.js 343 kB 343 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DAEaB4hJ.js 373 kB 373 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DJG4rq9g.js 377 kB 377 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DJl7ITPK.js 424 kB 424 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Dywtk58C.js 424 kB 424 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeTemplates-RuUI3reo.js 9.27 kB 9.27 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/OBJLoader2WorkerModule-DTMpvldF.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Preview3d-CiG4atZD.js 4.78 kB 4.78 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/previousFullPath-CxcvRxyJ.js 665 B 665 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/RemoveMemberDialogContent-DQ65ACEn.js 4.01 kB 4.01 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/RevokeInviteDialogContent-C2U-LaBC.js 3.92 kB 3.92 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/rolldown-runtime-DLICfi3-.js 1.97 kB 1.97 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/saveMesh-DkZXfjZB.js 3.35 kB 3.35 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SelectValue-CKdTjksa.js 8.94 kB 8.94 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SignInContent-BlHqlNk5.js 18.9 kB 18.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/signInSchema-FyXu3mPx.js 1.53 kB 1.53 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Slider-D_ngVjVT.js 3.52 kB 3.52 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/src-hEkx01Ix.js 251 B 251 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscribeToRun-Dfg6v1UV.js 2.2 kB 2.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscriptionPanelContentWorkspace-D5AIKzc8.js 900 B 900 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscriptionPanelContentWorkspace-vUVzpZ5Z.js 21.6 kB 21.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscriptionRequiredDialogContent-CcvSqRVo.js 26.2 kB 26.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscriptionRequiredDialogContentWorkspace-UCS4eMeF.js 45.8 kB 45.8 kB ⚪ 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/ValueControlPopover-BpjtO6Cu.js 4.89 kB 4.89 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widget-DTUjK0ZE.js 445 B 445 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-CXf2UpG7.js 3.19 kB 3.19 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-DnTyITVB.js 283 B 283 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetChart-B9WHn-7I.js 2.21 kB 2.21 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetColorPicker-LYMr5zb-.js 2.9 kB 2.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetGalleria-Daz0soUA.js 3.61 kB 3.61 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCompare-Ds3saEb3.js 3.1 kB 3.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCrop-D2UL07cA.js 22.1 kB 22.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputNumber-6WozkObW.js 11.8 kB 11.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputNumber-BnIg99dg.js 437 B 437 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputText-DTX5OxDV.js 1.86 kB 1.86 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetLayoutField-CDiEG33G.js 1.95 kB 1.95 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetLegacy-CNPwmjel.js 715 B 715 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetMarkdown-CYq8CHI1.js 2.88 kB 2.88 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetPropFilter-DfMXJwGW.js 1.1 kB 1.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetRecordAudio-CScDSvtT.js 17.3 kB 17.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetSelect-C2CP_nAQ.js 57.8 kB 57.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetTextarea-BCCY3me8.js 3.18 kB 3.18 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetToggleSwitch-BfjjyC7J.js 2.5 kB 2.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetTypes-Cp8f93Pk.js 393 B 393 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetWithControl-C4n-nBbv.js 7.01 kB 7.01 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WorkspacePanelContent-c5XpAquS.js 29.2 kB 29.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

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

🧹 Nitpick comments (1)
src/renderer/extensions/vueNodes/VideoPreview.vue (1)

250-256: Use cn() to compose navigation-dot classes (avoid array return).
The repo standard requires cn() for class merging and forbids array-based class bindings.

♻️ Suggested refactor
-const getNavigationDotClass = (index: number) => {
-  return [
-    'w-2 h-2 rounded-full transition-all duration-200 border-0 cursor-pointer',
-    index === currentIndex.value
-      ? 'bg-base-foreground'
-      : 'bg-base-foreground/50 hover:bg-base-foreground/80'
-  ]
-}
+const getNavigationDotClass = (index: number) =>
+  cn(
+    'w-2 h-2 rounded-full transition-all duration-200 border-0 cursor-pointer',
+    index === currentIndex.value
+      ? 'bg-base-foreground'
+      : 'bg-base-foreground/50 hover:bg-base-foreground/80'
+  )

As per coding guidelines: Use cn() utility from '@/utils/tailwindUtil' to merge class names; never use :class="[]" syntax.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/renderer/extensions/vueNodes/VideoPreview.vue` around lines 250 - 256,
getNavigationDotClass currently returns an array of class strings which violates
the repo standard; instead import and use the cn() utility from
'@/utils/tailwindUtil' and return a single string composed by cn().
Specifically, update getNavigationDotClass(index: number) to call cn('w-2 h-2
rounded-full transition-all duration-200 border-0 cursor-pointer', index ===
currentIndex.value ? 'bg-base-foreground' : 'bg-base-foreground/50
hover:bg-base-foreground/80') so the class merging uses cn and no array is
returned.
🤖 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/extensions/vueNodes/VideoPreview.test.ts`:
- Around line 35-105: The module-level mutable wrapperRegistry should be removed
and mountVideoPreview should be converted to a properly typed function
declaration using Partial<ComponentProps<typeof VideoPreview>> for its props;
stop using a global Set to track wrappers and instead unmount the wrapper
returned by mountVideoPreview inside each test's finally block (and remove the
centralized afterEach cleanup). Update all tests to call mountVideoPreview(...)
and ensure they call wrapper.unmount() in finally to guarantee per-test teardown
while keeping references to VideoPreview and mountVideoPreview to locate the
changes.

---

Nitpick comments:
In `@src/renderer/extensions/vueNodes/VideoPreview.vue`:
- Around line 250-256: getNavigationDotClass currently returns an array of class
strings which violates the repo standard; instead import and use the cn()
utility from '@/utils/tailwindUtil' and return a single string composed by cn().
Specifically, update getNavigationDotClass(index: number) to call cn('w-2 h-2
rounded-full transition-all duration-200 border-0 cursor-pointer', index ===
currentIndex.value ? 'bg-base-foreground' : 'bg-base-foreground/50
hover:bg-base-foreground/80') so the class merging uses cn and no array is
returned.

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. verified bug Something isn't working (confirmed by the team)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants