From 4597b7e6009548ebabf56fa687a90adbc55b4d68 Mon Sep 17 00:00:00 2001 From: Benjamin Lu Date: Tue, 25 Nov 2025 11:23:39 -0800 Subject: [PATCH] [feat] Improve queue job item UX based on design feedback (#6893) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary - Running jobs now show cancel button at all times (always visible, not just on hover) - Cancel/delete buttons use destructive red styling by default with hover state - Changed pending job icon from clock to loader-circle with spin animation - Fixed icon buttons to be square (size-6) instead of rectangular - Added TODO comment for future declarative button config system - Pending hint ("Job added to queue") now shows only once per entry and no longer resets when other jobs update - Spinner animation now applies only to the pending loader icon; completed/check icons no longer spin - Queue overlay hover/active state also triggers when hovering the top menu bar so controls stay visible ## Design Spec https://www.notion.so/comfy-org/Design-Queue-Dialog-Job-Ordering-and-Cancel-Button-Visibility-2b46d73d365081748a43d5cc9fbe2639 ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-6893-feat-Improve-queue-job-item-UX-based-on-design-feedback-2b56d73d365081a2bc7ef6f6fea1c739) by [Unito](https://www.unito.io) --------- Co-authored-by: Claude --- src/components/TopMenuSection.vue | 13 +++- src/components/queue/QueueOverlayActive.vue | 2 +- src/components/queue/QueueProgressOverlay.vue | 19 ++++-- src/components/queue/job/QueueJobItem.vue | 60 +++++++++++++++++-- src/composables/queue/useJobList.ts | 18 ++++-- src/utils/queueDisplay.ts | 2 +- 6 files changed, 92 insertions(+), 22 deletions(-) diff --git a/src/components/TopMenuSection.vue b/src/components/TopMenuSection.vue index 6e683a184..55c78dd5a 100644 --- a/src/components/TopMenuSection.vue +++ b/src/components/TopMenuSection.vue @@ -1,5 +1,10 @@ @@ -69,6 +77,7 @@ const isDesktop = isElectron() const { t } = useI18n() const isQueueOverlayExpanded = ref(false) const queueStore = useQueueStore() +const isTopMenuHovered = ref(false) const queuedCount = computed(() => queueStore.pendingTasks.length) const queueHistoryTooltipConfig = computed(() => buildTooltipConfig(t('sideToolbar.queueProgressOverlay.viewJobHistory')) diff --git a/src/components/queue/QueueOverlayActive.vue b/src/components/queue/QueueOverlayActive.vue index 76d339fcc..abb3ae982 100644 --- a/src/components/queue/QueueOverlayActive.vue +++ b/src/components/queue/QueueOverlayActive.vue @@ -47,7 +47,7 @@ v-tooltip.top="cancelJobTooltip" type="secondary" size="sm" - class="size-6 bg-secondary-background hover:bg-destructive-background" + class="size-6 bg-destructive-background hover:bg-destructive-background-hover" :aria-label="t('sideToolbar.queueProgressOverlay.interruptAll')" @click="$emit('interruptAll')" > diff --git a/src/components/queue/QueueProgressOverlay.vue b/src/components/queue/QueueProgressOverlay.vue index 7825b69a4..1b2ccb22e 100644 --- a/src/components/queue/QueueProgressOverlay.vue +++ b/src/components/queue/QueueProgressOverlay.vue @@ -60,7 +60,7 @@