From cb0773b03e1ede99569b16bcc629e80b607386c5 Mon Sep 17 00:00:00 2001
From: Josh Creek <8179928+jcreek@users.noreply.github.com>
Date: Fri, 9 Jan 2026 22:21:01 +0000
Subject: [PATCH 1/2] feat(#57): Replace 'mark box as' buttons with dropdown
for better ux
---
.../pokedex/PokedexViewBoxes.svelte | 107 +++++++++++++++---
1 file changed, 91 insertions(+), 16 deletions(-)
diff --git a/src/lib/components/pokedex/PokedexViewBoxes.svelte b/src/lib/components/pokedex/PokedexViewBoxes.svelte
index f7d6837..fcbd22a 100644
--- a/src/lib/components/pokedex/PokedexViewBoxes.svelte
+++ b/src/lib/components/pokedex/PokedexViewBoxes.svelte
@@ -25,6 +25,17 @@
let filterInHome = false;
let filterNotInHome = false;
+ // Bulk actions menu state (one open menu at a time)
+ let openBulkMenuForBox: number | null = null;
+
+ onMount(() => {
+ const close = () => {
+ openBulkMenuForBox = null;
+ };
+ window.addEventListener('click', close);
+ return () => window.removeEventListener('click', close);
+ });
+
let filteredCombinedData: CombinedData[] = [];
let filteredTotal = 0;
let overallTotal = 0;
@@ -336,22 +347,86 @@
>
{#each boxNumbers as boxNumber}
-
Box {boxNumber}
-
-
-
-
-
+
+
Box {boxNumber}
+
+
+
+ {#if openBulkMenuForBox === boxNumber}
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+ {/if}
+
+
{#each combinedData as { pokedexEntry, catchRecord }, index}
{@const placement = calculateBoxPlacement(index)}
From 789321ce0357224a7475078ceefd34f2e21f7348 Mon Sep 17 00:00:00 2001
From: Josh Creek <8179928+jcreek@users.noreply.github.com>
Date: Sat, 10 Jan 2026 10:12:22 +0000
Subject: [PATCH 2/2] feat(#57): Improve accessibility of dropdown
---
src/lib/components/pokedex/PokedexViewBoxes.svelte | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/src/lib/components/pokedex/PokedexViewBoxes.svelte b/src/lib/components/pokedex/PokedexViewBoxes.svelte
index fcbd22a..0ace37e 100644
--- a/src/lib/components/pokedex/PokedexViewBoxes.svelte
+++ b/src/lib/components/pokedex/PokedexViewBoxes.svelte
@@ -346,6 +346,7 @@
style="--boxes-per-row: {boxesPerRow}; --cell-padding: {cellPaddingRem}rem; --sprite-size: {spriteSizePx}px;"
>
{#each boxNumbers as boxNumber}
+ {@const bulkMenuId = `box-${boxNumber}-bulk-menu`}
Box {boxNumber}
@@ -355,6 +356,7 @@
class="btn btn-sm btn-outline relative z-[210]"
aria-label="Open bulk actions menu"
aria-haspopup="menu"
+ aria-controls={bulkMenuId}
aria-expanded={openBulkMenuForBox === boxNumber}
on:click={(event) => {
event.stopPropagation();
@@ -369,12 +371,13 @@
{#if openBulkMenuForBox === boxNumber}
-
-
-
-
-