chromakitx 1.0.2

A comprehensive color manipulation library for Rust
Documentation
// SPDX-FileCopyrightText: 2023 CELESTIFYX Team
// SPDX-License-Identifier: GPL-3.0-or-later

use chromakitx::{
    RGB,
    AnsiColor,
    CssColor,
    CustomColor,
    Color,
    TextStyle,

    helpers::{
        interpolate_color,
        colorize,
        generate_palette,
        gradient,
        strip_ansi,
        percent_color
    }
};

fn main() -> () {
    println!("=== Complete Helpers Demo ===\n");
    println!("1. Color Interpolation:");

    let start: RGB = RGB::new(255, 0, 128);
    let end:   RGB = RGB::new(0, 255, 128);

    let colors: Vec<RGB> = interpolate_color(&start, &end, 5);

    for (i, color) in colors.iter().enumerate() {
        print!("{}", colorize("███", CustomColor::from(*color), None::<AnsiColor>));

        if i < colors.len() - 1 {
            print!("");
        }
    }

    println!("\n");
    println!("2. Palette Generation:");

    let base: RGB = RGB::new(64, 156, 255);
    let palette: Vec<RGB> = generate_palette(&base, 5);

    for color in palette {
        print!("{}", colorize("████", CustomColor::from(color), None::<AnsiColor>));
    }

    println!("\n");
    println!("3. Text Colorization:");

    let samples: [(&str, AnsiColor); 4] = [
        ("Success", AnsiColor::Green),
        ("Warning", AnsiColor::Yellow),
        ("Error",   AnsiColor::Red),
        ("Info",    AnsiColor::Cyan)
    ];

    for (text, color) in samples {
        let formatted: String = colorize(text, color, None::<AnsiColor>);
        println!("  {}", formatted);
    }

    println!();
    println!("4. Gradient Text:");

    let gradient_start: RGB = RGB::new(255, 0, 255);
    let gradient_end:   RGB = RGB::new(0, 255, 255);

    let gradient_text: String = gradient("*** GRADIENT DEMO ***", &gradient_start, &gradient_end);
    println!("  {}\n", gradient_text);

    println!("5. Strip ANSI Codes:");
    let colored: String = colorize("Colored text", CssColor::Gold, Some(CssColor::DarkBlue));
    println!("  With ANSI: {}", colored);
    println!("  Stripped: {}\n", strip_ansi(&colored));

    println!("6. Percent Color:");
    let values: [f32; 3] = [20.0, 55.0, 85.0];

    for value in values {
        let color: AnsiColor = percent_color(value, None, false, AnsiColor::Red, AnsiColor::Yellow, AnsiColor::Green);
        println!("  {}Value: {:.0}%{}", Color::new(color, false), value, Color::new(TextStyle::Reset, false));
    }

    println!();
    println!("7. Combined Example (Status Dashboard):");

    let statuses: [(&str, f32); 4] = [
        ("CPU", 85.0),
        ("Memory", 62.0),
        ("Disk", 43.0),
        ("Network", 28.0)
    ];

    for (name, value) in statuses {
        let color: AnsiColor = percent_color(value, Some((40.0, 70.0)), false, AnsiColor::Green, AnsiColor::Yellow, AnsiColor::Red);
        let bar_length: usize = (value / 100.0 * 20.0) as usize;

        let bar: String = "".repeat(bar_length) + &"".repeat(20 - bar_length);
        println!("  {}{:8} [{}] {:>5.1}%{}", Color::new(color, false), name, bar, value, Color::new(AnsiColor::Default, false));
    }
}