From 82689e10bc8521988294cd5accb2166b30e98ee2 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Sat, 16 May 2026 18:05:33 -0400 Subject: [PATCH] feat(bulk): IR-style BulkEditorPanel + GalleryView select toggle and wiring Co-Authored-By: Claude Opus 4.7 (1M context) --- .../components/gallery/BulkEditorPanel.vue | 150 ++++++++++++++++++ frontend/src/views/GalleryView.vue | 16 ++ 2 files changed, 166 insertions(+) create mode 100644 frontend/src/components/gallery/BulkEditorPanel.vue diff --git a/frontend/src/components/gallery/BulkEditorPanel.vue b/frontend/src/components/gallery/BulkEditorPanel.vue new file mode 100644 index 0000000..d7775eb --- /dev/null +++ b/frontend/src/components/gallery/BulkEditorPanel.vue @@ -0,0 +1,150 @@ + + + + + diff --git a/frontend/src/views/GalleryView.vue b/frontend/src/views/GalleryView.vue index fe767dc..76510ec 100644 --- a/frontend/src/views/GalleryView.vue +++ b/frontend/src/views/GalleryView.vue @@ -1,5 +1,13 @@ @@ -24,9 +33,12 @@ import GalleryGrid from '../components/gallery/GalleryGrid.vue' import TimelineSidebar from '../components/gallery/TimelineSidebar.vue' import EmptyState from '../components/gallery/EmptyState.vue' import ImageViewer from '../components/modal/ImageViewer.vue' +import BulkEditorPanel from '../components/gallery/BulkEditorPanel.vue' +import { useGallerySelectionStore } from '../stores/gallerySelection.js' const store = useGalleryStore() const modal = useModalStore() +const sel = useGallerySelectionStore() const router = useRouter() const route = useRoute() @@ -41,6 +53,7 @@ onMounted(async () => { }) watch(() => route.query.tag_id, (q) => { + sel.clear() // result set changed — selected ids are no longer valid const tagId = parseInt(q, 10) store.setTagFilter(isNaN(tagId) ? null : tagId) }) @@ -69,6 +82,9 @@ function closeImage() { } .fc-gallery-layout__main { flex: 1; min-width: 0; } .fc-gallery-layout__sidebar { flex-shrink: 0; } +.fc-select-toggle { + position: absolute; top: 12px; right: 16px; z-index: 1101; +} @media (max-width: 900px) { .fc-gallery-layout { flex-direction: column-reverse; }