1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
//! Re-exports of all UI building blocks.
//!
//! ## Component overview
//!
//! | Component | Description |
//! |---|---|
//! | [`asciiimg`] | Pixel-art image renderer |
//! | [`badge`] | Small inline status badge |
//! | [`bigtext`] | FIGlet-style large text |
//! | [`block`] | Titled bordered container (BobaBlock) |
//! | [`border`] | Customizable box-drawing border |
//! | [`button`] | Styled button with variants and callbacks |
//! | [`canvas`] | Low-level pixel drawing surface |
//! | [`effect`] | Post-processing effects (scanlines, glow, etc.) |
//! | [`filepicker`] | File/directory browser |
//! | [`form`] | Tab-navigable form with labeled fields |
//! | [`help`] | Keyboard shortcut legend |
//! | [`input`] | Single-line text input |
//! | [`layer`] | Layer stack compositor |
//! | [`layout`] | Flex-like layout helpers + mouse dispatcher |
//! | [`list`] | Scrollable selectable list |
//! | [`modal`] | Modal dialog overlay |
//! | [`paginator`] | Dot-indicator page selector |
//! | [`progress`] | Horizontal progress bar |
//! | [`spinner`] | Animated loading spinner |
//! | [`stopwatch`] | Elapsed-time display |
//! | [`syntax`] | Syntax-highlighted code block |
//! | [`table`] | Column-aligned table with selection |
//! | [`tabs`] | Horizontal tab bar |
//! | [`textarea`] | Multi-line text editor |
//! | [`toast`] | Toast notification pop-up |
//! | [`tree`] | Collapsible tree navigator |
//! | [`viewport`] | Scrollable viewport into a larger canvas |
//!
//! See the [`Component`] trait for the interface all interactive widgets implement.
use ;
/// The core interface for an interactive UI component.
///
/// Implement this trait to create custom widgets that can be mounted into
/// a boba [`App`][crate::App] and receive keyboard/mouse events.
///
/// # Example
///
/// ```
/// use bobatea::components::Component;
/// use bobatea::theme::Theme;
/// use ratatui::{Frame, prelude::Rect};
///
/// struct MyWidget { value: i32 }
/// impl Component for MyWidget {
/// fn render(&mut self, ctx: &mut Frame<'_>, _theme: &Theme) {
/// ctx.buffer_mut().reset();
/// }
/// }
/// ```