feat: Initial support for custom user-defined themes

This commit is contained in:
2025-03-04 18:09:09 -07:00
parent 847de75713
commit 5cb60c317d
11 changed files with 582 additions and 67 deletions
+24 -21
View File
@@ -1,5 +1,6 @@
#[cfg(test)]
mod test {
use crate::ui::styles::ManagarrStyle;
use crate::ui::utils::{
borderless_block, centered_rect, convert_to_minutes_hours_days, decorate_peer_style,
get_width_from_percentage, layout_block, layout_block_bottom_border, layout_block_top_border,
@@ -17,7 +18,8 @@ mod test {
fn test_layout_block() {
assert_eq!(
layout_block(),
Block::default()
Block::new()
.default()
.borders(Borders::ALL)
.border_type(BorderType::Rounded)
);
@@ -27,11 +29,12 @@ mod test {
fn test_layout_block_with_title() {
let title_span = Span::styled(
"title",
Style::default()
Style::new()
.fg(Color::DarkGray)
.add_modifier(Modifier::BOLD),
);
let expected_block = Block::default()
let expected_block = Block::new()
.default()
.borders(Borders::ALL)
.border_type(BorderType::Rounded)
.title(title_span.clone());
@@ -43,11 +46,12 @@ mod test {
fn test_layout_block_top_border_with_title() {
let title_span = Span::styled(
"title",
Style::default()
Style::new()
.fg(Color::DarkGray)
.add_modifier(Modifier::BOLD),
);
let expected_block = Block::default()
let expected_block = Block::new()
.default()
.borders(Borders::TOP)
.title(title_span.clone());
@@ -61,7 +65,7 @@ mod test {
fn test_layout_block_top_border() {
assert_eq!(
layout_block_top_border(),
Block::default().borders(Borders::TOP)
Block::new().borders(Borders::TOP).default()
);
}
@@ -69,48 +73,45 @@ mod test {
fn test_layout_block_bottom_border() {
assert_eq!(
layout_block_bottom_border(),
Block::default().borders(Borders::BOTTOM)
Block::new().borders(Borders::BOTTOM).default()
);
}
#[test]
fn test_borderless_block() {
assert_eq!(borderless_block(), Block::default());
assert_eq!(borderless_block(), Block::new().default());
}
#[test]
fn test_style_button_highlight_selected() {
let expected_style = Style::default()
.fg(Color::Yellow)
.add_modifier(Modifier::BOLD);
let expected_style = Style::new().fg(Color::Yellow).add_modifier(Modifier::BOLD);
assert_eq!(style_block_highlight(true), expected_style);
}
#[test]
fn test_style_button_highlight_unselected() {
let expected_style = Style::default()
.fg(Color::White)
.add_modifier(Modifier::BOLD);
let expected_style = Style::new().fg(Color::White).add_modifier(Modifier::BOLD);
assert_eq!(style_block_highlight(false), expected_style);
}
#[test]
fn test_title_style() {
let expected_span = Span::styled(" test ", Style::default().add_modifier(Modifier::BOLD));
let expected_span = Span::styled(" test ", Style::new().add_modifier(Modifier::BOLD));
assert_eq!(title_style("test"), expected_span);
}
#[test]
fn test_title_block() {
let expected_block = Block::default()
let expected_block = Block::new()
.default()
.borders(Borders::ALL)
.border_type(BorderType::Rounded)
.title(Span::styled(
" test ",
Style::default().add_modifier(Modifier::BOLD),
Style::new().add_modifier(Modifier::BOLD),
));
assert_eq!(title_block("test"), expected_block);
@@ -118,12 +119,13 @@ mod test {
#[test]
fn test_title_block_centered() {
let expected_block = Block::default()
let expected_block = Block::new()
.default()
.borders(Borders::ALL)
.border_type(BorderType::Rounded)
.title(Span::styled(
" test ",
Style::default().add_modifier(Modifier::BOLD),
Style::new().add_modifier(Modifier::BOLD),
))
.title_alignment(Alignment::Center);
@@ -132,12 +134,13 @@ mod test {
#[test]
fn test_logo_block() {
let expected_block = Block::default()
let expected_block = Block::new()
.default()
.borders(Borders::ALL)
.border_type(BorderType::Rounded)
.title(Span::styled(
" Managarr - A Servarr management TUI ",
Style::default()
Style::new()
.fg(Color::Magenta)
.add_modifier(Modifier::BOLD)
.add_modifier(Modifier::ITALIC),