aura-gui 0.2.1

UI nativa acelerada por GPU para escritorio, Android e iOS, en un solo crate: estilo tipo Tailwind, componentes, sombras, animaciones y agentes de IA. Reposo a cero. Licencia AGPL-3.0 o comercial.
//! Paletas ANSI de 16 colores que la terminal puede usar en lugar de la del tema.

use crate::core::Rgba;

const PALETTES: &[(&str, [u32; 16])] = &[
    (
        "one_dark",
        [
            0x3f4451, 0xe06c75, 0x98c379, 0xe5c07b, 0x61afef, 0xc678dd, 0x56b6c2, 0xabb2bf, 0x5c6370, 0xe06c75,
            0x98c379, 0xe5c07b, 0x61afef, 0xc678dd, 0x56b6c2, 0xffffff,
        ],
    ),
    (
        "dracula",
        [
            0x21222c, 0xff5555, 0x50fa7b, 0xf1fa8c, 0xbd93f9, 0xff79c6, 0x8be9fd, 0xf8f8f2, 0x6272a4, 0xff6e6e,
            0x69ff94, 0xffffa5, 0xd6acff, 0xff92df, 0xa4ffff, 0xffffff,
        ],
    ),
    (
        "solarized_dark",
        [
            0x073642, 0xdc322f, 0x859900, 0xb58900, 0x268bd2, 0xd33682, 0x2aa198, 0xeee8d5, 0x586e75, 0xcb4b16,
            0x93a1a1, 0xb58900, 0x839496, 0x6c71c4, 0x2aa198, 0xfdf6e3,
        ],
    ),
    (
        "solarized_light",
        [
            0x073642, 0xdc322f, 0x859900, 0xb58900, 0x268bd2, 0xd33682, 0x2aa198, 0x657b83, 0x586e75, 0xcb4b16,
            0x586e75, 0xb58900, 0x268bd2, 0x6c71c4, 0x2aa198, 0x002b36,
        ],
    ),
    (
        "gruvbox_dark",
        [
            0x282828, 0xcc241d, 0x98971a, 0xd79921, 0x458588, 0xb16286, 0x689d6a, 0xa89984, 0x928374, 0xfb4934,
            0xb8bb26, 0xfabd2f, 0x83a598, 0xd3869b, 0x8ec07c, 0xebdbb2,
        ],
    ),
    (
        "nord",
        [
            0x3b4252, 0xbf616a, 0xa3be8c, 0xebcb8b, 0x81a1c1, 0xb48ead, 0x88c0d0, 0xe5e9f0, 0x4c566a, 0xbf616a,
            0xa3be8c, 0xebcb8b, 0x81a1c1, 0xb48ead, 0x8fbcbb, 0xeceff4,
        ],
    ),
];

/// Paleta incluida con ese nombre (`"dracula"`, `"nord"`…); `None` para `"theme"` o nombres desconocidos.
pub fn ansi_palette(name: &str) -> Option<[Rgba; 16]> {
    PALETTES.iter().find(|(id, _)| *id == name).map(|(_, colors)| colors.map(Rgba::hex))
}

/// Nombres de las paletas incluidas, en orden.
pub fn ansi_palette_names() -> impl Iterator<Item = &'static str> {
    PALETTES.iter().map(|(id, _)| *id)
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn cada_paleta_se_encuentra_por_su_nombre() {
        for name in ansi_palette_names() {
            assert!(ansi_palette(name).is_some(), "{name}");
        }
        assert!(ansi_palette("theme").is_none());
        assert_eq!(ansi_palette("dracula").unwrap()[1], Rgba::hex(0xff5555));
    }
}