Crate tui_widget_list

Source
Expand description

§A versatile widget list for Ratatui

Continuous Integration

This crate provides a stateful widget ListView implementation for Ratatui. The associated ListState, offers functionalities such as navigating to the next and previous items. The list view support both horizontal and vertical scrolling.

§Configuration

The ListView can be customized with the following options:

§Example

 use ratatui::prelude::*;
 use tui_widget_list::{ListBuilder, ListState, ListView};

 #[derive(Debug, Clone)]
 pub struct ListItem {
     text: String,
     style: Style,
 }

 impl ListItem {
     pub fn new<T: Into<String>>(text: T) -> Self {
         Self {
             text: text.into(),
             style: Style::default(),
         }
     }
 }

 impl Widget for ListItem {
     fn render(self, area: Rect, buf: &mut Buffer) {
         Line::from(self.text).style(self.style).render(area, buf);
     }
 }

 pub struct App {
     state: ListState,
 }

 impl Widget for &mut App {
     fn render(self, area: Rect, buf: &mut Buffer) {
         let builder = ListBuilder::new(|context| {
            let mut item = ListItem::new(&format!("Item {:0}", context.index));

            // Alternating styles
            if context.index % 2 == 0 {
                item.style = Style::default().bg(Color::Rgb(28, 28, 32));
            } else {
                item.style = Style::default().bg(Color::Rgb(0, 0, 0));
            }

            // Style the selected element
            if context.is_selected {
                item.style = Style::default()
                    .bg(Color::Rgb(255, 153, 0))
                    .fg(Color::Rgb(28, 28, 32));
            };

            // Return the size of the widget along the main axis.
            let main_axis_size = 1;

            (item, main_axis_size)
         });

         let item_count = 2;
         let list = ListView::new(builder, item_count);
         let state = &mut self.state;

         list.render(area, buf, state);
     }
 }

For more examples see tui-widget-list.

§Documentation

docs.rs

§Demos

§Demo

§Infinite scrolling, scroll padding, horizontal scrolling

Structs§

  • ListDeprecated
    A List is a widget for Ratatui that can render an arbitrary list of widgets. It is generic over T, where each widget T should implement the PreRender trait. List is no longer developed. Consider using ListView.
  • This structure holds information about the item’s position, selection status, scrolling behavior, and size along the cross axis.
  • The builder for constructing list elements in a ListView<T>
  • A struct representing a list view. The widget displays a scrollable list of items.
  • The context provided during rendering.

Enums§

Traits§

  • PreRenderDeprecated
    This trait should be implemented for items that are intended to be used within a List widget.