Skip to main content

BarSpinner

Struct BarSpinner 

Source
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>

Source

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);
Source

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);
Source

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);
Source

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);
Source

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);
Source

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 area
Source

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 23 for a thicker Claude-style block.

§Examples
use tui_spinner::BarSpinner;

let thick = BarSpinner::new(0).height(2);
Source

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);
Source

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);
Source

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);
Source

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);
Source

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);
Source

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);
Source

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);
Source

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. 13 = 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); // default
Source

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 byteGlyphDots
0xFF8 — full (default)
0x7F7
0x3F6
0x1B4
§Examples
use tui_spinner::BarSpinner;

let light = BarSpinner::new(0).arc_char(0x3F); // ⠿ lighter arc
Source

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);
Source

pub fn motion(self, motion: BarMotion) -> Self

Sets the arc motion mode (default BarMotion::Bounce).

§Examples
use tui_spinner::{BarSpinner, BarMotion, Spin};

// Continuous left-to-right sweep
let sweep = BarSpinner::new(0)
    .spin(Spin::Clockwise)
    .motion(BarMotion::Loop);
Source

pub fn block(self, block: Block<'a>) -> Self

Wraps the spinner in a Block.

§Examples
use ratatui::widgets::Block;
use tui_spinner::BarSpinner;

let spinner = BarSpinner::new(0)
    .block(Block::bordered().title("Loading…"));
Source

pub fn style<S: Into<Style>>(self, style: S) -> Self

Sets the base style applied to the widget area.

Source

pub const fn alignment(self, alignment: Alignment) -> Self

Sets the horizontal alignment of the rendered output (default: left).

Source

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>

Source§

fn clone(&self) -> BarSpinner<'a>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<'a> Debug for BarSpinner<'a>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Styled for BarSpinner<'_>

Source§

type Item = BarSpinner<'_>

Source§

fn style(&self) -> Style

Returns the style of the object.
Source§

fn set_style<S: Into<Style>>(self, style: S) -> Self

Sets the style of the object. Read more
Source§

impl Widget for &BarSpinner<'_>

Source§

fn render(self, area: Rect, buf: &mut Buffer)

Draws the current state of the widget in the given buffer. That is the only method required to implement a custom widget.
Source§

impl Widget for BarSpinner<'_>

Source§

fn render(self, area: Rect, buf: &mut Buffer)

Draws the current state of the widget in the given buffer. That is the only method required to implement a custom widget.

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<T, U> Stylize<'_, T> for U
where U: Styled<Item = T>,

Source§

fn bg<C>(self, color: C) -> T
where C: Into<Color>,

Source§

fn fg<C>(self, color: C) -> T
where C: Into<Color>,

Source§

fn add_modifier(self, modifier: Modifier) -> T

Source§

fn remove_modifier(self, modifier: Modifier) -> T

Source§

fn reset(self) -> T

Source§

fn black(self) -> T

Sets the foreground color to black.
Source§

fn on_black(self) -> T

Sets the background color to black.
Source§

fn red(self) -> T

Sets the foreground color to red.
Source§

fn on_red(self) -> T

Sets the background color to red.
Source§

fn green(self) -> T

Sets the foreground color to green.
Source§

fn on_green(self) -> T

Sets the background color to green.
Source§

fn yellow(self) -> T

Sets the foreground color to yellow.
Source§

fn on_yellow(self) -> T

Sets the background color to yellow.
Source§

fn blue(self) -> T

Sets the foreground color to blue.
Source§

fn on_blue(self) -> T

Sets the background color to blue.
Source§

fn magenta(self) -> T

Sets the foreground color to magenta.
Source§

fn on_magenta(self) -> T

Sets the background color to magenta.
Source§

fn cyan(self) -> T

Sets the foreground color to cyan.
Source§

fn on_cyan(self) -> T

Sets the background color to cyan.
Source§

fn gray(self) -> T

Sets the foreground color to gray.
Source§

fn on_gray(self) -> T

Sets the background color to gray.
Source§

fn dark_gray(self) -> T

Sets the foreground color to dark_gray.
Source§

fn on_dark_gray(self) -> T

Sets the background color to dark_gray.
Source§

fn light_red(self) -> T

Sets the foreground color to light_red.
Source§

fn on_light_red(self) -> T

Sets the background color to light_red.
Source§

fn light_green(self) -> T

Sets the foreground color to light_green.
Source§

fn on_light_green(self) -> T

Sets the background color to light_green.
Source§

fn light_yellow(self) -> T

Sets the foreground color to light_yellow.
Source§

fn on_light_yellow(self) -> T

Sets the background color to light_yellow.
Source§

fn light_blue(self) -> T

Sets the foreground color to light_blue.
Source§

fn on_light_blue(self) -> T

Sets the background color to light_blue.
Source§

fn light_magenta(self) -> T

Sets the foreground color to light_magenta.
Source§

fn on_light_magenta(self) -> T

Sets the background color to light_magenta.
Source§

fn light_cyan(self) -> T

Sets the foreground color to light_cyan.
Source§

fn on_light_cyan(self) -> T

Sets the background color to light_cyan.
Source§

fn white(self) -> T

Sets the foreground color to white.
Source§

fn on_white(self) -> T

Sets the background color to white.
Source§

fn bold(self) -> T

Adds the bold modifier.
Source§

fn not_bold(self) -> T

Removes the bold modifier.
Source§

fn dim(self) -> T

Adds the dim modifier.
Source§

fn not_dim(self) -> T

Removes the dim modifier.
Source§

fn italic(self) -> T

Adds the italic modifier.
Source§

fn not_italic(self) -> T

Removes the italic modifier.
Source§

fn underlined(self) -> T

Adds the underlined modifier.
Source§

fn not_underlined(self) -> T

Removes the underlined modifier.
Adds the slow_blink modifier.
Removes the slow_blink modifier.
Adds the rapid_blink modifier.
Removes the rapid_blink modifier.
Source§

fn reversed(self) -> T

Adds the reversed modifier.
Source§

fn not_reversed(self) -> T

Removes the reversed modifier.
Source§

fn hidden(self) -> T

Adds the hidden modifier.
Source§

fn not_hidden(self) -> T

Removes the hidden modifier.
Source§

fn crossed_out(self) -> T

Adds the crossed_out modifier.
Source§

fn not_crossed_out(self) -> T

Removes the crossed_out modifier.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.