tui: intra-screen Tab navigation for all screens #118

Closed
opened 2026-04-12 18:53:24 +00:00 by claude-desktop · 0 comments
Collaborator

User story

As a user using the standard navigation preset, I want Tab/Shift-Tab to cycle through all interactive elements within a screen (fields, lists, buttons), so that every UI element is reachable without vim keybindings.

Problem

After merging the navigation presets PR (#115), sidebar arrow navigation works. But within screens, Tab only cycles between sidebar and main content — it doesn't move between individual widgets. For example:

  • Generate screen: Tab should cycle Prompt → Negative → Model → Sampler → Steps → CFG → Seed → Width → Height → LoRA list
  • Settings screen: Tab should cycle between section list and fields pane (partially works), but field-level Tab navigation is missing
  • Gallery screen: Tab should cycle between grid/list and detail panel controls
  • Entity screen: Tab should cycle between kind selector, entity list, and detail fields

Acceptance criteria

Generate screen

  • Tab cycles through all parameter fields in order
  • Shift-Tab cycles in reverse
  • Focused field has a visible highlight (already exists for most fields)
  • Enter on a focused field starts editing (for text fields) or toggles (for booleans)
  • Tab in grid/list mode cycles: search bar → sort control → grid/list items
  • Tab in detail mode cycles: image pane → metadata sidebar → action buttons
  • Arrow keys navigate within the focused widget (grid cells, list items)

Settings screen

  • Tab cycles between section list and fields pane (already partially works)
  • Within fields pane, Up/Down moves between fields, Enter edits

Entity screen

  • Tab cycles: kind column → entity list → detail panel
  • Within each column, Up/Down navigates items

Model browser screen

  • Tab cycles: source tabs → search input → results list
  • Within results, Up/Down navigates

Presets screen

  • Tab cycles: preset list → action buttons (apply/create/delete)
  • Up/Down navigates presets

All screens

  • Focus ring wraps (Tab from last element goes to first)
  • Shift-Tab reverses the cycle
  • Visual indicator shows which widget group has focus
  • Both "vim" and "standard" presets support Tab cycling (vim adds hjkl shortcuts on top)

Out of scope

  • Overlay internal Tab navigation (overlays are already self-contained)
  • Mouse click-to-focus (already handled in charles/loom#112)

References

  • Generate screen focus: crates/loom-tui/src/screens/generate.rs GenerateFocus enum
  • Settings screen panes: crates/loom-tui/src/screens/settings.rs Pane enum
  • Entity screen focus: crates/loom-tui/src/screens/entities.rs EntityFocus enum
  • App focus: crates/loom-tui/src/app.rs Focus enum (sidebar vs main)
## User story As a user using the standard navigation preset, I want Tab/Shift-Tab to cycle through all interactive elements within a screen (fields, lists, buttons), so that every UI element is reachable without vim keybindings. ## Problem After merging the navigation presets PR (#115), sidebar arrow navigation works. But within screens, Tab only cycles between sidebar and main content — it doesn't move between individual widgets. For example: - **Generate screen**: Tab should cycle Prompt → Negative → Model → Sampler → Steps → CFG → Seed → Width → Height → LoRA list - **Settings screen**: Tab should cycle between section list and fields pane (partially works), but field-level Tab navigation is missing - **Gallery screen**: Tab should cycle between grid/list and detail panel controls - **Entity screen**: Tab should cycle between kind selector, entity list, and detail fields ## Acceptance criteria ### Generate screen - [ ] Tab cycles through all parameter fields in order - [ ] Shift-Tab cycles in reverse - [ ] Focused field has a visible highlight (already exists for most fields) - [ ] Enter on a focused field starts editing (for text fields) or toggles (for booleans) ### Gallery screen - [ ] Tab in grid/list mode cycles: search bar → sort control → grid/list items - [ ] Tab in detail mode cycles: image pane → metadata sidebar → action buttons - [ ] Arrow keys navigate within the focused widget (grid cells, list items) ### Settings screen - [ ] Tab cycles between section list and fields pane (already partially works) - [ ] Within fields pane, Up/Down moves between fields, Enter edits ### Entity screen - [ ] Tab cycles: kind column → entity list → detail panel - [ ] Within each column, Up/Down navigates items ### Model browser screen - [ ] Tab cycles: source tabs → search input → results list - [ ] Within results, Up/Down navigates ### Presets screen - [ ] Tab cycles: preset list → action buttons (apply/create/delete) - [ ] Up/Down navigates presets ### All screens - [ ] Focus ring wraps (Tab from last element goes to first) - [ ] Shift-Tab reverses the cycle - [ ] Visual indicator shows which widget group has focus - [ ] Both `"vim"` and `"standard"` presets support Tab cycling (vim adds hjkl shortcuts on top) ## Out of scope - Overlay internal Tab navigation (overlays are already self-contained) - Mouse click-to-focus (already handled in charles/loom#112) ## References - Generate screen focus: `crates/loom-tui/src/screens/generate.rs` `GenerateFocus` enum - Settings screen panes: `crates/loom-tui/src/screens/settings.rs` `Pane` enum - Entity screen focus: `crates/loom-tui/src/screens/entities.rs` `EntityFocus` enum - App focus: `crates/loom-tui/src/app.rs` `Focus` enum (sidebar vs main)
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
charles/loom#118
No description provided.