Metadata-Version: 2.4
Name: develia-tuitools
Version: 0.1.1
Summary: Console presentation layer built on rich.
Author-email: Antonio Gil Espinosa <antonio.gil.espinosa@gmail.com>
Requires-Python: >=3.8
Requires-Dist: rich<14,>=13
Description-Content-Type: text/markdown

# develia-tuitools

Capa de presentación en consola sobre [rich](https://github.com/Textualize/rich),
reutilizable por cualquier script.

Ofrece encabezados de paso/sección, mensajes con marcas (`✓`, `!`, `✗`),
paneles de pares clave/valor, barras de progreso (descarga, porcentaje y
espera indeterminada) y menús de selección, con un estilo homogéneo y a todo
lo ancho del terminal.

## Uso

```python
from develia import tuitools as ui

ui.step(1, 3, "Buscando imagen de origen")
ui.info("Snapshot más reciente...")
ui.detail("Buscando en /var/lib/snapshots")
ui.warning("El snapshot tiene más de 24 horas")
ui.success("Snapshot encontrado y listo")
ui.error("No se pudo leer el sector de arranque")

with ui.download_progress("Descargando /dev/sda", total=1024) as task:
    task.advance(1024)

ui.panel("COMPLETADO", [("Archivo", "backup.img"), ("Tamaño", "1,0 KiB")])
```

### Menús de selección

```python
servidores = [("web-1", 1), ("db-1", 2)]

elegido = ui.select(servidores, "Elige un servidor", label=lambda s: s[0])
varios = ui.select(range(1, 4), "Elige pasos", multiple=True, defaults=[0])
```

Se navega con las flechas (o `j`/`k`), `Enter` confirma, `Espacio` marca en la
selección múltiple y `Esc`/`Ctrl+C` lanza `ui.Cancelled`. Sin terminal
interactivo se muestra una lista numerada leída por `input()`; si tampoco hay
`stdin` se devuelve la opción por defecto, de forma que un script en cron nunca
se queda bloqueado.

## Detección de terminal

- Sin terminal (cron, tuberías) rich degrada solo: ni códigos ANSI ni
  redibujados.
- Algunos entornos admiten color aunque no se anuncien como terminal (consola
  de ejecución de PyCharm, CI): se fuerza la salida enriquecida si existe
  `FORCE_COLOR` o `PYCHARM_HOSTED`. `NO_COLOR` la desactiva.

## Compatibilidad

Python 3.8+ (`rich>=13,<14`, la última rama que soporta 3.8).

Los menús usan `termios`/`tty` de la biblioteca estándar (Unix); no se añade
[Textual](https://github.com/Textualize/textual) porque sus versiones actuales
requieren Python 3.9+ y toman el control de la pantalla completa, incompatible
con un flujo de línea de comandos que también debe funcionar en cron.
