commit 50855c87a04309240229d68af9ce3ce5bab7faf2 from: ale date: Fri Jul 31 00:50:59 2026 UTC Confirmación de eliminar: una sola pregunta, diálogo centrado; centra el mensaje de cowsay ConfirmDeleteScreen pasa de doble confirmación a una sola (el usuario pidió revertir eso), y en vez de reusar .form-container (pensado para formularios que ocupan toda la pantalla) ahora es un diálogo compacto de ancho fijo (64 cols) centrado con align: center middle sobre la propia screen. #success-container (el cowsay del final) le faltaba width: 100% — sin eso 'align: center middle' no tenía espacio extra para centrar contra, así que quedaba pegado a la izquierda. Se agrega, más content-align: center middle en el Static del arte ASCII para que el bloque de texto multilínea también se centre horizontalmente dentro de su caja. commit - 67e37ea4e902fd4b618e5df04e97d18df742d5ab commit + 50855c87a04309240229d68af9ce3ce5bab7faf2 blob - b4b48a7a0b888e290e222d1283530539c707bacf blob + ae59af4e6103687ef48ca526edfb47d2feaee04e --- nezzontli_ctl/screens/confirm_delete.py +++ nezzontli_ctl/screens/confirm_delete.py @@ -4,41 +4,26 @@ from textual.widgets import Button, Label, Static class ConfirmDeleteScreen(ModalScreen[bool]): - """Pide confirmar la eliminación DOS VECES (dos preguntas seguidas en el - mismo modal) antes de devolver True. False si se cancela en cualquiera - de las dos.""" + """Diálogo centrado que pide confirmar la eliminación una vez. True si + se confirma, False si se cancela.""" BINDINGS = [("escape", "cancel", "Cancelar")] - _MESSAGES = [ - "¿Seguro que querés eliminar esto?", - "¿Estás completamente seguro? Esta acción no se puede deshacer.", - ] - def __init__(self, what: str): super().__init__() self._what = what - self._step = 0 def compose(self): - with Vertical(classes="form-container"): + with Vertical(id="delete-dialog"): yield Label("Eliminar", classes="form-label") yield Static(f"Se va a eliminar: {self._what}", id="delete-target") - yield Static(self._MESSAGES[0], id="delete-message") - with Horizontal(): + yield Static("¿Seguro? Esta acción no se puede deshacer.", id="delete-message") + with Horizontal(id="delete-buttons"): yield Button("Sí, eliminar", id="delete-yes", variant="error") yield Button("Cancelar", id="delete-no") def on_button_pressed(self, event: Button.Pressed) -> None: - if event.button.id != "delete-yes": - self.dismiss(False) - return - if self._step == 0: - self._step = 1 - self.query_one("#delete-message", Static).update(self._MESSAGES[1]) - self.query_one("#delete-yes", Button).label = "Sí, eliminar definitivamente" - return - self.dismiss(True) + self.dismiss(event.button.id == "delete-yes") def action_cancel(self) -> None: self.dismiss(False) blob - 9abd3deac120cea1b394aee79702fdaebd2566e0 blob + 4348b54a8bb25f3795ccc8976ba3402ad68706ee --- nezzontli_ctl/styles.tcss +++ nezzontli_ctl/styles.tcss @@ -93,8 +93,36 @@ #success-container { align: center middle; height: 100%; + width: 100%; } #cowsay-output { color: $success; + width: 100%; + content-align: center middle; } + +ConfirmDeleteScreen { + align: center middle; +} + +#delete-dialog { + width: 64; + height: auto; + padding: 1 2; + border: solid $error; + background: $surface; +} + +#delete-target { + margin-bottom: 1; +} + +#delete-message { + color: $warning; + margin-bottom: 1; +} + +#delete-buttons { + height: auto; +}