pub struct BarSpinner<'a> { /* private fields */ }Expand description
A Zed / Claude-style braille loading bar that bounces left and right.
Every character cell in the bar is a braille glyph. A bright arc window
slides across and reverses at each end; the arc edges fade through a
density ramp (⠉ ⠛ ⠿ ⣿) for a soft comet-glow look. The dim
background uses ⣀ (a two-dot rail) so the full bar extent is visible
without competing with the arc.
§Width
Leave width at its default 0 to fill
the available area automatically (most common usage). Set it to a fixed
positive value if you need a predetermined size.
§Examples
use ratatui::style::Color;
use ratatui::Frame;
use ratatui::layout::Rect;
use tui_spinner::{BarSpinner, BarTrack, Spin};
fn draw(frame: &mut Frame, area: Rect, tick: u64) {
// Fills the full width of `area` — typical Zed/Claude style.
frame.render_widget(
BarSpinner::new(tick)
.arc_color(Color::Cyan)
.dim_color(Color::DarkGray),
area,
);
}§Field Defaults
| Field | Default |
|—————–|—————————–||
| track | BarTrack::Rail |
| fade_width | 3 |
| arc_byte | 0xFF (⣿) |
| bar_style | BarStyle::Braille |
| motion | BarMotion::Bounce |
Implementations§
Source§impl<'a> BarSpinner<'a>
impl<'a> BarSpinner<'a>
Sourcepub fn zed(tick: u64) -> Self
pub fn zed(tick: u64) -> Self
Zed-style preset — 1 row, cyan arc, subtle Rail track, clockwise.
use tui_spinner::BarSpinner;
let s = BarSpinner::zed(42);Sourcepub fn claude(tick: u64) -> Self
pub fn claude(tick: u64) -> Self
Claude-style preset — 2 rows, warm-orange arc, Rail track, clockwise.
use tui_spinner::BarSpinner;
let s = BarSpinner::claude(42);Sourcepub fn minimal(tick: u64) -> Self
pub fn minimal(tick: u64) -> Self
Minimal preset — 1 row, white arc, Empty track (arc floats on space).
use tui_spinner::BarSpinner;
let s = BarSpinner::minimal(42);Sourcepub fn solid(tick: u64) -> Self
pub fn solid(tick: u64) -> Self
Solid preset — 1 row, cyan arc, Full track, sharp zero-fade edges.
use tui_spinner::BarSpinner;
let s = BarSpinner::solid(42);Sourcepub fn new(tick: u64) -> Self
pub fn new(tick: u64) -> Self
Creates a new BarSpinner with defaults:
auto-width, 1-row height, clockwise start, cyan arc, dark-gray track,
1 tick per step, auto arc width.
§Examples
use tui_spinner::BarSpinner;
let spinner = BarSpinner::new(42);Sourcepub fn width(self, w: usize) -> Self
pub fn width(self, w: usize) -> Self
Sets the fixed width in character columns.
Pass 0 (the default) to fill the available area width
automatically.
§Examples
use tui_spinner::BarSpinner;
let fixed = BarSpinner::new(0).width(24);
let auto = BarSpinner::new(0).width(0); // fills areaSourcepub fn height(self, h: usize) -> Self
pub fn height(self, h: usize) -> Self
Sets the height in character rows (minimum 1, default 1).
Use 1 for a thin Zed-style bar or 2–3 for a thicker
Claude-style block.
§Examples
use tui_spinner::BarSpinner;
let thick = BarSpinner::new(0).height(2);Sourcepub fn arc_width(self, w: usize) -> Self
pub fn arc_width(self, w: usize) -> Self
Sets the arc width in character columns (0 = auto ~⅓ of bar).
§Examples
use tui_spinner::BarSpinner;
let narrow = BarSpinner::new(0).arc_width(6);
let wide = BarSpinner::new(0).arc_width(20);Sourcepub const fn spin(self, spin: Spin) -> Self
pub const fn spin(self, spin: Spin) -> Self
Sets the starting direction before the first bounce
(default: Spin::Clockwise = starts moving right).
§Examples
use tui_spinner::{BarSpinner, Spin};
let rtl = BarSpinner::new(0).spin(Spin::CounterClockwise);Sourcepub fn ticks_per_step(self, n: u64) -> Self
pub fn ticks_per_step(self, n: u64) -> Self
Sets how many ticks each arc position is held (default 1; higher = slower).
§Examples
use tui_spinner::BarSpinner;
let slow = BarSpinner::new(0).ticks_per_step(3);Sourcepub const fn arc_color(self, color: Color) -> Self
pub const fn arc_color(self, color: Color) -> Self
Sets the colour of the bright arc glyph (default: Color::Cyan).
§Examples
use ratatui::style::Color;
use tui_spinner::BarSpinner;
let spinner = BarSpinner::new(0).arc_color(Color::LightBlue);Sourcepub const fn dim_color(self, color: Color) -> Self
pub const fn dim_color(self, color: Color) -> Self
Sets the colour of the dim background track (default: Color::DarkGray).
Set to the terminal background colour (e.g. Color::Black) to hide
the track so only the glowing arc is visible.
§Examples
use ratatui::style::Color;
use tui_spinner::BarSpinner;
// Visible track
let with_track = BarSpinner::new(0).dim_color(Color::DarkGray);
// Arc floats on empty space
let no_track = BarSpinner::new(0).dim_color(Color::Black);Sourcepub fn with_colors(self, arc_color: Color, dim_color: Color) -> Self
pub fn with_colors(self, arc_color: Color, dim_color: Color) -> Self
Sets both arc_color and dim_color in one call.
Equivalent to .arc_color(arc).dim_color(dim).
§Examples
use ratatui::style::Color;
use tui_spinner::BarSpinner;
let s = BarSpinner::new(0).with_colors(Color::Cyan, Color::DarkGray);Sourcepub fn track(self, track: BarTrack) -> Self
pub fn track(self, track: BarTrack) -> Self
Sets the background track style (default BarTrack::Rail).
§Examples
use tui_spinner::{BarSpinner, BarTrack};
let solid = BarSpinner::new(0).track(BarTrack::Full);
let float = BarSpinner::new(0).track(BarTrack::Empty);Sourcepub fn fade_width(self, w: usize) -> Self
pub fn fade_width(self, w: usize) -> Self
Sets the arc fade-ramp width in character columns (default 3).
0 = sharp cutoff — the arc edge is a hard boundary.
1–3 = progressively softer gradient (default 3 gives ⠉ ⠛ ⠿ ⣿).
§Examples
use tui_spinner::BarSpinner;
let sharp = BarSpinner::new(0).fade_width(0);
let soft = BarSpinner::new(0).fade_width(3); // defaultSourcepub fn arc_char(self, byte: u8) -> Self
pub fn arc_char(self, byte: u8) -> Self
Sets the braille byte for the fully-lit arc centre cells (default 0xFF = ⣿).
Use any braille byte to change the arc density. The fade ramp always
starts from ⠉ and tapers up to this value.
| Example byte | Glyph | Dots |
|---|---|---|
0xFF | ⣿ | 8 — full (default) |
0x7F | ⡿ | 7 |
0x3F | ⠿ | 6 |
0x1B | ⠛ | 4 |
§Examples
use tui_spinner::BarSpinner;
let light = BarSpinner::new(0).arc_char(0x3F); // ⠿ lighter arcSourcepub fn bar_style(self, style: BarStyle) -> Self
pub fn bar_style(self, style: BarStyle) -> Self
Sets the glyph style for the arc and background track
(default BarStyle::Braille).
Symbol styles (Block, Shade, Dot, Diamond, Square) use a
single Unicode character for the arc and one for the track. They
ignore arc_char, track, and fade_width.
§Examples
use tui_spinner::{BarSpinner, BarStyle};
let block = BarSpinner::new(0).bar_style(BarStyle::Block);
let dot = BarSpinner::new(0).bar_style(BarStyle::Dot);Sourcepub fn motion(self, motion: BarMotion) -> Self
pub fn motion(self, motion: BarMotion) -> Self
Sets the arc motion mode (default BarMotion::Bounce).
BarMotion::Bounce— reverses at each edge (ping-pong).BarMotion::Loop— wraps around; use withSpinto set the sweep direction.
§Examples
use tui_spinner::{BarSpinner, BarMotion, Spin};
// Continuous left-to-right sweep
let sweep = BarSpinner::new(0)
.spin(Spin::Clockwise)
.motion(BarMotion::Loop);Sourcepub fn style<S: Into<Style>>(self, style: S) -> Self
pub fn style<S: Into<Style>>(self, style: S) -> Self
Sets the base style applied to the widget area.
Sourcepub const fn alignment(self, alignment: Alignment) -> Self
pub const fn alignment(self, alignment: Alignment) -> Self
Sets the horizontal alignment of the rendered output (default: left).
Sourcepub fn char_size(&self) -> Option<(usize, usize)>
pub fn char_size(&self) -> Option<(usize, usize)>
Returns the explicit rendered size (cols, rows), or None when the
width is set to auto (0).
§Examples
use tui_spinner::BarSpinner;
assert_eq!(
BarSpinner::new(0).width(20).height(2).char_size(),
Some((20, 2))
);
assert_eq!(BarSpinner::new(0).char_size(), None);Trait Implementations§
Source§impl<'a> Clone for BarSpinner<'a>
impl<'a> Clone for BarSpinner<'a>
Source§fn clone(&self) -> BarSpinner<'a>
fn clone(&self) -> BarSpinner<'a>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<'a> Debug for BarSpinner<'a>
impl<'a> Debug for BarSpinner<'a>
Source§impl Styled for BarSpinner<'_>
impl Styled for BarSpinner<'_>
Source§impl Widget for &BarSpinner<'_>
impl Widget for &BarSpinner<'_>
Auto Trait Implementations§
impl<'a> Freeze for BarSpinner<'a>
impl<'a> RefUnwindSafe for BarSpinner<'a>
impl<'a> Send for BarSpinner<'a>
impl<'a> Sync for BarSpinner<'a>
impl<'a> Unpin for BarSpinner<'a>
impl<'a> UnsafeUnpin for BarSpinner<'a>
impl<'a> UnwindSafe for BarSpinner<'a>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T, U> Stylize<'_, T> for Uwhere
U: Styled<Item = T>,
impl<T, U> Stylize<'_, T> for Uwhere
U: Styled<Item = T>,
fn bg<C>(self, color: C) -> T
fn fg<C>(self, color: C) -> T
fn add_modifier(self, modifier: Modifier) -> T
fn remove_modifier(self, modifier: Modifier) -> T
fn reset(self) -> T
Source§fn on_magenta(self) -> T
fn on_magenta(self) -> T
magenta.Source§fn on_dark_gray(self) -> T
fn on_dark_gray(self) -> T
dark_gray.Source§fn on_light_red(self) -> T
fn on_light_red(self) -> T
light_red.Source§fn light_green(self) -> T
fn light_green(self) -> T
light_green.Source§fn on_light_green(self) -> T
fn on_light_green(self) -> T
light_green.Source§fn light_yellow(self) -> T
fn light_yellow(self) -> T
light_yellow.Source§fn on_light_yellow(self) -> T
fn on_light_yellow(self) -> T
light_yellow.Source§fn light_blue(self) -> T
fn light_blue(self) -> T
light_blue.Source§fn on_light_blue(self) -> T
fn on_light_blue(self) -> T
light_blue.Source§fn light_magenta(self) -> T
fn light_magenta(self) -> T
light_magenta.Source§fn on_light_magenta(self) -> T
fn on_light_magenta(self) -> T
light_magenta.Source§fn light_cyan(self) -> T
fn light_cyan(self) -> T
light_cyan.Source§fn on_light_cyan(self) -> T
fn on_light_cyan(self) -> T
light_cyan.Source§fn not_italic(self) -> T
fn not_italic(self) -> T
italic modifier.Source§fn underlined(self) -> T
fn underlined(self) -> T
underlined modifier.Source§fn not_underlined(self) -> T
fn not_underlined(self) -> T
underlined modifier.Source§fn slow_blink(self) -> T
fn slow_blink(self) -> T
slow_blink modifier.Source§fn not_slow_blink(self) -> T
fn not_slow_blink(self) -> T
slow_blink modifier.Source§fn rapid_blink(self) -> T
fn rapid_blink(self) -> T
rapid_blink modifier.Source§fn not_rapid_blink(self) -> T
fn not_rapid_blink(self) -> T
rapid_blink modifier.Source§fn not_reversed(self) -> T
fn not_reversed(self) -> T
reversed modifier.hidden modifier.hidden modifier.Source§fn crossed_out(self) -> T
fn crossed_out(self) -> T
crossed_out modifier.Source§fn not_crossed_out(self) -> T
fn not_crossed_out(self) -> T
crossed_out modifier.