Skip to content

Conversation

@benceruleanlu
Copy link
Member

@benceruleanlu benceruleanlu commented Jan 23, 2026

Add inline queue progress bar and summary per the new designs.

This adds an inline 3px progress bar in the actionbar container (docked or floating) and a compact summary line below the top menu that follows when floating, both gated by the QPO V2 flag and hidden while the overlay is expanded.

Screen.Recording.2026-01-23.at.6.49.39.PM.mov

┆Issue is synchronized with this Notion page by Unito

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 23, 2026

📝 Walkthrough

Walkthrough

Adds inline queue progress UI and wiring: new QueueInlineProgress and QueueInlineProgressSummary components; TopMenuSection and ComfyActionbar refactored to support teleporting or inline rendering of progress using a computed progressTarget and actionbar docking state; adds centralized node display-name resolver and test infra updates.

Changes

Cohort / File(s) Summary
Tests & test infra
src/components/TopMenuSection.test.ts, src/components/queue/QueueInlineProgress.test.ts
Replaced wrapper factory with typed WrapperOptions (pinia, stubs, attachTo), added localStorage cleanup, updated tests to pass options, and added tests for QueueInlineProgress and inline progress summary behaviors.
Inline progress components
src/components/queue/QueueInlineProgress.vue, src/components/queue/QueueInlineProgressSummary.vue
Added QueueInlineProgress (two-bar visual progress) and QueueInlineProgressSummary (accessible inline summary, hidden prop, i18n labels, visibility logic based on queue progress).
Top menu & actionbar UI & wiring
src/components/TopMenuSection.vue, src/components/actionbar/ComfyActionbar.vue
Reworked TopMenuSection layout, added localStorage-based isActionbarDocked, actionbar refs and teleport/target logic. ComfyActionbar now accepts topMenuContainer/queueOverlayExpanded props, computes/emits progressTarget, and switches draggable/positioning to use panel element.
Node title resolution util & usages
src/utils/nodeTitleUtil.ts, src/composables/queue/useJobList.ts, src/components/rightSidePanel/..., src/renderer/extensions/.../NodeHeader.vue, src/stores/workspace/favoritedWidgetsStore.ts, src/components/rightSidePanel/parameters/WidgetItem.vue
Added resolveNodeDisplayName util and replaced ad-hoc title logic across multiple components/composables to centralize i18n-aware node display name resolution with empty/untitled fallbacks.
Localization
src/locales/en/main.json
Added queueProgressOverlay.inlineTotalLabel translation entry.

Sequence Diagram

sequenceDiagram
    participant Queue as Queue Progress<br/>Composable
    participant TopMenu as TopMenuSection
    participant Actionbar as ComfyActionbar
    participant Progress as QueueInlineProgress<br/>Summary
    participant DOM as DOM/Teleport

    Queue->>TopMenu: expose progress state (total%, node%)
    TopMenu->>TopMenu: evaluate QPO V2 flag and isActionbarFloating
    TopMenu->>Actionbar: pass topMenuContainer / queueOverlayExpanded props
    Actionbar->>TopMenu: emit update:progressTarget (HTMLElement|null)
    TopMenu->>Progress: render inline summary (direct or via Teleport target)
    Progress->>DOM: mount UI at resolved target
    Queue-->>Progress: update percentages → UI updates
Loading

Possibly related PRs

Suggested reviewers

  • shinshin86
  • KarryCharon
  • Yorha4D
  • christian-byrne

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

❤️ Share

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

@github-actions
Copy link

github-actions bot commented Jan 23, 2026

🎨 Storybook Build Status

Build completed successfully!

⏰ Completed at: 01/28/2026, 08:07:39 PM UTC

🔗 Links


🎉 Your Storybook is ready for review!

@github-actions
Copy link

github-actions bot commented Jan 23, 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 (✅ 493 / ❌ 0 / ⚠️ 1 / ⏭️ 8)
  • 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 Jan 23, 2026

Bundle Size Report

Summary

  • Raw size: 22.1 MB baseline 22.1 MB — 🔴 +8.94 kB
  • Gzip: 4.6 MB baseline 4.59 MB — 🔴 +1.88 kB
  • Brotli: 3.41 MB baseline 3.41 MB — 🔴 +1.32 kB
  • Bundles: 173 current • 173 baseline • 84 added / 84 removed

Category Glance
Graph Workspace 🔴 +8.65 kB (968 kB) · Data & Services 🔴 +464 B (2.7 MB) · Other 🟢 -166 B (7.05 MB) · Panels & Settings 🟢 -8 B (471 kB) · Vendor & Third-Party ⚪ 0 B (10.7 MB) · Views & Navigation ⚪ 0 B (80.7 kB) · + 5 more

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

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-Cpuv7LrE.js (removed) 25.9 kB 🟢 -25.9 kB 🟢 -7.48 kB 🟢 -6.57 kB
assets/index-l3TG7wAx.js (new) 25.9 kB 🔴 +25.9 kB 🔴 +7.48 kB 🔴 +6.58 kB

Status: 1 added / 1 removed

Graph Workspace — 968 kB (baseline 960 kB) • 🔴 +8.65 kB

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-QvaMSwpa.js (new) 968 kB 🔴 +968 kB 🔴 +196 kB 🔴 +148 kB
assets/GraphView-CIZMAbsT.js (removed) 960 kB 🟢 -960 kB 🟢 -194 kB 🟢 -147 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-BkYqihoG.js (removed) 17.1 kB 🟢 -17.1 kB 🟢 -3.6 kB 🟢 -3.05 kB
assets/CloudSurveyView-DDMn7ZIN.js (new) 17.1 kB 🔴 +17.1 kB 🔴 +3.61 kB 🔴 +3.05 kB
assets/CloudLoginView-B9Sh3Q6S.js (removed) 11.8 kB 🟢 -11.8 kB 🟢 -3.09 kB 🟢 -2.72 kB
assets/CloudLoginView-BesqI5ii.js (new) 11.8 kB 🔴 +11.8 kB 🔴 +3.09 kB 🔴 +2.71 kB
assets/UserCheckView-DVrmmeO4.js (new) 10.5 kB 🔴 +10.5 kB 🔴 +2.44 kB 🔴 +2.13 kB
assets/UserCheckView-E5Fkm4NP.js (removed) 10.5 kB 🟢 -10.5 kB 🟢 -2.45 kB 🟢 -2.13 kB
assets/CloudLayoutView-C3Putzf_.js (removed) 8.54 kB 🟢 -8.54 kB 🟢 -2.24 kB 🟢 -1.96 kB
assets/CloudLayoutView-Co7SIM78.js (new) 8.54 kB 🔴 +8.54 kB 🔴 +2.24 kB 🔴 +1.96 kB
assets/CloudSignupView-Bh_5jB4D.js (new) 8.18 kB 🔴 +8.18 kB 🔴 +2.33 kB 🔴 +2.02 kB
assets/CloudSignupView-BqgyFVai.js (removed) 8.18 kB 🟢 -8.18 kB 🟢 -2.33 kB 🟢 -2.02 kB
assets/CloudForgotPasswordView-BZvJM1YO.js (removed) 6.26 kB 🟢 -6.26 kB 🟢 -1.93 kB 🟢 -1.69 kB
assets/CloudForgotPasswordView-Dahg7DRc.js (new) 6.26 kB 🔴 +6.26 kB 🔴 +1.93 kB 🔴 +1.69 kB
assets/UserSelectView-C6z7_wuE.js (new) 5.28 kB 🔴 +5.28 kB 🔴 +1.76 kB 🔴 +1.57 kB
assets/UserSelectView-DWXuple8.js (removed) 5.28 kB 🟢 -5.28 kB 🟢 -1.76 kB 🟢 -1.57 kB
assets/CloudSubscriptionRedirectView-BrIOvS1g.js (removed) 5.27 kB 🟢 -5.27 kB 🟢 -1.73 kB 🟢 -1.54 kB
assets/CloudSubscriptionRedirectView-pf9KrpWB.js (new) 5.27 kB 🔴 +5.27 kB 🔴 +1.73 kB 🔴 +1.54 kB
assets/CloudAuthTimeoutView-BdFFLWUq.js (new) 5.24 kB 🔴 +5.24 kB 🔴 +1.71 kB 🔴 +1.49 kB
assets/CloudAuthTimeoutView-QyPVBYcR.js (removed) 5.24 kB 🟢 -5.24 kB 🟢 -1.71 kB 🟢 -1.49 kB
assets/CloudSorryContactSupportView-n5f-fGMz.js 1.97 kB 1.97 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/layout-V93lMUpe.js 500 B 500 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 9 added / 9 removed

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

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/WorkspacePanel-MgQ5gx7l.js (removed) 29.8 kB 🟢 -29.8 kB 🟢 -5.89 kB 🟢 -5.15 kB
assets/WorkspacePanel-Yn6nPH_F.js (new) 29.8 kB 🔴 +29.8 kB 🔴 +5.89 kB 🔴 +5.14 kB
assets/LegacyCreditsPanel-CFuCYHzJ.js (removed) 23.8 kB 🟢 -23.8 kB 🟢 -5.95 kB 🟢 -5.23 kB
assets/LegacyCreditsPanel-jPwdHb_Y.js (new) 23.8 kB 🔴 +23.8 kB 🔴 +5.95 kB 🔴 +5.23 kB
assets/SubscriptionPanel-CRuV8pzD.js (removed) 21 kB 🟢 -21 kB 🟢 -5.05 kB 🟢 -4.45 kB
assets/SubscriptionPanel-DtceDAGh.js (new) 21 kB 🔴 +21 kB 🔴 +5.05 kB 🔴 +4.45 kB
assets/KeybindingPanel-BibEdWFp.js (new) 14.2 kB 🔴 +14.2 kB 🔴 +3.73 kB 🔴 +3.31 kB
assets/KeybindingPanel-tuJwmESq.js (removed) 14.2 kB 🟢 -14.2 kB 🟢 -3.74 kB 🟢 -3.31 kB
assets/AboutPanel-BsPg6l7d.js (removed) 10.8 kB 🟢 -10.8 kB 🟢 -2.68 kB 🟢 -2.43 kB
assets/AboutPanel-Ejcqa8Wv.js (new) 10.8 kB 🔴 +10.8 kB 🔴 +2.68 kB 🔴 +2.43 kB
assets/ExtensionPanel-CxDhZCus.js (new) 10.2 kB 🔴 +10.2 kB 🔴 +2.71 kB 🔴 +2.4 kB
assets/ExtensionPanel-mUySgsFt.js (removed) 10.2 kB 🟢 -10.2 kB 🟢 -2.71 kB 🟢 -2.4 kB
assets/ServerConfigPanel-BmMBhupT.js (removed) 7.23 kB 🟢 -7.23 kB 🟢 -2.17 kB 🟢 -1.94 kB
assets/ServerConfigPanel-k7_wVJZE.js (new) 7.23 kB 🔴 +7.23 kB 🔴 +2.17 kB 🔴 +1.94 kB
assets/UserPanel-BF6OKWDR.js (new) 6.58 kB 🔴 +6.58 kB 🔴 +1.9 kB 🔴 +1.67 kB
assets/UserPanel-D9RENFFV.js (removed) 6.58 kB 🟢 -6.58 kB 🟢 -1.91 kB 🟢 -1.67 kB
assets/refreshRemoteConfig-BNh-M_cm.js (removed) 1.31 kB 🟢 -1.31 kB 🟢 -571 B 🟢 -496 B
assets/refreshRemoteConfig-BxMmLTZR.js (new) 1.31 kB 🔴 +1.31 kB 🔴 +574 B 🔴 +494 B
assets/config-C5XnlntL.js (removed) 1.16 kB 🟢 -1.16 kB 🟢 -609 B 🟢 -535 B
assets/config-CDwXBuCp.js (new) 1.15 kB 🔴 +1.15 kB 🔴 +604 B 🔴 +531 B
assets/cloudRemoteConfig-BtN1vn7K.js (new) 1.08 kB 🔴 +1.08 kB 🔴 +501 B 🔴 +428 B
assets/cloudRemoteConfig-iwhqrkAs.js (removed) 1.08 kB 🟢 -1.08 kB 🟢 -495 B 🟢 -435 B
assets/refreshRemoteConfig-D0oiNw3P.js (removed) 169 B 🟢 -169 B 🟢 -108 B 🟢 -106 B
assets/refreshRemoteConfig-fi6PMbEA.js (new) 169 B 🔴 +169 B 🔴 +108 B 🔴 +105 B
assets/remoteConfig-B0mlVvm7.js 788 B 788 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-2UNjEj6k.js 32.9 kB 32.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-B2OMGvh7.js 31.2 kB 31.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BcujOfpn.js 29.6 kB 29.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BI09_t23.js 29.4 kB 29.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BKamuseh.js 25.8 kB 25.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BlTun9tZ.js 26.4 kB 26.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CZ62uO3e.js 30.2 kB 30.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DaK-NByz.js 35.2 kB 35.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DaS3cSXp.js 39.4 kB 39.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DWbMuaAa.js 32 kB 32 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-S7pA60Hj.js 30.4 kB 30.4 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-CdxneHai.js (removed) 3.54 kB 🟢 -3.54 kB 🟢 -1.24 kB 🟢 -1.05 kB
assets/auth-oTBw9sZc.js (new) 3.54 kB 🔴 +3.54 kB 🔴 +1.24 kB 🔴 +1.06 kB
assets/firebaseAuthStore-BkExDAVd.js (new) 217 B 🔴 +217 B 🔴 +136 B 🔴 +123 B
assets/firebaseAuthStore-DTbBYUJy.js (removed) 217 B 🟢 -217 B 🟢 -136 B 🟢 -118 B
assets/auth-B-kDgMrK.js (new) 178 B 🔴 +178 B 🔴 +142 B 🔴 +132 B
assets/auth-Bo8gFAbp.js (removed) 178 B 🟢 -178 B 🟢 -140 B 🟢 -132 B

Status: 3 added / 3 removed

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

Modals, dialogs, drawers, and in-app editors

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useSubscriptionDialog-BOgFimIl.js (removed) 2.71 kB 🟢 -2.71 kB 🟢 -1.29 kB 🟢 -1.14 kB
assets/useSubscriptionDialog-zFNTs2ZM.js (new) 2.71 kB 🔴 +2.71 kB 🔴 +1.29 kB 🔴 +1.14 kB
assets/useSubscriptionDialog-B2Cdr0xI.js (new) 179 B 🔴 +179 B 🔴 +110 B 🔴 +98 B
assets/useSubscriptionDialog-CEirLXp6.js (removed) 179 B 🟢 -179 B 🟢 -110 B 🟢 -101 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-6teI5eCl.js (removed) 9.52 kB 🟢 -9.52 kB 🟢 -2.69 kB 🟢 -2.41 kB
assets/ComfyQueueButton-oVdWMvfn.js (new) 9.52 kB 🔴 +9.52 kB 🔴 +2.69 kB 🔴 +2.42 kB
assets/SubscribeButton-Bqzz7jvv.js (removed) 4.63 kB 🟢 -4.63 kB 🟢 -1.57 kB 🟢 -1.39 kB
assets/SubscribeButton-DrShLYkk.js (new) 4.63 kB 🔴 +4.63 kB 🔴 +1.57 kB 🔴 +1.39 kB
assets/CloudBadge-sJFM8Oh-.js (removed) 1.85 kB 🟢 -1.85 kB 🟢 -719 B 🟢 -642 B
assets/CloudBadge-zB1el_Hr.js (new) 1.85 kB 🔴 +1.85 kB 🔴 +719 B 🔴 +641 B
assets/cloudFeedbackTopbarButton-DBTXalti.js (removed) 1.24 kB 🟢 -1.24 kB 🟢 -674 B 🟢 -573 B
assets/cloudFeedbackTopbarButton-Fhmruj1p.js (new) 1.24 kB 🔴 +1.24 kB 🔴 +675 B 🔴 +574 B
assets/ComfyQueueButton-DdnobUQJ.js (new) 181 B 🔴 +181 B 🔴 +118 B 🔴 +106 B
assets/ComfyQueueButton-DuKaiOmm.js (removed) 181 B 🟢 -181 B 🟢 -118 B 🟢 -121 B
assets/Button-DNv6_y7F.js 3.82 kB 3.82 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/TopbarBadge-qACg_vGT.js 8.36 kB 8.36 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserAvatar-D80lITos.js 1.73 kB 1.73 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetButton-DlN5KSpc.js 2.41 kB 2.41 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 5 added / 5 removed

Data & Services — 2.7 MB (baseline 2.7 MB) • 🔴 +464 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/dialogService-BxoQGOPA.js (new) 2 MB 🔴 +2 MB 🔴 +423 kB 🔴 +323 kB
assets/dialogService-BVUVvHcB.js (removed) 2 MB 🟢 -2 MB 🟢 -423 kB 🟢 -323 kB
assets/api-DmqDmQwL.js (new) 672 kB 🔴 +672 kB 🔴 +148 kB 🔴 +118 kB
assets/api-BsM9ACXl.js (removed) 672 kB 🟢 -672 kB 🟢 -148 kB 🟢 -118 kB
assets/releaseStore-aFg-oe3r.js (new) 8.91 kB 🔴 +8.91 kB 🔴 +2.4 kB 🔴 +2.12 kB
assets/releaseStore-C2T1NYTJ.js (removed) 8.91 kB 🟢 -8.91 kB 🟢 -2.4 kB 🟢 -2.12 kB
assets/keybindingService-Cpcu_5qv.js (new) 6.78 kB 🔴 +6.78 kB 🔴 +1.74 kB 🔴 +1.52 kB
assets/keybindingService-CPEkjTUr.js (removed) 6.78 kB 🟢 -6.78 kB 🟢 -1.74 kB 🟢 -1.52 kB
assets/bootstrapStore-BwE68AOs.js (new) 2.69 kB 🔴 +2.69 kB 🔴 +1.03 kB 🔴 +961 B
assets/bootstrapStore-RoxLGl2t.js (removed) 2.69 kB 🟢 -2.69 kB 🟢 -1.03 kB 🟢 -954 B
assets/userStore-BRJTWnLo.js (removed) 2.16 kB 🟢 -2.16 kB 🟢 -811 B 🟢 -725 B
assets/userStore-CZE6dtz3.js (new) 2.16 kB 🔴 +2.16 kB 🔴 +811 B 🔴 +724 B
assets/audioService-DFdWOkeR.js (new) 2.03 kB 🔴 +2.03 kB 🔴 +929 B 🔴 +816 B
assets/audioService-DHEqYvXw.js (removed) 2.03 kB 🟢 -2.03 kB 🟢 -931 B 🟢 -816 B
assets/releaseStore-C7VsON0p.js (removed) 140 B 🟢 -140 B 🟢 -106 B 🟢 -106 B
assets/releaseStore-C9AuxH6Y.js (new) 140 B 🔴 +140 B 🔴 +106 B 🔴 +107 B
assets/serverConfigStore-DOoqLe5c.js 2.64 kB 2.64 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 8 added / 8 removed

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

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useErrorHandling-DAzjamMK.js (removed) 5.21 kB 🟢 -5.21 kB 🟢 -1.53 kB 🟢 -1.34 kB
assets/useErrorHandling-H_Cv1Nel.js (new) 5.21 kB 🔴 +5.21 kB 🔴 +1.54 kB 🔴 +1.34 kB
assets/useWorkspaceUI-A9q2aS8l.js (new) 3.42 kB 🔴 +3.42 kB 🔴 +977 B 🔴 +843 B
assets/useWorkspaceUI-C6f046Wa.js (removed) 3.42 kB 🟢 -3.42 kB 🟢 -976 B 🟢 -841 B
assets/useSubscriptionActions-BGupT7rc.js (removed) 2.22 kB 🟢 -2.22 kB 🟢 -865 B 🟢 -762 B
assets/useSubscriptionActions-Dpr4gAkb.js (new) 2.22 kB 🔴 +2.22 kB 🔴 +869 B 🔴 +760 B
assets/subscriptionCheckoutUtil-BSoM_G1B.js (new) 2.03 kB 🔴 +2.03 kB 🔴 +873 B 🔴 +771 B
assets/subscriptionCheckoutUtil-BZMJrSo2.js (removed) 2.03 kB 🟢 -2.03 kB 🟢 -873 B 🟢 -766 B
assets/useSubscriptionCredits-CyD2XlIn.js (new) 1.39 kB 🔴 +1.39 kB 🔴 +600 B 🔴 +529 B
assets/useSubscriptionCredits-D3HDNyia.js (removed) 1.39 kB 🟢 -1.39 kB 🟢 -598 B 🟢 -531 B
assets/audioUtils-72V--ydp.js (removed) 970 B 🟢 -970 B 🟢 -547 B 🟢 -459 B
assets/audioUtils-Xp5Gtg7Y.js (new) 970 B 🔴 +970 B 🔴 +549 B 🔴 +459 B
assets/useCurrentUser-BH087Mcc.js (removed) 145 B 🟢 -145 B 🟢 -114 B 🟢 -102 B
assets/useCurrentUser-BIY0uMgS.js (new) 145 B 🔴 +145 B 🔴 +114 B 🔴 +102 B
assets/_plugin-vue_export-helper-DuK_Fly3.js 467 B 467 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/colorUtil-GMAsfHxw.js 7.2 kB 7.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/markdownRendererUtil-ivqHoiOs.js 1.78 kB 1.78 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/tailwindUtil-CJjrIEVR.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-DHGfk3hn.js 408 kB 408 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-other-jpGqhHNG.js 4.1 MB 4.1 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-4Jj8eU28.js 3.04 MB 3.04 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-reka-ui-CEgfUa-v.js 256 kB 256 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-three-CERwhPwK.js 1.83 MB 1.83 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-tiptap-BxrEVL6s.js 650 kB 650 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vue-Dwii0E-t.js 13.6 kB 13.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-IX6P8SWv.js 398 kB 398 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Other — 7.05 MB (baseline 7.05 MB) • 🟢 -166 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/i18n-CK7Ku3qD.js (new) 496 kB 🔴 +496 kB 🔴 +96 kB 🔴 +71.5 kB
assets/i18n-yEs1bv5v.js (removed) 496 kB 🟢 -496 kB 🟢 -96 kB 🟢 -71.4 kB
assets/core-BMrKPYsl.js (removed) 180 kB 🟢 -180 kB 🟢 -43.3 kB 🟢 -36.2 kB
assets/core-DgRQHQtx.js (new) 180 kB 🔴 +180 kB 🔴 +43.3 kB 🔴 +36.2 kB
assets/WidgetSelect-UfiJ9Z2o.js (removed) 51 kB 🟢 -51 kB 🟢 -11.2 kB 🟢 -9.8 kB
assets/WidgetSelect-Xw_J0iuS.js (new) 51 kB 🔴 +51 kB 🔴 +11.3 kB 🔴 +9.81 kB
assets/Load3DControls-B-O45eTK.js (removed) 35.9 kB 🟢 -35.9 kB 🟢 -5.87 kB 🟢 -5.08 kB
assets/Load3DControls-D9Fr6TkO.js (new) 35.9 kB 🔴 +35.9 kB 🔴 +5.87 kB 🔴 +5.08 kB
assets/SubscriptionRequiredDialogContent-DqmDUPKG.js (new) 28.7 kB 🔴 +28.7 kB 🔴 +6.79 kB 🔴 +5.91 kB
assets/SubscriptionRequiredDialogContent-DXdi9cro.js (removed) 28.7 kB 🟢 -28.7 kB 🟢 -6.79 kB 🟢 -5.91 kB
assets/CurrentUserPopoverWorkspace-CBIv1FJA.js (new) 22.2 kB 🔴 +22.2 kB 🔴 +4.99 kB 🔴 +4.42 kB
assets/CurrentUserPopoverWorkspace-DxPjlYZN.js (removed) 22.2 kB 🟢 -22.2 kB 🟢 -5 kB 🟢 -4.42 kB
assets/Load3D-Bmzys_oc.js (new) 19.2 kB 🔴 +19.2 kB 🔴 +4.38 kB 🔴 +3.85 kB
assets/Load3D-CHZ7cPy6.js (removed) 19.2 kB 🟢 -19.2 kB 🟢 -4.37 kB 🟢 -3.85 kB
assets/WidgetRecordAudio-Bs6hTPVk.js (removed) 18.3 kB 🟢 -18.3 kB 🟢 -4.97 kB 🟢 -4.44 kB
assets/WidgetRecordAudio-CJ9bzAqX.js (new) 18.3 kB 🔴 +18.3 kB 🔴 +4.97 kB 🔴 +4.44 kB
assets/WidgetInputNumber--lCMBI3y.js (removed) 18.3 kB 🟢 -18.3 kB 🟢 -4.51 kB 🟢 -4.02 kB
assets/WidgetInputNumber-CTXccbjr.js (new) 18.3 kB 🔴 +18.3 kB 🔴 +4.51 kB 🔴 +4.02 kB
assets/SubscriptionPanelContentWorkspace-Dlb5vEem.js (new) 18.2 kB 🔴 +18.2 kB 🔴 +4.47 kB 🔴 +3.9 kB
assets/SubscriptionPanelContentWorkspace-DZdrAlNa.js (removed) 18.2 kB 🟢 -18.2 kB 🟢 -4.47 kB 🟢 -3.89 kB
assets/WidgetImageCrop-D_f78UyZ.js (new) 17.1 kB 🔴 +17.1 kB 🔴 +4.14 kB 🔴 +3.62 kB
assets/WidgetImageCrop-D2cUmreF.js (removed) 17.1 kB 🟢 -17.1 kB 🟢 -4.14 kB 🟢 -3.61 kB
assets/PanelTemplate-DY3hNBfj.js (removed) 16.2 kB 🟢 -16.2 kB 🟢 -5.46 kB 🟢 -4.8 kB
assets/PanelTemplate-lnQ_a8bN.js (new) 16.2 kB 🔴 +16.2 kB 🔴 +5.46 kB 🔴 +4.8 kB
assets/AudioPreviewPlayer-BNJIUsMb.js (new) 10.8 kB 🔴 +10.8 kB 🔴 +2.98 kB 🔴 +2.65 kB
assets/AudioPreviewPlayer-Wnbd-9k_.js (removed) 10.8 kB 🟢 -10.8 kB 🟢 -2.97 kB 🟢 -2.65 kB
assets/InviteMemberDialogContent-Dc1pdeIs.js (removed) 8.36 kB 🟢 -8.36 kB 🟢 -2.5 kB 🟢 -2.17 kB
assets/InviteMemberDialogContent-Uo9XlbQC.js (new) 8.36 kB 🔴 +8.36 kB 🔴 +2.51 kB 🔴 +2.16 kB
assets/WidgetWithControl-BIyta1-Q.js (new) 8.07 kB 🔴 +8.07 kB 🔴 +2.68 kB 🔴 +2.41 kB
assets/WidgetWithControl-Bz6MZs8n.js (removed) 8.07 kB 🟢 -8.07 kB 🟢 -2.68 kB 🟢 -2.42 kB
assets/CreateWorkspaceDialogContent-ByCU7u62.js (new) 5.93 kB 🔴 +5.93 kB 🔴 +1.93 kB 🔴 +1.69 kB
assets/CreateWorkspaceDialogContent-Carx5kRs.js (removed) 5.93 kB 🟢 -5.93 kB 🟢 -1.93 kB 🟢 -1.68 kB
assets/EditWorkspaceDialogContent-BaWbW4VR.js (new) 5.7 kB 🔴 +5.7 kB 🔴 +1.88 kB 🔴 +1.65 kB
assets/EditWorkspaceDialogContent-BjRJNQYI.js (removed) 5.7 kB 🟢 -5.7 kB 🟢 -1.88 kB 🟢 -1.65 kB
assets/ValueControlPopover-c63wVvLU.js (new) 5.17 kB 🔴 +5.17 kB 🔴 +1.69 kB 🔴 +1.5 kB
assets/ValueControlPopover-O4wTFK77.js (removed) 5.17 kB 🟢 -5.17 kB 🟢 -1.69 kB 🟢 -1.5 kB
assets/DeleteWorkspaceDialogContent-BgGEHV4e.js (removed) 4.59 kB 🟢 -4.59 kB 🟢 -1.56 kB 🟢 -1.35 kB
assets/DeleteWorkspaceDialogContent-VUKbiZOI.js (new) 4.59 kB 🔴 +4.59 kB 🔴 +1.56 kB 🔴 +1.35 kB
assets/LeaveWorkspaceDialogContent-Dg7HtsKr.js (removed) 4.41 kB 🟢 -4.41 kB 🟢 -1.5 kB 🟢 -1.3 kB
assets/LeaveWorkspaceDialogContent-ibm54yFX.js (new) 4.41 kB 🔴 +4.41 kB 🔴 +1.51 kB 🔴 +1.31 kB
assets/RemoveMemberDialogContent-CabUrzAu.js (removed) 4.38 kB 🟢 -4.38 kB 🟢 -1.46 kB 🟢 -1.27 kB
assets/RemoveMemberDialogContent-U7eTfgUr.js (new) 4.38 kB 🔴 +4.38 kB 🔴 +1.46 kB 🔴 +1.27 kB
assets/RevokeInviteDialogContent-Bc-AYaad.js (new) 4.29 kB 🔴 +4.29 kB 🔴 +1.47 kB 🔴 +1.29 kB
assets/RevokeInviteDialogContent-DHTdNj3O.js (removed) 4.29 kB 🟢 -4.29 kB 🟢 -1.47 kB 🟢 -1.29 kB
assets/GlobalToast-A_9mfdB3.js (new) 3.05 kB 🔴 +3.05 kB 🔴 +1.1 kB 🔴 +941 B
assets/GlobalToast-CwUmN9Hp.js (removed) 3.05 kB 🟢 -3.05 kB 🟢 -1.1 kB 🟢 -943 B
assets/SubscribeToRun-DZMOnvgi.js (new) 2.96 kB 🔴 +2.96 kB 🔴 +1.16 kB 🔴 +1.01 kB
assets/SubscribeToRun-rBRz--z7.js (removed) 2.96 kB 🟢 -2.96 kB 🟢 -1.15 kB 🟢 -1.01 kB
assets/cloudSessionCookie-C9uejCU6.js (removed) 2.94 kB 🟢 -2.94 kB 🟢 -928 B 🟢 -803 B
assets/cloudSessionCookie-sPcvLP_8.js (new) 2.94 kB 🔴 +2.94 kB 🔴 +928 B 🔴 +805 B
assets/BaseViewTemplate--cTh5NwI.js (new) 2.42 kB 🔴 +2.42 kB 🔴 +1.04 kB 🔴 +936 B
assets/BaseViewTemplate-cRCT6DSy.js (removed) 2.42 kB 🟢 -2.42 kB 🟢 -1.04 kB 🟢 -945 B
assets/CloudRunButtonWrapper-B95HGXAi.js (removed) 1.79 kB 🟢 -1.79 kB 🟢 -644 B 🟢 -565 B
assets/CloudRunButtonWrapper-DTg9M99E.js (new) 1.79 kB 🔴 +1.79 kB 🔴 +643 B 🔴 +565 B
assets/cloudBadges-CC3R-GGN.js (removed) 1.08 kB 🟢 -1.08 kB 🟢 -536 B 🟢 -475 B
assets/cloudBadges-CsAl1509.js (new) 1.08 kB 🔴 +1.08 kB 🔴 +540 B 🔴 +477 B
assets/graphHasMissingNodes-BlH3vRRV.js (removed) 1.06 kB 🟢 -1.06 kB 🟢 -461 B 🟢 -415 B
assets/graphHasMissingNodes-BXkrMFmy.js (new) 1.06 kB 🔴 +1.06 kB 🔴 +461 B 🔴 +409 B
assets/cloudSubscription-BDFNnIuj.js (new) 976 B 🔴 +976 B 🔴 +466 B 🔴 +399 B
assets/cloudSubscription-CoRttnGz.js (removed) 976 B 🟢 -976 B 🟢 -461 B 🟢 -397 B
assets/nightlyBadges-C1U6ZYCm.js (removed) 595 B 🟢 -595 B 🟢 -355 B 🟢 -309 B
assets/nightlyBadges-CqkRcwrS.js (new) 595 B 🔴 +595 B 🔴 +358 B 🔴 +310 B
assets/SubscriptionPanelContentWorkspace-Cj1Zv92Y.js (new) 266 B 🔴 +266 B 🔴 +136 B 🔴 +129 B
assets/SubscriptionPanelContentWorkspace-DzzjJtYU.js (removed) 266 B 🟢 -266 B 🟢 -136 B 🟢 -112 B
assets/i18n-C2wkDFMb.js (removed) 188 B 🟢 -188 B 🟢 -151 B 🟢 -127 B
assets/i18n-Cqw3TAmd.js (new) 188 B 🔴 +188 B 🔴 +151 B 🔴 +125 B
assets/WidgetInputNumber-BqlUc9u1.js (new) 186 B 🔴 +186 B 🔴 +119 B 🔴 +109 B
assets/WidgetInputNumber-D9q5oV9d.js (removed) 186 B 🟢 -186 B 🟢 -119 B 🟢 -121 B
assets/WidgetLegacy-Df3WW29j.js (new) 164 B 🔴 +164 B 🔴 +125 B 🔴 +119 B
assets/WidgetLegacy-DizxsEEy.js (removed) 164 B 🟢 -164 B 🟢 -125 B 🟢 -111 B
assets/Load3D-B2oZX21R.js (new) 131 B 🔴 +131 B 🔴 +107 B 🔴 +106 B
assets/Load3D-ColxYJoN.js (removed) 131 B 🟢 -131 B 🟢 -107 B 🟢 -118 B
assets/auto-DWs2ctGL.js 1.73 kB 1.73 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BEw5ErI4.js 18.5 kB 18.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BGeHkplA.js 17.9 kB 17.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BV0l36Iz.js 17.2 kB 17.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-C_Y3D6Cn.js 17.8 kB 17.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-C6piRza5.js 19.3 kB 19.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Cf8Zq1td.js 18.8 kB 18.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CiziP3Xs.js 18 kB 18 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-D1595tOr.js 19.3 kB 19.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DXauvccL.js 20.6 kB 20.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-P5QCEfZc.js 18 kB 18 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-WbYP_D61.js 17 kB 17 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/LazyImage-DHwPdKGO.js 14.1 kB 14.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-12Ugs8uH.js 113 kB 113 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-bK51E1AF.js 133 kB 133 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BpNRRXRJ.js 151 kB 151 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-c-Kg1DWL.js 126 kB 126 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-C16qe5Pa.js 144 kB 144 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-C2P63O3F.js 126 kB 126 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-C5b27iBR.js 112 kB 112 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CcswxyNG.js 173 kB 173 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-D6eu0Wen.js 128 kB 128 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DbxHumst.js 130 kB 130 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DKTrxQrQ.js 155 kB 155 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Media3DTop-DUmUhXD6.js 2.38 kB 2.38 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaAudioTop-CD66_Mw_.js 2 kB 2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaImageTop-Bqe7yvm_.js 2.34 kB 2.34 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaVideoTop-De3MzVmp.js 2.82 kB 2.82 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/mixpanel.module-CC2-PIpB.js 143 B 143 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-B0UaQKt6.js 363 kB 363 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-B68z80AD.js 413 kB 413 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Bg1UEeRw.js 448 kB 448 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CicFSATk.js 339 kB 339 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CinCueZ7.js 373 kB 373 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DgzjkU5p.js 366 kB 366 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DKHHBXVW.js 369 kB 369 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Dn1Haq99.js 342 kB 342 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DxR-7ogK.js 383 kB 383 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-qCfy7PeV.js 412 kB 412 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-xDY-sSQw.js 369 kB 369 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/OBJLoader2WorkerModule-DTMpvldF.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/previousFullPath-CmezY7As.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-BckXXL4E.js 4.21 kB 4.21 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widget-BJiJuR5i.js 518 B 518 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-CUtab2CB.js 4.71 kB 4.71 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-D79nBMxa.js 186 B 186 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetChart-CiXfBVBH.js 2.79 kB 2.79 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetColorPicker-BxNqMlFv.js 3.71 kB 3.71 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetGalleria-DDD96zwa.js 4.57 kB 4.57 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCompare-A6pZMGtc.js 3.79 kB 3.79 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputText-DSMUKRnt.js 2.58 kB 2.58 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetLayoutField-MDImyvc3.js 2.7 kB 2.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetMarkdown-C95PPn5g.js 3.22 kB 3.22 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetPropFilter-ERx8czR8.js 1.31 kB 1.31 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetTextarea-CV3BoahN.js 3.87 kB 3.87 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetToggleSwitch-ZdaYkxkD.js 3.26 kB 3.26 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetTypes-KPj-zM0O.js 573 B 573 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 36 added / 36 removed

@benceruleanlu benceruleanlu changed the base branch from main to fix/qpo-v2-queue-button-assets January 23, 2026 10:39
@benceruleanlu benceruleanlu changed the title Add inline queue progress bar and summary for QPO V2 Add inline queue progress bar and text summary Jan 23, 2026
@benceruleanlu benceruleanlu marked this pull request as ready for review January 23, 2026 11:58
@benceruleanlu benceruleanlu requested review from a team as code owners January 23, 2026 11:58
Copilot AI review requested due to automatic review settings January 23, 2026 11:58
@dosubot dosubot bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Jan 23, 2026
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR adds an inline queue progress bar in the actionbar and a compact text summary under the top menu for QPO V2, aligning with the new queue progress designs. Both inline indicators are gated by the QPO V2 setting and are intended to hide when the overlay is expanded.

Changes:

  • Add a localized label for the inline total progress and a new inline text summary component showing total and current-node progress.
  • Add a thin inline progress bar that overlays the actionbar panel, wired via Teleport from ComfyActionbar to either the top menu container or the floating panel.
  • Update TopMenuSection to host the new inline summary (either teleported under the floating actionbar or inline when docked) and adjust tests to stub the new component.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
src/locales/en/main.json Adds inlineTotalLabel string used by the new inline progress summary.
src/components/queue/QueueInlineProgressSummary.vue New component rendering a compact ARIA-friendly text summary of total and current-node queue progress.
src/components/queue/QueueInlineProgress.vue New component rendering the 3px inline progress bar for total and current-node progress inside the actionbar container.
src/components/actionbar/ComfyActionbar.vue Wires the inline progress bar via Teleport, exposes the panel element for external positioning, and gates the Teleport target on visibility and QPO V2 state.
src/components/TopMenuSection.vue Refactors the top menu layout, provides the actionbar container ref/instance to ComfyActionbar, and adds logic/Teleport targets for the inline progress summary based on QPO V2 and docked/floating state.
src/components/TopMenuSection.test.ts Updates component stubs to include QueueInlineProgressSummary so existing tests continue to mount TopMenuSection successfully.

Comment on lines +83 to +86
const { topMenuContainer, queueOverlayExpanded = false } = defineProps<{
topMenuContainer?: HTMLElement | null
queueOverlayExpanded?: boolean
}>()
Copy link

Copilot AI Jan 23, 2026

Choose a reason for hiding this comment

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

queueOverlayExpanded is destructured directly from defineProps, which makes it non-reactive; if the parent updates the queue-overlay-expanded prop after mount, the hidden prop passed to QueueInlineProgress will not update and the inline bar will not reliably hide when the overlay expansion state changes. To keep this in sync, use a reactive props object (e.g. via withDefaults(defineProps<...>(), ...)) or reference props.queueOverlayExpanded in the template instead of a destructured local.

Copilot uses AI. Check for mistakes.
Comment on lines +26 to +29
const { hidden = false, radiusClass = 'rounded-[7px]' } = defineProps<{
hidden?: boolean
radiusClass?: string
}>()
Copy link

Copilot AI Jan 23, 2026

Choose a reason for hiding this comment

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

hidden and radiusClass are destructured from defineProps, which breaks reactivity for these props; when the parent toggles hidden (e.g. based on queueOverlayExpanded) or changes radius-class as the actionbar docks/undocks, this component will keep using the initial values and not update its visibility or border radius. Consider using a props object (e.g. const props = withDefaults(defineProps<...>(), ...)) and reading props.hidden / props.radiusClass in the template so the inline progress bar responds to prop changes.

Copilot uses AI. Check for mistakes.
Comment on lines 206 to 225
const isInlineProgressVisible = computed(() => isQueuePanelV2Enabled.value)
type PanelElementTarget = HTMLElement | { value?: HTMLElement | null } | null
const shouldShowInlineProgressSummary = computed(
() => isInlineProgressVisible.value && isActionbarEnabled.value
)
const actionbarRef = ref<{ panelElement: PanelElementTarget } | null>(null)
const resolvePanelElement = (target: PanelElementTarget) => {
if (!target) return null
if (target instanceof HTMLElement) return target
if (typeof target === 'object' && 'value' in target) {
return target.value ?? null
}
return null
}
const inlineProgressSummaryTarget = computed(() => {
if (!shouldShowInlineProgressSummary.value || !isActionbarFloating.value) {
return null
}
return resolvePanelElement(actionbarRef.value?.panelElement ?? null)
})
Copy link

Copilot AI Jan 23, 2026

Choose a reason for hiding this comment

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

The new inline queue progress summary logic (isInlineProgressVisible, shouldShowInlineProgressSummary, and inlineProgressSummaryTarget) isn’t covered by tests, even though this file already has tests around queue overlay behavior and the QPO V2 flag. Adding tests that assert when the summary appears (docked vs. floating, QPO V2 on/off, overlay expanded/collapsed) would help prevent regressions in this new UI behavior.

Copilot uses AI. Check for mistakes.
Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c60114f935

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +114 to +120
<QueueInlineProgressSummary :hidden="isQueueOverlayExpanded" />
</div>
</Teleport>
<QueueInlineProgressSummary
v-else-if="shouldShowInlineProgressSummary && !isActionbarFloating"
class="pr-1"
:hidden="isQueueOverlayExpanded"

Choose a reason for hiding this comment

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

P2 Badge Do not hide V2 inline status based on legacy overlay state

When QPO V2 is enabled, the inline summary/progress is the only status UI, but it is still hidden whenever isQueueOverlayExpanded is true (a persisted V1-only setting). If a user ever expanded the legacy overlay, Comfy.Queue.History.Expanded stays true and there is no V2 control to reset it, so the new inline summary (and the inline progress bar via the same prop) never appears. This makes the V2 indicator disappear for a non-trivial set of users; consider gating the hidden prop on !isQueuePanelV2Enabled or explicitly clearing the overlay-expanded setting when V2 is active.

Useful? React with 👍 / 👎.

@dosubot dosubot bot added size:XL This PR changes 500-999 lines, ignoring generated files. and removed size:L This PR changes 100-499 lines, ignoring generated files. labels Jan 23, 2026
@benceruleanlu benceruleanlu added the New Browser Test Expectations New browser test screenshot should be set by github action label Jan 23, 2026
@github-actions
Copy link

Updating Playwright Expectations

Comment on lines 99 to 102
const panelRef = ref<ComponentPublicInstance | null>(null)
const panelElement = computed(
() => (panelRef.value?.$el as HTMLElement | undefined) ?? null
)
Copy link
Contributor

Choose a reason for hiding this comment

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

This seems slightly over engineered

Copy link
Member Author

Choose a reason for hiding this comment

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

I changed it to vueuse's unrefelement, but I think it was suitable as is, did you have anything specific in mind?

Copy link
Contributor

Choose a reason for hiding this comment

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

Just not sure why this needs to be computed

return panelElement.value
})

defineExpose({ panelElement })
Copy link
Contributor

Choose a reason for hiding this comment

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

Agree with coderabbit

Copy link
Member Author

Choose a reason for hiding this comment

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

OK, changed to emit the target instead

Copy link
Contributor

Choose a reason for hiding this comment

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

How about also changing these places to use this?

  • src/renderer/extensions/vueNodes/components/NodeHeader.vue L162-169
  • src/components/rightSidePanel/RightSidePanel.vue L148-151
  • src/components/rightSidePanel/parameters/WidgetItem.vue L62
  • src/stores/workspace/favoritedWidgetsStore.ts L219

Copy link
Member Author

Choose a reason for hiding this comment

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

I thought it'd be a bit out of scope for this PR, but I made the change anyway

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@src/components/TopMenuSection.test.ts`:
- Around line 267-302: The test currently stubs QueueInlineProgressSummary and
queries the stub element; instead register the real QueueInlineProgressSummary
component in the test and query it by accessible attributes (e.g.,
role="status") rather than the stub selector. Concretely, remove
QueueInlineProgressSummary from the stubs map when calling createWrapper (or
explicitly import and provide the real component), ensure the ComfyActionbarStub
still emits update:progressTarget to actionbarTarget, and replace the assertion
that checks actionbarTarget.querySelector('queue-inline-progress-summary-stub')
with a query for an element with the accessible property (for example
actionbarTarget.querySelector('[role="status"]') or using getByRole) so the test
verifies the real component and accessibility attributes.
♻️ Duplicate comments (1)
src/components/TopMenuSection.vue (1)

106-122: Consider the interaction between V2 inline progress and legacy overlay state.

When QPO V2 is enabled, the inline progress summary still hides based on isQueueOverlayExpanded, which is a persisted V1 setting (Comfy.Queue.History.Expanded). If a user previously expanded the legacy overlay and then enables V2, the inline summary would be hidden with no V2 UI to toggle it back.

Consider either:

  1. Ignoring isQueueOverlayExpanded when QPO V2 is enabled
  2. Resetting the overlay-expanded state when V2 is activated

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@src/components/TopMenuSection.test.ts`:
- Around line 230-240: The helper function configureSettings currently has no
explicit return type; update its signature to declare an explicit void return
type (e.g., configureSettings(...): void) to improve type safety and
readability, and ensure any implementation (including the
vi.mocked(settingStore.get).mockImplementation callback) does not accidentally
return a value; reference configureSettings, useSettingStore, and vi.mocked in
your change so the type annotation and behavior are clear.

Comment on lines +230 to +240
const configureSettings = (
pinia: ReturnType<typeof createTestingPinia>,
qpoV2Enabled: boolean
) => {
const settingStore = useSettingStore(pinia)
vi.mocked(settingStore.get).mockImplementation((key) => {
if (key === 'Comfy.Queue.QPOV2') return qpoV2Enabled
if (key === 'Comfy.UseNewMenu') return 'Top'
return undefined
})
}
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 explicit return type annotation for type safety.

The configureSettings helper function lacks a return type annotation. While it implicitly returns void, adding an explicit annotation improves readability and catches accidental return value bugs.

♻️ Suggested improvement
-    const configureSettings = (
+    const configureSettings = (
       pinia: ReturnType<typeof createTestingPinia>,
       qpoV2Enabled: boolean
-    ) => {
+    ): void => {
📝 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
const configureSettings = (
pinia: ReturnType<typeof createTestingPinia>,
qpoV2Enabled: boolean
) => {
const settingStore = useSettingStore(pinia)
vi.mocked(settingStore.get).mockImplementation((key) => {
if (key === 'Comfy.Queue.QPOV2') return qpoV2Enabled
if (key === 'Comfy.UseNewMenu') return 'Top'
return undefined
})
}
const configureSettings = (
pinia: ReturnType<typeof createTestingPinia>,
qpoV2Enabled: boolean
): void => {
const settingStore = useSettingStore(pinia)
vi.mocked(settingStore.get).mockImplementation((key) => {
if (key === 'Comfy.Queue.QPOV2') return qpoV2Enabled
if (key === 'Comfy.UseNewMenu') return 'Top'
return undefined
})
}
🤖 Prompt for AI Agents
In `@src/components/TopMenuSection.test.ts` around lines 230 - 240, The helper
function configureSettings currently has no explicit return type; update its
signature to declare an explicit void return type (e.g., configureSettings(...):
void) to improve type safety and readability, and ensure any implementation
(including the vi.mocked(settingStore.get).mockImplementation callback) does not
accidentally return a value; reference configureSettings, useSettingStore, and
vi.mocked in your change so the type annotation and behavior are clear.

Copy link
Contributor

@christian-byrne christian-byrne left a comment

Choose a reason for hiding this comment

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

Looks good

pythongosssss
pythongosssss previously approved these changes Jan 28, 2026
@benceruleanlu benceruleanlu added the New Browser Test Expectations New browser test screenshot should be set by github action label Jan 28, 2026
@benceruleanlu benceruleanlu merged commit cbd073f into main Jan 28, 2026
28 checks passed
@benceruleanlu benceruleanlu deleted the bl-inline-progress branch January 28, 2026 20:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

New Browser Test Expectations New browser test screenshot should be set by github action size:XL This PR changes 500-999 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants