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};
use ratatui::symbols;
use ratatui::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) -> Tabs<'a>
pub fn new<Iter>(titles: Iter) -> Tabs<'a>
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;
use ratatui::widgets::Tabs;
let tabs = Tabs::new(vec!["Tab 1".red(), "Tab 2".blue()]);Sourcepub fn titles<Iter>(self, titles: Iter) -> Tabs<'a>
pub fn titles<Iter>(self, titles: Iter) -> Tabs<'a>
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;
use ratatui::widgets::Tabs;
let tabs = Tabs::default().titles(vec!["Tab 1".red(), "Tab 2".blue()]);Sourcepub fn select<T>(self, selected: T) -> Tabs<'a>
pub fn select<T>(self, selected: T) -> Tabs<'a>
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>(self, style: S) -> Tabs<'a>
pub fn style<S>(self, style: S) -> Tabs<'a>
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>(self, style: S) -> Tabs<'a>
pub fn highlight_style<S>(self, style: S) -> Tabs<'a>
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) -> Tabs<'a>
pub fn divider<T>(self, divider: T) -> Tabs<'a>
Sets the string to use as tab divider.
By default, the divider is a pipe (|).
§Examples
Use a dot (•) as separator.
use ratatui::symbols;
use ratatui::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) -> Tabs<'a>
pub fn padding<T, U>(self, left: T, right: U) -> Tabs<'a>
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) -> Tabs<'a>
pub fn padding_left<T>(self, padding: T) -> Tabs<'a>
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("->");Trait Implementations§
Source§impl Default for Tabs<'_>
impl Default for Tabs<'_>
Source§fn default() -> Tabs<'_>
fn default() -> Tabs<'_>
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§impl UnicodeWidthStr for Tabs<'_>
impl UnicodeWidthStr for Tabs<'_>
Source§fn width(&self) -> usize
fn width(&self) -> usize
Returns the width of the rendered tabs.
The width includes the titles, dividers, and padding. It does not include any borders added by the optional block.
Characters in the Ambiguous category are considered single-width.
use ratatui::widgets::Tabs;
use unicode_width::UnicodeWidthStr;
let tabs = Tabs::new(vec!["Tab1", "Tab2", "Tab3"]);
assert_eq!(tabs.width(), 20); // " Tab1 │ Tab2 │ Tab3 "Source§fn width_cjk(&self) -> usize
Available on crate feature cjk only.
fn width_cjk(&self) -> usize
cjk only.Returns the width of the rendered tabs, accounting for CJK characters.
This is probably the wrong method to use in most contexts that Ratatui applications care
about as it doesn’t correlate with the visual representation of most terminals. Consider
using Tabs::width instead.
The width includes the titles, dividers, and padding. It does not include any borders added by the optional block.
Characters in the Ambiguous category are considered double-width.
use ratatui::widgets::Tabs;
use unicode_width::UnicodeWidthStr;
let tabs = Tabs::new(vec!["你", "好", "世界"]);
assert_eq!("你".width_cjk(), 2);
assert_eq!("好".width_cjk(), 2);
assert_eq!("世界".width_cjk(), 4);
assert_eq!("│".width_cjk(), 2); // this is correct for cjk
assert_eq!(tabs.width_cjk(), 18); // " 你 │ 好 │ 世界 "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<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
Source§fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
Source§fn adapt_into(self) -> D
fn adapt_into(self) -> D
Source§impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
Source§fn arrays_from(colors: C) -> T
fn arrays_from(colors: C) -> T
Source§impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
Source§fn arrays_into(self) -> C
fn arrays_into(self) -> C
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<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
Source§type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
parameters when converting.Source§fn cam16_into_unclamped(
self,
parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>,
) -> T
fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T
self into C, using the provided parameters.Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
Source§fn components_from(colors: C) -> T
fn components_from(colors: C) -> T
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> FromAngle<T> for T
impl<T> FromAngle<T> for T
Source§fn from_angle(angle: T) -> T
fn from_angle(angle: T) -> T
angle.Source§impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
Source§fn from_stimulus(other: U) -> T
fn from_stimulus(other: U) -> T
other into Self, while performing the appropriate scaling,
rounding and clamping.Source§impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
Source§fn into_angle(self) -> U
fn into_angle(self) -> U
T.Source§impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
Source§type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
parameters when converting.Source§fn into_cam16_unclamped(
self,
parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>,
) -> T
fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T
self into C, using the provided parameters.Source§impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
Source§fn into_color(self) -> U
fn into_color(self) -> U
Source§impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
Source§fn into_color_unclamped(self) -> U
fn into_color_unclamped(self) -> U
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> IntoStimulus<T> for T
impl<T> IntoStimulus<T> for T
Source§fn into_stimulus(self) -> T
fn into_stimulus(self) -> T
self into T, while performing the appropriate scaling,
rounding and clamping.Source§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.Source§impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
Source§type Error = <C as TryFromComponents<T>>::Error
type Error = <C as TryFromComponents<T>>::Error
try_into_colors fails to cast.Source§fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
Source§impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
Source§fn try_into_color(self) -> Result<U, OutOfBounds<U>>
fn try_into_color(self) -> Result<U, OutOfBounds<U>>
OutOfBounds error is returned which contains
the unclamped color. Read more