Skip to content

feat(keyboard): an Xbox-style controller keyboard - #104

Merged
lippdev merged 1 commit into
mainfrom
feat/xbox-keyboard
Oct 27, 2026
Merged

lippdev merged 1 commit into
mainfrom
feat/xbox-keyboard

Conversation

@lippdev

@lippdev lippdev commented Oct 21, 2026

Copy link
Copy Markdown
Owner

Stacked on #103 (pointer) ← #101 (controller navigation).

Summary

The controller keyboard now follows the Xbox model.

Layout: one twelve-column grid, with nothing on screen but keys.

  • Digits on top, with ⌫ at the end of that row.
  • The layer key &123 → áç → abc in the top-left corner.
  • ⇧ and → (enter) at the sides of the letter rows.
  • A wide space bar between / and .com.
  • A close key.

The selected key turns white, which is easy to find from the sofa.

Layers:

  • Letters, with / and .com beside the space bar.
  • Symbols, with www. and .br beside the space bar.
  • Accents: á à â ã é ê í ó ô õ ú ü ç ñ …

Controller shortcuts, each drawn as a glyph in the corner of its key in the connected controller's own labels (ControllerGlyphs gains shift, menu and layer):

Xbox PlayStation Switch Action
X □ Y delete
Y △ X space
LT L2 ZL shift
≡ ≡ + confirm
LS L3 LS cycle layer
B ○ B close

While the keyboard is open these buttons only type. Before this, X reloaded the page, RB went forward, and LT/RT switched tabs in the middle of a word.

Removed from the UI: the instruction header, the .com .br www. https:// row, and the MAIÚSC / á ç / ABC buttons. The ABC alphabetical layout is dropped. The instructions are now the dialog's aria-describedby, read by screen readers and no longer drawn.

Focus: the first D-pad press lands on "q", as on Xbox. The Orca test now reaches "q" with the D-pad instead of two Tab presses; that test runs only on CI Linux and was not run locally.

Test plan

  • npm run typecheck
  • npm test (118 passed)
  • npm run test:e2e (59 passed, 3 skipped), including:
    • axe on the shell with the keyboard open
    • a new test for the shortcuts: Y space, LT shift, X delete without reloading, LS layers
    • the search journey, which now goes up twice to reach the suggestions (digits row)
    • the microphone journey, which types sala.com because the bar adds https://
  • Screenshots of the letters and symbols layers
  • Orca on CI Linux

🤖 Generated with Claude Code

Base automatically changed from feat/pad-pointer to main October 27, 2026 17:09
The on-screen keyboard was a header of instructions, a row of URL pieces
and big MAIÚSC / á ç / ABC buttons. It is now one quiet grid after Xbox's:
digits on top, delete at the end of their row, shift and enter at the
sides of the letters, a wide space bar between / and .com, and a close
key. The selected key turns white.

The controller's buttons are the shortcuts, each shown as a glyph in the
corner of its key in the connected controller's own labels: X deletes,
Y is the space, the left trigger shifts, the menu button confirms, the
left stick's click cycles the layer (letters, symbols with www. and .br,
accents) and B closes. While the keyboard is open those buttons only
type: X used to reload the page and RB, LT and RT changed page or tab in
the middle of a word.

The first D-pad press lands on "q". The instructions are the dialog's
description, read by screen readers and no longer drawn.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@lippdev
lippdev force-pushed the feat/xbox-keyboard branch from f6da7d2 to 724fedd Compare October 27, 2026 17:10
@lippdev
lippdev merged commit 863dfab into main Oct 27, 2026
5 checks passed
@lippdev
lippdev deleted the feat/xbox-keyboard branch October 27, 2026 17:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant