Skip to main content

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;