use std::{fmt::Write as _, fs, path::Path};
use ev_lib_classes::{BUTTON_BASE, ButtonVariant, Size, button_size_class};
use strum::IntoEnumIterator;
use tailwind_fuse::AsTailwindClass;
fn main() {
let root = Path::new(env!("CARGO_MANIFEST_DIR")).join("../..");
let variants = root.join("ts/uikit/src/generated/variants.ts");
fs::create_dir_all(variants.parent().expect("variants path has a parent")).expect("create generated dir");
fs::write(&variants, button_variants_ts()).expect("write variants.ts");
fs::copy(root.join("rust/src/uikit/tokens.css"), root.join("ts/uikit/styles/tokens.css")).expect("copy tokens.css");
println!("wrote {}", variants.display());
}
fn button_variants_ts() -> String {
let mut out = String::from("// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\n");
writeln!(out, "export const BUTTON_BASE = {BUTTON_BASE:?};\n").unwrap();
out.push_str("export const buttonVariantClasses = {\n");
for v in ButtonVariant::iter() {
writeln!(out, " {:?}: {:?},", v.as_ref(), v.as_class()).unwrap();
}
out.push_str("} as const;\n\n");
out.push_str("export const buttonSizeClasses = {\n");
for (size, key) in [(Size::Md, "default"), (Size::Sm, "sm"), (Size::Lg, "lg")] {
writeln!(out, " {:?}: {:?},", key, button_size_class(size, false)).unwrap();
}
for (size, key) in [(Size::Md, "icon"), (Size::Sm, "icon-sm"), (Size::Lg, "icon-lg")] {
writeln!(out, " {:?}: {:?},", key, button_size_class(size, true)).unwrap();
}
out.push_str("} as const;\n\n");
out.push_str("export type ButtonVariant = keyof typeof buttonVariantClasses;\n");
out.push_str("export type ButtonSize = keyof typeof buttonSizeClasses;\n");
out
}