6 Commits

Author SHA1 Message Date
47ced52722 check for empty selection and return early if blank.
this fixes a crash should a draw be attempted without a selection.
2026-02-21 21:56:05 +00:00
9405b4a588 fix the build
minor bump
2026-02-21 21:41:34 +00:00
ea8eae6ec3 patch bump 2026-02-21 21:22:38 +00:00
d3e9363424 remove unused rules 2026-02-21 21:22:07 +00:00
ca2862f3aa replace screenshot 2026-02-21 21:16:30 +00:00
e2e30944b7 typo 2026-02-21 21:10:46 +00:00
5 changed files with 19 additions and 152 deletions

View File

@@ -25,7 +25,7 @@ uv tool install lottery-tui
*with pipx* *with pipx*
```console ```console
pipx install lotter-tui pipx install lottery-tui
``` ```
The TUI should now be discoverable as lottery-tui. The TUI should now be discoverable as lottery-tui.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -1,6 +1,6 @@
[project] [project]
name = "lottery-tui" name = "lottery-tui"
version = "0.1.0" version = "0.2.1"
description = "A terminal user interface for lottery games." description = "A terminal user interface for lottery games."
authors = [{ name = "onyx-and-iris", email = "code@onyxandiris.online" }] authors = [{ name = "onyx-and-iris", email = "code@onyxandiris.online" }]
dependencies = ["textual>=8.0.0"] dependencies = ["textual>=8.0.0"]
@@ -11,5 +11,13 @@ license = { text = "MIT" }
[project.scripts] [project.scripts]
lottery-tui = "lottery_tui.tui:main" lottery-tui = "lottery_tui.tui:main"
[build-system]
requires = ["pdm-backend"]
build-backend = "pdm.backend"
[tool.pdm] [tool.pdm]
distribution = true distribution = true
[tool.pdm.build]
package-dir = "src"
includes = ["src/**/*", "README.md", "LICENSE"]

View File

@@ -37,11 +37,17 @@ class LotteryTUI(App):
def on_button_pressed(self, event): def on_button_pressed(self, event):
"""Handle button press events.""" """Handle button press events."""
if event.button.id == 'draw-button': if event.button.id == 'draw-button':
if self.query_one('#lottery-select').is_blank():
self.query_one('#result-label').update(
'Please select a lottery before drawing.'
)
return
selected_lottery = self.query_one('#lottery-select').value selected_lottery = self.query_one('#lottery-select').value
try: try:
lottery_obj = request_lottery_obj(selected_lottery) lottery_obj = request_lottery_obj(selected_lottery)
result = lottery_obj.draw() result = lottery_obj.draw()
self.query_one('#result-label').update(f'Result: {result}')
except ValueError as e: except ValueError as e:
self.query_one('#result-label').update(str(e)) self.query_one('#result-label').update(str(e))

View File

@@ -61,9 +61,7 @@ LotteryTUI {
text-style: bold italic; text-style: bold italic;
} }
/* Additional styling for potential future widgets */ /* Button styling */
/* Button styling for lottery buttons */
Button { Button {
background: #ffd700; background: #ffd700;
border: round #e6c200; border: round #e6c200;
@@ -86,22 +84,6 @@ Button:focus {
color: #1a1a2e; color: #1a1a2e;
} }
/* Input styling for lottery number inputs */
Input {
background: #2d3748;
border: round #4a5568;
color: #ffd700;
height: 3;
margin: 1;
padding: 0 1;
}
Input:focus {
background: #374151;
border: round #ffd700;
color: #ffed4a;
}
/* Label styling */ /* Label styling */
Label { Label {
color: #e2e8f0; color: #e2e8f0;
@@ -132,7 +114,7 @@ Label {
color: #1a1a2e; color: #1a1a2e;
} }
/* Results Label Styling - Enhanced Appearance */ /* Results Label Styling */
#result-label { #result-label {
background: #1a365d; background: #1a365d;
border: thick #ffd700; border: thick #ffd700;
@@ -145,132 +127,3 @@ Label {
content-align: left middle; content-align: left middle;
width: 100%; width: 100%;
} }
/* Container for lottery number display */
.lottery-numbers {
align: center middle;
background: #2d3748;
border: round #ffd700;
height: auto;
margin: 2;
padding: 2;
}
/* Individual lottery number balls */
.lottery-ball {
background: #ffd700;
border: round #e6c200;
color: #1a1a2e;
height: 3;
margin: 0 1;
text-align: center;
text-style: bold;
width: 6;
}
.lottery-ball:hover {
background: #ffed4a;
color: #16213e;
}
/* Results display */
.results {
background: #1a202c;
border: round #4a5568;
color: #e2e8f0;
height: auto;
margin: 2;
padding: 2;
}
.winning-number {
color: #48bb78;
text-style: bold;
}
.losing-number {
color: #f56565;
text-style: italic;
}
/* Status bar */
.status-bar {
background: #2d3748;
color: #a0aec0;
dock: bottom;
height: 1;
padding: 0 1;
}
/* Header */
.header {
background: #ffd700;
color: #1a1a2e;
dock: top;
height: 3;
text-align: center;
text-style: bold;
}
/* Footer */
.footer {
background: #1a1a2e;
color: #a0aec0;
dock: bottom;
height: 1;
text-align: center;
text-style: italic;
}
/* Sidebar styling */
.sidebar {
background: #2d3748;
border-right: solid #4a5568;
dock: left;
width: 20;
}
/* Content area */
.content {
background: $surface;
margin: 1;
padding: 1;
}
/* Error messages */
.error {
background: #fed7d7;
border: round #f56565;
color: #c53030;
margin: 1;
padding: 1;
text-style: bold;
}
/* Success messages */
.success {
background: #c6f6d5;
border: round #48bb78;
color: #22543d;
margin: 1;
padding: 1;
text-style: bold;
}
/* Loading spinner */
.loading {
color: #ffd700;
text-align: center;
text-style: bold;
}
/* Prize display */
.prize {
background: #ffd700;
border: round #e6c200;
color: #1a1a2e;
margin: 1;
padding: 2;
text-align: center;
text-style: bold;
}