Skip to content

v0.22.0

https://github.com/ratatui/ratatui/releases/tag/v0.22.0

プレリュード

これで、 prelude モジュールができました!これにより、ライブラリのユーザーは、膨大な量のインポートなしで ratatui を簡単に使用できます。

use ratatui::prelude::*;

ライブラリで使用されている主なタイプは別として、この prelude はいくつかのモジュールを再輸出して、そうでなければ衝突するタイプを簡単に修飾できるようにします。例えば:

use ratatui::{prelude::*, widgets::*};
#[derive(Debug, Default, PartialEq, Eq)]
struct Line;
assert_eq!(Line::default(), Line);
assert_eq!(text::Line::default(), ratatui::text::Line::from(vec![]));

New widget: Scrollbar

任意の Rect で使用できるスクロールバー ウィジェットが追加されました。さまざまなスタイルやシンボルでカスタマイズすることもできます。

Scrollbar のコンポーネントは次のとおりです。

<--▮------->
^ ^ ^ ^
│ │ │ └ end
│ │ └──── track
│ └──────── thumb
└─────────── begin

これを使用するには、ScrollbarState とともにステートフル ウィジェットとしてレンダリングします。

frame.render_stateful_widget(
Scrollbar::default()
.orientation(ScrollbarOrientation::VerticalRight)
.begin_symbol(Some(""))
.end_symbol(Some("")),
rect,
&mut scrollbar_state,
);

結果は次のようになります:

┌scrollbar──────────────────↑
│This is a longer line ║
│Veeeeeeeeeeeeeeeery looo█
│This is a line ║
└───────────────────────────↓

Block: 複数のタイトルをサポート

Block ウィジェットは、Title ウィジェットを介して複数のタイトルを持つことをサポートするようになりました。

各タイトルは、同じ位置または配置にあるタイトルを区切る 1 つのスペースでレンダリングされます。中央揃えのタイトルと中央揃えでないタイトルの両方がレンダリングされる場合、中央揃えのスペースは、残りの幅ではなく、ブロックの全幅に基づいて計算されます。

タイトルとして、文字列、文字列スライス、借用文字列 (Cow<str>)、スパン、またはスパンのベクトル (Vec<Span>) など、さまざまなタイプを提供できます。

次のように使用できます。

Block::default()
.borders(Borders::ALL)
.title("Title") // By default in the top right corner
.title(Title::from("Left").alignment(Alignment::Left))
.title(Title::from("Center").alignment(Alignment::Center))
.title(Title::from("Bottom").position(Position::Bottom))
.title(
Title::from("Bottom center")
.alignment(Alignment::Center)
.position(Position::Bottom),
);

結果:

┌Title─Left──Center─────────────┐
│ │
│ │
│ │
└Bottom───Bottom center─────────┘

Barchart: support groups

Barchart は、異なるデータ セットから複数のバーを追加できるように改善されました。これは、新しく追加された Bar および BarGroup オブジェクトを使用して実行できます。

詳細と実装の詳細については、barchart の例 を参照してください。


Stylization shorthands

strSpanParagraph のスタイル ショートハンドを使用できます。

冗長な例は次のとおりです。

"hello"
.on_black()
.black()
.bold()
.underline()
.dimmed()
.slow_blink()
.crossed_out()
.reversed()

これは特に簡潔なスタイル設定に役立ちます:

assert_eq!(
"hello".red().on_blue().bold(),
Span::styled("hello", Style::default().fg(Color::Red).bg(Color::Blue).add_modifier(Modifier::BOLD))
)

Stylize everything

すべてのウィジェットにスタイルを設定できるようになりました (つまり set_style)

Styled trait は、以下を含む残りのすべてのウィジェットに実装されています。

  • Barchart
  • Chart (including Axis and Dataset)
  • Gauge and LineGauge
  • List and ListItem
  • Sparkline
  • Table, Row, and Cell
  • Tabs
  • Style

Constant styles

Style は次のように const コンテキストで構築できます。

const DEFAULT_MODIFIER: Modifier = Modifier::BOLD.union(Modifier::ITALIC);
const EMPTY: Modifier = Modifier::empty();
const DEFAULT_STYLE: Style = Style::with(DEFAULT_MODIFIER, EMPTY)
.fg(Color::Red)
.bg(Color::Black);

More colors formats

Color::from_str を介して、light-red のようなハイフンで区切られた色名を解析できるようになりました。

さらに、ANSI カラー テーブル のすべての色がサポートされています (ただし、一部の名前はまったく同じではありません)。

  • graywhite と呼ばれることがあります - これはサポートされていません。明るい白には white を使用します
  • graysilver と呼ばれることがあります - これはサポートされています
  • darkgraylight black または bright black と呼ばれることがあります (どちらもサポートされています)
  • whitelight white または bright white と呼ばれることがあります (どちらもサポートされています)
  • すべての色に対して bright および light プレフィックスをサポートしています
  • すべての色に対して "-""_"、および " " を区切り文字としてサポートしています
  • graygrey の両方のスペルをサポートしています

例えば:

use ratatui::style::Color;
use std::str::FromStr;
assert_eq!(Color::from_str("red"), Ok(Color::Red));
assert_eq!("red".parse(), Ok(Color::Red));
assert_eq!("lightred".parse(), Ok(Color::LightRed));
assert_eq!("light red".parse(), Ok(Color::LightRed));
assert_eq!("light-red".parse(), Ok(Color::LightRed));
assert_eq!("light_red".parse(), Ok(Color::LightRed));
assert_eq!("lightRed".parse(), Ok(Color::LightRed));
assert_eq!("bright red".parse(), Ok(Color::LightRed));
assert_eq!("bright-red".parse(), Ok(Color::LightRed));
assert_eq!("silver".parse(), Ok(Color::Gray));
assert_eq!("dark-grey".parse(), Ok(Color::DarkGray));
assert_eq!("dark gray".parse(), Ok(Color::DarkGray));
assert_eq!("light-black".parse(), Ok(Color::DarkGray));
assert_eq!("white".parse(), Ok(Color::White));
assert_eq!("bright white".parse(), Ok(Color::White));

Integrations

次のツールがリポジトリに統合されました:


Other

  • Paragraph ウィジェットのベンチマークを追加
  • crossterm バックエンドに下線色のサポートを追加
  • BlockLayoutRect の低レベル関数の一部を const としてマーク
  • プロジェクト ライセンスが更新され、ratatui 開発者への感謝が表されました