tui_breadcrumb/lib.rs
1//! # tui-breadcrumb
2//!
3//! A dedicated, highly customizable, and interactive hierarchical breadcrumb navigation
4//! widget for [Ratatui](https://crates.io/crates/ratatui).
5//!
6//! ```text
7//! 📁 Home ❯ 📂 Projects ❯ 📦 ratatui ▾ ❯ 📄 sparkline.rs
8//! ```
9//!
10//! ## Key Features
11//!
12//! - **Built-in Separator Presets**: Slash (`/`), Chevron (`❯`), Angle (`›`), Arrow (`→`), Pipe (`|`), Backslash (`\`), Double Angle (`»`), or custom glyphs.
13//! - **Smart Responsive Truncation**:
14//! - [`TruncateStrategy::Middle`]: `Home ❯ ... ❯ src ❯ sparkline.rs`
15//! - [`TruncateStrategy::Start`]: `... ❯ src ❯ sparkline.rs`
16//! - [`TruncateStrategy::ShortenNames`]: `H ❯ P ❯ ratatui ❯ src ❯ sparkline.rs`
17//! - [`TruncateStrategy::End`]: `Home ❯ Projects ❯ ...`
18//! - **Interactive State (`BreadcrumbState`)**:
19//! - Keyboard focus navigation with arrow keys.
20//! - Mouse hit testing ([`BreadcrumbState::item_at`], [`BreadcrumbState::dropdown_at`], [`BreadcrumbState::is_ellipsis_at`]).
21//! - **Filesystem Path Integration**: Seamless construction from [`std::path::Path`] via [`from_path`].
22//!
23//! ## Quickstart Example
24//!
25//! ```rust
26//! use ratatui::prelude::*;
27//! use tui_breadcrumb::{Breadcrumb, BreadcrumbSeparator, BreadcrumbState, TruncateStrategy};
28//!
29//! fn draw_breadcrumbs(frame: &mut Frame, area: Rect, state: &mut BreadcrumbState) {
30//! let widget = Breadcrumb::new(["Home", "Projects", "ratatui", "src", "sparkline.rs"])
31//! .separator(BreadcrumbSeparator::chevron())
32//! .strategy(TruncateStrategy::middle())
33//! .selected_style(Style::default().fg(Color::Yellow).add_modifier(Modifier::BOLD));
34//!
35//! frame.render_stateful_widget(widget, area, state);
36//! }
37//! ```
38
39pub mod item;
40pub mod path;
41pub mod separator;
42pub mod state;
43pub mod strategy;
44pub mod truncate;
45pub mod widget;
46
47pub use item::BreadcrumbItem;
48pub use path::from_path;
49pub use separator::BreadcrumbSeparator;
50pub use state::BreadcrumbState;
51pub use strategy::TruncateStrategy;
52pub use widget::Breadcrumb;