use super::model::Warning;
use super::norimel::{self as rimel, Border, palette};
pub fn fade(block: rimel::Block, alpha: f32) -> rimel::Block {
block.map_cells(move |_, _, style| {
let fg = if style.fg == rimel::Color::Reset {
palette::TEXT
} else {
style.fg
};
style.fg(rimel::blend(fg, palette::BASE, alpha))
})
}
pub fn warning_panel(warnings: &[Warning], selected: usize, inspecting: bool) -> rimel::Block {
let w = &warnings[selected];
let body = if inspecting {
rimel::text(super::model::strip_ansi(&w.rendered))
} else {
let mut inner = vec![rimel::text(&w.message)];
if let Some(loc) = &w.location {
inner.push(rimel::text(loc).dim());
}
if let Some(help) = &w.help {
inner.push(rimel::text(""));
inner.push(rimel::text(format!("help: {help}")).dim());
}
rimel::col(inner)
};
let boxed = body
.px(1)
.border_with(Border::rounded())
.border_color(palette::YELLOW);
rimel::col([
rimel::text("⚠ Build completed with warnings")
.fg(palette::YELLOW)
.bold(),
rimel::text(""),
rimel::text(format!(
"{} / {} warning{}",
selected + 1,
warnings.len(),
if warnings.len() == 1 { "" } else { "s" }
))
.dim(),
rimel::text(""),
boxed,
rimel::text(""),
rimel::text("↑↓ navigate Enter inspect Esc dismiss").dim(),
])
}