rat-theme4 4.5.3

dark theme and color-schemes
Documentation
use rat_theme4::palette::{Colors, Palette, define_alias, define_rt_alias};
use rat_theme4::{RatWidgetColor, create_salsa_palette, salsa_themes};
use ratatui_core::style::Color;
use std::borrow::Cow;

#[test]
fn test_static() {
    static PAL0: Palette = Palette {
        theme_name: Cow::Borrowed("Shell"),
        theme: Cow::Borrowed("Shell"),
        name: Cow::Borrowed("Shell"),
        doc: Cow::Borrowed(""),
        generator: Cow::Borrowed(""),
        color: [
            [
                Color::Gray,
                Color::Gray,
                Color::White,
                Color::White,
                Color::Gray,
                Color::Gray,
                Color::White,
                Color::White,
            ], // text light
            [
                Color::DarkGray,
                Color::DarkGray,
                Color::Black,
                Color::Black,
                Color::DarkGray,
                Color::DarkGray,
                Color::Black,
                Color::Black,
            ], // text dark
            [Color::Cyan; 8],   // primary
            [Color::Yellow; 8], // secondary
            [Color::White; 8],  // white
            [Color::Black; 8],
            [
                Color::Gray,
                Color::Gray,
                Color::DarkGray,
                Color::DarkGray,
                Color::Gray,
                Color::Gray,
                Color::DarkGray,
                Color::DarkGray,
            ],
            [Color::Red; 8],
            [Color::Yellow; 8],
            [Color::LightYellow; 8],
            [Color::LightGreen; 8],
            [Color::Green; 8],
            [Color::Cyan; 8],
            [Color::LightCyan; 8],
            [Color::LightBlue; 8],
            [Color::Blue; 8],
            [Color::Magenta; 8],
            [Color::LightMagenta; 8],
            [Color::LightRed; 8],
        ],
        aliased: Cow::Borrowed(&[
            define_alias(Color::BUTTON_BASE_BG, Colors::Gray, 0),
            define_alias(Color::CONTAINER_ARROW_FG, Colors::Gray, 0),
            define_alias(Color::CONTAINER_BASE_BG, Colors::Black, 0),
            define_alias(Color::CONTAINER_BORDER_FG, Colors::Gray, 0),
            define_alias(Color::DIALOG_ARROW_FG, Colors::Black, 0),
            define_alias(Color::DIALOG_BASE_BG, Colors::Gray, 3),
            define_alias(Color::DIALOG_BORDER_FG, Colors::Black, 0),
            define_alias(Color::DISABLED_BG, Colors::Gray, 0),
            define_alias(Color::FOCUS_BG, Colors::Primary, 0),
            define_alias(Color::FOOTER_BG, Colors::Blue, 0),
            define_alias(Color::FOOTER_FG, Colors::TextLight, 0),
            define_alias(Color::HEADER_BG, Colors::Blue, 0),
            define_alias(Color::HEADER_FG, Colors::TextLight, 0),
            define_alias(Color::HOVER_BG, Colors::Gray, 3),
            define_alias(Color::INPUT_BG, Colors::Gray, 3),
            define_alias(Color::INVALID_BG, Colors::Red, 0),
            define_alias(Color::KEY_BINDING_BG, Colors::BlueGreen, 0),
            define_alias(Color::LABEL_FG, Colors::White, 0),
            define_alias(Color::MENU_BASE_BG, Colors::Black, 0),
            define_alias(Color::MONTH_HEADER_FG, Colors::TextDark, 0),
            define_alias(Color::POPUP_ARROW_FG, Colors::Gray, 3),
            define_alias(Color::POPUP_BASE_BG, Colors::White, 0),
            define_alias(Color::POPUP_BORDER_FG, Colors::Gray, 3),
            define_alias(Color::SELECT_BG, Colors::Secondary, 0),
            define_alias(Color::SHADOW_BG, Colors::TextDark, 0),
            define_alias(Color::STATUS_BASE_BG, Colors::Black, 0),
            define_alias(Color::INPUT_FOCUS_BG, Colors::Primary, 0),
            define_alias(Color::INPUT_SELECT_BG, Colors::Secondary, 0),
            define_alias(Color::TITLE_BG, Colors::Red, 0),
            define_alias(Color::TITLE_FG, Colors::TextLight, 0),
            define_alias(Color::WEEK_HEADER_FG, Colors::TextDark, 0),
        ]),
    };

    _ = PAL0;
}

#[test]
fn test_runtime() {
    let mut aliased = Vec::new();
    aliased.push(define_rt_alias(Color::BUTTON_BASE_BG, Colors::Gray, 0));
    aliased.push(define_rt_alias(Color::CONTAINER_ARROW_FG, Colors::Gray, 0));
    aliased.push(define_rt_alias(Color::CONTAINER_BASE_BG, Colors::Black, 0));
    aliased.push(define_rt_alias(Color::CONTAINER_BORDER_FG, Colors::Gray, 0));
    aliased.push(define_rt_alias(Color::DIALOG_ARROW_FG, Colors::Black, 0));
    aliased.push(define_rt_alias(Color::DIALOG_BASE_BG, Colors::Gray, 3));
    aliased.push(define_rt_alias(Color::DIALOG_BORDER_FG, Colors::Black, 0));
    aliased.push(define_rt_alias(Color::DISABLED_BG, Colors::Gray, 0));
    aliased.push(define_rt_alias(Color::FOCUS_BG, Colors::Primary, 0));
    aliased.push(define_rt_alias(Color::FOOTER_BG, Colors::Blue, 0));
    aliased.push(define_rt_alias(Color::FOOTER_FG, Colors::TextLight, 0));
    aliased.push(define_rt_alias(Color::HEADER_BG, Colors::Blue, 0));
    aliased.push(define_rt_alias(Color::HEADER_FG, Colors::TextLight, 0));
    aliased.push(define_rt_alias(Color::HOVER_BG, Colors::Gray, 3));
    aliased.push(define_rt_alias(Color::INPUT_BG, Colors::Gray, 3));
    aliased.push(define_rt_alias(Color::INVALID_BG, Colors::Red, 0));
    aliased.push(define_rt_alias(Color::KEY_BINDING_BG, Colors::BlueGreen, 0));
    aliased.push(define_rt_alias(Color::LABEL_FG, Colors::White, 0));
    aliased.push(define_rt_alias(Color::MENU_BASE_BG, Colors::Black, 0));
    aliased.push(define_rt_alias(Color::MONTH_HEADER_FG, Colors::TextDark, 0));
    aliased.push(define_rt_alias(Color::POPUP_ARROW_FG, Colors::Gray, 3));
    aliased.push(define_rt_alias(Color::POPUP_BASE_BG, Colors::White, 0));
    aliased.push(define_rt_alias(Color::POPUP_BORDER_FG, Colors::Gray, 3));
    aliased.push(define_rt_alias(Color::SELECT_BG, Colors::Secondary, 0));
    aliased.push(define_rt_alias(Color::SHADOW_BG, Colors::TextDark, 0));
    aliased.push(define_rt_alias(Color::STATUS_BASE_BG, Colors::Black, 0));
    aliased.push(define_rt_alias(Color::INPUT_FOCUS_BG, Colors::Primary, 0));
    aliased.push(define_rt_alias(
        Color::INPUT_SELECT_BG,
        Colors::Secondary,
        0,
    ));
    aliased.push(define_rt_alias(Color::TITLE_BG, Colors::Red, 0));
    aliased.push(define_rt_alias(Color::TITLE_FG, Colors::TextLight, 0));
    aliased.push(define_rt_alias(Color::WEEK_HEADER_FG, Colors::TextDark, 0));
    // let aliased = aliased.into_boxed_slice();

    let pal_0 = Palette {
        theme_name: Cow::Borrowed("Shell"),
        theme: Cow::Borrowed("Shell"),
        name: Cow::Borrowed("Shell"),
        doc: Cow::Borrowed(""),
        generator: Cow::Borrowed(""),
        color: [
            [
                Color::Gray,
                Color::Gray,
                Color::White,
                Color::White,
                Color::Gray,
                Color::Gray,
                Color::White,
                Color::White,
            ], // text light
            [
                Color::DarkGray,
                Color::DarkGray,
                Color::Black,
                Color::Black,
                Color::DarkGray,
                Color::DarkGray,
                Color::Black,
                Color::Black,
            ], // text dark
            [Color::Cyan; 8],   // primary
            [Color::Yellow; 8], // secondary
            [Color::White; 8],  // white
            [Color::Black; 8],
            [
                Color::Gray,
                Color::Gray,
                Color::DarkGray,
                Color::DarkGray,
                Color::Gray,
                Color::Gray,
                Color::DarkGray,
                Color::DarkGray,
            ],
            [Color::Red; 8],
            [Color::Yellow; 8],
            [Color::LightYellow; 8],
            [Color::LightGreen; 8],
            [Color::Green; 8],
            [Color::Cyan; 8],
            [Color::LightCyan; 8],
            [Color::LightBlue; 8],
            [Color::Blue; 8],
            [Color::Magenta; 8],
            [Color::LightMagenta; 8],
            [Color::LightRed; 8],
        ],
        aliased: Cow::Owned(aliased),
    };

    _ = pal_0;
}

#[test]
fn test_palettes() {
    for pal in salsa_themes() {
        if let Some(p) = create_salsa_palette(pal) {
            assert_eq!(pal, p.theme_name);
        } else {
            panic!()
        }
    }
}