pub struct Tabs<'a> { /* private fields */ }
Expand description
A widget that displays a horizontal set of Tabs with a single tab selected.
Each tab title is stored as a Line
which can be individually styled. The selected tab is set
using Tabs::select
and styled using Tabs::highlight_style
. The divider can be customized
with Tabs::divider
. Padding can be set with Tabs::padding
or Tabs::padding_left
and
Tabs::padding_right
.
The divider defaults to |, and padding defaults to a singular space on each side.
§Example
use ratatui::{
style::{Style, Stylize},
symbols,
widgets::{Block, Tabs},
};
Tabs::new(vec!["Tab1", "Tab2", "Tab3", "Tab4"])
.block(Block::bordered().title("Tabs"))
.style(Style::default().white())
.highlight_style(Style::default().yellow())
.select(2)
.divider(symbols::DOT)
.padding("->", "<-");
In addition to Tabs::new
, any iterator whose element is convertible to Line
can be collected
into Tabs
.
use ratatui::widgets::Tabs;
(0..5).map(|i| format!("Tab{i}")).collect::<Tabs>();
Implementations§
Source§impl<'a> Tabs<'a>
impl<'a> Tabs<'a>
Sourcepub fn new<Iter>(titles: Iter) -> Self
pub fn new<Iter>(titles: Iter) -> Self
Creates new Tabs
from their titles.
titles
can be a Vec
of &str
, String
or anything that can be converted into
Line
. As such, titles can be styled independently.
The selected tab can be set with Tabs::select
. The first tab has index 0 (this is also
the default index).
The selected tab can have a different style with Tabs::highlight_style
. This defaults to
a style with the Modifier::REVERSED
modifier added.
The default divider is a pipe (|
), but it can be customized with Tabs::divider
.
The entire widget can be styled with Tabs::style
.
The widget can be wrapped in a Block
using Tabs::block
.
§Examples
Basic titles.
use ratatui::widgets::Tabs;
let tabs = Tabs::new(vec!["Tab 1", "Tab 2"]);
Styled titles
use ratatui::{style::Stylize, widgets::Tabs};
let tabs = Tabs::new(vec!["Tab 1".red(), "Tab 2".blue()]);
Sourcepub fn titles<Iter>(self, titles: Iter) -> Self
pub fn titles<Iter>(self, titles: Iter) -> Self
Sets the titles of the tabs.
titles
is an iterator whose elements can be converted into Line
.
The selected tab can be set with Tabs::select
. The first tab has index 0 (this is also
the default index).
§Examples
Basic titles.
use ratatui::widgets::Tabs;
let tabs = Tabs::default().titles(vec!["Tab 1", "Tab 2"]);
Styled titles.
use ratatui::{style::Stylize, widgets::Tabs};
let tabs = Tabs::default().titles(vec!["Tab 1".red(), "Tab 2".blue()]);
Sourcepub fn select<T: Into<Option<usize>>>(self, selected: T) -> Self
pub fn select<T: Into<Option<usize>>>(self, selected: T) -> Self
Sets the selected tab.
The first tab has index 0 (this is also the default index).
The selected tab can have a different style with Tabs::highlight_style
.
§Examples
Select the second tab.
use ratatui::widgets::Tabs;
let tabs = Tabs::new(vec!["Tab 1", "Tab 2"]).select(1);
Deselect the selected tab.
use ratatui::widgets::Tabs;
let tabs = Tabs::new(vec!["Tab 1", "Tab 2"]).select(None);
Sourcepub fn style<S: Into<Style>>(self, style: S) -> Self
pub fn style<S: Into<Style>>(self, style: S) -> Self
Sets the style of the tabs.
style
accepts any type that is convertible to Style
(e.g. Style
, Color
, or
your own type that implements Into<Style>
).
This will set the given style on the entire render area.
More precise style can be applied to the titles by styling the ones given to Tabs::new
.
The selected tab can be styled differently using Tabs::highlight_style
.
Sourcepub fn highlight_style<S: Into<Style>>(self, style: S) -> Self
pub fn highlight_style<S: Into<Style>>(self, style: S) -> Self
Sets the style for the highlighted tab.
style
accepts any type that is convertible to Style
(e.g. Style
, Color
, or
your own type that implements Into<Style>
).
Highlighted tab can be selected with Tabs::select
.
Sourcepub fn divider<T>(self, divider: T) -> Self
pub fn divider<T>(self, divider: T) -> Self
Sets the string to use as tab divider.
By default, the divider is a pipe (|
).
§Examples
Use a dot (•
) as separator.
use ratatui::{symbols, widgets::Tabs};
let tabs = Tabs::new(vec!["Tab 1", "Tab 2"]).divider(symbols::DOT);
Use dash (-
) as separator.
use ratatui::widgets::Tabs;
let tabs = Tabs::new(vec!["Tab 1", "Tab 2"]).divider("-");
Sourcepub fn padding<T, U>(self, left: T, right: U) -> Self
pub fn padding<T, U>(self, left: T, right: U) -> Self
Sets the padding between tabs.
Both default to space.
§Examples
A space on either side of the tabs.
use ratatui::widgets::Tabs;
let tabs = Tabs::new(vec!["Tab 1", "Tab 2"]).padding(" ", " ");
Nothing on either side of the tabs.
use ratatui::widgets::Tabs;
let tabs = Tabs::new(vec!["Tab 1", "Tab 2"]).padding("", "");
Sourcepub fn padding_left<T>(self, padding: T) -> Self
pub fn padding_left<T>(self, padding: T) -> Self
Sets the left side padding between tabs.
Defaults to a space.
§Example
An arrow on the left of tabs.
use ratatui::widgets::Tabs;
let tabs = Tabs::new(vec!["Tab 1", "Tab 2"]).padding_left("->");
Sourcepub fn padding_right<T>(self, padding: T) -> Self
pub fn padding_right<T>(self, padding: T) -> Self
Sets the right side padding between tabs.
Defaults to a space.
§Example
An arrow on the right of tabs.
use ratatui::widgets::Tabs;
let tabs = Tabs::new(vec!["Tab 1", "Tab 2"]).padding_right("<-");
Trait Implementations§
Source§impl Default for Tabs<'_>
impl Default for Tabs<'_>
Source§fn default() -> Self
fn default() -> Self
Returns a default Tabs
widget.
The default widget has:
- No tabs
- No selected tab
- The highlight style is set to reversed.
- The divider is set to a pipe (
|
). - The padding on the left and right is set to a space.
This is rarely useful on its own without calling Tabs::titles
.
§Examples
use ratatui::widgets::Tabs;
let tabs = Tabs::default().titles(["Tab 1", "Tab 2"]);
Source§impl<'a, Item> FromIterator<Item> for Tabs<'a>
impl<'a, Item> FromIterator<Item> for Tabs<'a>
Source§fn from_iter<Iter: IntoIterator<Item = Item>>(iter: Iter) -> Self
fn from_iter<Iter: IntoIterator<Item = Item>>(iter: Iter) -> Self
Source§impl WidgetRef for Tabs<'_>
impl WidgetRef for Tabs<'_>
Source§fn render_ref(&self, area: Rect, buf: &mut Buffer)
fn render_ref(&self, area: Rect, buf: &mut Buffer)
impl<'a> Eq for Tabs<'a>
impl<'a> StructuralPartialEq for Tabs<'a>
Auto Trait Implementations§
impl<'a> Freeze for Tabs<'a>
impl<'a> RefUnwindSafe for Tabs<'a>
impl<'a> Send for Tabs<'a>
impl<'a> Sync for Tabs<'a>
impl<'a> Unpin for Tabs<'a>
impl<'a> UnwindSafe for Tabs<'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<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.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<'a, T, U> Stylize<'a, T> for Uwhere
U: Styled<Item = T>,
impl<'a, T, U> Stylize<'a, 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.