use iced::{Element, Length, widget::{column, container, progress_bar, text}};
use snora_design::{Tone, Tokens};
use super::{card, style};
fn progress_content<'a, Message: 'a>(
tokens: &'a Tokens,
label: &'a str,
value: Option<f32>,
tone: Tone,
) -> Element<'a, Message> {
let t = tokens;
let (display_value, label_suffix) = match value {
Some(v) => (v.clamp(0.0, 1.0), format!("{:.0}%", v.clamp(0.0, 1.0) * 100.0)),
None => (0.0_f32, "…".into()),
};
let label_line = format!("{label} {label_suffix}");
let tok = t.clone();
column![
text(label_line)
.size(style::text::body_size(t))
.color(style::color::to_iced_color(t.palette.text_primary)),
progress_bar(0.0..=1.0, display_value)
.girth(8.0)
.length(Length::Fill)
.style(move |_theme| style::progress::toned(&tok, tone)),
]
.spacing(t.spacing.xs)
.into()
}
#[must_use]
pub fn row<'a, Message: 'a>(
tokens: &'a Tokens,
label: &'a str,
value: Option<f32>,
tone: Tone,
) -> Element<'a, Message> {
container(progress_content(tokens, label, value, tone))
.width(Length::Fill)
.into()
}
#[must_use]
pub fn card<'a, Message: 'a>(
tokens: &'a Tokens,
label: &'a str,
value: Option<f32>,
tone: Tone,
) -> Element<'a, Message> {
card::surface(tokens, progress_content(tokens, label, value, tone))
}