diff --git a/web/src/components/LabelBucketGrid.test.ts b/web/src/components/LabelBucketGrid.test.ts
index d1d6e27..fb09e8c 100644
--- a/web/src/components/LabelBucketGrid.test.ts
+++ b/web/src/components/LabelBucketGrid.test.ts
@@ -31,4 +31,22 @@ describe('LabelBucketGrid', () => {
expect(btn.text()).toContain('1')
expect(btn.text()).toContain('🗓️')
})
+
+ it('marks button as drop-target when hoveredBucket matches label name', () => {
+ const w = mount(LabelBucketGrid, {
+ props: { labels, isBucketMode: true, hoveredBucket: 'interview_scheduled' },
+ })
+ const btns = w.findAll('[data-testid="label-btn"]')
+ expect(btns[0].classes()).toContain('is-drop-target')
+ expect(btns[1].classes()).not.toContain('is-drop-target')
+ })
+
+ it('no button marked as drop-target when hoveredBucket is null', () => {
+ const w = mount(LabelBucketGrid, {
+ props: { labels, isBucketMode: false, hoveredBucket: null },
+ })
+ w.findAll('[data-testid="label-btn"]').forEach(btn => {
+ expect(btn.classes()).not.toContain('is-drop-target')
+ })
+ })
})
diff --git a/web/src/components/LabelBucketGrid.vue b/web/src/components/LabelBucketGrid.vue
index dfa67f3..f1102c2 100644
--- a/web/src/components/LabelBucketGrid.vue
+++ b/web/src/components/LabelBucketGrid.vue
@@ -4,14 +4,12 @@
v-for="label in labels"
:key="label.key"
data-testid="label-btn"
+ :data-label-key="label.name"
class="label-btn"
- :class="{ 'is-drop-target': dragOverLabel === label.name }"
+ :class="{ 'is-drop-target': props.hoveredBucket === label.name }"
:style="{ '--label-color': label.color }"
:aria-label="`Label as ${label.name.replace(/_/g, ' ')} (key: ${label.key})`"
@click="$emit('label', label.name)"
- @dragover.prevent="dragOverLabel = label.name"
- @dragleave="dragOverLabel = null"
- @drop.prevent="onDrop(label.name)"
>
{{ label.key }}
{{ label.emoji }}
@@ -21,19 +19,14 @@