Skip to content

fix: workspace icon flash and credits showing 0 while workspace is in…#8323

Merged
simula-r merged 2 commits intomainfrom
fix/workspaces-icon-and-credits-0
Jan 27, 2026
Merged

fix: workspace icon flash and credits showing 0 while workspace is in…#8323
simula-r merged 2 commits intomainfrom
fix/workspaces-icon-and-credits-0

Conversation

@simula-r
Copy link
Contributor

@simula-r simula-r commented Jan 26, 2026

Summary

  • Fix: flash of wrong workspace icon (replaced with loader)
  • Fix: personal workspace showing 0 credits

┆Issue is synchronized with this Notion page by Unito

@dosubot dosubot bot added the size:M This PR changes 30-99 lines, ignoring generated files. label Jan 26, 2026
@github-actions
Copy link

github-actions bot commented Jan 26, 2026

🎨 Storybook Build Status

Build completed successfully!

⏰ Completed at: 01/26/2026, 11:28:02 PM UTC

🔗 Links


🎉 Your Storybook is ready for review!

@github-actions
Copy link

github-actions bot commented Jan 26, 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)

@simula-r simula-r added needs-backport Fix/change that needs to be cherry-picked to the current feature freeze branch cloud/1.37 Backport PRs for cloud 1.37 labels Jan 26, 2026
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 26, 2026

📝 Walkthrough

Walkthrough

Add initState-driven loading behavior to topbar workspace UI: show a Skeleton while initializing, delay workspace avatar/icon and credits display until initState is "ready", and adjust popover rendering and subscription checks accordingly.

Changes

Cohort / File(s) Summary
Topbar workspace UI
src/components/topbar/CurrentUserButton.vue, src/components/topbar/CurrentUserPopoverWorkspace.vue
Add initState checks to control rendering: show Skeleton placeholder while initializing; render WorkspaceProfilePic and workspace popover only when initState === 'ready'; defer credits display until initState ready and include subscriptionStatus in logic; use teamWorkspaceName storeRef for workspace name.
Tests & mocks
src/components/topbar/CurrentUserButton.test.ts
Update mocks to return storeToRefs style store, add useFeatureFlags and useTeamWorkspaceStore mocks exposing teamWorkspacesEnabled, workspaceName, and initState to reflect new conditional rendering and initialization state.

Possibly related PRs

Suggested reviewers

  • Yorha4D
  • KarryCharon
  • pythongosssss
✨ 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.

@coderabbitai coderabbitai bot requested review from KarryCharon and Yorha4D January 26, 2026 23:19
@github-actions
Copy link

github-actions bot commented Jan 26, 2026

Bundle Size Report

Summary

  • Raw size: 22 MB baseline 22 MB — 🔴 +366 B
  • Gzip: 4.57 MB baseline 4.57 MB — 🔴 +25 B
  • Brotli: 3.39 MB baseline 3.39 MB — 🔴 +51 B
  • Bundles: 170 current • 170 baseline • 82 added / 82 removed

Category Glance
Graph Workspace 🔴 +431 B (959 kB) · Other 🟢 -58 B (6.49 MB) · Panels & Settings 🟢 -8 B (466 kB) · Data & Services 🔴 +1 B (3.19 MB) · Vendor & Third-Party ⚪ 0 B (10.7 MB) · Views & Navigation ⚪ 0 B (80.7 kB) · + 5 more

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

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-BbGiF5Pt.js (new) 22.8 kB 🔴 +22.8 kB 🔴 +6.84 kB 🔴 +6.03 kB
assets/index-cFxmNIkC.js (removed) 22.8 kB 🟢 -22.8 kB 🟢 -6.84 kB 🟢 -6.02 kB

Status: 1 added / 1 removed

Graph Workspace — 959 kB (baseline 958 kB) • 🔴 +431 B

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-DuDhegsO.js (new) 959 kB 🔴 +959 kB 🔴 +194 kB 🔴 +146 kB
assets/GraphView-DKdAYlz2.js (removed) 958 kB 🟢 -958 kB 🟢 -194 kB 🟢 -146 kB

Status: 1 added / 1 removed

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

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CloudSurveyView-Df-fsZg_.js (removed) 17.1 kB 🟢 -17.1 kB 🟢 -3.6 kB 🟢 -3.06 kB
assets/CloudSurveyView-DnR_yD2-.js (new) 17.1 kB 🔴 +17.1 kB 🔴 +3.6 kB 🔴 +3.05 kB
assets/CloudLoginView-BCiutVmx.js (new) 11.8 kB 🔴 +11.8 kB 🔴 +3.09 kB 🔴 +2.72 kB
assets/CloudLoginView-Du25GlqG.js (removed) 11.8 kB 🟢 -11.8 kB 🟢 -3.09 kB 🟢 -2.72 kB
assets/UserCheckView-BwllQYUv.js (new) 10.5 kB 🔴 +10.5 kB 🔴 +2.44 kB 🔴 +2.13 kB
assets/UserCheckView-DrKhdp1K.js (removed) 10.5 kB 🟢 -10.5 kB 🟢 -2.44 kB 🟢 -2.13 kB
assets/CloudLayoutView-BV75yQ2l.js (new) 8.54 kB 🔴 +8.54 kB 🔴 +2.25 kB 🔴 +1.96 kB
assets/CloudLayoutView-Dyv07NOj.js (removed) 8.54 kB 🟢 -8.54 kB 🟢 -2.25 kB 🟢 -1.95 kB
assets/CloudSignupView-h2VYtVr7.js (removed) 8.18 kB 🟢 -8.18 kB 🟢 -2.33 kB 🟢 -2.03 kB
assets/CloudSignupView-VaA8iNHh.js (new) 8.18 kB 🔴 +8.18 kB 🔴 +2.33 kB 🔴 +2.03 kB
assets/CloudForgotPasswordView-B9h7_Wvo.js (removed) 6.26 kB 🟢 -6.26 kB 🟢 -1.92 kB 🟢 -1.69 kB
assets/CloudForgotPasswordView-DfeHgy-R.js (new) 6.26 kB 🔴 +6.26 kB 🔴 +1.92 kB 🔴 +1.69 kB
assets/UserSelectView-CF05s0Ga.js (removed) 5.28 kB 🟢 -5.28 kB 🟢 -1.76 kB 🟢 -1.57 kB
assets/UserSelectView-DIKT3q77.js (new) 5.28 kB 🔴 +5.28 kB 🔴 +1.76 kB 🔴 +1.57 kB
assets/CloudSubscriptionRedirectView-CKFJMVaC.js (removed) 5.27 kB 🟢 -5.27 kB 🟢 -1.73 kB 🟢 -1.54 kB
assets/CloudSubscriptionRedirectView-DwBxTw6F.js (new) 5.27 kB 🔴 +5.27 kB 🔴 +1.73 kB 🔴 +1.53 kB
assets/CloudAuthTimeoutView-D2_FFCet.js (new) 5.24 kB 🔴 +5.24 kB 🔴 +1.7 kB 🔴 +1.48 kB
assets/CloudAuthTimeoutView-q2AiRzwO.js (removed) 5.24 kB 🟢 -5.24 kB 🟢 -1.71 kB 🟢 -1.48 kB
assets/CloudSorryContactSupportView-B5gYo5Lv.js 1.97 kB 1.97 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/layout-MvRmLoAK.js 500 B 500 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 9 added / 9 removed

Panels & Settings — 466 kB (baseline 466 kB) • 🟢 -8 B

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/WorkspacePanel-BQ1r6IEU.js (new) 29.8 kB 🔴 +29.8 kB 🔴 +5.89 kB 🔴 +5.14 kB
assets/WorkspacePanel-CcwatSFN.js (removed) 29.8 kB 🟢 -29.8 kB 🟢 -5.89 kB 🟢 -5.14 kB
assets/LegacyCreditsPanel-B3zWGoM1.js (removed) 23.8 kB 🟢 -23.8 kB 🟢 -5.95 kB 🟢 -5.22 kB
assets/LegacyCreditsPanel-DAmgXRnl.js (new) 23.8 kB 🔴 +23.8 kB 🔴 +5.95 kB 🔴 +5.23 kB
assets/SubscriptionPanel-CpXT7B0C.js (removed) 20.9 kB 🟢 -20.9 kB 🟢 -5.01 kB 🟢 -4.42 kB
assets/SubscriptionPanel-LxLKul9c.js (new) 20.9 kB 🔴 +20.9 kB 🔴 +5.01 kB 🔴 +4.41 kB
assets/KeybindingPanel-Dla1qvSw.js (new) 14.2 kB 🔴 +14.2 kB 🔴 +3.74 kB 🔴 +3.31 kB
assets/KeybindingPanel-Dq_b526s.js (removed) 14.2 kB 🟢 -14.2 kB 🟢 -3.74 kB 🟢 -3.31 kB
assets/AboutPanel-B5SZ1g1C.js (new) 10.8 kB 🔴 +10.8 kB 🔴 +2.68 kB 🔴 +2.43 kB
assets/AboutPanel-BkcM2gS_.js (removed) 10.8 kB 🟢 -10.8 kB 🟢 -2.68 kB 🟢 -2.43 kB
assets/ExtensionPanel-EgWF1zmj.js (new) 10.2 kB 🔴 +10.2 kB 🔴 +2.71 kB 🔴 +2.4 kB
assets/ExtensionPanel-J6a8Q1pQ.js (removed) 10.2 kB 🟢 -10.2 kB 🟢 -2.71 kB 🟢 -2.4 kB
assets/ServerConfigPanel-DeUvjTXF.js (new) 7.23 kB 🔴 +7.23 kB 🔴 +2.17 kB 🔴 +1.94 kB
assets/ServerConfigPanel-MxtRxT-b.js (removed) 7.23 kB 🟢 -7.23 kB 🟢 -2.17 kB 🟢 -1.94 kB
assets/UserPanel-CES2NeSr.js (new) 6.58 kB 🔴 +6.58 kB 🔴 +1.9 kB 🔴 +1.67 kB
assets/UserPanel-DIlVPrRj.js (removed) 6.58 kB 🟢 -6.58 kB 🟢 -1.91 kB 🟢 -1.67 kB
assets/config-C8x3vM7Q.js (removed) 1.16 kB 🟢 -1.16 kB 🟢 -611 B 🟢 -534 B
assets/config-B5hUrVeB.js (new) 1.15 kB 🔴 +1.15 kB 🔴 +604 B 🔴 +529 B
assets/refreshRemoteConfig-BBOHjiJu.js (removed) 1.14 kB 🟢 -1.14 kB 🟢 -523 B 🟢 -455 B
assets/refreshRemoteConfig-BLIHtsZv.js (new) 1.14 kB 🔴 +1.14 kB 🔴 +523 B 🔴 +488 B
assets/cloudRemoteConfig-BGb3v-jR.js (new) 1.11 kB 🔴 +1.11 kB 🔴 +506 B 🔴 +440 B
assets/cloudRemoteConfig-hAuGSSXw.js (removed) 1.11 kB 🟢 -1.11 kB 🟢 -509 B 🟢 -438 B
assets/refreshRemoteConfig-BOOaVIDN.js (new) 169 B 🔴 +169 B 🔴 +108 B 🔴 +105 B
assets/refreshRemoteConfig-D8fgJlQS.js (removed) 169 B 🟢 -169 B 🟢 -108 B 🟢 -109 B
assets/remoteConfig-w1E3DdAQ.js 536 B 536 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-2qMok0ac.js 29 kB 29 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BcDLsbiI.js 29.2 kB 29.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BCMsrMhl.js 29.9 kB 29.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BQM5iiEY.js 25.5 kB 25.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-C5JeSK4j.js 26.2 kB 26.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CcVqrXbK.js 38.8 kB 38.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-Ckoj43MZ.js 30 kB 30 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DFBj0AYW.js 32.5 kB 32.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-Dh5pVx6O.js 34.8 kB 34.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DJRV_PVY.js 30.8 kB 30.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-jbT3QFC8.js 31.6 kB 31.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 12 added / 12 removed

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

Authentication, profile, and account management bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/auth-Bc52BHhz.js (new) 3.54 kB 🔴 +3.54 kB 🔴 +1.24 kB 🔴 +1.06 kB
assets/auth-Dr28OwXJ.js (removed) 3.54 kB 🟢 -3.54 kB 🟢 -1.24 kB 🟢 -1.06 kB
assets/firebaseAuthStore-UW5gREvg.js (removed) 217 B 🟢 -217 B 🟢 -136 B 🟢 -118 B
assets/firebaseAuthStore-xue98JbD.js (new) 217 B 🔴 +217 B 🔴 +136 B 🔴 +119 B
assets/auth--jk9IV3o.js (new) 178 B 🔴 +178 B 🔴 +142 B 🔴 +130 B
assets/auth-BqJgHUuS.js (removed) 178 B 🟢 -178 B 🟢 -142 B 🟢 -142 B

Status: 3 added / 3 removed

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

Modals, dialogs, drawers, and in-app editors

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useSubscriptionDialog-Dc2RPIKu.js (removed) 2.65 kB 🟢 -2.65 kB 🟢 -1.25 kB 🟢 -1.11 kB
assets/useSubscriptionDialog-Dpe1qGqK.js (new) 2.65 kB 🔴 +2.65 kB 🔴 +1.25 kB 🔴 +1.11 kB
assets/useSubscriptionDialog-BnyJAQHu.js (removed) 179 B 🟢 -179 B 🟢 -110 B 🟢 -97 B
assets/useSubscriptionDialog-D4Z-us4u.js (new) 179 B 🔴 +179 B 🔴 +110 B 🔴 +96 B

Status: 2 added / 2 removed

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

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/ComfyQueueButton-j1zfQin9.js (new) 9.52 kB 🔴 +9.52 kB 🔴 +2.69 kB 🔴 +2.41 kB
assets/ComfyQueueButton-rVhGQD9U.js (removed) 9.52 kB 🟢 -9.52 kB 🟢 -2.69 kB 🟢 -2.41 kB
assets/SubscribeButton-C47bCoze.js (new) 4.63 kB 🔴 +4.63 kB 🔴 +1.57 kB 🔴 +1.39 kB
assets/SubscribeButton-DFx1a5m4.js (removed) 4.63 kB 🟢 -4.63 kB 🟢 -1.57 kB 🟢 -1.39 kB
assets/CloudBadge-D4ke8mf-.js (new) 1.85 kB 🔴 +1.85 kB 🔴 +722 B 🔴 +644 B
assets/CloudBadge-D965Yq9h.js (removed) 1.85 kB 🟢 -1.85 kB 🟢 -725 B 🟢 -651 B
assets/cloudFeedbackTopbarButton-BAI-1zPe.js (removed) 1.24 kB 🟢 -1.24 kB 🟢 -677 B 🟢 -577 B
assets/cloudFeedbackTopbarButton-DTbm9f85.js (new) 1.24 kB 🔴 +1.24 kB 🔴 +675 B 🔴 +576 B
assets/ComfyQueueButton-BDzzkuT9.js (new) 181 B 🔴 +181 B 🔴 +118 B 🔴 +126 B
assets/ComfyQueueButton-DvigoSxq.js (removed) 181 B 🟢 -181 B 🟢 -118 B 🟢 -120 B
assets/Button-B9mYP1x0.js 3.82 kB 3.82 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/TopbarBadge-DHZYSmi1.js 8.36 kB 8.36 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserAvatar-CIuPULbC.js 1.73 kB 1.73 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetButton-BFtcBv-z.js 2.41 kB 2.41 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 5 added / 5 removed

Data & Services — 3.19 MB (baseline 3.19 MB) • 🔴 +1 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/dialogService-CQv8NEEn.js (removed) 2 MB 🟢 -2 MB 🟢 -423 kB 🟢 -323 kB
assets/dialogService-g-wsmhWh.js (new) 2 MB 🔴 +2 MB 🔴 +423 kB 🔴 +323 kB
assets/api-je7yFIFC.js (new) 1.16 MB 🔴 +1.16 MB 🔴 +243 kB 🔴 +188 kB
assets/api-Ks871GNR.js (removed) 1.16 MB 🟢 -1.16 MB 🟢 -243 kB 🟢 -188 kB
assets/releaseStore-7YM24qnt.js (new) 8.91 kB 🔴 +8.91 kB 🔴 +2.4 kB 🔴 +2.12 kB
assets/releaseStore-CY-eRedj.js (removed) 8.91 kB 🟢 -8.91 kB 🟢 -2.4 kB 🟢 -2.12 kB
assets/keybindingService-Cpi2pmiB.js (removed) 6.78 kB 🟢 -6.78 kB 🟢 -1.74 kB 🟢 -1.52 kB
assets/keybindingService-CzAhXb-v.js (new) 6.78 kB 🔴 +6.78 kB 🔴 +1.74 kB 🔴 +1.51 kB
assets/userStore-BK5R0XBK.js (removed) 2.16 kB 🟢 -2.16 kB 🟢 -813 B 🟢 -720 B
assets/userStore-BUaSEAG9.js (new) 2.16 kB 🔴 +2.16 kB 🔴 +814 B 🔴 +726 B
assets/audioService-DhHOBwiL.js (removed) 2.03 kB 🟢 -2.03 kB 🟢 -933 B 🟢 -822 B
assets/audioService-KfKRaj8L.js (new) 2.03 kB 🔴 +2.03 kB 🔴 +932 B 🔴 +820 B
assets/teamWorkspaceStore-CBBPiguv.js (removed) 165 B 🟢 -165 B 🟢 -123 B 🟢 -107 B
assets/teamWorkspaceStore-DQ7fFCI_.js (new) 165 B 🔴 +165 B 🔴 +123 B 🔴 +105 B
assets/releaseStore-Cca9QYgq.js (removed) 140 B 🟢 -140 B 🟢 -106 B 🟢 -107 B
assets/releaseStore-xTWygvPJ.js (new) 140 B 🔴 +140 B 🔴 +106 B 🔴 +108 B
assets/serverConfigStore-B2LzN8g1.js 2.64 kB 2.64 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 8 added / 8 removed

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

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useErrorHandling-Cex3H5lk.js (removed) 5.08 kB 🟢 -5.08 kB 🟢 -1.5 kB 🟢 -1.31 kB
assets/useErrorHandling-tfcuM46a.js (new) 5.08 kB 🔴 +5.08 kB 🔴 +1.5 kB 🔴 +1.31 kB
assets/useWorkspaceUI-8Wrkm_jL.js (new) 3.42 kB 🔴 +3.42 kB 🔴 +973 B 🔴 +840 B
assets/useWorkspaceUI-BSyy4UhI.js (removed) 3.42 kB 🟢 -3.42 kB 🟢 -975 B 🟢 -835 B
assets/useSubscriptionActions-B_UZ7XDT.js (new) 2.22 kB 🔴 +2.22 kB 🔴 +871 B 🔴 +760 B
assets/useSubscriptionActions-BF5qvAmQ.js (removed) 2.22 kB 🟢 -2.22 kB 🟢 -872 B 🟢 -761 B
assets/subscriptionCheckoutUtil-BizdTBNB.js (new) 2 kB 🔴 +2 kB 🔴 +860 B 🔴 +757 B
assets/subscriptionCheckoutUtil-C6L1MEVv.js (removed) 2 kB 🟢 -2 kB 🟢 -864 B 🟢 -755 B
assets/useSubscriptionCredits-BbORLyi4.js (removed) 1.39 kB 🟢 -1.39 kB 🟢 -598 B 🟢 -528 B
assets/useSubscriptionCredits-DsuwmLdk.js (new) 1.39 kB 🔴 +1.39 kB 🔴 +596 B 🔴 +529 B
assets/audioUtils-BBpaDjVE.js (removed) 970 B 🟢 -970 B 🟢 -548 B 🟢 -458 B
assets/audioUtils-CkQjqoIm.js (new) 970 B 🔴 +970 B 🔴 +546 B 🔴 +487 B
assets/useCurrentUser-vQksoIwj.js (removed) 145 B 🟢 -145 B 🟢 -114 B 🟢 -99 B
assets/useCurrentUser-xc609v5N.js (new) 145 B 🔴 +145 B 🔴 +114 B 🔴 +99 B
assets/_plugin-vue_export-helper-DLRTaeJK.js 467 B 467 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/colorUtil-8brfHtOx.js 7.2 kB 7.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/markdownRendererUtil-DBMaRy6q.js 1.78 kB 1.78 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/tailwindUtil-Hy0jY5OA.js 488 B 488 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 7 added / 7 removed

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

External libraries and shared vendor chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/vendor-chart-DdBDBwvF.js 408 kB 408 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-other-Dk4vQph5.js 4.1 MB 4.1 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-BK91gQps.js 3.04 MB 3.04 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-reka-ui-Bh_PdEOO.js 256 kB 256 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-three-BKpliY5_.js 1.83 MB 1.83 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-tiptap-BFRBT3RT.js 650 kB 650 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vue-DMjbEcx7.js 13.6 kB 13.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-PDw3y6Aq.js 398 kB 398 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Other — 6.49 MB (baseline 6.49 MB) • 🟢 -58 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/core-D1AEmg0g.js (removed) 180 kB 🟢 -180 kB 🟢 -43.3 kB 🟢 -36.2 kB
assets/core-DgkmKG1C.js (new) 180 kB 🔴 +180 kB 🔴 +43.3 kB 🔴 +36.1 kB
assets/WidgetSelect-Coc3Reci.js (removed) 50.7 kB 🟢 -50.7 kB 🟢 -11.2 kB 🟢 -9.74 kB
assets/WidgetSelect-DAjJ2BXo.js (new) 50.7 kB 🔴 +50.7 kB 🔴 +11.2 kB 🔴 +9.74 kB
assets/Load3DControls-BjRL5iGa.js (new) 35.9 kB 🔴 +35.9 kB 🔴 +5.87 kB 🔴 +5.08 kB
assets/Load3DControls-l1VIw-U5.js (removed) 35.9 kB 🟢 -35.9 kB 🟢 -5.87 kB 🟢 -5.09 kB
assets/SubscriptionRequiredDialogContent-DUUOjop9.js (new) 28.7 kB 🔴 +28.7 kB 🔴 +6.78 kB 🔴 +5.91 kB
assets/SubscriptionRequiredDialogContent-o__z2bLE.js (removed) 28.7 kB 🟢 -28.7 kB 🟢 -6.78 kB 🟢 -5.91 kB
assets/CurrentUserPopoverWorkspace-Cs3XkGYw.js (new) 22.2 kB 🔴 +22.2 kB 🔴 +4.99 kB 🔴 +4.43 kB
assets/CurrentUserPopoverWorkspace-tp8SVkaN.js (removed) 22.1 kB 🟢 -22.1 kB 🟢 -4.94 kB 🟢 -4.4 kB
assets/Load3D-9hoIWiSs.js (new) 20.9 kB 🔴 +20.9 kB 🔴 +4.59 kB 🔴 +4.01 kB
assets/Load3D-BkPzTtuf.js (removed) 20.9 kB 🟢 -20.9 kB 🟢 -4.59 kB 🟢 -4.02 kB
assets/WidgetInputNumber-CrHgfsqi.js (removed) 18.3 kB 🟢 -18.3 kB 🟢 -4.51 kB 🟢 -4.02 kB
assets/WidgetInputNumber-Cw305i1b.js (new) 18.3 kB 🔴 +18.3 kB 🔴 +4.51 kB 🔴 +4.02 kB
assets/WidgetRecordAudio-CdkCb9zI.js (new) 18.2 kB 🔴 +18.2 kB 🔴 +4.96 kB 🔴 +4.43 kB
assets/WidgetRecordAudio-DbE8VW-1.js (removed) 18.2 kB 🟢 -18.2 kB 🟢 -4.96 kB 🟢 -4.43 kB
assets/SubscriptionPanelContentWorkspace-BJc_Ce0z.js (new) 18.2 kB 🔴 +18.2 kB 🔴 +4.47 kB 🔴 +3.9 kB
assets/SubscriptionPanelContentWorkspace-fqiA-ciF.js (removed) 18.2 kB 🟢 -18.2 kB 🟢 -4.47 kB 🟢 -3.89 kB
assets/WidgetImageCrop-Cpgpu1nB.js (removed) 17.1 kB 🟢 -17.1 kB 🟢 -4.14 kB 🟢 -3.63 kB
assets/WidgetImageCrop-D1e5P7mH.js (new) 17.1 kB 🔴 +17.1 kB 🔴 +4.14 kB 🔴 +3.62 kB
assets/PanelTemplate-CBaqBDAR.js (removed) 16.2 kB 🟢 -16.2 kB 🟢 -5.45 kB 🟢 -4.79 kB
assets/PanelTemplate-D-VQiVJb.js (new) 16.2 kB 🔴 +16.2 kB 🔴 +5.45 kB 🔴 +4.79 kB
assets/AudioPreviewPlayer-CEux-CvJ.js (removed) 10.8 kB 🟢 -10.8 kB 🟢 -2.97 kB 🟢 -2.65 kB
assets/AudioPreviewPlayer-D5Imx3NK.js (new) 10.8 kB 🔴 +10.8 kB 🔴 +2.97 kB 🔴 +2.66 kB
assets/InviteMemberDialogContent-D_-wbl8b.js (new) 8.36 kB 🔴 +8.36 kB 🔴 +2.5 kB 🔴 +2.17 kB
assets/InviteMemberDialogContent-DXLMOE_f.js (removed) 8.36 kB 🟢 -8.36 kB 🟢 -2.51 kB 🟢 -2.17 kB
assets/WidgetWithControl-CE93Cvog.js (removed) 8.02 kB 🟢 -8.02 kB 🟢 -2.64 kB 🟢 -2.38 kB
assets/WidgetWithControl-CLgzqbWB.js (new) 8.02 kB 🔴 +8.02 kB 🔴 +2.65 kB 🔴 +2.38 kB
assets/CreateWorkspaceDialogContent-0MJQ9vL_.js (new) 5.93 kB 🔴 +5.93 kB 🔴 +1.93 kB 🔴 +1.68 kB
assets/CreateWorkspaceDialogContent-DPBL1COs.js (removed) 5.93 kB 🟢 -5.93 kB 🟢 -1.93 kB 🟢 -1.68 kB
assets/EditWorkspaceDialogContent-BegLL77v.js (new) 5.7 kB 🔴 +5.7 kB 🔴 +1.88 kB 🔴 +1.64 kB
assets/EditWorkspaceDialogContent-Dwfyfx1J.js (removed) 5.7 kB 🟢 -5.7 kB 🟢 -1.88 kB 🟢 -1.64 kB
assets/ValueControlPopover-BV533ioM.js (removed) 4.86 kB 🟢 -4.86 kB 🟢 -1.55 kB 🟢 -1.37 kB
assets/ValueControlPopover-Chu3fwj6.js (new) 4.86 kB 🔴 +4.86 kB 🔴 +1.54 kB 🔴 +1.37 kB
assets/DeleteWorkspaceDialogContent-BXO3kgUT.js (removed) 4.59 kB 🟢 -4.59 kB 🟢 -1.57 kB 🟢 -1.35 kB
assets/DeleteWorkspaceDialogContent-C9caL7DN.js (new) 4.59 kB 🔴 +4.59 kB 🔴 +1.56 kB 🔴 +1.35 kB
assets/LeaveWorkspaceDialogContent-BK3pdV0y.js (new) 4.41 kB 🔴 +4.41 kB 🔴 +1.5 kB 🔴 +1.3 kB
assets/LeaveWorkspaceDialogContent-BLCBCwsB.js (removed) 4.41 kB 🟢 -4.41 kB 🟢 -1.51 kB 🟢 -1.3 kB
assets/RemoveMemberDialogContent-CdQRoSSv.js (new) 4.38 kB 🔴 +4.38 kB 🔴 +1.45 kB 🔴 +1.26 kB
assets/RemoveMemberDialogContent-RKqyZ5Q-.js (removed) 4.38 kB 🟢 -4.38 kB 🟢 -1.45 kB 🟢 -1.27 kB
assets/RevokeInviteDialogContent-Bb2nCpZ1.js (new) 4.29 kB 🔴 +4.29 kB 🔴 +1.47 kB 🔴 +1.29 kB
assets/RevokeInviteDialogContent-BPXW5F8z.js (removed) 4.29 kB 🟢 -4.29 kB 🟢 -1.47 kB 🟢 -1.29 kB
assets/GlobalToast-CE4vDptm.js (new) 3.05 kB 🔴 +3.05 kB 🔴 +1.1 kB 🔴 +943 B
assets/GlobalToast-h09MTsKx.js (removed) 3.05 kB 🟢 -3.05 kB 🟢 -1.1 kB 🟢 -942 B
assets/SubscribeToRun-BAv5EGbs.js (removed) 2.96 kB 🟢 -2.96 kB 🟢 -1.16 kB 🟢 -1.02 kB
assets/SubscribeToRun-kk0YQaGl.js (new) 2.96 kB 🔴 +2.96 kB 🔴 +1.16 kB 🔴 +1.03 kB
assets/cloudSessionCookie-CFhh8aV_.js (new) 2.94 kB 🔴 +2.94 kB 🔴 +930 B 🔴 +808 B
assets/cloudSessionCookie-D1DVHzWA.js (removed) 2.94 kB 🟢 -2.94 kB 🟢 -936 B 🟢 -807 B
assets/BaseViewTemplate-BmAHvssP.js (removed) 2.42 kB 🟢 -2.42 kB 🟢 -1.05 kB 🟢 -942 B
assets/BaseViewTemplate-Cl0gEqPv.js (new) 2.42 kB 🔴 +2.42 kB 🔴 +1.04 kB 🔴 +939 B
assets/CloudRunButtonWrapper-BBIkoPVx.js (new) 1.79 kB 🔴 +1.79 kB 🔴 +643 B 🔴 +568 B
assets/CloudRunButtonWrapper-D_j1DFFd.js (removed) 1.79 kB 🟢 -1.79 kB 🟢 -642 B 🟢 -562 B
assets/cloudBadges-2EtlTDCB.js (removed) 1.08 kB 🟢 -1.08 kB 🟢 -539 B 🟢 -488 B
assets/cloudBadges-MLcvqIJH.js (new) 1.08 kB 🔴 +1.08 kB 🔴 +540 B 🔴 +484 B
assets/graphHasMissingNodes-CppRk2NU.js (new) 1.06 kB 🔴 +1.06 kB 🔴 +461 B 🔴 +428 B
assets/graphHasMissingNodes-DzdpMvTy.js (removed) 1.06 kB 🟢 -1.06 kB 🟢 -461 B 🟢 -414 B
assets/cloudSubscription-CfpV2_WS.js (removed) 976 B 🟢 -976 B 🟢 -461 B 🟢 -398 B
assets/cloudSubscription-um4Lofzp.js (new) 976 B 🔴 +976 B 🔴 +459 B 🔴 +395 B
assets/nightlyBadges-BswGAZpV.js (removed) 594 B 🟢 -594 B 🟢 -356 B 🟢 -311 B
assets/nightlyBadges-Q5po3Pof.js (new) 594 B 🔴 +594 B 🔴 +356 B 🔴 +311 B
assets/SubscriptionPanelContentWorkspace-CeXhNuNc.js (removed) 266 B 🟢 -266 B 🟢 -136 B 🟢 -112 B
assets/SubscriptionPanelContentWorkspace-Df_Xm-p7.js (new) 266 B 🔴 +266 B 🔴 +136 B 🔴 +120 B
assets/WidgetInputNumber-CryGpwbP.js (new) 186 B 🔴 +186 B 🔴 +119 B 🔴 +118 B
assets/WidgetInputNumber-uTqDjy2R.js (removed) 186 B 🟢 -186 B 🟢 -119 B 🟢 -120 B
assets/WidgetLegacy-CN7uEMIx.js (new) 164 B 🔴 +164 B 🔴 +125 B 🔴 +108 B
assets/WidgetLegacy-F_JBaUtt.js (removed) 164 B 🟢 -164 B 🟢 -125 B 🟢 -117 B
assets/Load3D-CbW5Bm7A.js (new) 131 B 🔴 +131 B 🔴 +107 B 🔴 +117 B
assets/Load3D-Dlkwavzb.js (removed) 131 B 🟢 -131 B 🟢 -107 B 🟢 -105 B
assets/auto-BmypP-XQ.js 1.73 kB 1.73 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-27PChCGl.js 17 kB 17 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-B52_zgXW.js 18.8 kB 18.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BC_Q8we6.js 19.3 kB 19.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BZlNQPg2.js 17.8 kB 17.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CgVf6wUK.js 17.9 kB 17.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CuidUnsD.js 19.3 kB 19.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-D5OfZ3bv.js 18.5 kB 18.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Dmj47WTl.js 20.6 kB 20.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DUK2nLuH.js 17.2 kB 17.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-K3soE7da.js 18 kB 18 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-MVcGSIbM.js 18 kB 18 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/LazyImage-rWQpxwnM.js 14.1 kB 14.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-3-ad-MUk.js 127 kB 127 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BBLNw8xJ.js 129 kB 129 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BHVFfeo5.js 125 kB 125 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BICThk_R.js 132 kB 132 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-C0B5rjtK.js 112 kB 112 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CBm-XJ4H.js 172 kB 172 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CiYkb6QV.js 111 kB 111 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DNur9seF.js 154 kB 154 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DtCmAq24.js 150 kB 150 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-kSNuyyLo.js 143 kB 143 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-WfrQSHBO.js 125 kB 125 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Media3DTop-8_T22Isd.js 2.38 kB 2.38 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaAudioTop-CBP8th-j.js 2 kB 2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaImageTop-1THG_DJM.js 2.34 kB 2.34 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaVideoTop-bsLx-Wg6.js 2.84 kB 2.84 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/mixpanel.module-BiPjOPVW.js 143 B 143 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-AWEAv70v.js 442 kB 442 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BbERBXTz.js 335 kB 335 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Bg0VvRsL.js 338 kB 338 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Bou_oU4e.js 364 kB 364 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BwPth-go.js 407 kB 407 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BWX3iBBy.js 407 kB 407 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Dfh39t4u.js 361 kB 361 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DqfOW2sF.js 378 kB 378 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DyDPn66V.js 364 kB 364 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-MJExKdEs.js 368 kB 368 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-x4cF477r.js 358 kB 358 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/OBJLoader2WorkerModule-DTMpvldF.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/previousFullPath-B-XG7lU7.js 838 B 838 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/rolldown-runtime-cVp-94Rc.js 1.96 kB 1.96 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Slider-BAEfKuro.js 4.21 kB 4.21 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widget-CD3JnB1i.js 518 B 518 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-Bp7B7z1s.js 186 B 186 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-CgNPbPqq.js 4.71 kB 4.71 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetChart-3mC7A_va.js 2.79 kB 2.79 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetColorPicker-x8L_rIAb.js 3.71 kB 3.71 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetGalleria-f72WaoQY.js 4.57 kB 4.57 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCompare-Dd0p7l7V.js 3.79 kB 3.79 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputText-DOFSeOZG.js 2.58 kB 2.58 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetLayoutField-CZXFB71F.js 2.61 kB 2.61 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetMarkdown-bP5F2-qx.js 3.22 kB 3.22 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetPropFilter-DOe9Bb1I.js 1.31 kB 1.31 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetTextarea-DwdEJ3mA.js 3.52 kB 3.52 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetToggleSwitch-BIK7gguT.js 3.08 kB 3.08 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 34 added / 34 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: 2

🤖 Fix all issues with AI agents
In `@src/components/topbar/CurrentUserButton.vue`:
- Line 15: The class string in CurrentUserButton.vue contains an unintended
trailing space ('size-full '); update the template expression that builds
classes (where compact is used and cn(...) is called) to use 'size-full' without
the trailing space so the class string is clean—locate the occurrence of
'size-full ' in the component (around the compact && 'size-full ' expression)
and remove the extra space.
- Around line 49-58: The popover is empty when teamWorkspacesEnabled is true but
initState !== 'ready'; update CurrentUserButton.vue to prevent opening an empty
popover by guarding the toggle/open logic: in the method that opens the popover
(e.g., openPopover or togglePopover) check if teamWorkspacesEnabled && initState
!== 'ready' and either return early (disable click) or instead set a loading
flag that renders a skeleton variant of CurrentUserPopoverWorkspace;
alternatively add a v-if/v-else to render a new LoadingPopover component (or
pass a loading prop to CurrentUserPopoverWorkspace) when teamWorkspacesEnabled
is true and initState !== 'ready' so users see a loading state instead of an
empty popover.

cn(
'flex items-center gap-1 rounded-full hover:bg-interface-button-hover-surface justify-center',
compact && 'size-full aspect-square'
compact && 'size-full '
Copy link
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick | 🔵 Trivial

Nit: Trailing space in class string.

'size-full ' has a trailing space. While cn() handles this gracefully, it appears unintentional.

🧹 Remove trailing space
-            compact && 'size-full '
+            compact && 'size-full'
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
compact && 'size-full '
compact && 'size-full'
🤖 Prompt for AI Agents
In `@src/components/topbar/CurrentUserButton.vue` at line 15, The class string in
CurrentUserButton.vue contains an unintended trailing space ('size-full ');
update the template expression that builds classes (where compact is used and
cn(...) is called) to use 'size-full' without the trailing space so the class
string is clean—locate the occurrence of 'size-full ' in the component (around
the compact && 'size-full ' expression) and remove the extra space.

Comment on lines +49 to +58
<!-- Workspace mode: workspace-aware popover (only when ready) -->
<CurrentUserPopoverWorkspace
v-if="teamWorkspacesEnabled"
v-if="teamWorkspacesEnabled && initState === 'ready'"
@close="closePopover"
/>
<!-- Legacy mode: original popover -->
<CurrentUserPopover v-else @close="closePopover" />
<CurrentUserPopover
v-else-if="!teamWorkspacesEnabled"
@close="closePopover"
/>
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 | 🟡 Minor

Empty popover state during workspace loading.

When teamWorkspacesEnabled is true but initState !== 'ready', neither popover component renders. If a user clicks the button during the loading state, the popover opens but appears empty.

Consider either:

  1. Disabling the button click during loading
  2. Showing a skeleton/loading state inside the popover
🔧 Option 1: Disable popover toggle during loading
       <Button
         v-if="isLoggedIn"
         class="p-1 hover:bg-transparent"
         variant="muted-textonly"
         :aria-label="$t('g.currentUser')"
-        `@click`="popover?.toggle($event)"
+        `@click`="!showWorkspaceSkeleton && popover?.toggle($event)"
       >
🤖 Prompt for AI Agents
In `@src/components/topbar/CurrentUserButton.vue` around lines 49 - 58, The
popover is empty when teamWorkspacesEnabled is true but initState !== 'ready';
update CurrentUserButton.vue to prevent opening an empty popover by guarding the
toggle/open logic: in the method that opens the popover (e.g., openPopover or
togglePopover) check if teamWorkspacesEnabled && initState !== 'ready' and
either return early (disable click) or instead set a loading flag that renders a
skeleton variant of CurrentUserPopoverWorkspace; alternatively add a v-if/v-else
to render a new LoadingPopover component (or pass a loading prop to
CurrentUserPopoverWorkspace) when teamWorkspacesEnabled is true and initState
!== 'ready' so users see a loading state instead of an empty popover.

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

Caution

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

⚠️ Outside diff range comments (2)
src/components/topbar/CurrentUserButton.test.ts (2)

118-119: Pre-existing: Remove @ts-expect-error directives by typing the component properly.

The coding guidelines state to avoid @ts-expect-error and fix the underlying type issue instead. Consider using ComponentPublicInstance or defining a proper type interface for the component's exposed methods.

♻️ Suggested approach
import type { ComponentPublicInstance } from 'vue'

interface CurrentUserButtonExposed {
  popover: { toggle: () => void; hide: () => void } | null
  closePopover: () => void
}

// In test:
const vm = wrapper.vm as ComponentPublicInstance & CurrentUserButtonExposed
vm.popover = { toggle: popoverToggleSpy, hide: vi.fn() }

Alternatively, if the component uses defineExpose, the types should be automatically available.


102-102: Pre-existing: Avoid stubbing the Button component.

Based on learnings for this repository, primitive UI components like Button should not be stubbed. Using the real component ensures tests accurately reflect production behavior and component API usage.

♻️ Suggested fix
       stubs: {
         // Use shallow mount for popover to make testing easier
         Popover: {
           template: '<div><slot></slot></div>',
           methods: {
             toggle: vi.fn(),
             hide: vi.fn()
           }
-        },
-        Button: true
+        }
       }
🤖 Fix all issues with AI agents
In `@src/components/topbar/CurrentUserButton.test.ts`:
- Around line 28-45: The mocks for storeToRefs, useFeatureFlags, and
useTeamWorkspaceStore are static and must be converted to hoisted factories so
tests can mutate their return values per-test; replace the current vi.mock
bodies with vi.hoisted() factories that return mutable mock objects (e.g., an
exported/mock variable for flags and mockWorkspaceStore with workspaceName and
initState refs) so individual tests can set mockWorkspaceStore.initState.value
and flags.teamWorkspacesEnabled before mounting; update tests to mutate these
shared mock objects in Arrange and add assertions for loading vs ready states
(checking Skeleton/loader vs workspace avatar) using the same symbols:
storeToRefs, useFeatureFlags, and useTeamWorkspaceStore.

Comment on lines +28 to +45
vi.mock('pinia', () => ({
storeToRefs: vi.fn((store) => store)
}))

// Mock the useFeatureFlags composable
vi.mock('@/composables/useFeatureFlags', () => ({
useFeatureFlags: vi.fn(() => ({
flags: { teamWorkspacesEnabled: false }
}))
}))

// Mock the useTeamWorkspaceStore
vi.mock('@/platform/workspace/stores/teamWorkspaceStore', () => ({
useTeamWorkspaceStore: vi.fn(() => ({
workspaceName: { value: '' },
initState: { value: 'idle' }
}))
}))
Copy link
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick | 🔵 Trivial

Consider using vi.hoisted() to enable per-test mock state manipulation.

The current mocks are static, making it impossible to test the component's behavior with different states (e.g., initState: 'ready' vs 'idle', or teamWorkspacesEnabled: true vs false). Per the coding guidelines, use vi.hoisted() to allow per-test Arrange phase manipulation of mock state.

Additionally, the PR objectives mention fixing "flash of wrong workspace icon (replaced with loader)" and "credits showing 0" behavior tied to initState, but no tests verify this new loading/state-driven behavior.

♻️ Suggested refactor to enable per-test state control
+const mockFeatureFlags = vi.hoisted(() => ({
+  teamWorkspacesEnabled: false
+}))
+
+const mockWorkspaceStore = vi.hoisted(() => ({
+  workspaceName: { value: '' },
+  initState: { value: 'idle' }
+}))
+
 // Mock pinia
 vi.mock('pinia', () => ({
   storeToRefs: vi.fn((store) => store)
 }))

 // Mock the useFeatureFlags composable
 vi.mock('@/composables/useFeatureFlags', () => ({
-  useFeatureFlags: vi.fn(() => ({
-    flags: { teamWorkspacesEnabled: false }
-  }))
+  useFeatureFlags: vi.fn(() => ({
+    flags: mockFeatureFlags
+  }))
 }))

 // Mock the useTeamWorkspaceStore
 vi.mock('@/platform/workspace/stores/teamWorkspaceStore', () => ({
-  useTeamWorkspaceStore: vi.fn(() => ({
-    workspaceName: { value: '' },
-    initState: { value: 'idle' }
-  }))
+  useTeamWorkspaceStore: vi.fn(() => mockWorkspaceStore)
 }))

Then add tests for the new behavior:

it('shows loading state when initState is not ready', () => {
  mockWorkspaceStore.initState.value = 'loading'
  const wrapper = mountComponent()
  // Assert Skeleton is rendered or workspace icon is hidden
})

it('shows workspace content when initState is ready', () => {
  mockWorkspaceStore.initState.value = 'ready'
  const wrapper = mountComponent()
  // Assert workspace avatar/icon is rendered
})

Based on learnings, vi.hoisted() should be used when necessary to allow per-test Arrange phase manipulation of deeper mock state.

🤖 Prompt for AI Agents
In `@src/components/topbar/CurrentUserButton.test.ts` around lines 28 - 45, The
mocks for storeToRefs, useFeatureFlags, and useTeamWorkspaceStore are static and
must be converted to hoisted factories so tests can mutate their return values
per-test; replace the current vi.mock bodies with vi.hoisted() factories that
return mutable mock objects (e.g., an exported/mock variable for flags and
mockWorkspaceStore with workspaceName and initState refs) so individual tests
can set mockWorkspaceStore.initState.value and flags.teamWorkspacesEnabled
before mounting; update tests to mutate these shared mock objects in Arrange and
add assertions for loading vs ready states (checking Skeleton/loader vs
workspace avatar) using the same symbols: storeToRefs, useFeatureFlags, and
useTeamWorkspaceStore.

@simula-r simula-r merged commit 5eda23b into main Jan 27, 2026
27 checks passed
@simula-r simula-r deleted the fix/workspaces-icon-and-credits-0 branch January 27, 2026 00:33
github-actions bot pushed a commit that referenced this pull request Jan 27, 2026
#8323)

## Summary

- Fix: flash of wrong workspace icon (replaced with loader)
- Fix: personal workspace showing 0 credits

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8323-fix-workspace-icon-flash-and-credits-showing-0-while-workspace-is-in-2f46d73d36508159b52fec3fa0c17e35)
by [Unito](https://www.unito.io)
@comfy-pr-bot
Copy link
Member

@simula-r Successfully backported to #8324

@github-actions github-actions bot removed the needs-backport Fix/change that needs to be cherry-picked to the current feature freeze branch label Jan 27, 2026
simula-r added a commit that referenced this pull request Jan 27, 2026
… while workspace is in… (#8324)

Backport of #8323 to `cloud/1.37`

Automatically created by backport workflow.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8324-backport-cloud-1-37-fix-workspace-icon-flash-and-credits-showing-0-while-workspace-is--2f56d73d365081e18764dc79feadbf3a)
by [Unito](https://www.unito.io)

Co-authored-by: Simula_r <18093452+simula-r@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cloud/1.37 Backport PRs for cloud 1.37 size:M This PR changes 30-99 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants