diff --git a/frontend/src/components/gallery/GalleryFacetPanel.vue b/frontend/src/components/gallery/GalleryFacetPanel.vue index 94a6d02..a27bf24 100644 --- a/frontend/src/components/gallery/GalleryFacetPanel.vue +++ b/frontend/src/components/gallery/GalleryFacetPanel.vue @@ -34,6 +34,15 @@ :color="store.filter.no_artist ? 'accent' : undefined" @click="toggleFlag('no_artist')" >No artist{{ facetCount('no_artist') }} + + Show hidden diff --git a/frontend/src/components/gallery/GalleryFilterBar.vue b/frontend/src/components/gallery/GalleryFilterBar.vue index f0a9b7e..779a4da 100644 --- a/frontend/src/components/gallery/GalleryFilterBar.vue +++ b/frontend/src/components/gallery/GalleryFilterBar.vue @@ -160,7 +160,7 @@ let debounce = null const refineCount = computed(() => { const f = store.filter return (f.platform ? 1 : 0) + (f.untagged ? 1 : 0) + (f.no_artist ? 1 : 0) - + (f.date_from ? 1 : 0) + (f.date_to ? 1 : 0) + + (f.include_hidden ? 1 : 0) + (f.date_from ? 1 : 0) + (f.date_to ? 1 : 0) }) const hasRefineFilters = computed(() => refineCount.value > 0) diff --git a/frontend/src/stores/gallery.js b/frontend/src/stores/gallery.js index 617cc73..334c3bd 100644 --- a/frontend/src/stores/gallery.js +++ b/frontend/src/stores/gallery.js @@ -30,6 +30,9 @@ export const useGalleryStore = defineStore('gallery', () => { tag_or: [], tag_exclude: [], // Phase-2 faceted refine params. platform: null, untagged: false, no_artist: false, + // Reveal the presentation chrome (banner / editor screenshot) the gallery + // hides by default (milestone 141). + include_hidden: false, date_from: null, date_to: null, // Phase-3 visual similarity: when set, the gallery is in "similar mode" — // ranked by cosine distance to this image, bounded top-N, no cursor. @@ -158,6 +161,7 @@ export const useGalleryStore = defineStore('gallery', () => { if (filter.value.platform) p.platform = filter.value.platform if (filter.value.untagged) p.untagged = '1' if (filter.value.no_artist) p.no_artist = '1' + if (filter.value.include_hidden) p.include_hidden = '1' if (filter.value.date_from) p.date_from = filter.value.date_from if (filter.value.date_to) p.date_to = filter.value.date_to return p @@ -196,6 +200,7 @@ export const useGalleryStore = defineStore('gallery', () => { platform: q.platform || null, untagged: _truthy(q.untagged), no_artist: _truthy(q.no_artist), + include_hidden: _truthy(q.include_hidden), date_from: _parseDate(q.date_from), date_to: _parseDate(q.date_to), similar_to: _toId(q.similar_to), @@ -284,7 +289,8 @@ export function cloneFilter(f) { tag_exclude: [...(f.tag_exclude || [])], artist_id: f.artist_id, media_type: f.media_type, sort: f.sort, platform: f.platform, untagged: f.untagged, - no_artist: f.no_artist, date_from: f.date_from, date_to: f.date_to, + no_artist: f.no_artist, include_hidden: f.include_hidden, + date_from: f.date_from, date_to: f.date_to, similar_to: f.similar_to, } } @@ -301,6 +307,7 @@ export function filterToQuery(f) { if (f.platform) q.platform = f.platform if (f.untagged) q.untagged = '1' if (f.no_artist) q.no_artist = '1' + if (f.include_hidden) q.include_hidden = '1' if (f.date_from) q.date_from = f.date_from if (f.date_to) q.date_to = f.date_to if (f.similar_to) q.similar_to = String(f.similar_to)