Coverage for src / osiris_cli / command_footer.py: 0%
16 statements
« prev ^ index » next coverage.py v7.13.0, created at 2025-12-27 17:41 +0200
« prev ^ index » next coverage.py v7.13.0, created at 2025-12-27 17:41 +0200
1from textual.containers import Horizontal
2from textual.widgets import Button, Label
3from textual.app import ComposeResult
5class OsirisCommandFooter(Horizontal):
6 """
7 A sleek, slim footer for clickable quick commands/shortcuts.
8 """
9 DEFAULT_CSS = """
10 OsirisCommandFooter {
11 dock: bottom;
12 height: 1; /* Make it slim */
13 background: #020408; /* Darker than main footer */
14 border-top: solid #1a1e29; /* Subtle separator */
15 align: center middle;
16 padding: 0 1;
17 layout: horizontal;
18 }
20 OsirisCommandFooter Button {
21 min-width: 8;
22 background: #0e121b;
23 color: #e0e6ed;
24 border: none;
25 height: 1; /* Match footer height */
26 padding: 0 1;
27 margin: 0 1; /* Spacing between buttons */
28 text-align: center;
29 text-style: bold;
30 }
31 OsirisCommandFooter Button:hover {
32 background: #003344;
33 color: #00d4ff;
34 }
35 """
37 def compose(self) -> ComposeResult:
38 # Chosen quick commands
39 yield Button("Quit", id="cmd-quit")
40 yield Button("Clear", id="cmd-clear")
41 yield Button("YOLO", id="cmd-yolo")
42 yield Button("Config", id="cmd-config")
43 yield Button("Help", id="cmd-help")
45 def on_button_pressed(self, event: Button.Pressed):
46 """Handle button clicks and dispatch commands."""
47 command_map = {
48 "cmd-quit": "/quit",
49 "cmd-clear": "/clear",
50 "cmd-yolo": "/yolo",
51 "cmd-config": "/config",
52 "cmd-help": "/help",
53 }
54 cmd = command_map.get(event.button.id)
55 if cmd:
56 self.app.call_from_thread(self.app.handle_command, cmd)