1use crate::classes::ClassBuilder;
7use serde::{Deserialize, Serialize};
8use std::fmt;
9
10#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
12pub enum GridTemplateColumns {
13 None,
15 Subgrid,
17 Auto,
19 One,
21 Two,
23 Three,
25 Four,
27 Five,
29 Six,
31 Seven,
33 Eight,
35 Nine,
37 Ten,
39 Eleven,
41 Twelve,
43}
44
45#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
47pub enum GridTemplateRows {
48 None,
50 Subgrid,
52 Auto,
54 One,
56 Two,
58 Three,
60 Four,
62 Five,
64 Six,
66}
67
68#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
70pub enum GridColumnSpan {
71 Auto,
73 One,
75 Two,
77 Three,
79 Four,
81 Five,
83 Six,
85 Seven,
87 Eight,
89 Nine,
91 Ten,
93 Eleven,
95 Twelve,
97 Full,
99}
100
101#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
103pub enum GridRowSpan {
104 Auto,
106 One,
108 Two,
110 Three,
112 Four,
114 Five,
116 Six,
118 Full,
120}
121
122#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
124pub enum GridColumnStart {
125 Auto,
127 One,
129 Two,
131 Three,
133 Four,
135 Five,
137 Six,
139 Seven,
141 Eight,
143 Nine,
145 Ten,
147 Eleven,
149 Twelve,
151 Thirteen,
153}
154
155#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
157pub enum GridRowStart {
158 Auto,
160 One,
162 Two,
164 Three,
166 Four,
168 Five,
170 Six,
172 Seven,
174}
175
176#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
178pub enum GridColumnEnd {
179 Auto,
181 One,
183 Two,
185 Three,
187 Four,
189 Five,
191 Six,
193 Seven,
195 Eight,
197 Nine,
199 Ten,
201 Eleven,
203 Twelve,
205 Thirteen,
207}
208
209#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
211pub enum GridRowEnd {
212 Auto,
214 One,
216 Two,
218 Three,
220 Four,
222 Five,
224 Six,
226 Seven,
228}
229
230#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
232pub enum GridAutoFlow {
233 Row,
235 Column,
237 Dense,
239 DenseColumn,
241}
242
243#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
245pub enum GridAutoColumns {
246 Auto,
248 Min,
250 Max,
252 Fr,
254}
255
256#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
258pub enum GridAutoRows {
259 Auto,
261 Min,
263 Max,
265 Fr,
267}
268
269impl GridTemplateColumns {
270 pub fn to_class_name(&self) -> String {
271 match self {
272 GridTemplateColumns::None => "none".to_string(),
273 GridTemplateColumns::Subgrid => "subgrid".to_string(),
274 GridTemplateColumns::Auto => "auto".to_string(),
275 GridTemplateColumns::One => "1".to_string(),
276 GridTemplateColumns::Two => "2".to_string(),
277 GridTemplateColumns::Three => "3".to_string(),
278 GridTemplateColumns::Four => "4".to_string(),
279 GridTemplateColumns::Five => "5".to_string(),
280 GridTemplateColumns::Six => "6".to_string(),
281 GridTemplateColumns::Seven => "7".to_string(),
282 GridTemplateColumns::Eight => "8".to_string(),
283 GridTemplateColumns::Nine => "9".to_string(),
284 GridTemplateColumns::Ten => "10".to_string(),
285 GridTemplateColumns::Eleven => "11".to_string(),
286 GridTemplateColumns::Twelve => "12".to_string(),
287 }
288 }
289
290 pub fn to_css_value(&self) -> String {
291 match self {
292 GridTemplateColumns::None => "none".to_string(),
293 GridTemplateColumns::Subgrid => "subgrid".to_string(),
294 GridTemplateColumns::Auto => "repeat(auto-fit, minmax(0, 1fr))".to_string(),
295 GridTemplateColumns::One => "repeat(1, minmax(0, 1fr))".to_string(),
296 GridTemplateColumns::Two => "repeat(2, minmax(0, 1fr))".to_string(),
297 GridTemplateColumns::Three => "repeat(3, minmax(0, 1fr))".to_string(),
298 GridTemplateColumns::Four => "repeat(4, minmax(0, 1fr))".to_string(),
299 GridTemplateColumns::Five => "repeat(5, minmax(0, 1fr))".to_string(),
300 GridTemplateColumns::Six => "repeat(6, minmax(0, 1fr))".to_string(),
301 GridTemplateColumns::Seven => "repeat(7, minmax(0, 1fr))".to_string(),
302 GridTemplateColumns::Eight => "repeat(8, minmax(0, 1fr))".to_string(),
303 GridTemplateColumns::Nine => "repeat(9, minmax(0, 1fr))".to_string(),
304 GridTemplateColumns::Ten => "repeat(10, minmax(0, 1fr))".to_string(),
305 GridTemplateColumns::Eleven => "repeat(11, minmax(0, 1fr))".to_string(),
306 GridTemplateColumns::Twelve => "repeat(12, minmax(0, 1fr))".to_string(),
307 }
308 }
309}
310
311impl GridTemplateRows {
312 pub fn to_class_name(&self) -> String {
313 match self {
314 GridTemplateRows::None => "none".to_string(),
315 GridTemplateRows::Subgrid => "subgrid".to_string(),
316 GridTemplateRows::Auto => "auto".to_string(),
317 GridTemplateRows::One => "1".to_string(),
318 GridTemplateRows::Two => "2".to_string(),
319 GridTemplateRows::Three => "3".to_string(),
320 GridTemplateRows::Four => "4".to_string(),
321 GridTemplateRows::Five => "5".to_string(),
322 GridTemplateRows::Six => "6".to_string(),
323 }
324 }
325
326 pub fn to_css_value(&self) -> String {
327 match self {
328 GridTemplateRows::None => "none".to_string(),
329 GridTemplateRows::Subgrid => "subgrid".to_string(),
330 GridTemplateRows::Auto => "repeat(auto-fit, minmax(0, 1fr))".to_string(),
331 GridTemplateRows::One => "repeat(1, minmax(0, 1fr))".to_string(),
332 GridTemplateRows::Two => "repeat(2, minmax(0, 1fr))".to_string(),
333 GridTemplateRows::Three => "repeat(3, minmax(0, 1fr))".to_string(),
334 GridTemplateRows::Four => "repeat(4, minmax(0, 1fr))".to_string(),
335 GridTemplateRows::Five => "repeat(5, minmax(0, 1fr))".to_string(),
336 GridTemplateRows::Six => "repeat(6, minmax(0, 1fr))".to_string(),
337 }
338 }
339}
340
341impl GridColumnSpan {
342 pub fn to_class_name(&self) -> String {
343 match self {
344 GridColumnSpan::Auto => "auto".to_string(),
345 GridColumnSpan::One => "1".to_string(),
346 GridColumnSpan::Two => "2".to_string(),
347 GridColumnSpan::Three => "3".to_string(),
348 GridColumnSpan::Four => "4".to_string(),
349 GridColumnSpan::Five => "5".to_string(),
350 GridColumnSpan::Six => "6".to_string(),
351 GridColumnSpan::Seven => "7".to_string(),
352 GridColumnSpan::Eight => "8".to_string(),
353 GridColumnSpan::Nine => "9".to_string(),
354 GridColumnSpan::Ten => "10".to_string(),
355 GridColumnSpan::Eleven => "11".to_string(),
356 GridColumnSpan::Twelve => "12".to_string(),
357 GridColumnSpan::Full => "full".to_string(),
358 }
359 }
360
361 pub fn to_css_value(&self) -> String {
362 match self {
363 GridColumnSpan::Auto => "auto".to_string(),
364 GridColumnSpan::One => "span 1 / span 1".to_string(),
365 GridColumnSpan::Two => "span 2 / span 2".to_string(),
366 GridColumnSpan::Three => "span 3 / span 3".to_string(),
367 GridColumnSpan::Four => "span 4 / span 4".to_string(),
368 GridColumnSpan::Five => "span 5 / span 5".to_string(),
369 GridColumnSpan::Six => "span 6 / span 6".to_string(),
370 GridColumnSpan::Seven => "span 7 / span 7".to_string(),
371 GridColumnSpan::Eight => "span 8 / span 8".to_string(),
372 GridColumnSpan::Nine => "span 9 / span 9".to_string(),
373 GridColumnSpan::Ten => "span 10 / span 10".to_string(),
374 GridColumnSpan::Eleven => "span 11 / span 11".to_string(),
375 GridColumnSpan::Twelve => "span 12 / span 12".to_string(),
376 GridColumnSpan::Full => "1 / -1".to_string(),
377 }
378 }
379}
380
381impl GridRowSpan {
382 pub fn to_class_name(&self) -> String {
383 match self {
384 GridRowSpan::Auto => "auto".to_string(),
385 GridRowSpan::One => "1".to_string(),
386 GridRowSpan::Two => "2".to_string(),
387 GridRowSpan::Three => "3".to_string(),
388 GridRowSpan::Four => "4".to_string(),
389 GridRowSpan::Five => "5".to_string(),
390 GridRowSpan::Six => "6".to_string(),
391 GridRowSpan::Full => "full".to_string(),
392 }
393 }
394
395 pub fn to_css_value(&self) -> String {
396 match self {
397 GridRowSpan::Auto => "auto".to_string(),
398 GridRowSpan::One => "span 1 / span 1".to_string(),
399 GridRowSpan::Two => "span 2 / span 2".to_string(),
400 GridRowSpan::Three => "span 3 / span 3".to_string(),
401 GridRowSpan::Four => "span 4 / span 4".to_string(),
402 GridRowSpan::Five => "span 5 / span 5".to_string(),
403 GridRowSpan::Six => "span 6 / span 6".to_string(),
404 GridRowSpan::Full => "1 / -1".to_string(),
405 }
406 }
407}
408
409impl GridColumnStart {
410 pub fn to_class_name(&self) -> String {
411 match self {
412 GridColumnStart::Auto => "auto".to_string(),
413 GridColumnStart::One => "1".to_string(),
414 GridColumnStart::Two => "2".to_string(),
415 GridColumnStart::Three => "3".to_string(),
416 GridColumnStart::Four => "4".to_string(),
417 GridColumnStart::Five => "5".to_string(),
418 GridColumnStart::Six => "6".to_string(),
419 GridColumnStart::Seven => "7".to_string(),
420 GridColumnStart::Eight => "8".to_string(),
421 GridColumnStart::Nine => "9".to_string(),
422 GridColumnStart::Ten => "10".to_string(),
423 GridColumnStart::Eleven => "11".to_string(),
424 GridColumnStart::Twelve => "12".to_string(),
425 GridColumnStart::Thirteen => "13".to_string(),
426 }
427 }
428
429 pub fn to_css_value(&self) -> String {
430 match self {
431 GridColumnStart::Auto => "auto".to_string(),
432 GridColumnStart::One => "1".to_string(),
433 GridColumnStart::Two => "2".to_string(),
434 GridColumnStart::Three => "3".to_string(),
435 GridColumnStart::Four => "4".to_string(),
436 GridColumnStart::Five => "5".to_string(),
437 GridColumnStart::Six => "6".to_string(),
438 GridColumnStart::Seven => "7".to_string(),
439 GridColumnStart::Eight => "8".to_string(),
440 GridColumnStart::Nine => "9".to_string(),
441 GridColumnStart::Ten => "10".to_string(),
442 GridColumnStart::Eleven => "11".to_string(),
443 GridColumnStart::Twelve => "12".to_string(),
444 GridColumnStart::Thirteen => "13".to_string(),
445 }
446 }
447}
448
449impl GridRowStart {
450 pub fn to_class_name(&self) -> String {
451 match self {
452 GridRowStart::Auto => "auto".to_string(),
453 GridRowStart::One => "1".to_string(),
454 GridRowStart::Two => "2".to_string(),
455 GridRowStart::Three => "3".to_string(),
456 GridRowStart::Four => "4".to_string(),
457 GridRowStart::Five => "5".to_string(),
458 GridRowStart::Six => "6".to_string(),
459 GridRowStart::Seven => "7".to_string(),
460 }
461 }
462
463 pub fn to_css_value(&self) -> String {
464 match self {
465 GridRowStart::Auto => "auto".to_string(),
466 GridRowStart::One => "1".to_string(),
467 GridRowStart::Two => "2".to_string(),
468 GridRowStart::Three => "3".to_string(),
469 GridRowStart::Four => "4".to_string(),
470 GridRowStart::Five => "5".to_string(),
471 GridRowStart::Six => "6".to_string(),
472 GridRowStart::Seven => "7".to_string(),
473 }
474 }
475}
476
477impl GridColumnEnd {
478 pub fn to_class_name(&self) -> String {
479 match self {
480 GridColumnEnd::Auto => "auto".to_string(),
481 GridColumnEnd::One => "1".to_string(),
482 GridColumnEnd::Two => "2".to_string(),
483 GridColumnEnd::Three => "3".to_string(),
484 GridColumnEnd::Four => "4".to_string(),
485 GridColumnEnd::Five => "5".to_string(),
486 GridColumnEnd::Six => "6".to_string(),
487 GridColumnEnd::Seven => "7".to_string(),
488 GridColumnEnd::Eight => "8".to_string(),
489 GridColumnEnd::Nine => "9".to_string(),
490 GridColumnEnd::Ten => "10".to_string(),
491 GridColumnEnd::Eleven => "11".to_string(),
492 GridColumnEnd::Twelve => "12".to_string(),
493 GridColumnEnd::Thirteen => "13".to_string(),
494 }
495 }
496
497 pub fn to_css_value(&self) -> String {
498 match self {
499 GridColumnEnd::Auto => "auto".to_string(),
500 GridColumnEnd::One => "1".to_string(),
501 GridColumnEnd::Two => "2".to_string(),
502 GridColumnEnd::Three => "3".to_string(),
503 GridColumnEnd::Four => "4".to_string(),
504 GridColumnEnd::Five => "5".to_string(),
505 GridColumnEnd::Six => "6".to_string(),
506 GridColumnEnd::Seven => "7".to_string(),
507 GridColumnEnd::Eight => "8".to_string(),
508 GridColumnEnd::Nine => "9".to_string(),
509 GridColumnEnd::Ten => "10".to_string(),
510 GridColumnEnd::Eleven => "11".to_string(),
511 GridColumnEnd::Twelve => "12".to_string(),
512 GridColumnEnd::Thirteen => "13".to_string(),
513 }
514 }
515}
516
517impl GridRowEnd {
518 pub fn to_class_name(&self) -> String {
519 match self {
520 GridRowEnd::Auto => "auto".to_string(),
521 GridRowEnd::One => "1".to_string(),
522 GridRowEnd::Two => "2".to_string(),
523 GridRowEnd::Three => "3".to_string(),
524 GridRowEnd::Four => "4".to_string(),
525 GridRowEnd::Five => "5".to_string(),
526 GridRowEnd::Six => "6".to_string(),
527 GridRowEnd::Seven => "7".to_string(),
528 }
529 }
530
531 pub fn to_css_value(&self) -> String {
532 match self {
533 GridRowEnd::Auto => "auto".to_string(),
534 GridRowEnd::One => "1".to_string(),
535 GridRowEnd::Two => "2".to_string(),
536 GridRowEnd::Three => "3".to_string(),
537 GridRowEnd::Four => "4".to_string(),
538 GridRowEnd::Five => "5".to_string(),
539 GridRowEnd::Six => "6".to_string(),
540 GridRowEnd::Seven => "7".to_string(),
541 }
542 }
543}
544
545impl GridAutoFlow {
546 pub fn to_class_name(&self) -> String {
547 match self {
548 GridAutoFlow::Row => "row".to_string(),
549 GridAutoFlow::Column => "col".to_string(),
550 GridAutoFlow::Dense => "dense".to_string(),
551 GridAutoFlow::DenseColumn => "col-dense".to_string(),
552 }
553 }
554
555 pub fn to_css_value(&self) -> String {
556 match self {
557 GridAutoFlow::Row => "row".to_string(),
558 GridAutoFlow::Column => "column".to_string(),
559 GridAutoFlow::Dense => "row dense".to_string(),
560 GridAutoFlow::DenseColumn => "column dense".to_string(),
561 }
562 }
563}
564
565impl GridAutoColumns {
566 pub fn to_class_name(&self) -> String {
567 match self {
568 GridAutoColumns::Auto => "auto".to_string(),
569 GridAutoColumns::Min => "min".to_string(),
570 GridAutoColumns::Max => "max".to_string(),
571 GridAutoColumns::Fr => "fr".to_string(),
572 }
573 }
574
575 pub fn to_css_value(&self) -> String {
576 match self {
577 GridAutoColumns::Auto => "auto".to_string(),
578 GridAutoColumns::Min => "min-content".to_string(),
579 GridAutoColumns::Max => "max-content".to_string(),
580 GridAutoColumns::Fr => "minmax(0, 1fr)".to_string(),
581 }
582 }
583}
584
585impl GridAutoRows {
586 pub fn to_class_name(&self) -> String {
587 match self {
588 GridAutoRows::Auto => "auto".to_string(),
589 GridAutoRows::Min => "min".to_string(),
590 GridAutoRows::Max => "max".to_string(),
591 GridAutoRows::Fr => "fr".to_string(),
592 }
593 }
594
595 pub fn to_css_value(&self) -> String {
596 match self {
597 GridAutoRows::Auto => "auto".to_string(),
598 GridAutoRows::Min => "min-content".to_string(),
599 GridAutoRows::Max => "max-content".to_string(),
600 GridAutoRows::Fr => "minmax(0, 1fr)".to_string(),
601 }
602 }
603}
604
605impl fmt::Display for GridTemplateColumns {
606 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
607 write!(f, "{}", self.to_class_name())
608 }
609}
610
611impl fmt::Display for GridTemplateRows {
612 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
613 write!(f, "{}", self.to_class_name())
614 }
615}
616
617impl fmt::Display for GridColumnSpan {
618 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
619 write!(f, "{}", self.to_class_name())
620 }
621}
622
623impl fmt::Display for GridRowSpan {
624 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
625 write!(f, "{}", self.to_class_name())
626 }
627}
628
629impl fmt::Display for GridColumnStart {
630 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
631 write!(f, "{}", self.to_class_name())
632 }
633}
634
635impl fmt::Display for GridRowStart {
636 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
637 write!(f, "{}", self.to_class_name())
638 }
639}
640
641impl fmt::Display for GridColumnEnd {
642 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
643 write!(f, "{}", self.to_class_name())
644 }
645}
646
647impl fmt::Display for GridRowEnd {
648 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
649 write!(f, "{}", self.to_class_name())
650 }
651}
652
653impl fmt::Display for GridAutoFlow {
654 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
655 write!(f, "{}", self.to_class_name())
656 }
657}
658
659impl fmt::Display for GridAutoColumns {
660 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
661 write!(f, "{}", self.to_class_name())
662 }
663}
664
665impl fmt::Display for GridAutoRows {
666 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
667 write!(f, "{}", self.to_class_name())
668 }
669}
670
671pub trait GridTemplateColumnsUtilities {
673 fn grid_template_columns(self, columns: GridTemplateColumns) -> Self;
674}
675
676impl GridTemplateColumnsUtilities for ClassBuilder {
677 fn grid_template_columns(self, columns: GridTemplateColumns) -> Self {
678 self.class(format!("grid-cols-{}", columns.to_class_name()))
679 }
680}
681
682pub trait GridTemplateRowsUtilities {
684 fn grid_template_rows(self, rows: GridTemplateRows) -> Self;
685}
686
687impl GridTemplateRowsUtilities for ClassBuilder {
688 fn grid_template_rows(self, rows: GridTemplateRows) -> Self {
689 self.class(format!("grid-rows-{}", rows.to_class_name()))
690 }
691}
692
693pub trait GridColumnSpanUtilities {
695 fn grid_column_span(self, span: GridColumnSpan) -> Self;
696}
697
698impl GridColumnSpanUtilities for ClassBuilder {
699 fn grid_column_span(self, span: GridColumnSpan) -> Self {
700 self.class(format!("col-span-{}", span.to_class_name()))
701 }
702}
703
704pub trait GridRowSpanUtilities {
706 fn grid_row_span(self, span: GridRowSpan) -> Self;
707}
708
709impl GridRowSpanUtilities for ClassBuilder {
710 fn grid_row_span(self, span: GridRowSpan) -> Self {
711 self.class(format!("row-span-{}", span.to_class_name()))
712 }
713}
714
715pub trait GridColumnStartUtilities {
717 fn grid_column_start(self, start: GridColumnStart) -> Self;
718}
719
720impl GridColumnStartUtilities for ClassBuilder {
721 fn grid_column_start(self, start: GridColumnStart) -> Self {
722 self.class(format!("col-start-{}", start.to_class_name()))
723 }
724}
725
726pub trait GridRowStartUtilities {
728 fn grid_row_start(self, start: GridRowStart) -> Self;
729}
730
731impl GridRowStartUtilities for ClassBuilder {
732 fn grid_row_start(self, start: GridRowStart) -> Self {
733 self.class(format!("row-start-{}", start.to_class_name()))
734 }
735}
736
737pub trait GridColumnEndUtilities {
739 fn grid_column_end(self, end: GridColumnEnd) -> Self;
740}
741
742impl GridColumnEndUtilities for ClassBuilder {
743 fn grid_column_end(self, end: GridColumnEnd) -> Self {
744 self.class(format!("col-end-{}", end.to_class_name()))
745 }
746}
747
748pub trait GridRowEndUtilities {
750 fn grid_row_end(self, end: GridRowEnd) -> Self;
751}
752
753impl GridRowEndUtilities for ClassBuilder {
754 fn grid_row_end(self, end: GridRowEnd) -> Self {
755 self.class(format!("row-end-{}", end.to_class_name()))
756 }
757}
758
759pub trait GridAutoFlowUtilities {
761 fn grid_auto_flow(self, flow: GridAutoFlow) -> Self;
762}
763
764impl GridAutoFlowUtilities for ClassBuilder {
765 fn grid_auto_flow(self, flow: GridAutoFlow) -> Self {
766 self.class(format!("grid-flow-{}", flow.to_class_name()))
767 }
768}
769
770pub trait GridAutoColumnsUtilities {
772 fn grid_auto_columns(self, columns: GridAutoColumns) -> Self;
773}
774
775impl GridAutoColumnsUtilities for ClassBuilder {
776 fn grid_auto_columns(self, columns: GridAutoColumns) -> Self {
777 self.class(format!("auto-cols-{}", columns.to_class_name()))
778 }
779}
780
781pub trait GridAutoRowsUtilities {
783 fn grid_auto_rows(self, rows: GridAutoRows) -> Self;
784}
785
786impl GridAutoRowsUtilities for ClassBuilder {
787 fn grid_auto_rows(self, rows: GridAutoRows) -> Self {
788 self.class(format!("auto-rows-{}", rows.to_class_name()))
789 }
790}
791
792#[cfg(test)]
793mod tests {
794 use super::*;
795
796 #[test]
797 fn test_grid_template_columns_utilities() {
798 let classes = ClassBuilder::new()
799 .grid_template_columns(GridTemplateColumns::None)
800 .grid_template_columns(GridTemplateColumns::Auto)
801 .grid_template_columns(GridTemplateColumns::One)
802 .grid_template_columns(GridTemplateColumns::Two)
803 .grid_template_columns(GridTemplateColumns::Three)
804 .grid_template_columns(GridTemplateColumns::Twelve)
805 .build();
806
807 let css_classes = classes.to_css_classes();
808 assert!(css_classes.contains("grid-cols-none"));
809 assert!(css_classes.contains("grid-cols-auto"));
810 assert!(css_classes.contains("grid-cols-1"));
811 assert!(css_classes.contains("grid-cols-2"));
812 assert!(css_classes.contains("grid-cols-3"));
813 assert!(css_classes.contains("grid-cols-12"));
814 }
815
816 #[test]
817 fn test_grid_template_rows_utilities() {
818 let classes = ClassBuilder::new()
819 .grid_template_rows(GridTemplateRows::None)
820 .grid_template_rows(GridTemplateRows::Auto)
821 .grid_template_rows(GridTemplateRows::One)
822 .grid_template_rows(GridTemplateRows::Two)
823 .grid_template_rows(GridTemplateRows::Three)
824 .grid_template_rows(GridTemplateRows::Six)
825 .build();
826
827 let css_classes = classes.to_css_classes();
828 assert!(css_classes.contains("grid-rows-none"));
829 assert!(css_classes.contains("grid-rows-auto"));
830 assert!(css_classes.contains("grid-rows-1"));
831 assert!(css_classes.contains("grid-rows-2"));
832 assert!(css_classes.contains("grid-rows-3"));
833 assert!(css_classes.contains("grid-rows-6"));
834 }
835
836 #[test]
837 fn test_grid_column_span_utilities() {
838 let classes = ClassBuilder::new()
839 .grid_column_span(GridColumnSpan::Auto)
840 .grid_column_span(GridColumnSpan::One)
841 .grid_column_span(GridColumnSpan::Two)
842 .grid_column_span(GridColumnSpan::Three)
843 .grid_column_span(GridColumnSpan::Twelve)
844 .grid_column_span(GridColumnSpan::Full)
845 .build();
846
847 let css_classes = classes.to_css_classes();
848 assert!(css_classes.contains("col-span-auto"));
849 assert!(css_classes.contains("col-span-1"));
850 assert!(css_classes.contains("col-span-2"));
851 assert!(css_classes.contains("col-span-3"));
852 assert!(css_classes.contains("col-span-12"));
853 assert!(css_classes.contains("col-span-full"));
854 }
855
856 #[test]
857 fn test_grid_row_span_utilities() {
858 let classes = ClassBuilder::new()
859 .grid_row_span(GridRowSpan::Auto)
860 .grid_row_span(GridRowSpan::One)
861 .grid_row_span(GridRowSpan::Two)
862 .grid_row_span(GridRowSpan::Three)
863 .grid_row_span(GridRowSpan::Six)
864 .grid_row_span(GridRowSpan::Full)
865 .build();
866
867 let css_classes = classes.to_css_classes();
868 assert!(css_classes.contains("row-span-auto"));
869 assert!(css_classes.contains("row-span-1"));
870 assert!(css_classes.contains("row-span-2"));
871 assert!(css_classes.contains("row-span-3"));
872 assert!(css_classes.contains("row-span-6"));
873 assert!(css_classes.contains("row-span-full"));
874 }
875
876 #[test]
877 fn test_grid_column_start_utilities() {
878 let classes = ClassBuilder::new()
879 .grid_column_start(GridColumnStart::Auto)
880 .grid_column_start(GridColumnStart::One)
881 .grid_column_start(GridColumnStart::Two)
882 .grid_column_start(GridColumnStart::Three)
883 .grid_column_start(GridColumnStart::Twelve)
884 .grid_column_start(GridColumnStart::Thirteen)
885 .build();
886
887 let css_classes = classes.to_css_classes();
888 assert!(css_classes.contains("col-start-auto"));
889 assert!(css_classes.contains("col-start-1"));
890 assert!(css_classes.contains("col-start-2"));
891 assert!(css_classes.contains("col-start-3"));
892 assert!(css_classes.contains("col-start-12"));
893 assert!(css_classes.contains("col-start-13"));
894 }
895
896 #[test]
897 fn test_grid_row_start_utilities() {
898 let classes = ClassBuilder::new()
899 .grid_row_start(GridRowStart::Auto)
900 .grid_row_start(GridRowStart::One)
901 .grid_row_start(GridRowStart::Two)
902 .grid_row_start(GridRowStart::Three)
903 .grid_row_start(GridRowStart::Six)
904 .grid_row_start(GridRowStart::Seven)
905 .build();
906
907 let css_classes = classes.to_css_classes();
908 assert!(css_classes.contains("row-start-auto"));
909 assert!(css_classes.contains("row-start-1"));
910 assert!(css_classes.contains("row-start-2"));
911 assert!(css_classes.contains("row-start-3"));
912 assert!(css_classes.contains("row-start-6"));
913 assert!(css_classes.contains("row-start-7"));
914 }
915
916 #[test]
917 fn test_grid_column_end_utilities() {
918 let classes = ClassBuilder::new()
919 .grid_column_end(GridColumnEnd::Auto)
920 .grid_column_end(GridColumnEnd::One)
921 .grid_column_end(GridColumnEnd::Two)
922 .grid_column_end(GridColumnEnd::Three)
923 .grid_column_end(GridColumnEnd::Twelve)
924 .grid_column_end(GridColumnEnd::Thirteen)
925 .build();
926
927 let css_classes = classes.to_css_classes();
928 assert!(css_classes.contains("col-end-auto"));
929 assert!(css_classes.contains("col-end-1"));
930 assert!(css_classes.contains("col-end-2"));
931 assert!(css_classes.contains("col-end-3"));
932 assert!(css_classes.contains("col-end-12"));
933 assert!(css_classes.contains("col-end-13"));
934 }
935
936 #[test]
937 fn test_grid_row_end_utilities() {
938 let classes = ClassBuilder::new()
939 .grid_row_end(GridRowEnd::Auto)
940 .grid_row_end(GridRowEnd::One)
941 .grid_row_end(GridRowEnd::Two)
942 .grid_row_end(GridRowEnd::Three)
943 .grid_row_end(GridRowEnd::Six)
944 .grid_row_end(GridRowEnd::Seven)
945 .build();
946
947 let css_classes = classes.to_css_classes();
948 assert!(css_classes.contains("row-end-auto"));
949 assert!(css_classes.contains("row-end-1"));
950 assert!(css_classes.contains("row-end-2"));
951 assert!(css_classes.contains("row-end-3"));
952 assert!(css_classes.contains("row-end-6"));
953 assert!(css_classes.contains("row-end-7"));
954 }
955
956 #[test]
957 fn test_grid_auto_flow_utilities() {
958 let classes = ClassBuilder::new()
959 .grid_auto_flow(GridAutoFlow::Row)
960 .grid_auto_flow(GridAutoFlow::Column)
961 .grid_auto_flow(GridAutoFlow::Dense)
962 .grid_auto_flow(GridAutoFlow::DenseColumn)
963 .build();
964
965 let css_classes = classes.to_css_classes();
966 assert!(css_classes.contains("grid-flow-row"));
967 assert!(css_classes.contains("grid-flow-col"));
968 assert!(css_classes.contains("grid-flow-dense"));
969 assert!(css_classes.contains("grid-flow-col-dense"));
970 }
971
972 #[test]
973 fn test_grid_auto_columns_utilities() {
974 let classes = ClassBuilder::new()
975 .grid_auto_columns(GridAutoColumns::Auto)
976 .grid_auto_columns(GridAutoColumns::Min)
977 .grid_auto_columns(GridAutoColumns::Max)
978 .grid_auto_columns(GridAutoColumns::Fr)
979 .build();
980
981 let css_classes = classes.to_css_classes();
982 assert!(css_classes.contains("auto-cols-auto"));
983 assert!(css_classes.contains("auto-cols-min"));
984 assert!(css_classes.contains("auto-cols-max"));
985 assert!(css_classes.contains("auto-cols-fr"));
986 }
987
988 #[test]
989 fn test_grid_auto_rows_utilities() {
990 let classes = ClassBuilder::new()
991 .grid_auto_rows(GridAutoRows::Auto)
992 .grid_auto_rows(GridAutoRows::Min)
993 .grid_auto_rows(GridAutoRows::Max)
994 .grid_auto_rows(GridAutoRows::Fr)
995 .build();
996
997 let css_classes = classes.to_css_classes();
998 assert!(css_classes.contains("auto-rows-auto"));
999 assert!(css_classes.contains("auto-rows-min"));
1000 assert!(css_classes.contains("auto-rows-max"));
1001 assert!(css_classes.contains("auto-rows-fr"));
1002 }
1003
1004 #[test]
1005 fn test_complex_grid_combination() {
1006 let classes = ClassBuilder::new()
1007 .grid_template_columns(GridTemplateColumns::Three)
1008 .grid_template_rows(GridTemplateRows::Two)
1009 .grid_column_span(GridColumnSpan::Two)
1010 .grid_row_span(GridRowSpan::One)
1011 .grid_column_start(GridColumnStart::One)
1012 .grid_row_start(GridRowStart::One)
1013 .grid_column_end(GridColumnEnd::Three)
1014 .grid_row_end(GridRowEnd::Two)
1015 .grid_auto_flow(GridAutoFlow::Row)
1016 .grid_auto_columns(GridAutoColumns::Auto)
1017 .grid_auto_rows(GridAutoRows::Auto)
1018 .build();
1019
1020 let css_classes = classes.to_css_classes();
1021 assert!(css_classes.contains("grid-cols-3"));
1022 assert!(css_classes.contains("grid-rows-2"));
1023 assert!(css_classes.contains("col-span-2"));
1024 assert!(css_classes.contains("row-span-1"));
1025 assert!(css_classes.contains("col-start-1"));
1026 assert!(css_classes.contains("row-start-1"));
1027 assert!(css_classes.contains("col-end-3"));
1028 assert!(css_classes.contains("row-end-2"));
1029 assert!(css_classes.contains("grid-flow-row"));
1030 assert!(css_classes.contains("auto-cols-auto"));
1031 assert!(css_classes.contains("auto-rows-auto"));
1032 }
1033}