datacontract-cli 0.10.0__py3-none-any.whl → 0.10.37__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. datacontract/__init__.py +13 -0
  2. datacontract/api.py +260 -0
  3. datacontract/breaking/breaking.py +242 -12
  4. datacontract/breaking/breaking_rules.py +37 -1
  5. datacontract/catalog/catalog.py +80 -0
  6. datacontract/cli.py +387 -117
  7. datacontract/data_contract.py +216 -353
  8. datacontract/engines/data_contract_checks.py +1041 -0
  9. datacontract/engines/data_contract_test.py +113 -0
  10. datacontract/engines/datacontract/check_that_datacontract_contains_valid_servers_configuration.py +2 -3
  11. datacontract/engines/datacontract/check_that_datacontract_file_exists.py +1 -1
  12. datacontract/engines/fastjsonschema/check_jsonschema.py +176 -42
  13. datacontract/engines/fastjsonschema/s3/s3_read_files.py +16 -1
  14. datacontract/engines/soda/check_soda_execute.py +100 -56
  15. datacontract/engines/soda/connections/athena.py +79 -0
  16. datacontract/engines/soda/connections/bigquery.py +8 -1
  17. datacontract/engines/soda/connections/databricks.py +12 -3
  18. datacontract/engines/soda/connections/duckdb_connection.py +241 -0
  19. datacontract/engines/soda/connections/kafka.py +206 -113
  20. datacontract/engines/soda/connections/snowflake.py +8 -5
  21. datacontract/engines/soda/connections/sqlserver.py +43 -0
  22. datacontract/engines/soda/connections/trino.py +26 -0
  23. datacontract/export/avro_converter.py +72 -8
  24. datacontract/export/avro_idl_converter.py +31 -25
  25. datacontract/export/bigquery_converter.py +130 -0
  26. datacontract/export/custom_converter.py +40 -0
  27. datacontract/export/data_caterer_converter.py +161 -0
  28. datacontract/export/dbml_converter.py +148 -0
  29. datacontract/export/dbt_converter.py +141 -54
  30. datacontract/export/dcs_exporter.py +6 -0
  31. datacontract/export/dqx_converter.py +126 -0
  32. datacontract/export/duckdb_type_converter.py +57 -0
  33. datacontract/export/excel_exporter.py +923 -0
  34. datacontract/export/exporter.py +100 -0
  35. datacontract/export/exporter_factory.py +216 -0
  36. datacontract/export/go_converter.py +105 -0
  37. datacontract/export/great_expectations_converter.py +257 -36
  38. datacontract/export/html_exporter.py +86 -0
  39. datacontract/export/iceberg_converter.py +188 -0
  40. datacontract/export/jsonschema_converter.py +71 -16
  41. datacontract/export/markdown_converter.py +337 -0
  42. datacontract/export/mermaid_exporter.py +110 -0
  43. datacontract/export/odcs_v3_exporter.py +375 -0
  44. datacontract/export/pandas_type_converter.py +40 -0
  45. datacontract/export/protobuf_converter.py +168 -68
  46. datacontract/export/pydantic_converter.py +6 -0
  47. datacontract/export/rdf_converter.py +13 -6
  48. datacontract/export/sodacl_converter.py +36 -188
  49. datacontract/export/spark_converter.py +245 -0
  50. datacontract/export/sql_converter.py +37 -3
  51. datacontract/export/sql_type_converter.py +269 -8
  52. datacontract/export/sqlalchemy_converter.py +170 -0
  53. datacontract/export/terraform_converter.py +7 -2
  54. datacontract/imports/avro_importer.py +246 -26
  55. datacontract/imports/bigquery_importer.py +221 -0
  56. datacontract/imports/csv_importer.py +143 -0
  57. datacontract/imports/dbml_importer.py +112 -0
  58. datacontract/imports/dbt_importer.py +240 -0
  59. datacontract/imports/excel_importer.py +1111 -0
  60. datacontract/imports/glue_importer.py +288 -0
  61. datacontract/imports/iceberg_importer.py +172 -0
  62. datacontract/imports/importer.py +51 -0
  63. datacontract/imports/importer_factory.py +128 -0
  64. datacontract/imports/json_importer.py +325 -0
  65. datacontract/imports/jsonschema_importer.py +146 -0
  66. datacontract/imports/odcs_importer.py +60 -0
  67. datacontract/imports/odcs_v3_importer.py +516 -0
  68. datacontract/imports/parquet_importer.py +81 -0
  69. datacontract/imports/protobuf_importer.py +264 -0
  70. datacontract/imports/spark_importer.py +262 -0
  71. datacontract/imports/sql_importer.py +274 -35
  72. datacontract/imports/unity_importer.py +219 -0
  73. datacontract/init/init_template.py +20 -0
  74. datacontract/integration/datamesh_manager.py +86 -0
  75. datacontract/lint/resolve.py +271 -49
  76. datacontract/lint/resources.py +21 -0
  77. datacontract/lint/schema.py +53 -17
  78. datacontract/lint/urls.py +32 -12
  79. datacontract/model/data_contract_specification/__init__.py +1 -0
  80. datacontract/model/exceptions.py +4 -1
  81. datacontract/model/odcs.py +24 -0
  82. datacontract/model/run.py +49 -29
  83. datacontract/output/__init__.py +0 -0
  84. datacontract/output/junit_test_results.py +135 -0
  85. datacontract/output/output_format.py +10 -0
  86. datacontract/output/test_results_writer.py +79 -0
  87. datacontract/py.typed +0 -0
  88. datacontract/schemas/datacontract-1.1.0.init.yaml +91 -0
  89. datacontract/schemas/datacontract-1.1.0.schema.json +1975 -0
  90. datacontract/schemas/datacontract-1.2.0.init.yaml +91 -0
  91. datacontract/schemas/datacontract-1.2.0.schema.json +2029 -0
  92. datacontract/schemas/datacontract-1.2.1.init.yaml +91 -0
  93. datacontract/schemas/datacontract-1.2.1.schema.json +2058 -0
  94. datacontract/schemas/odcs-3.0.1.schema.json +2634 -0
  95. datacontract/schemas/odcs-3.0.2.schema.json +2382 -0
  96. datacontract/templates/datacontract.html +139 -294
  97. datacontract/templates/datacontract_odcs.html +685 -0
  98. datacontract/templates/index.html +236 -0
  99. datacontract/templates/partials/datacontract_information.html +86 -0
  100. datacontract/templates/partials/datacontract_servicelevels.html +253 -0
  101. datacontract/templates/partials/datacontract_terms.html +51 -0
  102. datacontract/templates/partials/definition.html +25 -0
  103. datacontract/templates/partials/example.html +27 -0
  104. datacontract/templates/partials/model_field.html +144 -0
  105. datacontract/templates/partials/quality.html +49 -0
  106. datacontract/templates/partials/server.html +211 -0
  107. datacontract/templates/style/output.css +491 -72
  108. datacontract_cli-0.10.37.dist-info/METADATA +2235 -0
  109. datacontract_cli-0.10.37.dist-info/RECORD +119 -0
  110. {datacontract_cli-0.10.0.dist-info → datacontract_cli-0.10.37.dist-info}/WHEEL +1 -1
  111. {datacontract_cli-0.10.0.dist-info → datacontract_cli-0.10.37.dist-info/licenses}/LICENSE +1 -1
  112. datacontract/engines/datacontract/check_that_datacontract_str_is_valid.py +0 -48
  113. datacontract/engines/soda/connections/dask.py +0 -28
  114. datacontract/engines/soda/connections/duckdb.py +0 -76
  115. datacontract/export/csv_type_converter.py +0 -36
  116. datacontract/export/html_export.py +0 -66
  117. datacontract/export/odcs_converter.py +0 -102
  118. datacontract/init/download_datacontract_file.py +0 -17
  119. datacontract/integration/publish_datamesh_manager.py +0 -33
  120. datacontract/integration/publish_opentelemetry.py +0 -107
  121. datacontract/lint/lint.py +0 -141
  122. datacontract/lint/linters/description_linter.py +0 -34
  123. datacontract/lint/linters/example_model_linter.py +0 -91
  124. datacontract/lint/linters/field_pattern_linter.py +0 -34
  125. datacontract/lint/linters/field_reference_linter.py +0 -38
  126. datacontract/lint/linters/notice_period_linter.py +0 -55
  127. datacontract/lint/linters/quality_schema_linter.py +0 -52
  128. datacontract/lint/linters/valid_constraints_linter.py +0 -99
  129. datacontract/model/data_contract_specification.py +0 -141
  130. datacontract/web.py +0 -14
  131. datacontract_cli-0.10.0.dist-info/METADATA +0 -951
  132. datacontract_cli-0.10.0.dist-info/RECORD +0 -66
  133. /datacontract/{model → breaking}/breaking_change.py +0 -0
  134. /datacontract/{lint/linters → export}/__init__.py +0 -0
  135. {datacontract_cli-0.10.0.dist-info → datacontract_cli-0.10.37.dist-info}/entry_points.txt +0 -0
  136. {datacontract_cli-0.10.0.dist-info → datacontract_cli-0.10.37.dist-info}/top_level.txt +0 -0
@@ -456,19 +456,19 @@ video {
456
456
  --tw-skew-y: 0;
457
457
  --tw-scale-x: 1;
458
458
  --tw-scale-y: 1;
459
- --tw-pan-x: ;
460
- --tw-pan-y: ;
461
- --tw-pinch-zoom: ;
459
+ --tw-pan-x: ;
460
+ --tw-pan-y: ;
461
+ --tw-pinch-zoom: ;
462
462
  --tw-scroll-snap-strictness: proximity;
463
- --tw-gradient-from-position: ;
464
- --tw-gradient-via-position: ;
465
- --tw-gradient-to-position: ;
466
- --tw-ordinal: ;
467
- --tw-slashed-zero: ;
468
- --tw-numeric-figure: ;
469
- --tw-numeric-spacing: ;
470
- --tw-numeric-fraction: ;
471
- --tw-ring-inset: ;
463
+ --tw-gradient-from-position: ;
464
+ --tw-gradient-via-position: ;
465
+ --tw-gradient-to-position: ;
466
+ --tw-ordinal: ;
467
+ --tw-slashed-zero: ;
468
+ --tw-numeric-figure: ;
469
+ --tw-numeric-spacing: ;
470
+ --tw-numeric-fraction: ;
471
+ --tw-ring-inset: ;
472
472
  --tw-ring-offset-width: 0px;
473
473
  --tw-ring-offset-color: #fff;
474
474
  --tw-ring-color: rgb(59 130 246 / 0.5);
@@ -476,28 +476,28 @@ video {
476
476
  --tw-ring-shadow: 0 0 #0000;
477
477
  --tw-shadow: 0 0 #0000;
478
478
  --tw-shadow-colored: 0 0 #0000;
479
- --tw-blur: ;
480
- --tw-brightness: ;
481
- --tw-contrast: ;
482
- --tw-grayscale: ;
483
- --tw-hue-rotate: ;
484
- --tw-invert: ;
485
- --tw-saturate: ;
486
- --tw-sepia: ;
487
- --tw-drop-shadow: ;
488
- --tw-backdrop-blur: ;
489
- --tw-backdrop-brightness: ;
490
- --tw-backdrop-contrast: ;
491
- --tw-backdrop-grayscale: ;
492
- --tw-backdrop-hue-rotate: ;
493
- --tw-backdrop-invert: ;
494
- --tw-backdrop-opacity: ;
495
- --tw-backdrop-saturate: ;
496
- --tw-backdrop-sepia: ;
497
- --tw-contain-size: ;
498
- --tw-contain-layout: ;
499
- --tw-contain-paint: ;
500
- --tw-contain-style: ;
479
+ --tw-blur: ;
480
+ --tw-brightness: ;
481
+ --tw-contrast: ;
482
+ --tw-grayscale: ;
483
+ --tw-hue-rotate: ;
484
+ --tw-invert: ;
485
+ --tw-saturate: ;
486
+ --tw-sepia: ;
487
+ --tw-drop-shadow: ;
488
+ --tw-backdrop-blur: ;
489
+ --tw-backdrop-brightness: ;
490
+ --tw-backdrop-contrast: ;
491
+ --tw-backdrop-grayscale: ;
492
+ --tw-backdrop-hue-rotate: ;
493
+ --tw-backdrop-invert: ;
494
+ --tw-backdrop-opacity: ;
495
+ --tw-backdrop-saturate: ;
496
+ --tw-backdrop-sepia: ;
497
+ --tw-contain-size: ;
498
+ --tw-contain-layout: ;
499
+ --tw-contain-paint: ;
500
+ --tw-contain-style: ;
501
501
  }
502
502
 
503
503
  ::backdrop {
@@ -510,19 +510,19 @@ video {
510
510
  --tw-skew-y: 0;
511
511
  --tw-scale-x: 1;
512
512
  --tw-scale-y: 1;
513
- --tw-pan-x: ;
514
- --tw-pan-y: ;
515
- --tw-pinch-zoom: ;
513
+ --tw-pan-x: ;
514
+ --tw-pan-y: ;
515
+ --tw-pinch-zoom: ;
516
516
  --tw-scroll-snap-strictness: proximity;
517
- --tw-gradient-from-position: ;
518
- --tw-gradient-via-position: ;
519
- --tw-gradient-to-position: ;
520
- --tw-ordinal: ;
521
- --tw-slashed-zero: ;
522
- --tw-numeric-figure: ;
523
- --tw-numeric-spacing: ;
524
- --tw-numeric-fraction: ;
525
- --tw-ring-inset: ;
517
+ --tw-gradient-from-position: ;
518
+ --tw-gradient-via-position: ;
519
+ --tw-gradient-to-position: ;
520
+ --tw-ordinal: ;
521
+ --tw-slashed-zero: ;
522
+ --tw-numeric-figure: ;
523
+ --tw-numeric-spacing: ;
524
+ --tw-numeric-fraction: ;
525
+ --tw-ring-inset: ;
526
526
  --tw-ring-offset-width: 0px;
527
527
  --tw-ring-offset-color: #fff;
528
528
  --tw-ring-color: rgb(59 130 246 / 0.5);
@@ -530,28 +530,62 @@ video {
530
530
  --tw-ring-shadow: 0 0 #0000;
531
531
  --tw-shadow: 0 0 #0000;
532
532
  --tw-shadow-colored: 0 0 #0000;
533
- --tw-blur: ;
534
- --tw-brightness: ;
535
- --tw-contrast: ;
536
- --tw-grayscale: ;
537
- --tw-hue-rotate: ;
538
- --tw-invert: ;
539
- --tw-saturate: ;
540
- --tw-sepia: ;
541
- --tw-drop-shadow: ;
542
- --tw-backdrop-blur: ;
543
- --tw-backdrop-brightness: ;
544
- --tw-backdrop-contrast: ;
545
- --tw-backdrop-grayscale: ;
546
- --tw-backdrop-hue-rotate: ;
547
- --tw-backdrop-invert: ;
548
- --tw-backdrop-opacity: ;
549
- --tw-backdrop-saturate: ;
550
- --tw-backdrop-sepia: ;
551
- --tw-contain-size: ;
552
- --tw-contain-layout: ;
553
- --tw-contain-paint: ;
554
- --tw-contain-style: ;
533
+ --tw-blur: ;
534
+ --tw-brightness: ;
535
+ --tw-contrast: ;
536
+ --tw-grayscale: ;
537
+ --tw-hue-rotate: ;
538
+ --tw-invert: ;
539
+ --tw-saturate: ;
540
+ --tw-sepia: ;
541
+ --tw-drop-shadow: ;
542
+ --tw-backdrop-blur: ;
543
+ --tw-backdrop-brightness: ;
544
+ --tw-backdrop-contrast: ;
545
+ --tw-backdrop-grayscale: ;
546
+ --tw-backdrop-hue-rotate: ;
547
+ --tw-backdrop-invert: ;
548
+ --tw-backdrop-opacity: ;
549
+ --tw-backdrop-saturate: ;
550
+ --tw-backdrop-sepia: ;
551
+ --tw-contain-size: ;
552
+ --tw-contain-layout: ;
553
+ --tw-contain-paint: ;
554
+ --tw-contain-style: ;
555
+ }
556
+
557
+ .container {
558
+ width: 100%;
559
+ }
560
+
561
+ @media (min-width: 640px) {
562
+ .container {
563
+ max-width: 640px;
564
+ }
565
+ }
566
+
567
+ @media (min-width: 768px) {
568
+ .container {
569
+ max-width: 768px;
570
+ }
571
+ }
572
+
573
+ @media (min-width: 1024px) {
574
+ .container {
575
+ max-width: 1024px;
576
+ }
577
+ }
578
+
579
+ @media (min-width: 1280px) {
580
+ .container {
581
+ max-width: 1280px;
582
+ }
583
+ }
584
+
585
+ @media (min-width: 1536px) {
586
+ .container {
587
+ max-width: 1536px;
588
+ }
555
589
  }
556
590
 
557
591
  .sr-only {
@@ -566,6 +600,14 @@ video {
566
600
  border-width: 0;
567
601
  }
568
602
 
603
+ .pointer-events-none {
604
+ pointer-events: none;
605
+ }
606
+
607
+ .visible {
608
+ visibility: visible;
609
+ }
610
+
569
611
  .fixed {
570
612
  position: fixed;
571
613
  }
@@ -582,6 +624,15 @@ video {
582
624
  inset: 0px;
583
625
  }
584
626
 
627
+ .inset-y-0 {
628
+ top: 0px;
629
+ bottom: 0px;
630
+ }
631
+
632
+ .left-0 {
633
+ left: 0px;
634
+ }
635
+
585
636
  .right-0 {
586
637
  right: 0px;
587
638
  }
@@ -594,6 +645,10 @@ video {
594
645
  z-index: 10;
595
646
  }
596
647
 
648
+ .col-span-1 {
649
+ grid-column: span 1 / span 1;
650
+ }
651
+
597
652
  .-mx-4 {
598
653
  margin-left: -1rem;
599
654
  margin-right: -1rem;
@@ -609,6 +664,11 @@ video {
609
664
  margin-right: auto;
610
665
  }
611
666
 
667
+ .my-2 {
668
+ margin-top: 0.5rem;
669
+ margin-bottom: 0.5rem;
670
+ }
671
+
612
672
  .-ml-0 {
613
673
  margin-left: -0px;
614
674
  }
@@ -621,6 +681,14 @@ video {
621
681
  margin-bottom: 0.75rem;
622
682
  }
623
683
 
684
+ .mb-6 {
685
+ margin-bottom: 1.5rem;
686
+ }
687
+
688
+ .ml-3 {
689
+ margin-left: 0.75rem;
690
+ }
691
+
624
692
  .mr-1 {
625
693
  margin-right: 0.25rem;
626
694
  }
@@ -661,6 +729,17 @@ video {
661
729
  margin-top: auto;
662
730
  }
663
731
 
732
+ .line-clamp-3 {
733
+ overflow: hidden;
734
+ display: -webkit-box;
735
+ -webkit-box-orient: vertical;
736
+ -webkit-line-clamp: 3;
737
+ }
738
+
739
+ .block {
740
+ display: block;
741
+ }
742
+
664
743
  .inline-block {
665
744
  display: inline-block;
666
745
  }
@@ -689,10 +768,18 @@ video {
689
768
  display: none;
690
769
  }
691
770
 
771
+ .h-10 {
772
+ height: 2.5rem;
773
+ }
774
+
692
775
  .h-16 {
693
776
  height: 4rem;
694
777
  }
695
778
 
779
+ .h-4 {
780
+ height: 1rem;
781
+ }
782
+
696
783
  .h-5 {
697
784
  height: 1.25rem;
698
785
  }
@@ -701,6 +788,10 @@ video {
701
788
  height: 1.5rem;
702
789
  }
703
790
 
791
+ .h-8 {
792
+ height: 2rem;
793
+ }
794
+
704
795
  .h-full {
705
796
  height: 100%;
706
797
  }
@@ -713,12 +804,20 @@ video {
713
804
  width: 8.333333%;
714
805
  }
715
806
 
716
- .w-16 {
717
- width: 4rem;
807
+ .w-10 {
808
+ width: 2.5rem;
809
+ }
810
+
811
+ .w-2 {
812
+ width: 0.5rem;
718
813
  }
719
814
 
720
- .w-3\/12 {
721
- width: 25%;
815
+ .w-2\/12 {
816
+ width: 16.666667%;
817
+ }
818
+
819
+ .w-4 {
820
+ width: 1rem;
722
821
  }
723
822
 
724
823
  .w-5 {
@@ -733,6 +832,15 @@ video {
733
832
  width: 58.333333%;
734
833
  }
735
834
 
835
+ .w-8 {
836
+ width: 2rem;
837
+ }
838
+
839
+ .w-fit {
840
+ width: -moz-fit-content;
841
+ width: fit-content;
842
+ }
843
+
736
844
  .w-full {
737
845
  width: 100%;
738
846
  }
@@ -773,6 +881,10 @@ video {
773
881
  flex-direction: column;
774
882
  }
775
883
 
884
+ .flex-wrap {
885
+ flex-wrap: wrap;
886
+ }
887
+
776
888
  .items-end {
777
889
  align-items: flex-end;
778
890
  }
@@ -781,6 +893,10 @@ video {
781
893
  align-items: center;
782
894
  }
783
895
 
896
+ .items-baseline {
897
+ align-items: baseline;
898
+ }
899
+
784
900
  .justify-center {
785
901
  justify-content: center;
786
902
  }
@@ -789,10 +905,18 @@ video {
789
905
  justify-content: space-between;
790
906
  }
791
907
 
908
+ .gap-1 {
909
+ gap: 0.25rem;
910
+ }
911
+
792
912
  .gap-3 {
793
913
  gap: 0.75rem;
794
914
  }
795
915
 
916
+ .gap-6 {
917
+ gap: 1.5rem;
918
+ }
919
+
796
920
  .gap-x-4 {
797
921
  -moz-column-gap: 1rem;
798
922
  column-gap: 1rem;
@@ -807,12 +931,48 @@ video {
807
931
  row-gap: 1.5rem;
808
932
  }
809
933
 
934
+ .space-x-1 > :not([hidden]) ~ :not([hidden]) {
935
+ --tw-space-x-reverse: 0;
936
+ margin-right: calc(0.25rem * var(--tw-space-x-reverse));
937
+ margin-left: calc(0.25rem * calc(1 - var(--tw-space-x-reverse)));
938
+ }
939
+
940
+ .space-x-3 > :not([hidden]) ~ :not([hidden]) {
941
+ --tw-space-x-reverse: 0;
942
+ margin-right: calc(0.75rem * var(--tw-space-x-reverse));
943
+ margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse)));
944
+ }
945
+
946
+ .space-x-4 > :not([hidden]) ~ :not([hidden]) {
947
+ --tw-space-x-reverse: 0;
948
+ margin-right: calc(1rem * var(--tw-space-x-reverse));
949
+ margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));
950
+ }
951
+
810
952
  .space-x-6 > :not([hidden]) ~ :not([hidden]) {
811
953
  --tw-space-x-reverse: 0;
812
954
  margin-right: calc(1.5rem * var(--tw-space-x-reverse));
813
955
  margin-left: calc(1.5rem * calc(1 - var(--tw-space-x-reverse)));
814
956
  }
815
957
 
958
+ .space-x-8 > :not([hidden]) ~ :not([hidden]) {
959
+ --tw-space-x-reverse: 0;
960
+ margin-right: calc(2rem * var(--tw-space-x-reverse));
961
+ margin-left: calc(2rem * calc(1 - var(--tw-space-x-reverse)));
962
+ }
963
+
964
+ .space-y-1 > :not([hidden]) ~ :not([hidden]) {
965
+ --tw-space-y-reverse: 0;
966
+ margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse)));
967
+ margin-bottom: calc(0.25rem * var(--tw-space-y-reverse));
968
+ }
969
+
970
+ .space-y-4 > :not([hidden]) ~ :not([hidden]) {
971
+ --tw-space-y-reverse: 0;
972
+ margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));
973
+ margin-bottom: calc(1rem * var(--tw-space-y-reverse));
974
+ }
975
+
816
976
  .space-y-6 > :not([hidden]) ~ :not([hidden]) {
817
977
  --tw-space-y-reverse: 0;
818
978
  margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));
@@ -852,6 +1012,12 @@ video {
852
1012
  overflow-y: auto;
853
1013
  }
854
1014
 
1015
+ .truncate {
1016
+ overflow: hidden;
1017
+ text-overflow: ellipsis;
1018
+ white-space: nowrap;
1019
+ }
1020
+
855
1021
  .whitespace-nowrap {
856
1022
  white-space: nowrap;
857
1023
  }
@@ -860,6 +1026,10 @@ video {
860
1026
  white-space: pre-wrap;
861
1027
  }
862
1028
 
1029
+ .rounded-full {
1030
+ border-radius: 9999px;
1031
+ }
1032
+
863
1033
  .rounded-lg {
864
1034
  border-radius: 0.5rem;
865
1035
  }
@@ -868,6 +1038,15 @@ video {
868
1038
  border-radius: 0.375rem;
869
1039
  }
870
1040
 
1041
+ .border-0 {
1042
+ border-width: 0px;
1043
+ }
1044
+
1045
+ .bg-blue-50 {
1046
+ --tw-bg-opacity: 1;
1047
+ background-color: rgb(239 246 255 / var(--tw-bg-opacity));
1048
+ }
1049
+
871
1050
  .bg-gray-100 {
872
1051
  --tw-bg-opacity: 1;
873
1052
  background-color: rgb(243 244 246 / var(--tw-bg-opacity));
@@ -883,24 +1062,62 @@ video {
883
1062
  background-color: rgb(107 114 128 / var(--tw-bg-opacity));
884
1063
  }
885
1064
 
1065
+ .bg-green-50 {
1066
+ --tw-bg-opacity: 1;
1067
+ background-color: rgb(240 253 244 / var(--tw-bg-opacity));
1068
+ }
1069
+
1070
+ .bg-indigo-100 {
1071
+ --tw-bg-opacity: 1;
1072
+ background-color: rgb(224 231 255 / var(--tw-bg-opacity));
1073
+ }
1074
+
886
1075
  .bg-indigo-600 {
887
1076
  --tw-bg-opacity: 1;
888
1077
  background-color: rgb(79 70 229 / var(--tw-bg-opacity));
889
1078
  }
890
1079
 
1080
+ .bg-purple-50 {
1081
+ --tw-bg-opacity: 1;
1082
+ background-color: rgb(250 245 255 / var(--tw-bg-opacity));
1083
+ }
1084
+
1085
+ .bg-red-50 {
1086
+ --tw-bg-opacity: 1;
1087
+ background-color: rgb(254 242 242 / var(--tw-bg-opacity));
1088
+ }
1089
+
891
1090
  .bg-white {
892
1091
  --tw-bg-opacity: 1;
893
1092
  background-color: rgb(255 255 255 / var(--tw-bg-opacity));
894
1093
  }
895
1094
 
1095
+ .bg-yellow-50 {
1096
+ --tw-bg-opacity: 1;
1097
+ background-color: rgb(254 252 232 / var(--tw-bg-opacity));
1098
+ }
1099
+
896
1100
  .bg-opacity-75 {
897
1101
  --tw-bg-opacity: 0.75;
898
1102
  }
899
1103
 
1104
+ .p-2 {
1105
+ padding: 0.5rem;
1106
+ }
1107
+
900
1108
  .p-4 {
901
1109
  padding: 1rem;
902
1110
  }
903
1111
 
1112
+ .p-6 {
1113
+ padding: 1.5rem;
1114
+ }
1115
+
1116
+ .px-0 {
1117
+ padding-left: 0px;
1118
+ padding-right: 0px;
1119
+ }
1120
+
904
1121
  .px-1 {
905
1122
  padding-left: 0.25rem;
906
1123
  padding-right: 0.25rem;
@@ -911,6 +1128,11 @@ video {
911
1128
  padding-right: 0.5rem;
912
1129
  }
913
1130
 
1131
+ .px-2\.5 {
1132
+ padding-left: 0.625rem;
1133
+ padding-right: 0.625rem;
1134
+ }
1135
+
914
1136
  .px-3 {
915
1137
  padding-left: 0.75rem;
916
1138
  padding-right: 0.75rem;
@@ -926,16 +1148,41 @@ video {
926
1148
  padding-right: 1.5rem;
927
1149
  }
928
1150
 
1151
+ .py-0 {
1152
+ padding-top: 0px;
1153
+ padding-bottom: 0px;
1154
+ }
1155
+
1156
+ .py-0\.5 {
1157
+ padding-top: 0.125rem;
1158
+ padding-bottom: 0.125rem;
1159
+ }
1160
+
929
1161
  .py-1 {
930
1162
  padding-top: 0.25rem;
931
1163
  padding-bottom: 0.25rem;
932
1164
  }
933
1165
 
1166
+ .py-1\.5 {
1167
+ padding-top: 0.375rem;
1168
+ padding-bottom: 0.375rem;
1169
+ }
1170
+
934
1171
  .py-2 {
935
1172
  padding-top: 0.5rem;
936
1173
  padding-bottom: 0.5rem;
937
1174
  }
938
1175
 
1176
+ .py-3 {
1177
+ padding-top: 0.75rem;
1178
+ padding-bottom: 0.75rem;
1179
+ }
1180
+
1181
+ .py-4 {
1182
+ padding-top: 1rem;
1183
+ padding-bottom: 1rem;
1184
+ }
1185
+
939
1186
  .py-5 {
940
1187
  padding-top: 1.25rem;
941
1188
  padding-bottom: 1.25rem;
@@ -945,10 +1192,22 @@ video {
945
1192
  padding-bottom: 1rem;
946
1193
  }
947
1194
 
1195
+ .pb-6 {
1196
+ padding-bottom: 1.5rem;
1197
+ }
1198
+
948
1199
  .pb-7 {
949
1200
  padding-bottom: 1.75rem;
950
1201
  }
951
1202
 
1203
+ .pl-10 {
1204
+ padding-left: 2.5rem;
1205
+ }
1206
+
1207
+ .pl-3 {
1208
+ padding-left: 0.75rem;
1209
+ }
1210
+
952
1211
  .pl-4 {
953
1212
  padding-left: 1rem;
954
1213
  }
@@ -985,6 +1244,10 @@ video {
985
1244
  vertical-align: middle;
986
1245
  }
987
1246
 
1247
+ .font-mono {
1248
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
1249
+ }
1250
+
988
1251
  .text-2xl {
989
1252
  font-size: 1.5rem;
990
1253
  line-height: 2rem;
@@ -1018,10 +1281,22 @@ video {
1018
1281
  font-weight: 500;
1019
1282
  }
1020
1283
 
1284
+ .font-normal {
1285
+ font-weight: 400;
1286
+ }
1287
+
1021
1288
  .font-semibold {
1022
1289
  font-weight: 600;
1023
1290
  }
1024
1291
 
1292
+ .uppercase {
1293
+ text-transform: uppercase;
1294
+ }
1295
+
1296
+ .italic {
1297
+ font-style: italic;
1298
+ }
1299
+
1025
1300
  .leading-5 {
1026
1301
  line-height: 1.25rem;
1027
1302
  }
@@ -1034,6 +1309,25 @@ video {
1034
1309
  line-height: 1.75rem;
1035
1310
  }
1036
1311
 
1312
+ .tracking-wider {
1313
+ letter-spacing: 0.05em;
1314
+ }
1315
+
1316
+ .text-blue-600 {
1317
+ --tw-text-opacity: 1;
1318
+ color: rgb(37 99 235 / var(--tw-text-opacity));
1319
+ }
1320
+
1321
+ .text-blue-700 {
1322
+ --tw-text-opacity: 1;
1323
+ color: rgb(29 78 216 / var(--tw-text-opacity));
1324
+ }
1325
+
1326
+ .text-blue-800 {
1327
+ --tw-text-opacity: 1;
1328
+ color: rgb(30 64 175 / var(--tw-text-opacity));
1329
+ }
1330
+
1037
1331
  .text-gray-400 {
1038
1332
  --tw-text-opacity: 1;
1039
1333
  color: rgb(156 163 175 / var(--tw-text-opacity));
@@ -1049,11 +1343,41 @@ video {
1049
1343
  color: rgb(75 85 99 / var(--tw-text-opacity));
1050
1344
  }
1051
1345
 
1346
+ .text-gray-700 {
1347
+ --tw-text-opacity: 1;
1348
+ color: rgb(55 65 81 / var(--tw-text-opacity));
1349
+ }
1350
+
1351
+ .text-gray-800 {
1352
+ --tw-text-opacity: 1;
1353
+ color: rgb(31 41 55 / var(--tw-text-opacity));
1354
+ }
1355
+
1052
1356
  .text-gray-900 {
1053
1357
  --tw-text-opacity: 1;
1054
1358
  color: rgb(17 24 39 / var(--tw-text-opacity));
1055
1359
  }
1056
1360
 
1361
+ .text-green-600 {
1362
+ --tw-text-opacity: 1;
1363
+ color: rgb(22 163 74 / var(--tw-text-opacity));
1364
+ }
1365
+
1366
+ .text-green-700 {
1367
+ --tw-text-opacity: 1;
1368
+ color: rgb(21 128 61 / var(--tw-text-opacity));
1369
+ }
1370
+
1371
+ .text-purple-800 {
1372
+ --tw-text-opacity: 1;
1373
+ color: rgb(107 33 168 / var(--tw-text-opacity));
1374
+ }
1375
+
1376
+ .text-red-800 {
1377
+ --tw-text-opacity: 1;
1378
+ color: rgb(153 27 27 / var(--tw-text-opacity));
1379
+ }
1380
+
1057
1381
  .text-sky-500 {
1058
1382
  --tw-text-opacity: 1;
1059
1383
  color: rgb(14 165 233 / var(--tw-text-opacity));
@@ -1064,6 +1388,16 @@ video {
1064
1388
  color: rgb(255 255 255 / var(--tw-text-opacity));
1065
1389
  }
1066
1390
 
1391
+ .text-yellow-600 {
1392
+ --tw-text-opacity: 1;
1393
+ color: rgb(202 138 4 / var(--tw-text-opacity));
1394
+ }
1395
+
1396
+ .text-yellow-800 {
1397
+ --tw-text-opacity: 1;
1398
+ color: rgb(133 77 14 / var(--tw-text-opacity));
1399
+ }
1400
+
1067
1401
  .shadow {
1068
1402
  --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
1069
1403
  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
@@ -1097,6 +1431,14 @@ video {
1097
1431
  --tw-ring-color: rgb(0 0 0 / var(--tw-ring-opacity));
1098
1432
  }
1099
1433
 
1434
+ .ring-blue-500\/10 {
1435
+ --tw-ring-color: rgb(59 130 246 / 0.1);
1436
+ }
1437
+
1438
+ .ring-blue-600\/20 {
1439
+ --tw-ring-color: rgb(37 99 235 / 0.2);
1440
+ }
1441
+
1100
1442
  .ring-gray-300 {
1101
1443
  --tw-ring-opacity: 1;
1102
1444
  --tw-ring-color: rgb(209 213 219 / var(--tw-ring-opacity));
@@ -1106,10 +1448,34 @@ video {
1106
1448
  --tw-ring-color: rgb(107 114 128 / 0.1);
1107
1449
  }
1108
1450
 
1451
+ .ring-gray-600\/20 {
1452
+ --tw-ring-color: rgb(75 85 99 / 0.2);
1453
+ }
1454
+
1109
1455
  .ring-gray-900\/5 {
1110
1456
  --tw-ring-color: rgb(17 24 39 / 0.05);
1111
1457
  }
1112
1458
 
1459
+ .ring-green-600\/20 {
1460
+ --tw-ring-color: rgb(22 163 74 / 0.2);
1461
+ }
1462
+
1463
+ .ring-purple-600\/20 {
1464
+ --tw-ring-color: rgb(147 51 234 / 0.2);
1465
+ }
1466
+
1467
+ .ring-red-600\/20 {
1468
+ --tw-ring-color: rgb(220 38 38 / 0.2);
1469
+ }
1470
+
1471
+ .ring-yellow-500\/10 {
1472
+ --tw-ring-color: rgb(234 179 8 / 0.1);
1473
+ }
1474
+
1475
+ .ring-yellow-600\/20 {
1476
+ --tw-ring-color: rgb(202 138 4 / 0.2);
1477
+ }
1478
+
1113
1479
  .ring-opacity-5 {
1114
1480
  --tw-ring-opacity: 0.05;
1115
1481
  }
@@ -1126,6 +1492,16 @@ video {
1126
1492
  transition-duration: 150ms;
1127
1493
  }
1128
1494
 
1495
+ .placeholder\:text-gray-400::-moz-placeholder {
1496
+ --tw-text-opacity: 1;
1497
+ color: rgb(156 163 175 / var(--tw-text-opacity));
1498
+ }
1499
+
1500
+ .placeholder\:text-gray-400::placeholder {
1501
+ --tw-text-opacity: 1;
1502
+ color: rgb(156 163 175 / var(--tw-text-opacity));
1503
+ }
1504
+
1129
1505
  .hover\:bg-gray-50:hover {
1130
1506
  --tw-bg-opacity: 1;
1131
1507
  background-color: rgb(249 250 251 / var(--tw-bg-opacity));
@@ -1146,6 +1522,26 @@ video {
1146
1522
  color: rgb(55 65 81 / var(--tw-text-opacity));
1147
1523
  }
1148
1524
 
1525
+ .hover\:text-sky-700:hover {
1526
+ --tw-text-opacity: 1;
1527
+ color: rgb(3 105 161 / var(--tw-text-opacity));
1528
+ }
1529
+
1530
+ .focus\:ring-2:focus {
1531
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
1532
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
1533
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
1534
+ }
1535
+
1536
+ .focus\:ring-inset:focus {
1537
+ --tw-ring-inset: inset;
1538
+ }
1539
+
1540
+ .focus\:ring-indigo-600:focus {
1541
+ --tw-ring-opacity: 1;
1542
+ --tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity));
1543
+ }
1544
+
1149
1545
  .focus-visible\:outline:focus-visible {
1150
1546
  outline-style: solid;
1151
1547
  }
@@ -1205,6 +1601,10 @@ video {
1205
1601
  width: 80%;
1206
1602
  }
1207
1603
 
1604
+ .sm\:w-72 {
1605
+ width: 18rem;
1606
+ }
1607
+
1208
1608
  .sm\:grid-cols-2 {
1209
1609
  grid-template-columns: repeat(2, minmax(0, 1fr));
1210
1610
  }
@@ -1225,6 +1625,12 @@ video {
1225
1625
  align-items: center;
1226
1626
  }
1227
1627
 
1628
+ .sm\:space-x-4 > :not([hidden]) ~ :not([hidden]) {
1629
+ --tw-space-x-reverse: 0;
1630
+ margin-right: calc(1rem * var(--tw-space-x-reverse));
1631
+ margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));
1632
+ }
1633
+
1228
1634
  .sm\:space-x-6 > :not([hidden]) ~ :not([hidden]) {
1229
1635
  --tw-space-x-reverse: 0;
1230
1636
  margin-right: calc(1.5rem * var(--tw-space-x-reverse));
@@ -1268,6 +1674,15 @@ video {
1268
1674
  line-height: 2.25rem;
1269
1675
  }
1270
1676
 
1677
+ .sm\:text-sm {
1678
+ font-size: 0.875rem;
1679
+ line-height: 1.25rem;
1680
+ }
1681
+
1682
+ .sm\:leading-6 {
1683
+ line-height: 1.5rem;
1684
+ }
1685
+
1271
1686
  .sm\:tracking-tight {
1272
1687
  letter-spacing: -0.025em;
1273
1688
  }
@@ -1317,6 +1732,10 @@ video {
1317
1732
  display: flex;
1318
1733
  }
1319
1734
 
1735
+ .lg\:grid-cols-3 {
1736
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1737
+ }
1738
+
1320
1739
  .lg\:items-center {
1321
1740
  align-items: center;
1322
1741
  }