From 86efbf7f2cb0b9d63c617ee744492167a7102efe Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Thu, 4 Jun 2026 23:01:55 -0400 Subject: [PATCH] fix(modal): kebab menus open via explicit v-model, not activator click MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Operator-confirmed on a fresh build: both the tag-chip and suggestion kebabs still never opened. The prior 8326e54 'fix' only wrapped them in a — inert for SuggestionItem (no parent capture) — and never addressed why the `#activator`/`v-bind="props"` click failed to toggle the menu inside the teleported ImageViewer modal. The dialogs in that same modal open via v-model and work, so drive the menus the same way: - The activator (v-btn / v-icon) toggles a reactive flag with @click.stop (which also shields the chip's close button / any parent). - The v-menu binds that flag (v-model / :model-value) and uses activator="parent" with :open-on-click="false" purely for positioning, so opening no longer depends on Vuetify's activator-click path. - TagPanel tracks a single openTagId (one chip menu open at a time). Co-Authored-By: Claude Opus 4.8 (1M context) --- .../src/components/modal/SuggestionItem.vue | 40 ++++++++++--------- frontend/src/components/modal/TagPanel.vue | 36 ++++++++++------- 2 files changed, 43 insertions(+), 33 deletions(-) diff --git a/frontend/src/components/modal/SuggestionItem.vue b/frontend/src/components/modal/SuggestionItem.vue index 1a0c541..16e55cc 100644 --- a/frontend/src/components/modal/SuggestionItem.vue +++ b/frontend/src/components/modal/SuggestionItem.vue @@ -19,24 +19,25 @@ > Accept - - - - + + + + Treat as alias for… @@ -51,11 +52,12 @@ diff --git a/frontend/src/components/modal/TagPanel.vue b/frontend/src/components/modal/TagPanel.vue index f1f83dd..319b0b9 100644 --- a/frontend/src/components/modal/TagPanel.vue +++ b/frontend/src/components/modal/TagPanel.vue @@ -10,20 +10,24 @@ > {{ iconFor(tag.kind) }} {{ tag.name }} - - - - + + + + Rename… @@ -84,6 +88,9 @@ import FandomSetDialog from './FandomSetDialog.vue' const modal = useModalStore() const store = useTagStore() const errorMsg = ref(null) +// Which tag chip's kebab menu is open (only one at a time). Drives each +// chip menu's v-model so opening never depends on Vuetify's activator click. +const openTagId = ref(null) const KIND_ICONS = { general: 'mdi-tag', character: 'mdi-account-circle', @@ -147,4 +154,5 @@ async function onFandomUpdated() { } .fc-tag-panel__chips { display: flex; flex-wrap: wrap; gap: 6px; } .kebab-wrap { display: inline-flex; align-items: center; } +.kebab-icon { cursor: pointer; }