From 670b574b93603b0c70b8044e7b8f5205f33cb3f2 Mon Sep 17 00:00:00 2001 From: Lakshmi Tanmay Date: Mon, 28 Sep 2026 11:41:08 +0530 Subject: [PATCH] =?UTF-8?q?feat:=20add=20a=20daily=20Pok=C3=A9mon=20guessi?= =?UTF-8?q?ng=20puzzle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Everyone gets the same Pokémon each day and eight guesses. Each guess shows whether its types match and whether the answer's generation, height, weight and stat total are higher or lower, with icons and text as well as color. After three misses the answer's stat shape appears as a hint. Progress and streaks are kept on the device, and the result copies as a spoiler-free grid. Co-Authored-By: Claude Opus 5.5 (1M context) --- src/lib/components/daily/guess-input.svelte | 86 ++++++ src/lib/components/site/search-trigger.svelte | 2 +- src/lib/components/site/site-header.svelte | 4 +- src/lib/daily/game.test.ts | 67 +++++ src/lib/daily/game.ts | 127 +++++++++ src/lib/nav.ts | 1 + src/routes/daily/+page.svelte | 252 ++++++++++++++++++ 7 files changed, 536 insertions(+), 3 deletions(-) create mode 100644 src/lib/components/daily/guess-input.svelte create mode 100644 src/lib/daily/game.test.ts create mode 100644 src/lib/daily/game.ts create mode 100644 src/routes/daily/+page.svelte diff --git a/src/lib/components/daily/guess-input.svelte b/src/lib/components/daily/guess-input.svelte new file mode 100644 index 0000000..1eff571 --- /dev/null +++ b/src/lib/components/daily/guess-input.svelte @@ -0,0 +1,86 @@ + + +
+ (highlighted = 0)} + {onkeydown} + {disabled} + role="combobox" + aria-expanded={options.length > 0} + aria-controls="daily-options" + aria-activedescendant={options.length ? `daily-option-${options[highlighted]?.id}` : undefined} + aria-autocomplete="list" + aria-label="Guess a Pokémon" + placeholder={disabled ? "Come back tomorrow for a new Pokémon" : "Type a Pokémon’s name"} + autocomplete="off" + spellcheck={false} + class="h-11 rounded-lg bg-card text-base md:text-base" + /> + {#if options.length} +
    + {#each options as entry, i (entry.id)} +
  • (highlighted = i)} + onpointerdown={(event) => { + event.preventDefault(); + submit(entry); + }} + > + {entry.name} +
  • + {/each} +
+ {/if} +
diff --git a/src/lib/components/site/search-trigger.svelte b/src/lib/components/site/search-trigger.svelte index 7b44ffb..9dd4a86 100644 --- a/src/lib/components/site/search-trigger.svelte +++ b/src/lib/components/site/search-trigger.svelte @@ -15,7 +15,7 @@ variant="outline" size="sm" onclick={() => (palette.open = true)} - class="hidden w-60 justify-start gap-2 bg-background text-muted-foreground sm:flex dark:bg-background" + class="hidden w-60 justify-start gap-2 lg:w-44 xl:w-60 bg-background text-muted-foreground sm:flex dark:bg-background" > Search Pokémon diff --git a/src/lib/components/site/site-header.svelte b/src/lib/components/site/site-header.svelte index fa2a040..ed7f437 100644 --- a/src/lib/components/site/site-header.svelte +++ b/src/lib/components/site/site-header.svelte @@ -17,14 +17,14 @@
-
+
dexa