Skip to main content

ratatui_interact/components/
mod.rs

1//! UI Components
2//!
3//! This module provides reusable interactive UI components that extend ratatui.
4//!
5//! # Components
6//!
7//! ## Interactive Components
8//! - [`CheckBox`] - Toggleable checkbox with label
9//! - [`Input`] - Text input field with cursor
10//! - [`TextArea`] - Multi-line text input with cursor and scrolling
11//! - [`Button`] - Various button styles
12//! - [`Select`] - Dropdown select box with popup options
13//! - [`ContextMenu`] - Right-click popup menu with actions and submenus
14//! - [`MenuBar`] - Horizontal menu bar with dropdown menus (File, Edit, View, Help style)
15//! - [`PopupDialog`] - Container for popup dialogs
16//!
17//! ## Display Components
18//! - [`AnimatedText`] - Animated text with color effects (pulse, wave, rainbow)
19//! - [`ParagraphExt`] - Extended paragraph with word-wrapping and scrolling
20//! - [`Toast`] - Toast notifications with auto-dismiss
21//! - [`Progress`] - Progress bar with label and percentage
22//! - [`MarqueeText`] - Scrolling text for long content in limited space
23//! - [`Spinner`] - Animated loading/processing indicator with multiple styles
24//!
25//! ## Navigation Components
26//! - [`ListPicker`] - Scrollable list with selection
27//! - [`TreeView`] - Collapsible tree view with selection
28//! - [`FileExplorer`] - File browser with multi-select
29//! - [`Accordion`] - Collapsible sections with single or multiple expansion
30//! - [`Breadcrumb`] - Hierarchical navigation path with ellipsis collapsing
31//!
32//! ## Layout Components
33//! - [`TabView`] - Tab bar with switchable content panes
34//! - [`SplitPane`] - Resizable split pane with drag-to-resize divider
35//!
36//! ## Utility Components
37//! - [`MousePointer`] - Visual indicator at mouse cursor position
38//!
39//! ## Dialog Components
40//! - [`HotkeyDialog`] - Hotkey configuration dialog with search and categories
41//!
42//! ## Viewer Components
43//! - [`LogViewer`] - Scrollable log viewer with search
44//! - [`DiffViewer`] - Diff viewer with unified and side-by-side modes
45//! - [`StepDisplay`] - Multi-step progress display
46
47pub mod accordion;
48pub mod animated_text;
49pub mod breadcrumb;
50pub mod button;
51pub mod checkbox;
52pub mod container;
53pub mod context_menu;
54pub mod diff_viewer;
55pub mod file_explorer;
56pub mod hotkey_dialog;
57pub mod input;
58pub mod list_picker;
59pub mod log_viewer;
60pub mod marquee;
61pub mod menu_bar;
62pub mod mouse_pointer;
63pub mod paragraph_ext;
64pub mod progress;
65pub mod scrollable_content;
66pub mod select;
67pub mod spinner;
68pub mod split_pane;
69pub mod step_display;
70pub mod tab_view;
71pub mod textarea;
72pub mod toast;
73pub mod tree_view;
74
75pub use accordion::{
76    Accordion, AccordionMode, AccordionState, AccordionStyle, calculate_height as accordion_height,
77    handle_accordion_key, handle_accordion_mouse,
78};
79pub use animated_text::{
80    AnimatedText, AnimatedTextEffect, AnimatedTextState, AnimatedTextStyle, WaveDirection,
81};
82pub use breadcrumb::{
83    Breadcrumb, BreadcrumbAction, BreadcrumbItem, BreadcrumbState, BreadcrumbStyle,
84    get_hovered_index as breadcrumb_hovered_index, handle_breadcrumb_key, handle_breadcrumb_mouse,
85};
86pub use button::{Button, ButtonAction, ButtonState, ButtonStyle, ButtonVariant};
87pub use checkbox::{CheckBox, CheckBoxAction, CheckBoxState, CheckBoxStyle};
88pub use container::{DialogConfig, DialogFocusTarget, DialogState, PopupDialog};
89pub use context_menu::{
90    ContextMenu, ContextMenuAction, ContextMenuItem, ContextMenuState, ContextMenuStyle,
91    calculate_menu_height, handle_context_menu_key, handle_context_menu_mouse,
92    is_context_menu_trigger,
93};
94pub use menu_bar::{
95    Menu, MenuBar, MenuBarAction, MenuBarClickTarget, MenuBarItem, MenuBarState, MenuBarStyle,
96    calculate_dropdown_height as menu_bar_dropdown_height, calculate_menu_bar_height,
97    handle_menu_bar_key, handle_menu_bar_mouse,
98};
99pub use diff_viewer::{
100    DiffData, DiffHunk, DiffLine, DiffLineType, DiffViewMode, DiffViewer, DiffViewerAction,
101    DiffViewerState, DiffViewerStyle, handle_diff_viewer_key, handle_diff_viewer_mouse,
102};
103pub use file_explorer::{EntryType, FileEntry, FileExplorer, FileExplorerState, FileExplorerStyle};
104pub use hotkey_dialog::{
105    CategoryClickRegion, HotkeyCategory, HotkeyClickRegion, HotkeyDialog, HotkeyDialogAction,
106    HotkeyDialogState, HotkeyDialogStyle, HotkeyEntryData, HotkeyFocus, HotkeyProvider,
107    handle_hotkey_dialog_key, handle_hotkey_dialog_mouse, is_close_key as hotkey_is_close_key,
108    is_navigation_key as hotkey_is_navigation_key, render_hotkey_dialog,
109};
110pub use input::{Input, InputAction, InputState, InputStyle};
111pub use list_picker::{ListPicker, ListPickerState, ListPickerStyle, key_hints_footer};
112pub use log_viewer::{LogViewer, LogViewerState, LogViewerStyle, SearchState};
113pub use marquee::{
114    MarqueeMode, MarqueeState, MarqueeStyle, MarqueeText, ScrollDir, bounce_marquee,
115    continuous_marquee,
116};
117pub use mouse_pointer::{MousePointer, MousePointerState, MousePointerStyle};
118pub use paragraph_ext::ParagraphExt;
119pub use progress::{Progress, ProgressStyle};
120pub use scrollable_content::{
121    ScrollableContent, ScrollableContentAction, ScrollableContentState, ScrollableContentStyle,
122    handle_scrollable_content_key, handle_scrollable_content_mouse,
123};
124pub use spinner::{LabelPosition, Spinner, SpinnerFrames, SpinnerState, SpinnerStyle};
125pub use select::{
126    Select, SelectAction, SelectState, SelectStyle, calculate_dropdown_height, handle_select_key,
127    handle_select_mouse,
128};
129pub use split_pane::{
130    Orientation, SplitPane, SplitPaneAction, SplitPaneState, SplitPaneStyle, handle_split_pane_key,
131    handle_split_pane_mouse,
132};
133pub use step_display::{
134    Step, StepDisplay, StepDisplayState, StepDisplayStyle, StepStatus, SubStep,
135    calculate_height as step_display_height,
136};
137pub use tab_view::{
138    Tab, TabPosition, TabView, TabViewAction, TabViewState, TabViewStyle, handle_tab_view_key,
139    handle_tab_view_mouse,
140};
141pub use textarea::{TabConfig, TextArea, TextAreaAction, TextAreaState, TextAreaStyle, WrapMode};
142pub use toast::{Toast, ToastState, ToastStyle};
143pub use tree_view::{FlatNode, TreeNode, TreeStyle, TreeView, TreeViewState, get_selected_id};