diff --git a/packages/web/src/App.svelte b/packages/web/src/App.svelte index e6cf446..36cf080 100644 --- a/packages/web/src/App.svelte +++ b/packages/web/src/App.svelte @@ -140,6 +140,22 @@ } /** Map a typed card name to its id (case-insensitive). */ + /** Suggest-as-you-type pool for the card-naming field, tuned per card. */ + const nameSuggestions = $derived.by(() => { + if (!selectedCard) return []; + const pool = allCardDefs().filter( + (d) => (d.set === "basic" || d.set === "expansion1") && (d.quantity ?? 0) > 0, + ); + let picks = pool; + if (selectedCard.cardId === "illusionary-attack") { + picks = pool.filter((d) => d.cardType === "attack"); + } else if (selectedCard.cardId === "drop-object") { + picks = pool.filter((d) => isMovableObject(d.id)); + } + const names = picks.map((d) => d.name).sort(); + return selectedCard.cardId === "drop-object" ? ["Treasure", ...names] : names; + }); + function nameToCardId(name: string): string | null { const wanted = name.trim().toLowerCase(); if (!wanted) return null; @@ -1095,7 +1111,10 @@ {pendingSectorFrom ? "— now the destination area" : "— click the sector to move"} {/if} {#if selectedCard && NAMED_CARDS.has(selectedCard.cardId)} - + + + {#each nameSuggestions as n (n)}{/each} + {#if selectedCard.cardId === "deja-vu"}