1use crate::classes::ClassBuilder;
7use serde::{Deserialize, Serialize};
8use std::fmt;
9
10#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
12pub enum FlexDirection {
13 Row,
15 RowReverse,
17 Column,
19 ColumnReverse,
21}
22
23#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
25pub enum FlexWrap {
26 NoWrap,
28 Wrap,
30 WrapReverse,
32}
33
34#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
36pub enum JustifyContent {
37 Start,
39 End,
41 Center,
43 Between,
45 Around,
47 Evenly,
49}
50
51#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
53pub enum AlignItems {
54 Start,
56 End,
58 Center,
60 Baseline,
62 Stretch,
64}
65
66#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
68pub enum AlignContent {
69 Start,
71 End,
73 Center,
75 Between,
77 Around,
79 Evenly,
81 Baseline,
83 Stretch,
85}
86
87#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
89pub enum AlignSelf {
90 Auto,
92 Start,
94 End,
96 Center,
98 Stretch,
100 Baseline,
102}
103
104#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
106pub enum FlexGrow {
107 Zero,
109 Grow,
111}
112
113#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
115pub enum FlexShrink {
116 Zero,
118 Shrink,
120}
121
122#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
124pub enum FlexBasis {
125 Auto,
127 Full,
129 Fit,
131 Max,
133 Min,
135 None,
137 Zero,
139}
140
141#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
143pub enum Flex {
144 One,
146 Auto,
148 Initial,
150 None,
152}
153
154#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
156pub enum Order {
157 First,
159 Last,
161 None,
163 One,
165 Two,
167 Three,
169 Four,
171 Five,
173 Six,
175 Seven,
177 Eight,
179 Nine,
181 Ten,
183 Eleven,
185 Twelve,
187}
188
189impl FlexDirection {
190 pub fn to_class_name(&self) -> String {
191 match self {
192 FlexDirection::Row => "row".to_string(),
193 FlexDirection::RowReverse => "row-reverse".to_string(),
194 FlexDirection::Column => "col".to_string(),
195 FlexDirection::ColumnReverse => "col-reverse".to_string(),
196 }
197 }
198
199 pub fn to_css_value(&self) -> String {
200 match self {
201 FlexDirection::Row => "row".to_string(),
202 FlexDirection::RowReverse => "row-reverse".to_string(),
203 FlexDirection::Column => "column".to_string(),
204 FlexDirection::ColumnReverse => "column-reverse".to_string(),
205 }
206 }
207}
208
209impl FlexWrap {
210 pub fn to_class_name(&self) -> String {
211 match self {
212 FlexWrap::NoWrap => "nowrap".to_string(),
213 FlexWrap::Wrap => "wrap".to_string(),
214 FlexWrap::WrapReverse => "wrap-reverse".to_string(),
215 }
216 }
217
218 pub fn to_css_value(&self) -> String {
219 match self {
220 FlexWrap::NoWrap => "nowrap".to_string(),
221 FlexWrap::Wrap => "wrap".to_string(),
222 FlexWrap::WrapReverse => "wrap-reverse".to_string(),
223 }
224 }
225}
226
227impl JustifyContent {
228 pub fn to_class_name(&self) -> String {
229 match self {
230 JustifyContent::Start => "start".to_string(),
231 JustifyContent::End => "end".to_string(),
232 JustifyContent::Center => "center".to_string(),
233 JustifyContent::Between => "between".to_string(),
234 JustifyContent::Around => "around".to_string(),
235 JustifyContent::Evenly => "evenly".to_string(),
236 }
237 }
238
239 pub fn to_css_value(&self) -> String {
240 match self {
241 JustifyContent::Start => "flex-start".to_string(),
242 JustifyContent::End => "flex-end".to_string(),
243 JustifyContent::Center => "center".to_string(),
244 JustifyContent::Between => "space-between".to_string(),
245 JustifyContent::Around => "space-around".to_string(),
246 JustifyContent::Evenly => "space-evenly".to_string(),
247 }
248 }
249}
250
251impl AlignItems {
252 pub fn to_class_name(&self) -> String {
253 match self {
254 AlignItems::Start => "start".to_string(),
255 AlignItems::End => "end".to_string(),
256 AlignItems::Center => "center".to_string(),
257 AlignItems::Baseline => "baseline".to_string(),
258 AlignItems::Stretch => "stretch".to_string(),
259 }
260 }
261
262 pub fn to_css_value(&self) -> String {
263 match self {
264 AlignItems::Start => "flex-start".to_string(),
265 AlignItems::End => "flex-end".to_string(),
266 AlignItems::Center => "center".to_string(),
267 AlignItems::Baseline => "baseline".to_string(),
268 AlignItems::Stretch => "stretch".to_string(),
269 }
270 }
271}
272
273impl AlignContent {
274 pub fn to_class_name(&self) -> String {
275 match self {
276 AlignContent::Start => "start".to_string(),
277 AlignContent::End => "end".to_string(),
278 AlignContent::Center => "center".to_string(),
279 AlignContent::Between => "between".to_string(),
280 AlignContent::Around => "around".to_string(),
281 AlignContent::Evenly => "evenly".to_string(),
282 AlignContent::Baseline => "baseline".to_string(),
283 AlignContent::Stretch => "stretch".to_string(),
284 }
285 }
286
287 pub fn to_css_value(&self) -> String {
288 match self {
289 AlignContent::Start => "flex-start".to_string(),
290 AlignContent::End => "flex-end".to_string(),
291 AlignContent::Center => "center".to_string(),
292 AlignContent::Between => "space-between".to_string(),
293 AlignContent::Around => "space-around".to_string(),
294 AlignContent::Evenly => "space-evenly".to_string(),
295 AlignContent::Baseline => "baseline".to_string(),
296 AlignContent::Stretch => "stretch".to_string(),
297 }
298 }
299}
300
301impl AlignSelf {
302 pub fn to_class_name(&self) -> String {
303 match self {
304 AlignSelf::Auto => "auto".to_string(),
305 AlignSelf::Start => "start".to_string(),
306 AlignSelf::End => "end".to_string(),
307 AlignSelf::Center => "center".to_string(),
308 AlignSelf::Stretch => "stretch".to_string(),
309 AlignSelf::Baseline => "baseline".to_string(),
310 }
311 }
312
313 pub fn to_css_value(&self) -> String {
314 match self {
315 AlignSelf::Auto => "auto".to_string(),
316 AlignSelf::Start => "flex-start".to_string(),
317 AlignSelf::End => "flex-end".to_string(),
318 AlignSelf::Center => "center".to_string(),
319 AlignSelf::Stretch => "stretch".to_string(),
320 AlignSelf::Baseline => "baseline".to_string(),
321 }
322 }
323}
324
325impl FlexGrow {
326 pub fn to_class_name(&self) -> String {
327 match self {
328 FlexGrow::Zero => "0".to_string(),
329 FlexGrow::Grow => "grow".to_string(),
330 }
331 }
332
333 pub fn to_css_value(&self) -> String {
334 match self {
335 FlexGrow::Zero => "0".to_string(),
336 FlexGrow::Grow => "1".to_string(),
337 }
338 }
339}
340
341impl FlexShrink {
342 pub fn to_class_name(&self) -> String {
343 match self {
344 FlexShrink::Zero => "0".to_string(),
345 FlexShrink::Shrink => "shrink".to_string(),
346 }
347 }
348
349 pub fn to_css_value(&self) -> String {
350 match self {
351 FlexShrink::Zero => "0".to_string(),
352 FlexShrink::Shrink => "1".to_string(),
353 }
354 }
355}
356
357impl FlexBasis {
358 pub fn to_class_name(&self) -> String {
359 match self {
360 FlexBasis::Auto => "auto".to_string(),
361 FlexBasis::Full => "full".to_string(),
362 FlexBasis::Fit => "fit".to_string(),
363 FlexBasis::Max => "max".to_string(),
364 FlexBasis::Min => "min".to_string(),
365 FlexBasis::None => "none".to_string(),
366 FlexBasis::Zero => "0".to_string(),
367 }
368 }
369
370 pub fn to_css_value(&self) -> String {
371 match self {
372 FlexBasis::Auto => "auto".to_string(),
373 FlexBasis::Full => "100%".to_string(),
374 FlexBasis::Fit => "fit-content".to_string(),
375 FlexBasis::Max => "max-content".to_string(),
376 FlexBasis::Min => "min-content".to_string(),
377 FlexBasis::None => "none".to_string(),
378 FlexBasis::Zero => "0%".to_string(),
379 }
380 }
381}
382
383impl Flex {
384 pub fn to_class_name(&self) -> String {
385 match self {
386 Flex::One => "1".to_string(),
387 Flex::Auto => "auto".to_string(),
388 Flex::Initial => "initial".to_string(),
389 Flex::None => "none".to_string(),
390 }
391 }
392
393 pub fn to_css_value(&self) -> String {
394 match self {
395 Flex::One => "1 1 0%".to_string(),
396 Flex::Auto => "1 1 auto".to_string(),
397 Flex::Initial => "0 1 auto".to_string(),
398 Flex::None => "none".to_string(),
399 }
400 }
401}
402
403impl Order {
404 pub fn to_class_name(&self) -> String {
405 match self {
406 Order::First => "first".to_string(),
407 Order::Last => "last".to_string(),
408 Order::None => "none".to_string(),
409 Order::One => "1".to_string(),
410 Order::Two => "2".to_string(),
411 Order::Three => "3".to_string(),
412 Order::Four => "4".to_string(),
413 Order::Five => "5".to_string(),
414 Order::Six => "6".to_string(),
415 Order::Seven => "7".to_string(),
416 Order::Eight => "8".to_string(),
417 Order::Nine => "9".to_string(),
418 Order::Ten => "10".to_string(),
419 Order::Eleven => "11".to_string(),
420 Order::Twelve => "12".to_string(),
421 }
422 }
423
424 pub fn to_css_value(&self) -> String {
425 match self {
426 Order::First => "-9999".to_string(),
427 Order::Last => "9999".to_string(),
428 Order::None => "0".to_string(),
429 Order::One => "1".to_string(),
430 Order::Two => "2".to_string(),
431 Order::Three => "3".to_string(),
432 Order::Four => "4".to_string(),
433 Order::Five => "5".to_string(),
434 Order::Six => "6".to_string(),
435 Order::Seven => "7".to_string(),
436 Order::Eight => "8".to_string(),
437 Order::Nine => "9".to_string(),
438 Order::Ten => "10".to_string(),
439 Order::Eleven => "11".to_string(),
440 Order::Twelve => "12".to_string(),
441 }
442 }
443}
444
445impl fmt::Display for FlexDirection {
446 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
447 write!(f, "{}", self.to_class_name())
448 }
449}
450
451impl fmt::Display for FlexWrap {
452 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
453 write!(f, "{}", self.to_class_name())
454 }
455}
456
457impl fmt::Display for JustifyContent {
458 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
459 write!(f, "{}", self.to_class_name())
460 }
461}
462
463impl fmt::Display for AlignItems {
464 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
465 write!(f, "{}", self.to_class_name())
466 }
467}
468
469impl fmt::Display for AlignContent {
470 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
471 write!(f, "{}", self.to_class_name())
472 }
473}
474
475impl fmt::Display for AlignSelf {
476 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
477 write!(f, "{}", self.to_class_name())
478 }
479}
480
481impl fmt::Display for FlexGrow {
482 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
483 write!(f, "{}", self.to_class_name())
484 }
485}
486
487impl fmt::Display for FlexShrink {
488 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
489 write!(f, "{}", self.to_class_name())
490 }
491}
492
493impl fmt::Display for FlexBasis {
494 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
495 write!(f, "{}", self.to_class_name())
496 }
497}
498
499impl fmt::Display for Flex {
500 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
501 write!(f, "{}", self.to_class_name())
502 }
503}
504
505impl fmt::Display for Order {
506 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
507 write!(f, "{}", self.to_class_name())
508 }
509}
510
511pub trait FlexDirectionUtilities {
513 fn flex_direction(self, direction: FlexDirection) -> Self;
514}
515
516impl FlexDirectionUtilities for ClassBuilder {
517 fn flex_direction(self, direction: FlexDirection) -> Self {
518 self.class(format!("flex-{}", direction.to_class_name()))
519 }
520}
521
522pub trait FlexWrapUtilities {
524 fn flex_wrap(self, wrap: FlexWrap) -> Self;
525}
526
527impl FlexWrapUtilities for ClassBuilder {
528 fn flex_wrap(self, wrap: FlexWrap) -> Self {
529 self.class(format!("flex-{}", wrap.to_class_name()))
530 }
531}
532
533pub trait JustifyContentUtilities {
535 fn justify_content(self, justify: JustifyContent) -> Self;
536}
537
538impl JustifyContentUtilities for ClassBuilder {
539 fn justify_content(self, justify: JustifyContent) -> Self {
540 self.class(format!("justify-{}", justify.to_class_name()))
541 }
542}
543
544pub trait AlignItemsUtilities {
546 fn align_items(self, align: AlignItems) -> Self;
547}
548
549impl AlignItemsUtilities for ClassBuilder {
550 fn align_items(self, align: AlignItems) -> Self {
551 self.class(format!("items-{}", align.to_class_name()))
552 }
553}
554
555pub trait AlignContentUtilities {
557 fn align_content(self, align: AlignContent) -> Self;
558}
559
560impl AlignContentUtilities for ClassBuilder {
561 fn align_content(self, align: AlignContent) -> Self {
562 self.class(format!("content-{}", align.to_class_name()))
563 }
564}
565
566pub trait AlignSelfUtilities {
568 fn align_self(self, align: AlignSelf) -> Self;
569}
570
571impl AlignSelfUtilities for ClassBuilder {
572 fn align_self(self, align: AlignSelf) -> Self {
573 self.class(format!("self-{}", align.to_class_name()))
574 }
575}
576
577pub trait FlexGrowUtilities {
579 fn flex_grow(self, grow: FlexGrow) -> Self;
580}
581
582impl FlexGrowUtilities for ClassBuilder {
583 fn flex_grow(self, grow: FlexGrow) -> Self {
584 self.class(format!("flex-grow-{}", grow.to_class_name()))
585 }
586}
587
588pub trait FlexShrinkUtilities {
590 fn flex_shrink(self, shrink: FlexShrink) -> Self;
591}
592
593impl FlexShrinkUtilities for ClassBuilder {
594 fn flex_shrink(self, shrink: FlexShrink) -> Self {
595 self.class(format!("flex-shrink-{}", shrink.to_class_name()))
596 }
597}
598
599pub trait FlexBasisUtilities {
601 fn flex_basis(self, basis: FlexBasis) -> Self;
602}
603
604impl FlexBasisUtilities for ClassBuilder {
605 fn flex_basis(self, basis: FlexBasis) -> Self {
606 self.class(format!("basis-{}", basis.to_class_name()))
607 }
608}
609
610pub trait FlexUtilities {
612 fn flex(self, flex: Flex) -> Self;
613}
614
615impl FlexUtilities for ClassBuilder {
616 fn flex(self, flex: Flex) -> Self {
617 self.class(format!("flex-{}", flex.to_class_name()))
618 }
619}
620
621pub trait OrderUtilities {
623 fn order(self, order: Order) -> Self;
624}
625
626impl OrderUtilities for ClassBuilder {
627 fn order(self, order: Order) -> Self {
628 self.class(format!("order-{}", order.to_class_name()))
629 }
630}
631
632#[cfg(test)]
633mod tests {
634 use super::*;
635
636 #[test]
637 fn test_flex_direction_utilities() {
638 let classes = ClassBuilder::new()
639 .flex_direction(FlexDirection::Row)
640 .flex_direction(FlexDirection::RowReverse)
641 .flex_direction(FlexDirection::Column)
642 .flex_direction(FlexDirection::ColumnReverse)
643 .build();
644
645 let css_classes = classes.to_css_classes();
646 assert!(css_classes.contains("flex-row"));
647 assert!(css_classes.contains("flex-row-reverse"));
648 assert!(css_classes.contains("flex-col"));
649 assert!(css_classes.contains("flex-col-reverse"));
650 }
651
652 #[test]
653 fn test_flex_wrap_utilities() {
654 let classes = ClassBuilder::new()
655 .flex_wrap(FlexWrap::NoWrap)
656 .flex_wrap(FlexWrap::Wrap)
657 .flex_wrap(FlexWrap::WrapReverse)
658 .build();
659
660 let css_classes = classes.to_css_classes();
661 assert!(css_classes.contains("flex-nowrap"));
662 assert!(css_classes.contains("flex-wrap"));
663 assert!(css_classes.contains("flex-wrap-reverse"));
664 }
665
666 #[test]
667 fn test_justify_content_utilities() {
668 let classes = ClassBuilder::new()
669 .justify_content(JustifyContent::Start)
670 .justify_content(JustifyContent::End)
671 .justify_content(JustifyContent::Center)
672 .justify_content(JustifyContent::Between)
673 .justify_content(JustifyContent::Around)
674 .justify_content(JustifyContent::Evenly)
675 .build();
676
677 let css_classes = classes.to_css_classes();
678 assert!(css_classes.contains("justify-start"));
679 assert!(css_classes.contains("justify-end"));
680 assert!(css_classes.contains("justify-center"));
681 assert!(css_classes.contains("justify-between"));
682 assert!(css_classes.contains("justify-around"));
683 assert!(css_classes.contains("justify-evenly"));
684 }
685
686 #[test]
687 fn test_align_items_utilities() {
688 let classes = ClassBuilder::new()
689 .align_items(AlignItems::Start)
690 .align_items(AlignItems::End)
691 .align_items(AlignItems::Center)
692 .align_items(AlignItems::Baseline)
693 .align_items(AlignItems::Stretch)
694 .build();
695
696 let css_classes = classes.to_css_classes();
697 assert!(css_classes.contains("items-start"));
698 assert!(css_classes.contains("items-end"));
699 assert!(css_classes.contains("items-center"));
700 assert!(css_classes.contains("items-baseline"));
701 assert!(css_classes.contains("items-stretch"));
702 }
703
704 #[test]
705 fn test_align_content_utilities() {
706 let classes = ClassBuilder::new()
707 .align_content(AlignContent::Start)
708 .align_content(AlignContent::End)
709 .align_content(AlignContent::Center)
710 .align_content(AlignContent::Between)
711 .align_content(AlignContent::Around)
712 .align_content(AlignContent::Evenly)
713 .align_content(AlignContent::Baseline)
714 .align_content(AlignContent::Stretch)
715 .build();
716
717 let css_classes = classes.to_css_classes();
718 assert!(css_classes.contains("content-start"));
719 assert!(css_classes.contains("content-end"));
720 assert!(css_classes.contains("content-center"));
721 assert!(css_classes.contains("content-between"));
722 assert!(css_classes.contains("content-around"));
723 assert!(css_classes.contains("content-evenly"));
724 assert!(css_classes.contains("content-baseline"));
725 assert!(css_classes.contains("content-stretch"));
726 }
727
728 #[test]
729 fn test_align_self_utilities() {
730 let classes = ClassBuilder::new()
731 .align_self(AlignSelf::Auto)
732 .align_self(AlignSelf::Start)
733 .align_self(AlignSelf::End)
734 .align_self(AlignSelf::Center)
735 .align_self(AlignSelf::Stretch)
736 .align_self(AlignSelf::Baseline)
737 .build();
738
739 let css_classes = classes.to_css_classes();
740 assert!(css_classes.contains("self-auto"));
741 assert!(css_classes.contains("self-start"));
742 assert!(css_classes.contains("self-end"));
743 assert!(css_classes.contains("self-center"));
744 assert!(css_classes.contains("self-stretch"));
745 assert!(css_classes.contains("self-baseline"));
746 }
747
748 #[test]
749 fn test_flex_grow_utilities() {
750 let classes = ClassBuilder::new()
751 .flex_grow(FlexGrow::Zero)
752 .flex_grow(FlexGrow::Grow)
753 .build();
754
755 let css_classes = classes.to_css_classes();
756 assert!(css_classes.contains("flex-grow-0"));
757 assert!(css_classes.contains("flex-grow-grow"));
758 }
759
760 #[test]
761 fn test_flex_shrink_utilities() {
762 let classes = ClassBuilder::new()
763 .flex_shrink(FlexShrink::Zero)
764 .flex_shrink(FlexShrink::Shrink)
765 .build();
766
767 let css_classes = classes.to_css_classes();
768 assert!(css_classes.contains("flex-shrink-0"));
769 assert!(css_classes.contains("flex-shrink-shrink"));
770 }
771
772 #[test]
773 fn test_flex_basis_utilities() {
774 let classes = ClassBuilder::new()
775 .flex_basis(FlexBasis::Auto)
776 .flex_basis(FlexBasis::Full)
777 .flex_basis(FlexBasis::Fit)
778 .flex_basis(FlexBasis::Max)
779 .flex_basis(FlexBasis::Min)
780 .flex_basis(FlexBasis::None)
781 .flex_basis(FlexBasis::Zero)
782 .build();
783
784 let css_classes = classes.to_css_classes();
785 assert!(css_classes.contains("basis-auto"));
786 assert!(css_classes.contains("basis-full"));
787 assert!(css_classes.contains("basis-fit"));
788 assert!(css_classes.contains("basis-max"));
789 assert!(css_classes.contains("basis-min"));
790 assert!(css_classes.contains("basis-none"));
791 assert!(css_classes.contains("basis-0"));
792 }
793
794 #[test]
795 fn test_order_utilities() {
796 let classes = ClassBuilder::new()
797 .order(Order::First)
798 .order(Order::Last)
799 .order(Order::None)
800 .order(Order::One)
801 .order(Order::Two)
802 .order(Order::Three)
803 .build();
804
805 let css_classes = classes.to_css_classes();
806 assert!(css_classes.contains("order-first"));
807 assert!(css_classes.contains("order-last"));
808 assert!(css_classes.contains("order-none"));
809 assert!(css_classes.contains("order-1"));
810 assert!(css_classes.contains("order-2"));
811 assert!(css_classes.contains("order-3"));
812 }
813
814 #[test]
815 fn test_complex_flexbox_combination() {
816 let classes = ClassBuilder::new()
817 .flex_direction(FlexDirection::Row)
818 .flex_wrap(FlexWrap::Wrap)
819 .justify_content(JustifyContent::Between)
820 .align_items(AlignItems::Center)
821 .align_content(AlignContent::Stretch)
822 .align_self(AlignSelf::Start)
823 .flex_grow(FlexGrow::Grow)
824 .flex_shrink(FlexShrink::Shrink)
825 .flex_basis(FlexBasis::Auto)
826 .order(Order::One)
827 .build();
828
829 let css_classes = classes.to_css_classes();
830 assert!(css_classes.contains("flex-row"));
831 assert!(css_classes.contains("flex-wrap"));
832 assert!(css_classes.contains("justify-between"));
833 assert!(css_classes.contains("items-center"));
834 assert!(css_classes.contains("content-stretch"));
835 assert!(css_classes.contains("self-start"));
836 assert!(css_classes.contains("flex-grow-grow"));
837 assert!(css_classes.contains("flex-shrink-shrink"));
838 assert!(css_classes.contains("basis-auto"));
839 assert!(css_classes.contains("order-1"));
840 }
841
842 #[test]
844 fn test_week5_flexbox_utilities() {
845 let classes = ClassBuilder::new()
847 .flex_direction(FlexDirection::Row)
849 .flex_direction(FlexDirection::RowReverse)
850 .flex_direction(FlexDirection::Column)
851 .flex_direction(FlexDirection::ColumnReverse)
852 .flex_wrap(FlexWrap::Wrap)
853 .flex_wrap(FlexWrap::WrapReverse)
854 .flex_wrap(FlexWrap::NoWrap)
855 .flex(Flex::One)
856 .flex(Flex::Auto)
857 .flex(Flex::Initial)
858 .flex(Flex::None)
859 .justify_content(JustifyContent::Start)
861 .justify_content(JustifyContent::End)
862 .justify_content(JustifyContent::Center)
863 .justify_content(JustifyContent::Between)
864 .justify_content(JustifyContent::Around)
865 .justify_content(JustifyContent::Evenly)
866 .align_items(AlignItems::Start)
867 .align_items(AlignItems::End)
868 .align_items(AlignItems::Center)
869 .align_items(AlignItems::Baseline)
870 .align_items(AlignItems::Stretch)
871 .align_self(AlignSelf::Auto)
872 .align_self(AlignSelf::Start)
873 .align_self(AlignSelf::End)
874 .align_self(AlignSelf::Center)
875 .align_self(AlignSelf::Stretch)
876 .align_self(AlignSelf::Baseline)
877 .build();
878
879 let css_classes = classes.to_css_classes();
880
881 assert!(css_classes.contains("flex-row"));
883 assert!(css_classes.contains("flex-row-reverse"));
884 assert!(css_classes.contains("flex-col"));
885 assert!(css_classes.contains("flex-col-reverse"));
886 assert!(css_classes.contains("flex-wrap"));
887 assert!(css_classes.contains("flex-wrap-reverse"));
888 assert!(css_classes.contains("flex-nowrap"));
889 assert!(css_classes.contains("flex-1"));
890 assert!(css_classes.contains("flex-auto"));
891 assert!(css_classes.contains("flex-initial"));
892 assert!(css_classes.contains("flex-none"));
893
894 assert!(css_classes.contains("justify-start"));
896 assert!(css_classes.contains("justify-end"));
897 assert!(css_classes.contains("justify-center"));
898 assert!(css_classes.contains("justify-between"));
899 assert!(css_classes.contains("justify-around"));
900 assert!(css_classes.contains("justify-evenly"));
901 assert!(css_classes.contains("items-start"));
902 assert!(css_classes.contains("items-end"));
903 assert!(css_classes.contains("items-center"));
904 assert!(css_classes.contains("items-baseline"));
905 assert!(css_classes.contains("items-stretch"));
906 assert!(css_classes.contains("self-auto"));
907 assert!(css_classes.contains("self-start"));
908 assert!(css_classes.contains("self-end"));
909 assert!(css_classes.contains("self-center"));
910 assert!(css_classes.contains("self-stretch"));
911 assert!(css_classes.contains("self-baseline"));
912 }
913}