ui: plan canvas ink extent + the keyboard-first round
Plan canvas (owner report: arrows clipped at the viewBox edge in dist — measured 14px/20px cuts in the owner's real plans): blockLayout now unions node boxes with every edge path's control-point hull (a bezier never leaves it; the layout calls edgePathD with the renderer's exact inputs). Dagre's node extent stays the floor, so ordinary plans render byte-identical; the viewBox origin shifts only when ink bulges past zero. Verified on both real chats; pins use the owner's real linear-algebra tree (golden-real-data). Keyboard-first (owner's law: Enter always submits, arrows always cycle; text fields the only exception): - Enter guard split (enter-submits): a focused BUTTON keeps native Enter only when keyboard-walked (:focus-visible) or inside an open overlay (menus/dialogs); pointer-clicked transcript buttons submit, preventDefault suppressing the re-activation underneath. - Focus hygiene (focus-hygiene): pointer clicks on transient controls (agent/user thinking toggles, copy, mermaid expand, plan chip) blur to body — the state clicking empty space produces. - Session search owns the walk: Up/Down wrap-cycle the filtered rows, Enter opens the walked row or the first match (quick-open), then blurs and keeps the query. The Alt-arrow session cycle is RETIRED. - Registry: model-menu walk/pick entries removed (obvious in-field navigation, not settings material); question-dock keys stay displayOnly per owner ruling. Gates: 1489/1489, typecheck, lint. Verified live end-to-end.
This commit is contained in:
+7
-2
@@ -47,8 +47,10 @@ second pillar of input).
|
||||
| Cycle thinking level | Shift+Tab | `lh:kbd-cycle-thinking` (model-picker.tsx) |
|
||||
| Toggle sidebar | ⌘B | `lh:toggle-sidebar` (sidebar.tsx) |
|
||||
| Sessions search | ⌘⇧F | `lh:kbd-sessions-search` (sidebar.tsx) |
|
||||
| Cycle session | ⌥↑ / ⌥↓ | `lh:kbd-cycle-session-prev/next` (sidebar.tsx) |
|
||||
| Open selected session | ⌥Enter | `lh:kbd-open-session` (sidebar.tsx) |
|
||||
| Walk search results | ↑ / ↓ *in the search field* | sidebar.tsx (cycles the filtered rows, wraps) |
|
||||
| Open search result | Enter *in the search field* | sidebar.tsx (walked row, else the first match) |
|
||||
| ~~Cycle session~~ | ~~⌥↑ / ⌥↓~~ | RETIRED (owner, 2026-10-10) — the search walk above replaces it |
|
||||
| ~~Open selected session~~ | ~~⌥Enter~~ | RETIRED (owner, 2026-10-10) — the search Enter above replaces it |
|
||||
| Jump to graph (home) | ⌘G | router.push in keyboard-shortcuts.tsx |
|
||||
| New session | ⌘N | router.push in keyboard-shortcuts.tsx |
|
||||
| Rename session | F2 | `lh:kbd-rename-session` (chat.tsx) |
|
||||
@@ -57,6 +59,9 @@ second pillar of input).
|
||||
|
||||
## Model menu keyboard machine (owner polish, 2026-09-17)
|
||||
|
||||
(Removed from the settings/cheat-sheet registry 2026-10-10 — obvious
|
||||
in-field navigation; the behavior below is unchanged.)
|
||||
|
||||
While the model menu is open, focus stays in the search field and the
|
||||
menu owns ↑/↓/Enter inside the input's own handler:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user