Repository navigation
feat: searchable dropdowns for every move list - #4
Merged
Merged
Conversation
Generalise the Pokémon picker into a shared SearchPick and add a MoveSelect on top of it: damaging moves with power up top, status moves grouped underneath, and an optional empty slot for the team builder. The calculator's move field and all four sim team-slot pickers now open with a search box, same as the Pokémon dropdowns.
TechLuddite
pushed a commit
that referenced
this pull request
Aug 4, 2026
Two things Joseph asked for: a way to tell us when a move works differently from the real game, and a changelog he can actually read. What's new (src/features/News.jsx, src/data/changelog.js) - every update written up in plain words — what it means in a battle, not what changed in the code - a `credit` line for whoever spotted it, because being named in the changelog is the best part of reporting something - an amber dot on the tab until this build's entry has been read, remembered in localStorage like the rest of the app's state Report (src/features/Report.jsx, src/lib/feedback.js) - pick what kind of thing it is, optionally pick the move it's about, write it up, and press send: it opens GitHub with the issue already filled in - a copy button for when whoever is holding the tablet isn't logged in - a preview of exactly what gets sent, since this is a child's app and "what am I about to publish" should never be a mystery - no backend and nothing about the user collected — just the text typed, the move picked, and which version of the lab it came from feedback.js is tested rather than trusted: a report saying "Fire Spin & Wrap does 1/8 + a bit? see #4, 100% of max HP" has to survive being turned into a URL, and an over-long report is cut deliberately and says so instead of being mangled by the browser. The tab row now splits: the four battling tabs on the left, these two over on the right, a shade quieter. It wraps as a pair on a phone rather than stranding one per line. Also: MoveSelect takes an emptyLabel so the optional move picker can say "no move in particular" instead of the team builder's "— empty —". 177 tests pass. Verified in a real browser at desktop and phone widths. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017SGWh8kJjQsy4QB9pigonf
TechLuddite
added a commit
that referenced
this pull request
Aug 4, 2026
Two things Joseph asked for: a way to tell us when a move works differently from the real game, and a changelog he can actually read. What's new (src/features/News.jsx, src/data/changelog.js) - every update written up in plain words — what it means in a battle, not what changed in the code - a `credit` line for whoever spotted it, because being named in the changelog is the best part of reporting something - an amber dot on the tab until this build's entry has been read, remembered in localStorage like the rest of the app's state Report (src/features/Report.jsx, src/lib/feedback.js) - pick what kind of thing it is, optionally pick the move it's about, write it up, and press send: it opens GitHub with the issue already filled in - a copy button for when whoever is holding the tablet isn't logged in - a preview of exactly what gets sent, since this is a child's app and "what am I about to publish" should never be a mystery - no backend and nothing about the user collected — just the text typed, the move picked, and which version of the lab it came from feedback.js is tested rather than trusted: a report saying "Fire Spin & Wrap does 1/8 + a bit? see #4, 100% of max HP" has to survive being turned into a URL, and an over-long report is cut deliberately and says so instead of being mangled by the browser. The tab row now splits: the four battling tabs on the left, these two over on the right, a shade quieter. It wraps as a pair on a phone rather than stranding one per line. Also: MoveSelect takes an emptyLabel so the optional move picker can say "no move in particular" instead of the team builder's "— empty —". 177 tests pass. Verified in a real browser at desktop and phone widths. Claude-Session: https://claude.ai/code/session_017SGWh8kJjQsy4QB9pigonf Co-authored-by: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds the same in-dropdown search the Pokémon pickers have to every move list dropdown.
What changed
components.jsxinto a sharedSearchPickthat supports grouped options (headings render like optgroups, non-selectable).MoveSelecton top of it: damaging moves listed with their power, status moves grouped under a "Status moves" heading, and an optional— empty —entry for clearing a slot (hidden while searching, so typing only ever matches real moves).DamageCalc.jsx) and all four per-Pokémon move slots in the sim team builder (BattleSim.jsx).PokemonSelect's API and behaviour are unchanged; search still matches on the move's name only, not the power suffix.Checks
npm run test:run— 93 tests greennpm run build— green, CNAME intact indist/🤖 Generated with Claude Code
https://claude.ai/code/session_01ASCtdEn3r6CCiF9pwcw5sZ
Generated by Claude Code