Emoji picker: keyboard navigation and skin tones #313

Closed
opened 2026-10-07 20:43:20 -04:00 by Salastil · 1 comment
Owner

EmojiPicker.tsx has no arrow-key navigation and Enter doesn't pick the top result; there's no skin-tone selector. (Search autofocus, the side rail, recents and hover preview already exist.)

Fix: arrow keys move through the grid, Enter picks; a skin-tone selector remembered in prefs.

Part of the v1.0 UI pass.

`EmojiPicker.tsx` has no arrow-key navigation and Enter doesn't pick the top result; there's no skin-tone selector. (Search autofocus, the side rail, recents and hover preview already exist.) **Fix:** arrow keys move through the grid, Enter picks; a skin-tone selector remembered in prefs. _Part of the v1.0 UI pass._
Salastil added this to the v1.0 milestone 2026-10-07 20:43:20 -04:00
Salastil added the feature label 2026-10-07 20:43:20 -04:00
Author
Owner

Finished: 99fd0d3.

The emoji picker is now usable without the mouse, and the hands come in your skin tone.

  • Arrow keys walk the grid while the search box keeps the focus (so typing never stops): ↓/↑ go to the nearest cell in the row below/above across the differently-sized sections, ←/→ go cell to cell once one is marked (until then they still move the caret), ↑ off the top gives control back to the box. At the end of the built rows it scrolls a little so more build. The marked cell is outlined and named in the footer.
  • Enter picks the marked cell, or the top result when none is marked.
  • Skin tone: a hand button at the end of the search row opens the six tones; the choice is kept in prefs (emoji.skinTone, shared by every window) and applies to the hands in the grid, to what gets picked and recorded in Recent, and to :shortcode completion. Added 👋 🙌 👌 ✌️ to the curated set so the choice has something to act on.
  • Tests: skintone.test.ts; behaviour checked against the running app (search + Enter picks 🔥; walk down/right/down/up; ↑ off the top clears; ← still moves the caret; Dark tone picks 👍 as U+1F44D U+1F3FF and survives reopening).

Before (top), after (bottom, arrows walked, tone menu open):

picker

Finished: [99fd0d3](https://git.salastil.com/Salastil/moho/commit/99fd0d350f78156433cf9958a58fbf6663adcf08). The emoji picker is now usable without the mouse, and the hands come in your skin tone. - **Arrow keys** walk the grid while the search box keeps the focus (so typing never stops): ↓/↑ go to the nearest cell in the row below/above across the differently-sized sections, ←/→ go cell to cell once one is marked (until then they still move the caret), ↑ off the top gives control back to the box. At the end of the built rows it scrolls a little so more build. The marked cell is outlined and named in the footer. - **Enter** picks the marked cell, or the **top result** when none is marked. - **Skin tone:** a hand button at the end of the search row opens the six tones; the choice is kept in prefs (`emoji.skinTone`, shared by every window) and applies to the hands in the grid, to what gets picked and recorded in Recent, and to `:shortcode` completion. Added 👋 🙌 👌 ✌️ to the curated set so the choice has something to act on. - Tests: `skintone.test.ts`; behaviour checked against the running app (search + Enter picks 🔥; walk down/right/down/up; ↑ off the top clears; ← still moves the caret; Dark tone picks 👍 as U+1F44D U+1F3FF and survives reopening). Before (top), after (bottom, arrows walked, tone menu open): ![picker](https://git.salastil.com/attachments/96703295-c1e5-4a8e-a8b6-e6cdb86b846d)
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Salastil/moho#313