aboutsummaryrefslogtreecommitdiff
path: root/docs/prototypes/tokens.json
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-07-16 15:56:54 -0500
committerCraig Jennings <c@cjennings.net>2026-07-16 15:56:54 -0500
commit4bea99228f9ed1d70cecbb0db77a0160bd166e8f (patch)
treecbcb41dc1580788cd0c1e9a3f7290ad33498b9d0 /docs/prototypes/tokens.json
parentade17ba1ab418ac089e47d754bb8859b9406df0b (diff)
downloadarchsetup-4bea99228f9ed1d70cecbb0db77a0160bd166e8f.tar.gz
archsetup-4bea99228f9ed1d70cecbb0db77a0160bd166e8f.zip
docs(gallery): record the keyboard contract for the widget kit
The kit already held both halves of the answer without stating it. GW.slideRule takes arrow keys bound to its own focusable element, which is why it never fights the gallery's global Escape handler: the browser arbitrates focus. But Emacs can't work that way. The SVG region is an image and never sees a keypress, so there the mode's keymap owns delivery. That's the same split as the tick contract, so I put it beside it. The target owns focus and delivery, the builder declares what it accepts through a KEYS table. Deliberately a table rather than a function over a DOM event: the Emacs port installs it into a keymap and never sees a keydown, so a function would force it to re-derive the widget's intent and the two bindings would drift. The five rules are each a bug someone ships otherwise. Never listen on document. Spend preventDefault only where there's a default worth killing. Let Tab and Escape bubble. press filters rather than trusts. Click and key both route through press.
Diffstat (limited to 'docs/prototypes/tokens.json')
0 files changed, 0 insertions, 0 deletions