From 524a26c61894c03d77e49d7d370aa22b6152ed71 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Sun, 5 Jul 2026 23:24:18 -0400 Subject: [PATCH] =?UTF-8?q?feat(ui):=20hover=20a=20suggestion=20=E2=86=92?= =?UTF-8?q?=20highlight=20the=20crop=20region=20it=20came=20from=20(#133?= =?UTF-8?q?=20step=203)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The payoff: hover a suggestion in the rail and the exact crop that produced it lights up on the image (a booru:head, a panel, a figure); a null-grounding tag shows a subtle dashed whole-image frame ('global vector won, not a crop'). ImageCanvas gains a grounding overlay that tracks the 's live bounding rect (correct under object-fit letterboxing + pan/zoom) and draws the normalized bbox + a detector/kind label. SuggestionItem sets the hovered grounding via provide/inject (no 4-level event relay through TagPanel/SuggestionsPanel/group); ImageViewer AND ExploreView provide it + pass it to their canvas. Overlay is pointer-events:none so it never blocks pan/zoom/click. Videos out of v1 scope. Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01CDgx8bQS5YrGRK76v8HUnM --- frontend/src/components/modal/ImageCanvas.vue | 113 +++++++++++++++++- frontend/src/components/modal/ImageViewer.vue | 10 +- .../src/components/modal/SuggestionItem.vue | 17 ++- frontend/src/views/ExploreView.vue | 8 +- 4 files changed, 142 insertions(+), 6 deletions(-) diff --git a/frontend/src/components/modal/ImageCanvas.vue b/frontend/src/components/modal/ImageCanvas.vue index a4a4163..efe2e52 100644 --- a/frontend/src/components/modal/ImageCanvas.vue +++ b/frontend/src/components/modal/ImageCanvas.vue @@ -16,20 +16,91 @@ transform: `translate(${panZoom.state.x}px, ${panZoom.state.y}px) scale(${panZoom.state.scale})` }" draggable="false" + @load="onImgLoad" > + +
+
+ {{ regionLabel }} +
+