hefesto_widgets/lib.rs
1//! # hefesto-widgets
2//!
3//! [](https://crates.io/crates/hefesto-widgets)
4//!
5//! Widgets reutilizables para interfaces TUI construidas con
6//! [ratatui](https://crates.io/crates/ratatui), orientados al ecosistema
7//! **Hefesto**. Proporcionan componentes modulares, stateful y configurables.
8//!
9//! ## Quickstart
10//!
11//! ```rust
12//! use hefesto_widgets::{Popup, PopupSize};
13//! use ratatui::{style::Color, text::Line};
14//!
15//! let _popup = Popup::new(Color::White)
16//! .title("Aviso")
17//! .content(vec![Line::from("Operación completada")])
18//! .width(PopupSize::Fixed(44));
19//! ```
20//!
21//! ## Índice de widgets
22//!
23//! | Widget | Tipo | Propósito |
24//! |---|---|---|
25//! | [`Popup`] | base | Caja de diálogo configurable (tamaño, borde, posición, fondo) |
26//! | [`ChoosePopup`] | Stateful | Lista seleccionable con filtro inline y selección múltiple |
27//! | [`ConfirmationPopup`] | Widget | Diálogo confirmar/cancelar con estilos personalizables |
28//! | [`ThemedConfirmationPopup`] | Widget | Confirmación con variante semántica (Success/Warning/Danger/None) |
29//! | [`FileBrowser`] | Stateful | Navegador de archivos (widget standalone, sin chrome de popup) |
30//! | [`FileBrowserPopup`] | Stateful | Navegador de archivos con título, bordes y posición |
31//! | [`TreePopup`] | Stateful | Árbol expandible dentro de un popup |
32//! | [`SpinPopup`] | Stateful | Spinner animado + comando + salida + mensaje de finalización |
33//! | [`TextInputPopup`] | Stateful | Campo de texto centrado dentro de un popup |
34//! | [`ScrollList`] | Stateful | Lista desplazable con scrollbar vertical |
35//! | [`Tree`] | Stateful | Árbol expandible/colapsable con indentación |
36//! | [`TextInput`] | Stateful | Editor de texto de una o varias líneas |
37//! | [`Spin`] | Stateful | Spinner atómico mínimo |
38//! | [`ThemedSpin`] | Stateful | Spinner con variantes predefinidas (Dots, Line, Pulse, …) |
39//!
40//! ## Tipos auxiliares
41//!
42//! | Tipo | Descripción |
43//! |---|---|
44//! | [`AutoSized`] | Trait para popups con altura automática según su contenido |
45//! | [`BorderType`] | Estilos de borde (Plain, Rounded, Double, Thick, QuadrantInside, QuadrantOutside, None) |
46//! | [`PopupSize`] | Modos de tamaño (Fixed, Percent, Auto, Max) |
47//! | [`ConfirmationVariant`] | Variantes semánticas para [`ThemedConfirmationPopup`] |
48//! | [`SpinVariant`] | Variantes de animación para [`ThemedSpin`] |
49//! | `decorate_with_dots` | Helper para pintar fondo decorativo de puntos (opt-in, color, symbol, density) |
50//! | [`ScrollListState`], [`ChoosePopupState`], [`FileBrowserState`], [`SpinState`], [`TextInputState`], [`TreeState`] | Estados para widgets stateful |
51//!
52//! ## Breaking changes v0.4.x → v0.5.0
53//!
54//! - `HefestoConfirmationPopup` renombrado a [`ThemedConfirmationPopup`]
55//! - `HefestoSpin` renombrado a [`ThemedSpin`]
56//! - `fill_bg` renombrado a `bg_color` en todos los widgets
57//! - `input_fill_bg` renombrado a `input_bg_color` en `TextInputPopup`
58
59mod badge;
60mod popup;
61mod tree;
62mod popups;
63mod scroll_list;
64mod spin;
65mod spins;
66mod styles;
67mod text_input;
68
69pub use badge::{Badge, BadgeAnchor, BadgeStack, BadgeStackState};
70pub use popup::{BorderType, DotGridConfig, Popup, PopupSize};
71pub use popups::{AutoSized, ChoosePopup, ChoosePopupState, ConfirmationPopup, ConfirmationVariant, FileBrowser, FileBrowserPopup, FileBrowserState, ThemedConfirmationPopup, SpinPopup, TextInputPopup, TreePopup};
72pub use scroll_list::{ScrollList, ScrollListState};
73pub use spins::{ThemedSpin, SpinVariant};
74pub use spin::{Spin, SpinState};
75pub use tree::{Tree, TreeNode, TreeState};
76pub use styles::{
77 decorate_with_dots, decorate_with_dots_with_pattern, default_scrollbar, default_scrollbar_state,
78 DotPattern, BORDER_GRAY, CHECK, CROSS, DEFAULT_FRAMES, DEFAULT_HIGHLIGHT, FOOTER_GRAY,
79 HIGHLIGHT_SYMBOL, OUTPUT_GRAY, POPUP_WIDTH, TEXT_PADDING,
80};
81pub use text_input::{TextInput, TextInputState};