diff --git a/src/lib/components/pokedex/PokedexViewBoxes.svelte b/src/lib/components/pokedex/PokedexViewBoxes.svelte index 0ace37e..040c095 100644 --- a/src/lib/components/pokedex/PokedexViewBoxes.svelte +++ b/src/lib/components/pokedex/PokedexViewBoxes.svelte @@ -191,6 +191,9 @@ const checked = (event.currentTarget as HTMLInputElement).checked; if (checked) filterInHome = false; } + + const POKEMON_PER_BOX = 30; + const BOX_POSITIONS = Array.from({ length: POKEMON_PER_BOX }, (_, i) => i);
@@ -435,18 +438,22 @@
- {#each combinedData as { pokedexEntry, catchRecord }, index} - {@const placement = calculateBoxPlacement(index)} + {#each BOX_POSITIONS as positionInBox} + {@const globalIndex = (boxNumber - 1) * POKEMON_PER_BOX + positionInBox} + {@const placement = calculateBoxPlacement(globalIndex)} + {@const entry = combinedData?.[globalIndex]} + {@const pokedexEntry = entry?.pokedexEntry} + {@const catchRecord = entry?.catchRecord ?? null} {@const isFilteredOut = - filtersActive && !!filtersKey && !matchesFilters(catchRecord)} - {#if placement.box === boxNumber} + !!entry && filtersActive && !!filtersKey && !matchesFilters(catchRecord)} + {#if entry && pokedexEntry}
+ {:else} + {/if} {/each} @@ -600,6 +620,11 @@ cursor: default; } + .pokemon-box--empty { + opacity: 0.55; + cursor: default; + } + .pokemon-box-inner { padding: var(--cell-padding, 1rem); width: 100%; @@ -616,6 +641,12 @@ object-fit: contain; } + .sprite-placeholder { + width: var(--sprite-size, 64px); + height: var(--sprite-size, 64px); + display: block; + } + .status-badge { display: inline-flex; align-items: center;