feat(tui): unify keyboard and mouse navigation

Declare every dashboard key as a Binding on the widget that owns it, and
generate the footer, activity tool chips and help screen from those
bindings so they cannot drift. The footer collapses to "? help · q quit"
under 80x24.

Add Home/End and PgUp/PgDn (one week) navigation, mouse-wheel selection on
the graphs, click-to-focus on every panel, and clickable footer chips.
Tab and Shift+Tab now visit only the dashboard panels.
This commit is contained in:
xavierk
2026-10-05 20:42:04 +05:30
parent 79ebb10dea
commit 6c517e4ecb
6 changed files with 669 additions and 129 deletions
+2 -8
View File
@@ -1357,15 +1357,9 @@ class TestConstrainedLayout:
headline = str(app.query_one("#headline-band").render())
assert "remaining" in headline.lower() or "projection" in headline.lower()
# Service strip should have actions
strip = str(app.query_one("#action-rail").render())
assert "p Pause" in strip
assert "r Resume" in strip
assert "q Quit TUI" in strip
# Quit rail should be visible
# Under 80x24 the footer collapses to help and quit (issue #110)
rail = str(app.query_one("#action-rail").render())
assert "Quit" in rail
assert rail == "? help · q quit"
@pytest.mark.asyncio
async def test_constrained_long_reasons_visible(self, tmp_path):