use crate::config::{add_classes_for_field, modifiers};
use super::tailwind_config::TailwindConfig;
const MODIFIERS: [&str; 50] = [
"*",
"hover",
"focus",
"focus-within",
"focus-visible",
"active",
"visited",
"target",
"first",
"last",
"only",
"odd",
"even",
"first-of-type",
"last-of-type",
"only-of-type",
"empty",
"disabled",
"enabled",
"checked",
"indeterminate",
"default",
"required",
"valid",
"invalid",
"in-range",
"out-of-range",
"placeholder-shown",
"autofill",
"read-only",
"before",
"after",
"first-letter",
"first-line",
"marker",
"selection",
"file",
"backdrop",
"placeholder",
"dark",
"portrait",
"landscape",
"motion-safe",
"motion-reduce",
"contrast-more",
"contrast-less",
"print",
"ltr",
"rtl",
"open",
];
pub const ARIA_DEFAULT: [&str; 8] = [
"aria-checked",
"aria-disabled",
"aria-expanded",
"aria-hidden",
"aria-pressed",
"aria-readonly",
"aria-required",
"aria-selected",
];
pub fn get_modifiers(config: &TailwindConfig) -> Vec<String> {
let mut modifiers = Vec::new();
modifiers.extend(MODIFIERS.iter().map(ToString::to_string));
let mut default_screens = vec![
"sm", "md", "lg", "xl", "2xl", "max-sm", "max-md", "max-lg", "max-xl", "max-2xl",
]
.into_iter()
.map(Into::into)
.collect::<Vec<String>>();
if let Some(ref screens) = config.theme.overrides.screens {
if !screens.is_empty() {
default_screens = screens.keys().map(ToString::to_string).collect();
}
}
if let Some(ref screens) = config.theme.extend.screens {
if !screens.is_empty() {
let screens = screens.keys().map(ToString::to_string).collect::<Vec<_>>();
default_screens.extend(screens);
}
}
let allowed_extra_modifiers = config
.allowed_lists
.as_ref()
.and_then(|x| x.classes.to_owned())
.unwrap_or_default();
modifiers.extend(allowed_extra_modifiers);
modifiers.extend(default_screens);
add_classes_for_field(&modifiers::Aria, config, &mut modifiers);
add_classes_for_field(&modifiers::Supports, config, &mut modifiers);
add_classes_for_field(&modifiers::Data, config, &mut modifiers);
modifiers.extend(
modifiers
.iter()
.map(|x| format!("group-{x}"))
.collect::<Vec<_>>(),
);
modifiers
}