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 use crate::utilities::spacing::GapUtilities;
796
797 #[test]
798 fn test_grid_template_columns_utilities() {
799 let classes = ClassBuilder::new()
800 .grid_template_columns(GridTemplateColumns::None)
801 .grid_template_columns(GridTemplateColumns::Auto)
802 .grid_template_columns(GridTemplateColumns::One)
803 .grid_template_columns(GridTemplateColumns::Two)
804 .grid_template_columns(GridTemplateColumns::Three)
805 .grid_template_columns(GridTemplateColumns::Twelve)
806 .build();
807
808 let css_classes = classes.to_css_classes();
809 assert!(css_classes.contains("grid-cols-none"));
810 assert!(css_classes.contains("grid-cols-auto"));
811 assert!(css_classes.contains("grid-cols-1"));
812 assert!(css_classes.contains("grid-cols-2"));
813 assert!(css_classes.contains("grid-cols-3"));
814 assert!(css_classes.contains("grid-cols-12"));
815 }
816
817 #[test]
818 fn test_grid_template_rows_utilities() {
819 let classes = ClassBuilder::new()
820 .grid_template_rows(GridTemplateRows::None)
821 .grid_template_rows(GridTemplateRows::Auto)
822 .grid_template_rows(GridTemplateRows::One)
823 .grid_template_rows(GridTemplateRows::Two)
824 .grid_template_rows(GridTemplateRows::Three)
825 .grid_template_rows(GridTemplateRows::Six)
826 .build();
827
828 let css_classes = classes.to_css_classes();
829 assert!(css_classes.contains("grid-rows-none"));
830 assert!(css_classes.contains("grid-rows-auto"));
831 assert!(css_classes.contains("grid-rows-1"));
832 assert!(css_classes.contains("grid-rows-2"));
833 assert!(css_classes.contains("grid-rows-3"));
834 assert!(css_classes.contains("grid-rows-6"));
835 }
836
837 #[test]
838 fn test_grid_column_span_utilities() {
839 let classes = ClassBuilder::new()
840 .grid_column_span(GridColumnSpan::Auto)
841 .grid_column_span(GridColumnSpan::One)
842 .grid_column_span(GridColumnSpan::Two)
843 .grid_column_span(GridColumnSpan::Three)
844 .grid_column_span(GridColumnSpan::Twelve)
845 .grid_column_span(GridColumnSpan::Full)
846 .build();
847
848 let css_classes = classes.to_css_classes();
849 assert!(css_classes.contains("col-span-auto"));
850 assert!(css_classes.contains("col-span-1"));
851 assert!(css_classes.contains("col-span-2"));
852 assert!(css_classes.contains("col-span-3"));
853 assert!(css_classes.contains("col-span-12"));
854 assert!(css_classes.contains("col-span-full"));
855 }
856
857 #[test]
858 fn test_grid_row_span_utilities() {
859 let classes = ClassBuilder::new()
860 .grid_row_span(GridRowSpan::Auto)
861 .grid_row_span(GridRowSpan::One)
862 .grid_row_span(GridRowSpan::Two)
863 .grid_row_span(GridRowSpan::Three)
864 .grid_row_span(GridRowSpan::Six)
865 .grid_row_span(GridRowSpan::Full)
866 .build();
867
868 let css_classes = classes.to_css_classes();
869 assert!(css_classes.contains("row-span-auto"));
870 assert!(css_classes.contains("row-span-1"));
871 assert!(css_classes.contains("row-span-2"));
872 assert!(css_classes.contains("row-span-3"));
873 assert!(css_classes.contains("row-span-6"));
874 assert!(css_classes.contains("row-span-full"));
875 }
876
877 #[test]
878 fn test_grid_column_start_utilities() {
879 let classes = ClassBuilder::new()
880 .grid_column_start(GridColumnStart::Auto)
881 .grid_column_start(GridColumnStart::One)
882 .grid_column_start(GridColumnStart::Two)
883 .grid_column_start(GridColumnStart::Three)
884 .grid_column_start(GridColumnStart::Twelve)
885 .grid_column_start(GridColumnStart::Thirteen)
886 .build();
887
888 let css_classes = classes.to_css_classes();
889 assert!(css_classes.contains("col-start-auto"));
890 assert!(css_classes.contains("col-start-1"));
891 assert!(css_classes.contains("col-start-2"));
892 assert!(css_classes.contains("col-start-3"));
893 assert!(css_classes.contains("col-start-12"));
894 assert!(css_classes.contains("col-start-13"));
895 }
896
897 #[test]
898 fn test_grid_row_start_utilities() {
899 let classes = ClassBuilder::new()
900 .grid_row_start(GridRowStart::Auto)
901 .grid_row_start(GridRowStart::One)
902 .grid_row_start(GridRowStart::Two)
903 .grid_row_start(GridRowStart::Three)
904 .grid_row_start(GridRowStart::Six)
905 .grid_row_start(GridRowStart::Seven)
906 .build();
907
908 let css_classes = classes.to_css_classes();
909 assert!(css_classes.contains("row-start-auto"));
910 assert!(css_classes.contains("row-start-1"));
911 assert!(css_classes.contains("row-start-2"));
912 assert!(css_classes.contains("row-start-3"));
913 assert!(css_classes.contains("row-start-6"));
914 assert!(css_classes.contains("row-start-7"));
915 }
916
917 #[test]
918 fn test_grid_column_end_utilities() {
919 let classes = ClassBuilder::new()
920 .grid_column_end(GridColumnEnd::Auto)
921 .grid_column_end(GridColumnEnd::One)
922 .grid_column_end(GridColumnEnd::Two)
923 .grid_column_end(GridColumnEnd::Three)
924 .grid_column_end(GridColumnEnd::Twelve)
925 .grid_column_end(GridColumnEnd::Thirteen)
926 .build();
927
928 let css_classes = classes.to_css_classes();
929 assert!(css_classes.contains("col-end-auto"));
930 assert!(css_classes.contains("col-end-1"));
931 assert!(css_classes.contains("col-end-2"));
932 assert!(css_classes.contains("col-end-3"));
933 assert!(css_classes.contains("col-end-12"));
934 assert!(css_classes.contains("col-end-13"));
935 }
936
937 #[test]
938 fn test_grid_row_end_utilities() {
939 let classes = ClassBuilder::new()
940 .grid_row_end(GridRowEnd::Auto)
941 .grid_row_end(GridRowEnd::One)
942 .grid_row_end(GridRowEnd::Two)
943 .grid_row_end(GridRowEnd::Three)
944 .grid_row_end(GridRowEnd::Six)
945 .grid_row_end(GridRowEnd::Seven)
946 .build();
947
948 let css_classes = classes.to_css_classes();
949 assert!(css_classes.contains("row-end-auto"));
950 assert!(css_classes.contains("row-end-1"));
951 assert!(css_classes.contains("row-end-2"));
952 assert!(css_classes.contains("row-end-3"));
953 assert!(css_classes.contains("row-end-6"));
954 assert!(css_classes.contains("row-end-7"));
955 }
956
957 #[test]
958 fn test_grid_auto_flow_utilities() {
959 let classes = ClassBuilder::new()
960 .grid_auto_flow(GridAutoFlow::Row)
961 .grid_auto_flow(GridAutoFlow::Column)
962 .grid_auto_flow(GridAutoFlow::Dense)
963 .grid_auto_flow(GridAutoFlow::DenseColumn)
964 .build();
965
966 let css_classes = classes.to_css_classes();
967 assert!(css_classes.contains("grid-flow-row"));
968 assert!(css_classes.contains("grid-flow-col"));
969 assert!(css_classes.contains("grid-flow-dense"));
970 assert!(css_classes.contains("grid-flow-col-dense"));
971 }
972
973 #[test]
974 fn test_grid_auto_columns_utilities() {
975 let classes = ClassBuilder::new()
976 .grid_auto_columns(GridAutoColumns::Auto)
977 .grid_auto_columns(GridAutoColumns::Min)
978 .grid_auto_columns(GridAutoColumns::Max)
979 .grid_auto_columns(GridAutoColumns::Fr)
980 .build();
981
982 let css_classes = classes.to_css_classes();
983 assert!(css_classes.contains("auto-cols-auto"));
984 assert!(css_classes.contains("auto-cols-min"));
985 assert!(css_classes.contains("auto-cols-max"));
986 assert!(css_classes.contains("auto-cols-fr"));
987 }
988
989 #[test]
990 fn test_grid_auto_rows_utilities() {
991 let classes = ClassBuilder::new()
992 .grid_auto_rows(GridAutoRows::Auto)
993 .grid_auto_rows(GridAutoRows::Min)
994 .grid_auto_rows(GridAutoRows::Max)
995 .grid_auto_rows(GridAutoRows::Fr)
996 .build();
997
998 let css_classes = classes.to_css_classes();
999 assert!(css_classes.contains("auto-rows-auto"));
1000 assert!(css_classes.contains("auto-rows-min"));
1001 assert!(css_classes.contains("auto-rows-max"));
1002 assert!(css_classes.contains("auto-rows-fr"));
1003 }
1004
1005 #[test]
1006 fn test_complex_grid_combination() {
1007 let classes = ClassBuilder::new()
1008 .grid_template_columns(GridTemplateColumns::Three)
1009 .grid_template_rows(GridTemplateRows::Two)
1010 .grid_column_span(GridColumnSpan::Two)
1011 .grid_row_span(GridRowSpan::One)
1012 .grid_column_start(GridColumnStart::One)
1013 .grid_row_start(GridRowStart::One)
1014 .grid_column_end(GridColumnEnd::Three)
1015 .grid_row_end(GridRowEnd::Two)
1016 .grid_auto_flow(GridAutoFlow::Row)
1017 .grid_auto_columns(GridAutoColumns::Auto)
1018 .grid_auto_rows(GridAutoRows::Auto)
1019 .build();
1020
1021 let css_classes = classes.to_css_classes();
1022 assert!(css_classes.contains("grid-cols-3"));
1023 assert!(css_classes.contains("grid-rows-2"));
1024 assert!(css_classes.contains("col-span-2"));
1025 assert!(css_classes.contains("row-span-1"));
1026 assert!(css_classes.contains("col-start-1"));
1027 assert!(css_classes.contains("row-start-1"));
1028 assert!(css_classes.contains("col-end-3"));
1029 assert!(css_classes.contains("row-end-2"));
1030 assert!(css_classes.contains("grid-flow-row"));
1031 assert!(css_classes.contains("auto-cols-auto"));
1032 assert!(css_classes.contains("auto-rows-auto"));
1033 }
1034
1035 #[test]
1037 fn test_week6_grid_utilities() {
1038 let classes = ClassBuilder::new()
1040 .grid_template_columns(GridTemplateColumns::One)
1042 .grid_template_columns(GridTemplateColumns::Twelve)
1043 .grid_template_columns(GridTemplateColumns::None)
1044 .grid_template_rows(GridTemplateRows::One)
1045 .grid_template_rows(GridTemplateRows::Six)
1046 .grid_template_rows(GridTemplateRows::None)
1047 .grid_column_span(GridColumnSpan::Auto)
1048 .grid_column_span(GridColumnSpan::One)
1049 .grid_column_span(GridColumnSpan::Twelve)
1050 .grid_column_span(GridColumnSpan::Full)
1051 .grid_row_span(GridRowSpan::Auto)
1052 .grid_row_span(GridRowSpan::One)
1053 .grid_row_span(GridRowSpan::Six)
1054 .grid_row_span(GridRowSpan::Full)
1055 .gap(crate::utilities::spacing::SpacingValue::Zero)
1057 .gap(crate::utilities::spacing::SpacingValue::Integer(4))
1058 .gap_x(crate::utilities::spacing::SpacingValue::Integer(2))
1059 .gap_y(crate::utilities::spacing::SpacingValue::Integer(6))
1060 .build();
1061
1062 let css_classes = classes.to_css_classes();
1063
1064 assert!(css_classes.contains("grid-cols-1"));
1066 assert!(css_classes.contains("grid-cols-12"));
1067 assert!(css_classes.contains("grid-cols-none"));
1068 assert!(css_classes.contains("grid-rows-1"));
1069 assert!(css_classes.contains("grid-rows-6"));
1070 assert!(css_classes.contains("grid-rows-none"));
1071 assert!(css_classes.contains("col-span-auto"));
1072 assert!(css_classes.contains("col-span-1"));
1073 assert!(css_classes.contains("col-span-12"));
1074 assert!(css_classes.contains("col-span-full"));
1075 assert!(css_classes.contains("row-span-auto"));
1076 assert!(css_classes.contains("row-span-1"));
1077 assert!(css_classes.contains("row-span-6"));
1078 assert!(css_classes.contains("row-span-full"));
1079
1080 assert!(css_classes.contains("gap-0"));
1082 assert!(css_classes.contains("gap-4"));
1083 assert!(css_classes.contains("gap-x-2"));
1084 assert!(css_classes.contains("gap-y-6"));
1085 }
1086
1087 #[test]
1088 fn test_grid_template_columns_class_names() {
1089 assert_eq!(GridTemplateColumns::None.to_class_name(), "none");
1090 assert_eq!(GridTemplateColumns::Subgrid.to_class_name(), "subgrid");
1091 assert_eq!(GridTemplateColumns::Auto.to_class_name(), "auto");
1092 assert_eq!(GridTemplateColumns::One.to_class_name(), "1");
1093 assert_eq!(GridTemplateColumns::Two.to_class_name(), "2");
1094 assert_eq!(GridTemplateColumns::Three.to_class_name(), "3");
1095 assert_eq!(GridTemplateColumns::Four.to_class_name(), "4");
1096 assert_eq!(GridTemplateColumns::Five.to_class_name(), "5");
1097 assert_eq!(GridTemplateColumns::Six.to_class_name(), "6");
1098 assert_eq!(GridTemplateColumns::Seven.to_class_name(), "7");
1099 assert_eq!(GridTemplateColumns::Eight.to_class_name(), "8");
1100 assert_eq!(GridTemplateColumns::Nine.to_class_name(), "9");
1101 assert_eq!(GridTemplateColumns::Ten.to_class_name(), "10");
1102 assert_eq!(GridTemplateColumns::Eleven.to_class_name(), "11");
1103 assert_eq!(GridTemplateColumns::Twelve.to_class_name(), "12");
1104 }
1105
1106 #[test]
1107 fn test_grid_template_columns_css_values() {
1108 assert_eq!(GridTemplateColumns::None.to_css_value(), "none");
1109 assert_eq!(GridTemplateColumns::Subgrid.to_css_value(), "subgrid");
1110 assert_eq!(GridTemplateColumns::Auto.to_css_value(), "repeat(auto-fit, minmax(0, 1fr))");
1111 assert_eq!(GridTemplateColumns::One.to_css_value(), "repeat(1, minmax(0, 1fr))");
1112 assert_eq!(GridTemplateColumns::Two.to_css_value(), "repeat(2, minmax(0, 1fr))");
1113 assert_eq!(GridTemplateColumns::Three.to_css_value(), "repeat(3, minmax(0, 1fr))");
1114 assert_eq!(GridTemplateColumns::Four.to_css_value(), "repeat(4, minmax(0, 1fr))");
1115 assert_eq!(GridTemplateColumns::Five.to_css_value(), "repeat(5, minmax(0, 1fr))");
1116 assert_eq!(GridTemplateColumns::Six.to_css_value(), "repeat(6, minmax(0, 1fr))");
1117 assert_eq!(GridTemplateColumns::Seven.to_css_value(), "repeat(7, minmax(0, 1fr))");
1118 assert_eq!(GridTemplateColumns::Eight.to_css_value(), "repeat(8, minmax(0, 1fr))");
1119 assert_eq!(GridTemplateColumns::Nine.to_css_value(), "repeat(9, minmax(0, 1fr))");
1120 assert_eq!(GridTemplateColumns::Ten.to_css_value(), "repeat(10, minmax(0, 1fr))");
1121 assert_eq!(GridTemplateColumns::Eleven.to_css_value(), "repeat(11, minmax(0, 1fr))");
1122 assert_eq!(GridTemplateColumns::Twelve.to_css_value(), "repeat(12, minmax(0, 1fr))");
1123 }
1124
1125 #[test]
1126 fn test_grid_template_rows_class_names() {
1127 assert_eq!(GridTemplateRows::None.to_class_name(), "none");
1128 assert_eq!(GridTemplateRows::Subgrid.to_class_name(), "subgrid");
1129 assert_eq!(GridTemplateRows::Auto.to_class_name(), "auto");
1130 assert_eq!(GridTemplateRows::One.to_class_name(), "1");
1131 assert_eq!(GridTemplateRows::Two.to_class_name(), "2");
1132 assert_eq!(GridTemplateRows::Three.to_class_name(), "3");
1133 assert_eq!(GridTemplateRows::Four.to_class_name(), "4");
1134 assert_eq!(GridTemplateRows::Five.to_class_name(), "5");
1135 assert_eq!(GridTemplateRows::Six.to_class_name(), "6");
1136 }
1137
1138 #[test]
1139 fn test_grid_template_rows_css_values() {
1140 assert_eq!(GridTemplateRows::None.to_css_value(), "none");
1141 assert_eq!(GridTemplateRows::Subgrid.to_css_value(), "subgrid");
1142 assert_eq!(GridTemplateRows::Auto.to_css_value(), "repeat(auto-fit, minmax(0, 1fr))");
1143 assert_eq!(GridTemplateRows::One.to_css_value(), "repeat(1, minmax(0, 1fr))");
1144 assert_eq!(GridTemplateRows::Two.to_css_value(), "repeat(2, minmax(0, 1fr))");
1145 assert_eq!(GridTemplateRows::Three.to_css_value(), "repeat(3, minmax(0, 1fr))");
1146 assert_eq!(GridTemplateRows::Four.to_css_value(), "repeat(4, minmax(0, 1fr))");
1147 assert_eq!(GridTemplateRows::Five.to_css_value(), "repeat(5, minmax(0, 1fr))");
1148 assert_eq!(GridTemplateRows::Six.to_css_value(), "repeat(6, minmax(0, 1fr))");
1149 }
1150
1151 #[test]
1152 fn test_grid_column_span_class_names() {
1153 assert_eq!(GridColumnSpan::Auto.to_class_name(), "auto");
1154 assert_eq!(GridColumnSpan::One.to_class_name(), "1");
1155 assert_eq!(GridColumnSpan::Two.to_class_name(), "2");
1156 assert_eq!(GridColumnSpan::Three.to_class_name(), "3");
1157 assert_eq!(GridColumnSpan::Four.to_class_name(), "4");
1158 assert_eq!(GridColumnSpan::Five.to_class_name(), "5");
1159 assert_eq!(GridColumnSpan::Six.to_class_name(), "6");
1160 assert_eq!(GridColumnSpan::Seven.to_class_name(), "7");
1161 assert_eq!(GridColumnSpan::Eight.to_class_name(), "8");
1162 assert_eq!(GridColumnSpan::Nine.to_class_name(), "9");
1163 assert_eq!(GridColumnSpan::Ten.to_class_name(), "10");
1164 assert_eq!(GridColumnSpan::Eleven.to_class_name(), "11");
1165 assert_eq!(GridColumnSpan::Twelve.to_class_name(), "12");
1166 assert_eq!(GridColumnSpan::Full.to_class_name(), "full");
1167 }
1168
1169 #[test]
1170 fn test_grid_column_span_css_values() {
1171 assert_eq!(GridColumnSpan::Auto.to_css_value(), "auto");
1172 assert_eq!(GridColumnSpan::One.to_css_value(), "span 1 / span 1");
1173 assert_eq!(GridColumnSpan::Two.to_css_value(), "span 2 / span 2");
1174 assert_eq!(GridColumnSpan::Three.to_css_value(), "span 3 / span 3");
1175 assert_eq!(GridColumnSpan::Four.to_css_value(), "span 4 / span 4");
1176 assert_eq!(GridColumnSpan::Five.to_css_value(), "span 5 / span 5");
1177 assert_eq!(GridColumnSpan::Six.to_css_value(), "span 6 / span 6");
1178 assert_eq!(GridColumnSpan::Seven.to_css_value(), "span 7 / span 7");
1179 assert_eq!(GridColumnSpan::Eight.to_css_value(), "span 8 / span 8");
1180 assert_eq!(GridColumnSpan::Nine.to_css_value(), "span 9 / span 9");
1181 assert_eq!(GridColumnSpan::Ten.to_css_value(), "span 10 / span 10");
1182 assert_eq!(GridColumnSpan::Eleven.to_css_value(), "span 11 / span 11");
1183 assert_eq!(GridColumnSpan::Twelve.to_css_value(), "span 12 / span 12");
1184 assert_eq!(GridColumnSpan::Full.to_css_value(), "1 / -1");
1185 }
1186
1187 #[test]
1188 fn test_grid_row_span_class_names() {
1189 assert_eq!(GridRowSpan::Auto.to_class_name(), "auto");
1190 assert_eq!(GridRowSpan::One.to_class_name(), "1");
1191 assert_eq!(GridRowSpan::Two.to_class_name(), "2");
1192 assert_eq!(GridRowSpan::Three.to_class_name(), "3");
1193 assert_eq!(GridRowSpan::Four.to_class_name(), "4");
1194 assert_eq!(GridRowSpan::Five.to_class_name(), "5");
1195 assert_eq!(GridRowSpan::Six.to_class_name(), "6");
1196 assert_eq!(GridRowSpan::Full.to_class_name(), "full");
1197 }
1198
1199 #[test]
1200 fn test_grid_row_span_css_values() {
1201 assert_eq!(GridRowSpan::Auto.to_css_value(), "auto");
1202 assert_eq!(GridRowSpan::One.to_css_value(), "span 1 / span 1");
1203 assert_eq!(GridRowSpan::Two.to_css_value(), "span 2 / span 2");
1204 assert_eq!(GridRowSpan::Three.to_css_value(), "span 3 / span 3");
1205 assert_eq!(GridRowSpan::Four.to_css_value(), "span 4 / span 4");
1206 assert_eq!(GridRowSpan::Five.to_css_value(), "span 5 / span 5");
1207 assert_eq!(GridRowSpan::Six.to_css_value(), "span 6 / span 6");
1208 assert_eq!(GridRowSpan::Full.to_css_value(), "1 / -1");
1209 }
1210
1211 #[test]
1212 fn test_grid_column_start_class_names() {
1213 assert_eq!(GridColumnStart::Auto.to_class_name(), "auto");
1214 assert_eq!(GridColumnStart::One.to_class_name(), "1");
1215 assert_eq!(GridColumnStart::Two.to_class_name(), "2");
1216 assert_eq!(GridColumnStart::Three.to_class_name(), "3");
1217 assert_eq!(GridColumnStart::Four.to_class_name(), "4");
1218 assert_eq!(GridColumnStart::Five.to_class_name(), "5");
1219 assert_eq!(GridColumnStart::Six.to_class_name(), "6");
1220 assert_eq!(GridColumnStart::Seven.to_class_name(), "7");
1221 assert_eq!(GridColumnStart::Eight.to_class_name(), "8");
1222 assert_eq!(GridColumnStart::Nine.to_class_name(), "9");
1223 assert_eq!(GridColumnStart::Ten.to_class_name(), "10");
1224 assert_eq!(GridColumnStart::Eleven.to_class_name(), "11");
1225 assert_eq!(GridColumnStart::Twelve.to_class_name(), "12");
1226 assert_eq!(GridColumnStart::Thirteen.to_class_name(), "13");
1227 }
1228
1229 #[test]
1230 fn test_grid_column_start_css_values() {
1231 assert_eq!(GridColumnStart::Auto.to_css_value(), "auto");
1232 assert_eq!(GridColumnStart::One.to_css_value(), "1");
1233 assert_eq!(GridColumnStart::Two.to_css_value(), "2");
1234 assert_eq!(GridColumnStart::Three.to_css_value(), "3");
1235 assert_eq!(GridColumnStart::Four.to_css_value(), "4");
1236 assert_eq!(GridColumnStart::Five.to_css_value(), "5");
1237 assert_eq!(GridColumnStart::Six.to_css_value(), "6");
1238 assert_eq!(GridColumnStart::Seven.to_css_value(), "7");
1239 assert_eq!(GridColumnStart::Eight.to_css_value(), "8");
1240 assert_eq!(GridColumnStart::Nine.to_css_value(), "9");
1241 assert_eq!(GridColumnStart::Ten.to_css_value(), "10");
1242 assert_eq!(GridColumnStart::Eleven.to_css_value(), "11");
1243 assert_eq!(GridColumnStart::Twelve.to_css_value(), "12");
1244 assert_eq!(GridColumnStart::Thirteen.to_css_value(), "13");
1245 }
1246
1247 #[test]
1248 fn test_grid_row_start_class_names() {
1249 assert_eq!(GridRowStart::Auto.to_class_name(), "auto");
1250 assert_eq!(GridRowStart::One.to_class_name(), "1");
1251 assert_eq!(GridRowStart::Two.to_class_name(), "2");
1252 assert_eq!(GridRowStart::Three.to_class_name(), "3");
1253 assert_eq!(GridRowStart::Four.to_class_name(), "4");
1254 assert_eq!(GridRowStart::Five.to_class_name(), "5");
1255 assert_eq!(GridRowStart::Six.to_class_name(), "6");
1256 assert_eq!(GridRowStart::Seven.to_class_name(), "7");
1257 }
1258
1259 #[test]
1260 fn test_grid_row_start_css_values() {
1261 assert_eq!(GridRowStart::Auto.to_css_value(), "auto");
1262 assert_eq!(GridRowStart::One.to_css_value(), "1");
1263 assert_eq!(GridRowStart::Two.to_css_value(), "2");
1264 assert_eq!(GridRowStart::Three.to_css_value(), "3");
1265 assert_eq!(GridRowStart::Four.to_css_value(), "4");
1266 assert_eq!(GridRowStart::Five.to_css_value(), "5");
1267 assert_eq!(GridRowStart::Six.to_css_value(), "6");
1268 assert_eq!(GridRowStart::Seven.to_css_value(), "7");
1269 }
1270
1271 #[test]
1272 fn test_grid_column_end_class_names() {
1273 assert_eq!(GridColumnEnd::Auto.to_class_name(), "auto");
1274 assert_eq!(GridColumnEnd::One.to_class_name(), "1");
1275 assert_eq!(GridColumnEnd::Two.to_class_name(), "2");
1276 assert_eq!(GridColumnEnd::Three.to_class_name(), "3");
1277 assert_eq!(GridColumnEnd::Four.to_class_name(), "4");
1278 assert_eq!(GridColumnEnd::Five.to_class_name(), "5");
1279 assert_eq!(GridColumnEnd::Six.to_class_name(), "6");
1280 assert_eq!(GridColumnEnd::Seven.to_class_name(), "7");
1281 assert_eq!(GridColumnEnd::Eight.to_class_name(), "8");
1282 assert_eq!(GridColumnEnd::Nine.to_class_name(), "9");
1283 assert_eq!(GridColumnEnd::Ten.to_class_name(), "10");
1284 assert_eq!(GridColumnEnd::Eleven.to_class_name(), "11");
1285 assert_eq!(GridColumnEnd::Twelve.to_class_name(), "12");
1286 assert_eq!(GridColumnEnd::Thirteen.to_class_name(), "13");
1287 }
1288
1289 #[test]
1290 fn test_grid_column_end_css_values() {
1291 assert_eq!(GridColumnEnd::Auto.to_css_value(), "auto");
1292 assert_eq!(GridColumnEnd::One.to_css_value(), "1");
1293 assert_eq!(GridColumnEnd::Two.to_css_value(), "2");
1294 assert_eq!(GridColumnEnd::Three.to_css_value(), "3");
1295 assert_eq!(GridColumnEnd::Four.to_css_value(), "4");
1296 assert_eq!(GridColumnEnd::Five.to_css_value(), "5");
1297 assert_eq!(GridColumnEnd::Six.to_css_value(), "6");
1298 assert_eq!(GridColumnEnd::Seven.to_css_value(), "7");
1299 assert_eq!(GridColumnEnd::Eight.to_css_value(), "8");
1300 assert_eq!(GridColumnEnd::Nine.to_css_value(), "9");
1301 assert_eq!(GridColumnEnd::Ten.to_css_value(), "10");
1302 assert_eq!(GridColumnEnd::Eleven.to_css_value(), "11");
1303 assert_eq!(GridColumnEnd::Twelve.to_css_value(), "12");
1304 assert_eq!(GridColumnEnd::Thirteen.to_css_value(), "13");
1305 }
1306
1307 #[test]
1308 fn test_grid_row_end_class_names() {
1309 assert_eq!(GridRowEnd::Auto.to_class_name(), "auto");
1310 assert_eq!(GridRowEnd::One.to_class_name(), "1");
1311 assert_eq!(GridRowEnd::Two.to_class_name(), "2");
1312 assert_eq!(GridRowEnd::Three.to_class_name(), "3");
1313 assert_eq!(GridRowEnd::Four.to_class_name(), "4");
1314 assert_eq!(GridRowEnd::Five.to_class_name(), "5");
1315 assert_eq!(GridRowEnd::Six.to_class_name(), "6");
1316 assert_eq!(GridRowEnd::Seven.to_class_name(), "7");
1317 }
1318
1319 #[test]
1320 fn test_grid_row_end_css_values() {
1321 assert_eq!(GridRowEnd::Auto.to_css_value(), "auto");
1322 assert_eq!(GridRowEnd::One.to_css_value(), "1");
1323 assert_eq!(GridRowEnd::Two.to_css_value(), "2");
1324 assert_eq!(GridRowEnd::Three.to_css_value(), "3");
1325 assert_eq!(GridRowEnd::Four.to_css_value(), "4");
1326 assert_eq!(GridRowEnd::Five.to_css_value(), "5");
1327 assert_eq!(GridRowEnd::Six.to_css_value(), "6");
1328 assert_eq!(GridRowEnd::Seven.to_css_value(), "7");
1329 }
1330
1331 #[test]
1332 fn test_grid_auto_flow_class_names() {
1333 assert_eq!(GridAutoFlow::Row.to_class_name(), "row");
1334 assert_eq!(GridAutoFlow::Column.to_class_name(), "col");
1335 assert_eq!(GridAutoFlow::Dense.to_class_name(), "dense");
1336 assert_eq!(GridAutoFlow::DenseColumn.to_class_name(), "col-dense");
1337 }
1338
1339 #[test]
1340 fn test_grid_auto_flow_css_values() {
1341 assert_eq!(GridAutoFlow::Row.to_css_value(), "row");
1342 assert_eq!(GridAutoFlow::Column.to_css_value(), "column");
1343 assert_eq!(GridAutoFlow::Dense.to_css_value(), "row dense");
1344 assert_eq!(GridAutoFlow::DenseColumn.to_css_value(), "column dense");
1345 }
1346
1347 #[test]
1348 fn test_grid_auto_columns_class_names() {
1349 assert_eq!(GridAutoColumns::Auto.to_class_name(), "auto");
1350 assert_eq!(GridAutoColumns::Min.to_class_name(), "min");
1351 assert_eq!(GridAutoColumns::Max.to_class_name(), "max");
1352 assert_eq!(GridAutoColumns::Fr.to_class_name(), "fr");
1353 }
1354
1355 #[test]
1356 fn test_grid_auto_columns_css_values() {
1357 assert_eq!(GridAutoColumns::Auto.to_css_value(), "auto");
1358 assert_eq!(GridAutoColumns::Min.to_css_value(), "min-content");
1359 assert_eq!(GridAutoColumns::Max.to_css_value(), "max-content");
1360 assert_eq!(GridAutoColumns::Fr.to_css_value(), "minmax(0, 1fr)");
1361 }
1362
1363 #[test]
1364 fn test_grid_auto_rows_class_names() {
1365 assert_eq!(GridAutoRows::Auto.to_class_name(), "auto");
1366 assert_eq!(GridAutoRows::Min.to_class_name(), "min");
1367 assert_eq!(GridAutoRows::Max.to_class_name(), "max");
1368 assert_eq!(GridAutoRows::Fr.to_class_name(), "fr");
1369 }
1370
1371 #[test]
1372 fn test_grid_auto_rows_css_values() {
1373 assert_eq!(GridAutoRows::Auto.to_css_value(), "auto");
1374 assert_eq!(GridAutoRows::Min.to_css_value(), "min-content");
1375 assert_eq!(GridAutoRows::Max.to_css_value(), "max-content");
1376 assert_eq!(GridAutoRows::Fr.to_css_value(), "minmax(0, 1fr)");
1377 }
1378
1379 #[test]
1380 fn test_grid_serialization() {
1381 let columns = GridTemplateColumns::Three;
1383 let serialized = serde_json::to_string(&columns).unwrap();
1384 let deserialized: GridTemplateColumns = serde_json::from_str(&serialized).unwrap();
1385 assert_eq!(columns, deserialized);
1386
1387 let span = GridColumnSpan::Full;
1389 let serialized = serde_json::to_string(&span).unwrap();
1390 let deserialized: GridColumnSpan = serde_json::from_str(&serialized).unwrap();
1391 assert_eq!(span, deserialized);
1392
1393 let flow = GridAutoFlow::Dense;
1395 let serialized = serde_json::to_string(&flow).unwrap();
1396 let deserialized: GridAutoFlow = serde_json::from_str(&serialized).unwrap();
1397 assert_eq!(flow, deserialized);
1398 }
1399
1400 #[test]
1401 fn test_grid_equality_and_hash() {
1402 assert_eq!(GridTemplateColumns::Three, GridTemplateColumns::Three);
1404 assert_ne!(GridTemplateColumns::Three, GridTemplateColumns::Four);
1405
1406 assert_eq!(GridColumnSpan::Full, GridColumnSpan::Full);
1408 assert_ne!(GridColumnSpan::Full, GridColumnSpan::Auto);
1409
1410 assert_eq!(GridAutoFlow::Row, GridAutoFlow::Row);
1412 assert_ne!(GridAutoFlow::Row, GridAutoFlow::Column);
1413
1414 use std::collections::HashMap;
1416 let mut map = HashMap::new();
1417 map.insert(GridTemplateColumns::Three, "three");
1418 map.insert(GridTemplateColumns::Four, "four");
1419 assert_eq!(map.get(&GridTemplateColumns::Three), Some(&"three"));
1420 assert_eq!(map.get(&GridTemplateColumns::Four), Some(&"four"));
1421 }
1422
1423 #[test]
1424 fn test_comprehensive_grid_utilities() {
1425 let classes = ClassBuilder::new()
1426 .grid_template_columns(GridTemplateColumns::Three)
1427 .grid_template_rows(GridTemplateRows::Two)
1428 .grid_column_span(GridColumnSpan::Two)
1429 .grid_row_span(GridRowSpan::One)
1430 .grid_column_start(GridColumnStart::One)
1431 .grid_row_start(GridRowStart::One)
1432 .grid_column_end(GridColumnEnd::Three)
1433 .grid_row_end(GridRowEnd::Two)
1434 .grid_auto_flow(GridAutoFlow::Row)
1435 .grid_auto_columns(GridAutoColumns::Auto)
1436 .grid_auto_rows(GridAutoRows::Auto)
1437 .build();
1438
1439 let css_classes = classes.to_css_classes();
1440 assert!(css_classes.contains("grid-cols-3"));
1441 assert!(css_classes.contains("grid-rows-2"));
1442 assert!(css_classes.contains("col-span-2"));
1443 assert!(css_classes.contains("row-span-1"));
1444 assert!(css_classes.contains("col-start-1"));
1445 assert!(css_classes.contains("row-start-1"));
1446 assert!(css_classes.contains("col-end-3"));
1447 assert!(css_classes.contains("row-end-2"));
1448 assert!(css_classes.contains("grid-flow-row"));
1449 assert!(css_classes.contains("auto-cols-auto"));
1450 assert!(css_classes.contains("auto-rows-auto"));
1451 }
1452}