use crate::{Emit, class};
use makeover_layout::{Intent as _, Tone};
use std::fmt::Write as _;
pub const FIGURE_CLASSES: &[&str] = &[
"figures",
"figure",
"figure-value",
"figure-caption",
"figure-change",
];
pub(crate) fn figure_rules(opts: &Emit) -> String {
let figures = class("figures", opts);
let figure = class("figure", opts);
let value = class("figure-value", opts);
let caption = class("figure-caption", opts);
let change = class("figure-change", opts);
let mut css = String::new();
let _ = writeln!(
css,
".{figures} {{\n display: flex;\n flex-wrap: wrap;\n gap: var(--gap-pane);\n \
padding: var(--gap-section);\n width: max-content;\n max-width: 100%;\n \
background: var(--surface-sunken, var(--surface-raised));\n}}"
);
let _ = writeln!(
css,
".{figure} > .{value} {{\n color: var(--content);\n font-weight: bold;\n}}"
);
let _ = writeln!(
css,
".{figure} > .{caption} {{\n color: var(--content-muted);\n}}"
);
let _ = writeln!(
css,
".{figure} > .{change} {{\n color: var(--content-muted);\n}}"
);
for tone in [Tone::Info, Tone::Success, Tone::Warning, Tone::Danger] {
let _ = writeln!(
css,
".{figure}[data-tone=\"{0}\"] {{\n border-inline-start: {1} solid \
var(--{0});\n padding-inline-start: var(--step-snug);\n}}",
tone.token(),
opts.focus_width
);
}
css
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn every_class_this_module_names_has_a_rule() {
let css = figure_rules(&Emit::default());
for name in FIGURE_CLASSES {
assert!(css.contains(&format!(".{name}")), "{name} has no rule");
}
}
}