pub const WIDGETS_COMPONENT_CSS: &str = include_str!("widgets.css");
pub const WIDGETS_CSS: &str = concat!(
include_str!("tokens.css"),
"\n",
include_str!("widgets.css")
);
pub const WIDGETS_CSS_PATH: &str = "/static/css/autumn-widgets.css";
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn widgets_css_bundles_tokens_and_components() {
assert!(WIDGETS_CSS.contains(crate::ui::tokens::TOKENS_CSS));
assert!(WIDGETS_CSS.contains(WIDGETS_COMPONENT_CSS));
}
#[test]
fn component_css_references_tokens_not_hardcoded_colors() {
for token_var in ["var(--primary)", "var(--border)", "var(--radius)"] {
assert!(
WIDGETS_COMPONENT_CSS.contains(token_var),
"WIDGETS_COMPONENT_CSS should reference {token_var}"
);
}
}
#[test]
fn renamed_widget_classes_are_backed_by_component_css() {
fn has_rule(css: &str, class: &str) -> bool {
let needle = format!(".{class}");
css.match_indices(&needle).any(|(i, _)| {
matches!(
css[i + needle.len()..].chars().next(),
Some('{' | ' ' | ',' | ':' | '\n' | '\t')
)
})
}
for class in [
"autumn-card",
"autumn-card__header",
"autumn-card__title",
"autumn-card__body",
"autumn-card__footer",
"autumn-stat-card",
"autumn-stat-card__label",
"autumn-stat-card__value",
"autumn-stat-card__link",
"autumn-search-empty",
"autumn-autocomplete-empty",
"autumn-alert__icon-svg",
"autumn-active",
] {
assert!(
has_rule(WIDGETS_COMPONENT_CSS, class),
"widget emits .{class} but WIDGETS_COMPONENT_CSS has no rule for it"
);
}
}
}