use crate::responsive::Breakpoint;
use std::collections::HashMap;
use super::types::CssGenerationConfig;
use super::parsers::{
SpacingParser, AnimationParser, InteractiveParser,
AdvancedSpacingParser, AdvancedColorParser, PositioningParser, TypographyParser,
FlexboxParser, LayoutParser, ColorParser, EffectsParser, SizingParser,
AdvancedBorderParser, RingParser, TransitionParser, ShadowParser, SvgParser,
MarginParser, GroupParser, AdvancedGridParser, ProseParser, DivideParser,
GradientParser, ObjectFitParser, TransformParser, ArbitraryParser, DataAttributeParser,
BackgroundPropertiesParser, TransitionPropertiesParser, FractionalTransformsParser,
AspectRatioParser, ColumnsParser, BreakControlParser, BoxUtilitiesParser, LayoutUtilitiesParser,
OverflowParser, OverscrollParser, PositionParser, InsetParser, VisibilityParser, ZIndexParser,
FlexBasisParser, FlexDirectionParser, FlexWrapParser, FlexParser, FlexGrowParser, FlexShrinkParser,
OrderParser, GridTemplateColumnsParser, GridColumnParser, GridTemplateRowsParser, GridRowParser,
GridAutoFlowParser, GridAutoColumnsParser, GridAutoRowsParser, GapParser, JustifyContentParser,
JustifyItemsParser, JustifySelfParser, AlignContentParser, AlignItemsParser, AlignSelfParser,
PlaceContentParser, PlaceItemsParser, PlaceSelfParser, BackgroundParser, BorderUtilitiesParser,
EffectsUtilitiesParser, FilterUtilitiesParser, BackdropFilterUtilitiesParser, AccessibilityParser, TableParser, MaskUtilitiesParser, AccentColorParser
};
use super::variants::VariantParser;
pub trait CssGeneratorBuilder {
fn new() -> Self;
fn with_config(config: CssGenerationConfig) -> Self;
fn initialize_default_breakpoints(&mut self);
fn initialize_custom_breakpoints(&mut self);
}
impl CssGeneratorBuilder for super::CssGenerator {
fn new() -> Self {
let mut generator = Self {
rules: HashMap::new(),
breakpoints: HashMap::new(),
custom_properties: HashMap::new(),
config: CssGenerationConfig::default(),
spacing_parser: SpacingParser::new(),
advanced_spacing_parser: AdvancedSpacingParser::new(),
color_parser: ColorParser::new(),
advanced_color_parser: AdvancedColorParser::new(),
typography_parser: TypographyParser::new(),
layout_parser: LayoutParser::new(),
positioning_parser: PositioningParser::new(),
flexbox_parser: FlexboxParser::new(),
effects_parser: EffectsParser::new(),
sizing_parser: SizingParser::new(),
advanced_border_parser: AdvancedBorderParser::new(),
ring_parser: RingParser::new(),
transition_parser: TransitionParser::new(),
shadow_parser: ShadowParser::new(),
svg_parser: SvgParser::new(),
margin_parser: MarginParser::new(),
group_parser: GroupParser::new(),
advanced_grid_parser: AdvancedGridParser::new(),
animation_parser: AnimationParser::new(),
interactive_parser: InteractiveParser::new(),
prose_parser: ProseParser::new(),
divide_parser: DivideParser::new(),
gradient_parser: GradientParser::new(),
object_fit_parser: ObjectFitParser::new(),
transform_parser: TransformParser::new(),
arbitrary_parser: ArbitraryParser::new(),
data_attribute_parser: DataAttributeParser::new(),
background_properties_parser: BackgroundPropertiesParser::new(),
transition_properties_parser: TransitionPropertiesParser::new(),
fractional_transforms_parser: FractionalTransformsParser::new(),
aspect_ratio_parser: AspectRatioParser::new(),
columns_parser: ColumnsParser::new(),
break_control_parser: BreakControlParser::new(),
box_utilities_parser: BoxUtilitiesParser::new(),
layout_utilities_parser: LayoutUtilitiesParser::new(),
overflow_parser: OverflowParser::new(),
overscroll_parser: OverscrollParser::new(),
position_parser: PositionParser::new(),
inset_parser: InsetParser::new(),
visibility_parser: VisibilityParser::new(),
z_index_parser: ZIndexParser::new(),
flex_basis_parser: FlexBasisParser::new(),
flex_direction_parser: FlexDirectionParser::new(),
flex_wrap_parser: FlexWrapParser::new(),
flex_parser: FlexParser::new(),
flex_grow_parser: FlexGrowParser::new(),
flex_shrink_parser: FlexShrinkParser::new(),
order_parser: OrderParser::new(),
grid_template_columns_parser: GridTemplateColumnsParser::new(),
grid_column_parser: GridColumnParser::new(),
grid_template_rows_parser: GridTemplateRowsParser::new(),
grid_row_parser: GridRowParser::new(),
grid_auto_flow_parser: GridAutoFlowParser::new(),
grid_auto_columns_parser: GridAutoColumnsParser::new(),
grid_auto_rows_parser: GridAutoRowsParser::new(),
gap_parser: GapParser::new(),
justify_content_parser: JustifyContentParser::new(),
justify_items_parser: JustifyItemsParser::new(),
justify_self_parser: JustifySelfParser::new(),
align_content_parser: AlignContentParser::new(),
align_items_parser: AlignItemsParser::new(),
align_self_parser: AlignSelfParser::new(),
place_content_parser: PlaceContentParser::new(),
place_items_parser: PlaceItemsParser::new(),
place_self_parser: PlaceSelfParser::new(),
background_parser: BackgroundParser::new(),
border_utilities_parser: BorderUtilitiesParser::new(),
effects_utilities_parser: EffectsUtilitiesParser::new(),
filter_utilities_parser: FilterUtilitiesParser::new(),
backdrop_filter_utilities_parser: BackdropFilterUtilitiesParser::new(),
accessibility_parser: AccessibilityParser::new(),
table_parser: TableParser::new(),
mask_utilities_parser: MaskUtilitiesParser::new(),
accent_color_parser: AccentColorParser::new(),
variant_parser: VariantParser::new(),
};
generator.initialize_default_breakpoints();
generator
}
fn with_config(config: CssGenerationConfig) -> Self {
let mut generator = Self {
rules: HashMap::new(),
breakpoints: HashMap::new(),
custom_properties: HashMap::new(),
config,
spacing_parser: SpacingParser::new(),
advanced_spacing_parser: AdvancedSpacingParser::new(),
color_parser: ColorParser::new(),
advanced_color_parser: AdvancedColorParser::new(),
typography_parser: TypographyParser::new(),
layout_parser: LayoutParser::new(),
positioning_parser: PositioningParser::new(),
flexbox_parser: FlexboxParser::new(),
effects_parser: EffectsParser::new(),
sizing_parser: SizingParser::new(),
advanced_border_parser: AdvancedBorderParser::new(),
ring_parser: RingParser::new(),
transition_parser: TransitionParser::new(),
shadow_parser: ShadowParser::new(),
svg_parser: SvgParser::new(),
margin_parser: MarginParser::new(),
group_parser: GroupParser::new(),
advanced_grid_parser: AdvancedGridParser::new(),
animation_parser: AnimationParser::new(),
interactive_parser: InteractiveParser::new(),
prose_parser: ProseParser::new(),
divide_parser: DivideParser::new(),
gradient_parser: GradientParser::new(),
object_fit_parser: ObjectFitParser::new(),
transform_parser: TransformParser::new(),
arbitrary_parser: ArbitraryParser::new(),
data_attribute_parser: DataAttributeParser::new(),
background_properties_parser: BackgroundPropertiesParser::new(),
transition_properties_parser: TransitionPropertiesParser::new(),
fractional_transforms_parser: FractionalTransformsParser::new(),
aspect_ratio_parser: AspectRatioParser::new(),
columns_parser: ColumnsParser::new(),
break_control_parser: BreakControlParser::new(),
box_utilities_parser: BoxUtilitiesParser::new(),
layout_utilities_parser: LayoutUtilitiesParser::new(),
overflow_parser: OverflowParser::new(),
overscroll_parser: OverscrollParser::new(),
position_parser: PositionParser::new(),
inset_parser: InsetParser::new(),
visibility_parser: VisibilityParser::new(),
z_index_parser: ZIndexParser::new(),
flex_basis_parser: FlexBasisParser::new(),
flex_direction_parser: FlexDirectionParser::new(),
flex_wrap_parser: FlexWrapParser::new(),
flex_parser: FlexParser::new(),
flex_grow_parser: FlexGrowParser::new(),
flex_shrink_parser: FlexShrinkParser::new(),
order_parser: OrderParser::new(),
grid_template_columns_parser: GridTemplateColumnsParser::new(),
grid_column_parser: GridColumnParser::new(),
grid_template_rows_parser: GridTemplateRowsParser::new(),
grid_row_parser: GridRowParser::new(),
grid_auto_flow_parser: GridAutoFlowParser::new(),
grid_auto_columns_parser: GridAutoColumnsParser::new(),
grid_auto_rows_parser: GridAutoRowsParser::new(),
gap_parser: GapParser::new(),
justify_content_parser: JustifyContentParser::new(),
justify_items_parser: JustifyItemsParser::new(),
justify_self_parser: JustifySelfParser::new(),
align_content_parser: AlignContentParser::new(),
align_items_parser: AlignItemsParser::new(),
align_self_parser: AlignSelfParser::new(),
place_content_parser: PlaceContentParser::new(),
place_items_parser: PlaceItemsParser::new(),
place_self_parser: PlaceSelfParser::new(),
background_parser: BackgroundParser::new(),
border_utilities_parser: BorderUtilitiesParser::new(),
effects_utilities_parser: EffectsUtilitiesParser::new(),
filter_utilities_parser: FilterUtilitiesParser::new(),
backdrop_filter_utilities_parser: BackdropFilterUtilitiesParser::new(),
accessibility_parser: AccessibilityParser::new(),
table_parser: TableParser::new(),
mask_utilities_parser: MaskUtilitiesParser::new(),
accent_color_parser: AccentColorParser::new(),
variant_parser: VariantParser::new(),
};
if generator.config.custom_breakpoints.is_empty() {
generator.initialize_default_breakpoints();
} else {
generator.initialize_custom_breakpoints();
}
generator
}
fn initialize_default_breakpoints(&mut self) {
self.breakpoints.insert(Breakpoint::Sm, "(min-width: 640px)".to_string());
self.breakpoints.insert(Breakpoint::Md, "(min-width: 768px)".to_string());
self.breakpoints.insert(Breakpoint::Lg, "(min-width: 1024px)".to_string());
self.breakpoints.insert(Breakpoint::Xl, "(min-width: 1280px)".to_string());
self.breakpoints.insert(Breakpoint::Xl2, "(min-width: 1536px)".to_string());
}
fn initialize_custom_breakpoints(&mut self) {
self.breakpoints = self.config.custom_breakpoints.clone();
}
}