Menu
Public repository / 3a1d4dc0df9425a910df82402300a2aeb40318ae
AkurAI-Framework / crates/css/src/generate.rs
Latest change 8fbc17482f2972707fdb2d8c70707551677012fd - feat(css): atomic/utility CSS engine core (scan + generate) by Ólafur Búi Ólafsson
//! Stylesheet generation: used class tokens → compact CSS.
//!
//! Each recognised utility becomes one compact rule `.class{declaration}`;
//! unknown classes are skipped. Rules are emitted in the order the classes are
//! given, with no whitespace between them, for stable, minimal output.
use crate::utilities;
/// Build a compact stylesheet for `classes`, keeping only recognised utilities
/// and preserving input order.
pub fn stylesheet(classes: &[String]) -> String {
let mut out = String::new();
for class in classes {
if let Some(body) = utilities::declaration(class) {
out.push('.');
out.push_str(class);
out.push('{');
out.push_str(&body);
out.push('}');
}
}
out
}
#[cfg(test)]
mod tests {
use super::*;
fn owned(items: &[&str]) -> Vec<String> {
items.iter().map(|s| s.to_string()).collect()
}
#[test]
fn emits_only_known_utilities_in_order() {
let css = stylesheet(&owned(&["flex", "btn", "p-2"]));
assert_eq!(css, ".flex{display:flex}.p-2{padding:8px}");
}
#[test]
fn empty_input_yields_empty_string() {
assert_eq!(stylesheet(&[]), "");
}
#[test]
fn all_unknown_yields_empty_string() {
assert_eq!(stylesheet(&owned(&["card", "btn-primary"])), "");
}
}