From 72124a9fb02c617ae5d1fde25489d93b690365dd Mon Sep 17 00:00:00 2001 From: Benjamin Lu Date: Mon, 24 Nov 2025 13:03:37 -0800 Subject: [PATCH] [feat] Improve queue job item UX based on design feedback MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Running jobs now show cancel button at all times (always visible) - Cancel/delete buttons use destructive red styling by default - 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 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/components/queue/QueueOverlayActive.vue | 2 +- src/components/queue/job/QueueJobItem.vue | 59 ++++++++++++++++++--- src/utils/queueDisplay.ts | 2 +- 3 files changed, 55 insertions(+), 8 deletions(-) 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/job/QueueJobItem.vue b/src/components/queue/job/QueueJobItem.vue index 8158c03cf..5f01fe0d4 100644 --- a/src/components/queue/job/QueueJobItem.vue +++ b/src/components/queue/job/QueueJobItem.vue @@ -82,7 +82,16 @@ :src="iconImageUrl" class="h-full w-full object-cover" /> - + @@ -93,6 +102,23 @@ +
@@ -143,17 +173,33 @@ v-tooltip.top="moreTooltipConfig" type="transparent" size="sm" - class="h-6 transform gap-1 rounded bg-modal-card-button-surface px-1 py-0 text-text-primary transition duration-150 ease-in-out hover:-translate-y-px hover:opacity-95" + class="size-6 transform gap-1 rounded bg-modal-card-button-surface text-text-primary transition duration-150 ease-in-out hover:-translate-y-px hover:opacity-95" :aria-label="t('g.more')" @click.stop="emit('menu', $event)" >
-
+
{{ props.rightText }}
+ + + +
@@ -170,6 +216,7 @@ import QueueAssetPreview from '@/components/queue/job/QueueAssetPreview.vue' import { buildTooltipConfig } from '@/composables/useTooltipConfig' import type { JobState } from '@/types/queue' import { iconForJobState } from '@/utils/queueDisplay' +import { cn } from '@/utils/tailwindUtil' const props = withDefaults( defineProps<{ diff --git a/src/utils/queueDisplay.ts b/src/utils/queueDisplay.ts index 18aee1cb4..d743c1b2f 100644 --- a/src/utils/queueDisplay.ts +++ b/src/utils/queueDisplay.ts @@ -24,7 +24,7 @@ type JobDisplay = { export const iconForJobState = (state: JobState): string => { switch (state) { case 'pending': - return 'icon-[lucide--clock]' + return 'icon-[lucide--loader-circle]' case 'initialization': return 'icon-[lucide--server-crash]' case 'running':