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