Stage 8 polish: keyboard-aware modals, consistent select pickers, required game type
Tests · UI / test (push) Successful in 17s
Tests · UI / test (push) Successful in 17s
Third owner-review pass (iPhone): - Modals (and the chat) size their backdrop to window.visualViewport, so they stay fully above the software keyboard (dvh alone left the sheet partly behind it). - On the owner's call, every profile / new-game picker is a native <select> for consistent cross-platform behaviour: the away window returns to hour + 10-minute selects (which also avoids the iOS time-wheel "clear" button), alongside the offset timezone and the game-type / move-time / hints selects. Native time/wheel inputs render differently per OS and cannot be forced to match. - New-game "play with friends" has no preselected game type — an explicit, required pick (empty placeholder); Send invitation stays disabled until both a type and a friend are chosen. A smart default (from play history / language) is TODO-6.
This commit is contained in:
@@ -594,13 +594,16 @@ Open details: deployment target/host; dashboards; load expectations.
|
||||
game, an "add to friends" item flips to a disabled "request sent"; chat send/nudge
|
||||
became ⬆️/🛎️ icons; a **finished game** drops its last-word highlight, hides Check
|
||||
word / Drop game, disables zoom, and draws an **inert footer** (greyed rack + tab
|
||||
bar) instead of hiding it. A second **iPhone-simulator** pass then made the chat
|
||||
and modals keyboard-aware (`dvh` sizing), returned the away window to a native
|
||||
`<input type="time" step="600">` (the iOS wheel with 10-minute steps; the timezone
|
||||
stays a native offset `<select>`), reserved the rack height so a finished footer
|
||||
does not collapse, and compacted the play-with-friends form (a searchable
|
||||
bounded-scroll friend list, native game-type / move-time / hints selects in one
|
||||
row, a pinned invite).
|
||||
bar) instead of hiding it. Two **iPhone-simulator** passes then made the chat and
|
||||
modals keyboard-aware (`dvh` plus a `visualViewport` listener that sizes the modal
|
||||
backdrop to the area above the keyboard), reserved the rack height so a finished
|
||||
footer does not collapse, and compacted the play-with-friends form (a searchable
|
||||
bounded-scroll friend list, a pinned invite, and an explicit, **required game
|
||||
type** — a smart default is TODO-6). On the owner's call, **every profile / new-game
|
||||
picker is a native `<select>`** (the away window as hour + 10-minute selects, the
|
||||
timezone as a UTC-offset select): native time/wheel inputs render differently per
|
||||
OS and can't be forced to match, and a select also avoids the iOS "clear" button
|
||||
that would empty a time field.
|
||||
|
||||
## Deferred TODOs (cross-stage)
|
||||
|
||||
@@ -639,3 +642,9 @@ Open details: deployment target/host; dashboards; load expectations.
|
||||
exists (Stage 9), wrap a code in a deep link and render it as a QR so a friend can
|
||||
add you by scanning rather than typing. The code semantics (12 h TTL, single use,
|
||||
one active per issuer) stay as-is; only the delivery changes.
|
||||
- **TODO-6 — smart default for the friend-game "game type" (owner's idea, Stage 8).**
|
||||
The play-with-friends form has no preselected variant today (an empty, required
|
||||
pick). Default it from the player's history (the variant they play most, from
|
||||
`account_stats` or a games query), falling back to their interface language
|
||||
(en → English, ru → Russian/Эрудит). Until then the explicit pick avoids guessing
|
||||
wrong.
|
||||
|
||||
Reference in New Issue
Block a user