fast-fs 0.2.1

High-speed async file system traversal library with batteries-included file browser component
Documentation
// <FILE>crates/fast-fs/src/nav/mod.rs</FILE> - <DESC>Navigation module entry point</DESC>
// <VERS>VERSION: 0.6.0</VERS>
// <WCTX>Adding flat-mode, custom filter, and multi-root support to Browser</WCTX>
// <CLOG>Registered fnc_browser_flat and fnc_browser_virtual_root helper modules</CLOG>

//! Navigation module for file browsing
//!
//! This module provides a batteries-included library for embedding file browsing
//! into applications. It's designed for:
//!
//! - Save/Open dialogs
//! - Project explorers
//! - Asset browsers
//! - Config/log file pickers
//!
//! # Architecture
//!
//! The nav module is an **async state machine** that:
//! - Takes keyboard input via `KeyInput`
//! - Maps keys to actions via `KeyMap`
//! - Returns `ActionResult` to drive UI flow
//! - Uses async I/O for non-blocking directory reads
//!
//! The consumer (your UI framework) is responsible for:
//! - Rendering the browser state
//! - Converting framework events to `KeyInput`
//! - Handling confirmations and input dialogs
//! - Running in a tokio async runtime
//!
//! # Quick Start
//!
//! ```no_run
//! use fast_fs::nav::{Browser, BrowserConfig, KeyInput, ActionResult};
//!
//! #[tokio::main]
//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
//!     let config = BrowserConfig::open_dialog();
//!     let mut browser = Browser::new(config).await?;
//!
//!     // In your event loop:
//!     let result = browser.handle_key(KeyInput::Down).await;
//!     match result {
//!         ActionResult::Done => { /* re-render */ }
//!         ActionResult::DirectoryChanged => { /* full re-render */ }
//!         ActionResult::NeedsConfirmation(op) => { /* show confirm dialog */ }
//!         ActionResult::NeedsInput(req) => { /* show input dialog */ }
//!         ActionResult::FileSelected(path) => { /* user selected a file */ }
//!         ActionResult::Clipboard(state) => { /* store for paste */ }
//!         ActionResult::Unhandled => { /* try jump_to_char */ }
//!     }
//!     Ok(())
//! }
//! ```

// Core types
mod action;
mod action_result;
mod browser_config;
mod cls_browser;
mod cls_history;
mod cls_key_map;
mod cls_selection;
mod file_category;
mod fnc_browser_actions;
mod fnc_browser_flat;
mod fnc_browser_nav;
mod fnc_browser_virtual_root;
mod fnc_file_ops;
mod fnc_glob_match;
mod fnc_validate;
mod key_input;
mod nav_error;

// Re-export public types
pub use action::Action;
pub use action_result::{ActionResult, ClipboardOp, ClipboardState, InputRequest, PendingOp};
pub use browser_config::BrowserConfig;
pub use cls_browser::{Browser, CustomFilter};
pub use cls_history::{History, HistoryEntry};
pub use cls_key_map::KeyMap;
pub use cls_selection::Selection;
pub use file_category::FileCategory;
pub use fnc_validate::validate_name;
pub use key_input::KeyInput;
pub use nav_error::NavError;

// <FILE>crates/fast-fs/src/nav/mod.rs</FILE>
// <VERS>END OF VERSION: 0.6.0</VERS>