From 8c74a0347199660e2596d33c2a4fca1a12771bef Mon Sep 17 00:00:00 2001 From: Benjamin Lu Date: Thu, 22 Jan 2026 19:00:55 -0800 Subject: [PATCH 01/41] fix: open assets tab when QPO V2 enabled --- src/components/TopMenuSection.test.ts | 38 +++++++++++++++++++++++++-- src/components/TopMenuSection.vue | 23 ++++++++++++++-- 2 files changed, 57 insertions(+), 4 deletions(-) diff --git a/src/components/TopMenuSection.test.ts b/src/components/TopMenuSection.test.ts index 6640f9b885f..12502d7a327 100644 --- a/src/components/TopMenuSection.test.ts +++ b/src/components/TopMenuSection.test.ts @@ -11,7 +11,9 @@ import type { JobListItem, JobStatus } from '@/platform/remote/comfyui/jobs/jobTypes' +import { useSettingStore } from '@/platform/settings/settingStore' import { TaskItemImpl, useQueueStore } from '@/stores/queueStore' +import { useSidebarTabStore } from '@/stores/workspace/sidebarTabStore' import { isElectron } from '@/utils/envUtil' const mockData = vi.hoisted(() => ({ isLoggedIn: false })) @@ -32,7 +34,7 @@ vi.mock('@/stores/firebaseAuthStore', () => ({ })) })) -function createWrapper() { +function createWrapper(pinia = createTestingPinia({ createSpy: vi.fn })) { const i18n = createI18n({ legacy: false, locale: 'en', @@ -51,7 +53,7 @@ function createWrapper() { return mount(TopMenuSection, { global: { - plugins: [createTestingPinia({ createSpy: vi.fn }), i18n], + plugins: [pinia, i18n], stubs: { SubgraphBreadcrumb: true, QueueProgressOverlay: true, @@ -134,4 +136,36 @@ describe('TopMenuSection', () => { const queueButton = wrapper.find('[data-testid="queue-overlay-toggle"]') expect(queueButton.text()).toContain('3 active') }) + + it('hides queue progress overlay when QPO V2 is enabled', async () => { + const pinia = createTestingPinia({ createSpy: vi.fn }) + const settingStore = useSettingStore(pinia) + vi.mocked(settingStore.get).mockImplementation((key) => + key === 'Comfy.Queue.QPOV2' ? true : undefined + ) + const wrapper = createWrapper(pinia) + + await nextTick() + + expect(wrapper.find('[data-testid="queue-overlay-toggle"]').exists()).toBe( + true + ) + expect( + wrapper.findComponent({ name: 'QueueProgressOverlay' }).exists() + ).toBe(false) + }) + + it('opens the assets sidebar tab when QPO V2 is enabled', async () => { + const pinia = createTestingPinia({ createSpy: vi.fn }) + const settingStore = useSettingStore(pinia) + vi.mocked(settingStore.get).mockImplementation((key) => + key === 'Comfy.Queue.QPOV2' ? true : undefined + ) + const wrapper = createWrapper(pinia) + const sidebarTabStore = useSidebarTabStore(pinia) + + await wrapper.find('[data-testid="queue-overlay-toggle"]').trigger('click') + + expect(sidebarTabStore.activeSidebarTabId).toBe('assets') + }) }) diff --git a/src/components/TopMenuSection.vue b/src/components/TopMenuSection.vue index a205370389b..966eca29d35 100644 --- a/src/components/TopMenuSection.vue +++ b/src/components/TopMenuSection.vue @@ -45,7 +45,9 @@ v-tooltip.bottom="queueHistoryTooltipConfig" type="destructive" size="md" - :aria-pressed="isQueueOverlayExpanded" + :aria-pressed=" + isQueueProgressOverlayVisible ? isQueueOverlayExpanded : undefined + " class="px-3" data-testid="queue-overlay-toggle" @click="toggleQueueOverlay" @@ -54,7 +56,11 @@ {{ activeJobsLabel }} - {{ t('sideToolbar.queueProgressOverlay.expandCollapsedQueue') }} + {{ + isQueuePanelV2Enabled + ? t('sideToolbar.queueProgressOverlay.viewJobHistory') + : t('sideToolbar.queueProgressOverlay.expandCollapsedQueue') + }} @@ -103,6 +110,7 @@ import { app } from '@/scripts/app' import { useCommandStore } from '@/stores/commandStore' import { useQueueStore, useQueueUIStore } from '@/stores/queueStore' import { useRightSidePanelStore } from '@/stores/workspace/rightSidePanelStore' +import { useSidebarTabStore } from '@/stores/workspace/sidebarTabStore' import { useWorkspaceStore } from '@/stores/workspaceStore' import { isElectron } from '@/utils/envUtil' import { useConflictAcknowledgment } from '@/workbench/extensions/manager/composables/useConflictAcknowledgment' @@ -120,6 +128,7 @@ const { toastErrorHandler } = useErrorHandling() const commandStore = useCommandStore() const queueStore = useQueueStore() const queueUIStore = useQueueUIStore() +const sidebarTabStore = useSidebarTabStore() const { activeJobsCount } = storeToRefs(queueStore) const { isOverlayExpanded: isQueueOverlayExpanded } = storeToRefs(queueUIStore) const releaseStore = useReleaseStore() @@ -138,6 +147,12 @@ const activeJobsLabel = computed(() => { const isIntegratedTabBar = computed( () => settingStore.get('Comfy.UI.TabBarLayout') === 'Integrated' ) +const isQueuePanelV2Enabled = computed(() => + settingStore.get('Comfy.Queue.QPOV2') +) +const isQueueProgressOverlayVisible = computed( + () => !isQueuePanelV2Enabled.value +) const queueHistoryTooltipConfig = computed(() => buildTooltipConfig(t('sideToolbar.queueProgressOverlay.viewJobHistory')) ) @@ -167,6 +182,10 @@ onMounted(() => { }) const toggleQueueOverlay = () => { + if (isQueuePanelV2Enabled.value) { + sidebarTabStore.activeSidebarTabId = 'assets' + return + } commandStore.execute('Comfy.Queue.ToggleOverlay') } From 9fb11a1a7e66379cfbac6026146699de833b0d9a Mon Sep 17 00:00:00 2001 From: Benjamin Lu Date: Thu, 22 Jan 2026 19:24:23 -0800 Subject: [PATCH 02/41] fix: toggle assets tab from queue button --- src/components/TopMenuSection.test.ts | 19 ++++++++++++++++++- src/components/TopMenuSection.vue | 2 +- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/components/TopMenuSection.test.ts b/src/components/TopMenuSection.test.ts index 12502d7a327..b767ab7f8b6 100644 --- a/src/components/TopMenuSection.test.ts +++ b/src/components/TopMenuSection.test.ts @@ -156,7 +156,7 @@ describe('TopMenuSection', () => { }) it('opens the assets sidebar tab when QPO V2 is enabled', async () => { - const pinia = createTestingPinia({ createSpy: vi.fn }) + const pinia = createTestingPinia({ createSpy: vi.fn, stubActions: false }) const settingStore = useSettingStore(pinia) vi.mocked(settingStore.get).mockImplementation((key) => key === 'Comfy.Queue.QPOV2' ? true : undefined @@ -168,4 +168,21 @@ describe('TopMenuSection', () => { expect(sidebarTabStore.activeSidebarTabId).toBe('assets') }) + + it('toggles the assets sidebar tab when QPO V2 is enabled', async () => { + const pinia = createTestingPinia({ createSpy: vi.fn, stubActions: false }) + const settingStore = useSettingStore(pinia) + vi.mocked(settingStore.get).mockImplementation((key) => + key === 'Comfy.Queue.QPOV2' ? true : undefined + ) + const wrapper = createWrapper(pinia) + const sidebarTabStore = useSidebarTabStore(pinia) + const toggleButton = wrapper.find('[data-testid="queue-overlay-toggle"]') + + await toggleButton.trigger('click') + expect(sidebarTabStore.activeSidebarTabId).toBe('assets') + + await toggleButton.trigger('click') + expect(sidebarTabStore.activeSidebarTabId).toBe(null) + }) }) diff --git a/src/components/TopMenuSection.vue b/src/components/TopMenuSection.vue index 966eca29d35..712846f81e4 100644 --- a/src/components/TopMenuSection.vue +++ b/src/components/TopMenuSection.vue @@ -183,7 +183,7 @@ onMounted(() => { const toggleQueueOverlay = () => { if (isQueuePanelV2Enabled.value) { - sidebarTabStore.activeSidebarTabId = 'assets' + sidebarTabStore.toggleSidebarTab('assets') return } commandStore.execute('Comfy.Queue.ToggleOverlay') From 76095542f4b1a26d6466618ba0d04cc0af614943 Mon Sep 17 00:00:00 2001 From: Benjamin Lu Date: Thu, 22 Jan 2026 20:13:26 -0800 Subject: [PATCH 03/41] test: cover queue button behavior by QPO setting --- src/components/TopMenuSection.test.ts | 17 +++++++++++++++++ src/components/TopMenuSection.vue | 7 ++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/components/TopMenuSection.test.ts b/src/components/TopMenuSection.test.ts index 16b6430d16b..8d4f3673db1 100644 --- a/src/components/TopMenuSection.test.ts +++ b/src/components/TopMenuSection.test.ts @@ -13,6 +13,7 @@ import type { JobStatus } from '@/platform/remote/comfyui/jobs/jobTypes' import { useSettingStore } from '@/platform/settings/settingStore' +import { useCommandStore } from '@/stores/commandStore' import { TaskItemImpl, useQueueStore } from '@/stores/queueStore' import { useSidebarTabStore } from '@/stores/workspace/sidebarTabStore' import { isElectron } from '@/utils/envUtil' @@ -162,6 +163,22 @@ describe('TopMenuSection', () => { ).toBe(false) }) + it('toggles the queue progress overlay when QPO V2 is disabled', async () => { + const pinia = createTestingPinia({ createSpy: vi.fn, stubActions: false }) + const settingStore = useSettingStore(pinia) + vi.mocked(settingStore.get).mockImplementation((key) => + key === 'Comfy.Queue.QPOV2' ? false : undefined + ) + const wrapper = createWrapper(pinia) + const commandStore = useCommandStore(pinia) + + await wrapper.find('[data-testid="queue-overlay-toggle"]').trigger('click') + + expect(commandStore.execute).toHaveBeenCalledWith( + 'Comfy.Queue.ToggleOverlay' + ) + }) + it('opens the assets sidebar tab when QPO V2 is enabled', async () => { const pinia = createTestingPinia({ createSpy: vi.fn, stubActions: false }) const settingStore = useSettingStore(pinia) diff --git a/src/components/TopMenuSection.vue b/src/components/TopMenuSection.vue index d365d3fd85b..de91e6da543 100644 --- a/src/components/TopMenuSection.vue +++ b/src/components/TopMenuSection.vue @@ -46,7 +46,11 @@ type="destructive" size="md" :aria-pressed=" - isQueueProgressOverlayVisible ? isQueueOverlayExpanded : undefined + isQueuePanelV2Enabled + ? activeSidebarTabId === 'assets' + : isQueueProgressOverlayVisible + ? isQueueOverlayExpanded + : undefined " class="px-3" data-testid="queue-overlay-toggle" @@ -137,6 +141,7 @@ const queueUIStore = useQueueUIStore() const sidebarTabStore = useSidebarTabStore() const { activeJobsCount } = storeToRefs(queueStore) const { isOverlayExpanded: isQueueOverlayExpanded } = storeToRefs(queueUIStore) +const { activeSidebarTabId } = storeToRefs(sidebarTabStore) const releaseStore = useReleaseStore() const { shouldShowRedDot: showReleaseRedDot } = storeToRefs(releaseStore) const { shouldShowRedDot: shouldShowConflictRedDot } = From c63e27f4bb91de9d3fc8933b58fba0be7ad309ce Mon Sep 17 00:00:00 2001 From: Benjamin Lu Date: Fri, 23 Jan 2026 01:46:22 -0800 Subject: [PATCH 04/41] Add inline progress text and progress bar --- src/components/TopMenuSection.test.ts | 1 + src/components/TopMenuSection.vue | 187 ++++++++++-------- src/components/actionbar/ComfyActionbar.vue | 24 ++- src/components/queue/QueueInlineProgress.vue | 33 ++++ .../queue/QueueInlineProgressSummary.vue | 72 +++++++ src/locales/en/main.json | 1 + 6 files changed, 239 insertions(+), 79 deletions(-) create mode 100644 src/components/queue/QueueInlineProgress.vue create mode 100644 src/components/queue/QueueInlineProgressSummary.vue diff --git a/src/components/TopMenuSection.test.ts b/src/components/TopMenuSection.test.ts index 8d4f3673db1..f40bef39bf0 100644 --- a/src/components/TopMenuSection.test.ts +++ b/src/components/TopMenuSection.test.ts @@ -60,6 +60,7 @@ function createWrapper(pinia = createTestingPinia({ createSpy: vi.fn })) { stubs: { SubgraphBreadcrumb: true, QueueProgressOverlay: true, + QueueInlineProgressSummary: true, CurrentUserButton: true, LoginButton: true, ContextMenu: { diff --git a/src/components/TopMenuSection.vue b/src/components/TopMenuSection.vue index de91e6da543..fe8bc94017e 100644 --- a/src/components/TopMenuSection.vue +++ b/src/components/TopMenuSection.vue @@ -1,101 +1,121 @@ diff --git a/src/components/queue/QueueInlineProgressSummary.vue b/src/components/queue/QueueInlineProgressSummary.vue new file mode 100644 index 00000000000..1d19dc8d03e --- /dev/null +++ b/src/components/queue/QueueInlineProgressSummary.vue @@ -0,0 +1,72 @@ + + + diff --git a/src/locales/en/main.json b/src/locales/en/main.json index bc582140abc..41df39926ca 100644 --- a/src/locales/en/main.json +++ b/src/locales/en/main.json @@ -742,6 +742,7 @@ "title": "Queue Progress", "total": "Total: {percent}", "colonPercent": ": {percent}", + "inlineTotalLabel": "Total", "currentNode": "Current node:", "viewAllJobs": "View all jobs", "viewList": "List view", From 76b7137fa1403247dc4f7b0315e01139bba5b7f6 Mon Sep 17 00:00:00 2001 From: Benjamin Lu Date: Fri, 23 Jan 2026 02:49:30 -0800 Subject: [PATCH 05/41] Adjust spacing --- src/components/queue/QueueInlineProgressSummary.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/queue/QueueInlineProgressSummary.vue b/src/components/queue/QueueInlineProgressSummary.vue index 1d19dc8d03e..0ab749928f7 100644 --- a/src/components/queue/QueueInlineProgressSummary.vue +++ b/src/components/queue/QueueInlineProgressSummary.vue @@ -1,12 +1,12 @@