Compare commits

...

3 Commits

Author SHA1 Message Date
c6edfa5572 style: align help list rows 2026-01-19 15:25:13 +01:00
ac99643dbc style: densify help modal layout 2026-01-19 15:25:06 +01:00
889ac62a9a refactor: tidy modal styles 2026-01-19 15:15:26 +01:00
2 changed files with 27 additions and 44 deletions

View File

@@ -61,8 +61,8 @@ Screen {
DataTable { DataTable {
height: 1fr; height: 1fr;
background: #141622; background: #141622;
color: #d6dbf2; color: #c7cfe8;
border: solid #2b2f45; border: solid #262a3f;
scrollbar-size-horizontal: 0; scrollbar-size-horizontal: 0;
} }
@@ -134,21 +134,16 @@ ProgressBar#progress_bar > .progress-bar--bar {
background: #8bd5ca; background: #8bd5ca;
} }
HelpScreen { HelpScreen,
StatsScreen,
FilterScreen {
align: center middle; align: center middle;
background: rgba(0, 0, 0, 0.7); background: rgba(0, 0, 0, 0.7);
} }
HelpScreen Static { HelpScreen Static,
background: transparent; StatsScreen Static,
} FilterScreen Static {
StatsScreen {
align: center middle;
background: rgba(0, 0, 0, 0.7);
}
StatsScreen Static {
background: transparent; background: transparent;
} }
@@ -183,25 +178,25 @@ StatsScreen .help_list > ListItem > Label {
} }
#help_container { #help_container {
width: 88%; width: 72%;
max-width: 120; max-width: 90;
min-width: 48; min-width: 44;
height: auto; height: auto;
max-height: 80%; max-height: 80%;
min-height: 14; min-height: 14;
background: #181a2a; background: #181a2a;
border: heavy #7aa2f7; border: heavy #7aa2f7;
padding: 1 2; padding: 1 1;
} }
#help_title { #help_title {
width: 100%; width: 100%;
height: 3; height: 2;
text-align: center; text-align: center;
text-style: bold; text-style: bold;
color: #7aa2f7; color: #7aa2f7;
content-align: center middle; content-align: center middle;
margin-bottom: 1; margin-bottom: 0;
border-bottom: solid #4b5165; border-bottom: solid #4b5165;
} }
@@ -210,19 +205,21 @@ StatsScreen .help_list > ListItem > Label {
height: auto; height: auto;
padding: 0; padding: 0;
margin: 0 0 1 0; margin: 0 0 1 0;
align: center middle;
} }
.help_list { .help_list {
width: 1fr; width: 100%;
height: auto; height: auto;
background: transparent; background: transparent;
padding: 0 1; padding: 0;
scrollbar-size: 0 0; scrollbar-size: 0 0;
} }
.help_list > ListItem { .help_list > ListItem {
background: #1b1f33; background: #1b1f33;
padding: 0 1; padding: 0 1;
height: 1;
} }
.help_list > ListItem:hover { .help_list > ListItem:hover {
@@ -236,23 +233,14 @@ StatsScreen .help_list > ListItem > Label {
#help_footer { #help_footer {
width: 100%; width: 100%;
height: 3; height: 2;
text-align: center; text-align: center;
content-align: center middle; content-align: center middle;
color: #bac2de; color: #b6bfdc;
margin-top: 1; margin-top: 0;
border-top: solid #4b5165; border-top: solid #4b5165;
} }
FilterScreen {
align: center middle;
background: rgba(0, 0, 0, 0.7);
}
FilterScreen Static {
background: transparent;
}
#filter_container { #filter_container {
width: 60; width: 60;
height: auto; height: auto;
@@ -281,7 +269,7 @@ FilterScreen Static {
height: 2; height: 2;
text-align: center; text-align: center;
content-align: center middle; content-align: center middle;
color: #bac2de; color: #b6bfdc;
margin-top: 1; margin-top: 1;
} }
""" """

View File

@@ -5,7 +5,7 @@ from datetime import date, datetime
from typing import Any, Callable, Protocol, TYPE_CHECKING, cast from typing import Any, Callable, Protocol, TYPE_CHECKING, cast
from textual.app import ComposeResult from textual.app import ComposeResult
from textual.containers import Container, Horizontal, Vertical from textual.containers import Container, Vertical
from textual.screen import ModalScreen from textual.screen import ModalScreen
from textual.timer import Timer from textual.timer import Timer
from textual.widgets import Input, Label, ListItem, ListView, Static from textual.widgets import Input, Label, ListItem, ListView, Static
@@ -69,23 +69,18 @@ class HelpScreen(AppContextMixin, ModalScreen):
"""Create a ListItem for a single binding.""" """Create a ListItem for a single binding."""
key, description = self._parse_binding(binding) key, description = self._parse_binding(binding)
key_display = self._format_key_display(key) key_display = self._format_key_display(key)
text = f"[bold {KEY_COLOR}]{key_display:>12}[/] [{DESC_COLOR}]{description}[/]" text = f"[bold {KEY_COLOR}]{key_display:>16}[/] [{DESC_COLOR}]{description:<25}[/]"
return ListItem(Label(text)) return ListItem(Label(text))
def compose(self) -> ComposeResult: def compose(self) -> ComposeResult:
app = self._app() app = self._app()
bindings = list(app.BINDINGS) bindings = list(app.BINDINGS)
mid = (len(bindings) + 1) // 2
with Container(id="help_container"): with Container(id="help_container"):
yield Static("Key Bindings", id="help_title") yield Static("Keybindings", id="help_title")
with Horizontal(id="help_content"): with Vertical(id="help_content"):
yield ListView( yield ListView(
*[self._make_item(b) for b in bindings[:mid]], *[self._make_item(b) for b in bindings],
classes="help_list",
)
yield ListView(
*[self._make_item(b) for b in bindings[mid:]],
classes="help_list", classes="help_list",
) )
yield Static( yield Static(