From 6acf27326734afc0fc9121b8b3c5d6effe5221f5 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Sat, 23 May 2026 21:12:17 -0400 Subject: [PATCH 1/5] fix(ui): poll import task list during active batch so Recent Import Tasks doesn't sit stale Co-Authored-By: Claude Opus 4.7 (1M context) --- frontend/src/views/SettingsView.vue | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/frontend/src/views/SettingsView.vue b/frontend/src/views/SettingsView.vue index b15b946..8235e0a 100644 --- a/frontend/src/views/SettingsView.vue +++ b/frontend/src/views/SettingsView.vue @@ -57,7 +57,12 @@ function startPolling() { pollId = setInterval(() => { if (!document.hidden) { system.refreshStats() - if (tab.value === 'import') importStore.refreshStatus() + if (tab.value === 'import') { + importStore.refreshStatus() + // Refresh the task list while a batch is in flight so the UI + // doesn't sit stale next to a ticking imported/skipped counter. + if (importStore.activeBatch) importStore.loadTasks(true) + } } }, 5000) } From 95bc761a6993ea14499bb2c8133c916a6d989df3 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Sat, 23 May 2026 21:16:37 -0400 Subject: [PATCH 2/5] fix(ui): TopNav uses 1fr/auto/1fr grid so Gallery/Showcase action buttons don't shift the centered links Co-Authored-By: Claude Opus 4.7 (1M context) --- frontend/src/components/TopNav.vue | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/TopNav.vue b/frontend/src/components/TopNav.vue index 4493050..e95bf1a 100644 --- a/frontend/src/components/TopNav.vue +++ b/frontend/src/components/TopNav.vue @@ -55,7 +55,13 @@ const health = computed(() => { position: sticky; top: 0; z-index: 1000; - display: flex; + /* Mirrored side columns (1fr / auto / 1fr) keep the link block dead- + centered no matter what the teleport-slot on the right is rendering + for the active view (Gallery: Select, Showcase: Shuffle, others: ∅). + With a plain flex layout the links shifted left as soon as actions + appeared. */ + display: grid; + grid-template-columns: 1fr auto 1fr; align-items: center; gap: 1rem; padding: 0.75rem 1rem; @@ -87,7 +93,6 @@ const health = computed(() => { } .fc-links { - flex: 1; display: flex; flex-wrap: wrap; justify-content: center; @@ -118,6 +123,7 @@ const health = computed(() => { align-items: center; gap: 8px; flex-shrink: 0; + justify-self: start; } .fc-health { display: flex; @@ -129,5 +135,6 @@ const health = computed(() => { align-items: center; gap: 0.5rem; flex-shrink: 0; + justify-self: end; } From c9ddcd0f607ee81fd3666d4398edf01a16441a16 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Sat, 23 May 2026 21:21:02 -0400 Subject: [PATCH 3/5] =?UTF-8?q?fix(ui):=20viewer=20modal=20=E2=80=94=20haz?= =?UTF-8?q?e=20background=20through=20to=20the=20image,=20fit-to-view=20at?= =?UTF-8?q?=20zoom=201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.7 (1M context) --- frontend/src/components/modal/ImageCanvas.vue | 4 +++- frontend/src/components/modal/ImageViewer.vue | 14 +++++++++++--- frontend/src/components/modal/VideoCanvas.vue | 4 +++- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/frontend/src/components/modal/ImageCanvas.vue b/frontend/src/components/modal/ImageCanvas.vue index 52cbb17..7cd986a 100644 --- a/frontend/src/components/modal/ImageCanvas.vue +++ b/frontend/src/components/modal/ImageCanvas.vue @@ -33,7 +33,9 @@ watch(() => props.src, () => panZoom.reset()) .fc-canvas { flex: 1; position: relative; - background: rgb(var(--v-theme-background)); + /* Transparent so the viewer's haze shows through to the image area + instead of a solid panel sitting on top of it. */ + background: transparent; overflow: hidden; cursor: zoom-in; user-select: none; diff --git a/frontend/src/components/modal/ImageViewer.vue b/frontend/src/components/modal/ImageViewer.vue index 99ef9e8..195037f 100644 --- a/frontend/src/components/modal/ImageViewer.vue +++ b/frontend/src/components/modal/ImageViewer.vue @@ -123,7 +123,11 @@ function isTextEntry(el) {