102 lines
2.7 KiB
Python
102 lines
2.7 KiB
Python
"""Factory reset warning modal for OpenRAG TUI."""
|
|
|
|
from textual.app import ComposeResult
|
|
from textual.containers import Container, Horizontal
|
|
from textual.screen import ModalScreen
|
|
from textual.widgets import Button, Static, Label
|
|
|
|
|
|
class FactoryResetWarningModal(ModalScreen[bool]):
|
|
"""Modal dialog to warn about factory reset consequences."""
|
|
|
|
DEFAULT_CSS = """
|
|
FactoryResetWarningModal {
|
|
align: center middle;
|
|
}
|
|
|
|
#dialog {
|
|
width: 70;
|
|
height: auto;
|
|
border: solid #3f3f46;
|
|
background: #27272a;
|
|
padding: 0;
|
|
}
|
|
|
|
#title {
|
|
background: #dc2626;
|
|
color: #fafafa;
|
|
padding: 1 2;
|
|
text-align: center;
|
|
width: 100%;
|
|
text-style: bold;
|
|
}
|
|
|
|
#message {
|
|
padding: 2;
|
|
color: #fafafa;
|
|
text-align: center;
|
|
}
|
|
|
|
#button-row {
|
|
width: 100%;
|
|
height: auto;
|
|
align: center middle;
|
|
padding: 1;
|
|
margin-top: 1;
|
|
}
|
|
|
|
#button-row Button {
|
|
margin: 0 1;
|
|
min-width: 16;
|
|
background: #27272a;
|
|
color: #fafafa;
|
|
border: round #52525b;
|
|
text-style: none;
|
|
tint: transparent 0%;
|
|
}
|
|
|
|
#button-row Button:hover {
|
|
background: #27272a !important;
|
|
color: #fafafa !important;
|
|
border: round #52525b;
|
|
tint: transparent 0%;
|
|
text-style: none;
|
|
}
|
|
|
|
#button-row Button:focus {
|
|
background: #27272a !important;
|
|
color: #fafafa !important;
|
|
border: round #ec4899;
|
|
tint: transparent 0%;
|
|
text-style: none;
|
|
}
|
|
"""
|
|
|
|
def compose(self) -> ComposeResult:
|
|
"""Create the modal dialog layout."""
|
|
with Container(id="dialog"):
|
|
yield Label("⚠ Factory Reset Warning", id="title")
|
|
yield Static(
|
|
"This action will permanently delete:\n\n"
|
|
"• All ingested knowledge and documents\n"
|
|
"• All conversation history\n"
|
|
"• All provider settings and configuration\n\n"
|
|
"This cannot be undone.\n\n"
|
|
"Do you want to continue?",
|
|
id="message"
|
|
)
|
|
with Horizontal(id="button-row"):
|
|
yield Button("Cancel", id="cancel-btn")
|
|
yield Button("Factory Reset", id="continue-btn", variant="error")
|
|
|
|
def on_mount(self) -> None:
|
|
"""Focus the cancel button by default for safety."""
|
|
self.query_one("#cancel-btn", Button).focus()
|
|
|
|
def on_button_pressed(self, event: Button.Pressed) -> None:
|
|
"""Handle button presses."""
|
|
if event.button.id == "continue-btn":
|
|
self.dismiss(True) # User wants to continue
|
|
else:
|
|
self.dismiss(False) # User cancelled
|
|
|