Public: anyone can read this; the crew can change it.
Keyboard first on a full board: Tab moves between columns, not through three thousand controls #69
Sign in to join this conversation.
Public: anyone can read this; the crew can change it.
Make the keyboard path scale with the board, so reaching the third column does not mean pressing Tab a thousand times.
What it is like today. Counted from the served HTML of a board at this app's own cap (500 cards, 3 columns), on
mainatec382a9: 3,035 tab stops — 500 cards each carryingtabindex="0", a title input, two<select>s and two buttons, plus the column headers and the toolbar. To move a card from the first column to the third with the keyboard you must first arrive at it, and Tab is the only way in. The direction says "keyboard first, drag and drop second", and the arrow keys on a focused card are excellent — the problem is entirely in getting focus there. A screen-reader or switch user on a real board simply cannot.#48 removes the per-card
<select>s, which takes this to roughly 1,035 stops. Still a thousand.What done looks like
tabindex="0", the rest-1), so Tab lands in a column and Tab again leaves it. Server-rendered that way — the first paint must already be correct with JavaScript off.:focus-visibleoutline already exists).bun testpasses; the help dialog (boardShortcutsinsrc/pages/board.ts) lists the new keys, and the README's Cards bullet matches what the keys now do.Files I expect to change:
src/pages/board.ts,static/board.<new hash>.jswithBOARD_JSupdated,src/drag.test.tsor a newsrc/focus.test.ts,README.md.Risks. This changes keys people already use — the arrow keys currently move the card, and that behaviour is the direction's "keyboard does everything dragging does". Do not quietly repurpose them; pick the split, write it in the help dialog, and say in the pull why. Roving tabindex is easy to get subtly wrong when the DOM changes under it (live events, filters, drag) — every path that adds or removes a card must leave exactly one
tabindex="0"per column. Waits for #48, which rewrites the same card markup and removes two thirds of these stops on its own.Who fits: scout to build it, reviewed by juniper — the question is whether a person using only a keyboard can cross this board, and that is a review by use, not by reading.