datacontract-cli 0.10.2__py3-none-any.whl → 0.10.4__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.

Potentially problematic release.


This version of datacontract-cli might be problematic. Click here for more details.

Files changed (33) hide show
  1. datacontract/breaking/breaking.py +12 -0
  2. datacontract/breaking/breaking_rules.py +4 -0
  3. datacontract/catalog/catalog.py +3 -0
  4. datacontract/cli.py +36 -8
  5. datacontract/data_contract.py +62 -128
  6. datacontract/export/avro_converter.py +16 -2
  7. datacontract/export/bigquery_converter.py +106 -0
  8. datacontract/export/go_converter.py +98 -0
  9. datacontract/export/html_export.py +6 -1
  10. datacontract/export/jsonschema_converter.py +45 -5
  11. datacontract/export/sql_converter.py +1 -0
  12. datacontract/export/sql_type_converter.py +42 -1
  13. datacontract/imports/avro_importer.py +14 -1
  14. datacontract/imports/bigquery_importer.py +166 -0
  15. datacontract/imports/jsonschema_importer.py +150 -0
  16. datacontract/model/data_contract_specification.py +55 -1
  17. datacontract/publish/publish.py +32 -0
  18. datacontract/templates/datacontract.html +37 -346
  19. datacontract/templates/index.html +233 -0
  20. datacontract/templates/partials/datacontract_information.html +66 -0
  21. datacontract/templates/partials/datacontract_servicelevels.html +253 -0
  22. datacontract/templates/partials/datacontract_terms.html +44 -0
  23. datacontract/templates/partials/definition.html +99 -0
  24. datacontract/templates/partials/example.html +27 -0
  25. datacontract/templates/partials/model_field.html +97 -0
  26. datacontract/templates/partials/server.html +144 -0
  27. datacontract/templates/style/output.css +94 -13
  28. {datacontract_cli-0.10.2.dist-info → datacontract_cli-0.10.4.dist-info}/METADATA +139 -96
  29. {datacontract_cli-0.10.2.dist-info → datacontract_cli-0.10.4.dist-info}/RECORD +33 -20
  30. {datacontract_cli-0.10.2.dist-info → datacontract_cli-0.10.4.dist-info}/LICENSE +0 -0
  31. {datacontract_cli-0.10.2.dist-info → datacontract_cli-0.10.4.dist-info}/WHEEL +0 -0
  32. {datacontract_cli-0.10.2.dist-info → datacontract_cli-0.10.4.dist-info}/entry_points.txt +0 -0
  33. {datacontract_cli-0.10.2.dist-info → datacontract_cli-0.10.4.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,99 @@
1
+ <div class="mt-3 flow-root">
2
+ <div class="-mx-4 -my-2 overflow-x-auto sm:-mx-6 lg:-mx-8">
3
+ <div class="inline-block min-w-full py-2 align-middle sm:px-6 lg:px-8">
4
+ <div class="overflow-hidden shadow ring-1 ring-black ring-opacity-5 sm:rounded-lg">
5
+
6
+ <table class="min-w-full divide-y divide-gray-300">
7
+ <thead class="bg-gray-50">
8
+ <tr>
9
+ <th scope="colgroup" colspan="3" class="py-2 pl-4 pr-3 text-left font-semibold text-gray-900 sm:pl-6">
10
+ <span>{{ definition_name }}</span>
11
+ <span class="inline-flex items-center rounded-md bg-gray-50 px-2 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10">{{ definition.domain }}</span>
12
+ <div class="text-sm font-medium text-gray-500">{{ definition.description }}</div>
13
+ </th>
14
+ </tr>
15
+ </thead>
16
+ <tbody class="divide-y divide-gray-200 bg-white">
17
+ <tr>
18
+ <td class="whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12">
19
+ <div class="py-2 text-sm">
20
+ {% if definition.title %}
21
+ <div>{{ definition.title }}</div>
22
+ {% endif %}
23
+ <div class="font-mono">{{ definition.name }}</div>
24
+ </div>
25
+ </td>
26
+ <td class="whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12">
27
+ <div class="py-2 text-sm">
28
+ {{ definition.type }}
29
+ {% if definition.format %}
30
+ <span class="inline-flex items-center rounded-md bg-blue-50 px-1 py-1 text-xs font-medium text-blue-600 ring-1 ring-inset ring-blue-500/10 mr-1 mt-1">{{ definition.format }}</span>
31
+ {% endif %}
32
+ </div>
33
+ </td>
34
+ <td class="px-3 py-2 text-sm text-gray-500 w-9/12">
35
+ {% if definition.example %}
36
+ <div class="mt-1">
37
+ <span class="text-gray-600 font-medium">Example:</span> <span class="font-mono">{{ definition.example }}</span>
38
+ </div>
39
+ {% endif %}
40
+ {% if definition.tags %}
41
+ <div>
42
+ <span class="text-gray-600 font-medium">Tags:</span>
43
+ {% for tag in definition.tags %}
44
+ <span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">{{ tag }}</span>
45
+ {% endfor %}
46
+ </div>
47
+ {% endif %}
48
+ {% if definition.enum %}
49
+ <div class="py-2 text-sm">
50
+ <span class="text-gray-600 font-medium">Enum:</span>
51
+ {% for value in definition.enum %}
52
+ <span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">{{ value }}</span>
53
+ {% endfor %}
54
+ </div>
55
+ {% endif %}
56
+ <div>
57
+ {% if definition.minLength %}
58
+ <span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">minLength:{{ definition.minLength }}</span>
59
+ {% endif %}
60
+ {% if definition.maxLength %}
61
+ <span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">maxLength:{{ definition.maxLength }}</span>
62
+ {% endif %}
63
+ {% if definition.pattern %}
64
+ <span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">pattern:{{ definition.pattern }}</span>
65
+ {% endif %}
66
+ {% if definition.precision %}
67
+ <span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">precision:{{ definition.precision }}</span>
68
+ {% endif %}
69
+ {% if definition.scale %}
70
+ <span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">scale:{{ definition.scale }}</span>
71
+ {% endif %}
72
+ {% if definition.minimum %}
73
+ <span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">minimum:{{ definition.minimum }}</span>
74
+ {% endif %}
75
+ {% if definition.exclusiveMinimum %}
76
+ <span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">exclusiveMinimum:{{ definition.exclusiveMinimum }}</span>
77
+ {% endif %}
78
+ {% if definition.maximum %}
79
+ <span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">maximum:{{ definition.maximum }}</span>
80
+ {% endif %}
81
+ {% if definition.exclusiveMaximum %}
82
+ <span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">exclusiveMaximum:{{ definition.exclusiveMaximum }}</span>
83
+ {% endif %}
84
+ {% if definition.classification %}
85
+ <span class="inline-flex items-center rounded-md bg-blue-50 px-1 py-1 text-xs font-medium text-blue-600 ring-1 ring-inset ring-blue-500/10 mr-1 mt-1">{{ definition.classification }}</span>
86
+ {% endif %}
87
+ {% if definition.pii %}
88
+ <span class="inline-flex items-center rounded-md bg-yellow-50 px-1 py-1 text-xs font-medium text-yellow-600 ring-1 ring-inset ring-yellow-500/10 mr-1 mt-1">PII</span>
89
+ {% endif %}
90
+ </div>
91
+ </td>
92
+
93
+ </tr>
94
+ </tbody>
95
+ </table>
96
+ </div>
97
+ </div>
98
+ </div>
99
+ </div>
@@ -0,0 +1,27 @@
1
+ <div class="mt-3 flow-root">
2
+ <div class="-mx-4 -my-2 overflow-x-auto sm:-mx-6 lg:-mx-8">
3
+ <div class="inline-block min-w-full py-2 align-middle sm:px-6 lg:px-8">
4
+ <div class="overflow-hidden shadow ring-1 ring-black ring-opacity-5 sm:rounded-lg">
5
+
6
+ <table class="min-w-full divide-y divide-gray-300">
7
+ <thead class="bg-gray-50">
8
+ <tr>
9
+ <th scope="colgroup" colspan="3" class="py-2 pl-4 pr-3 text-left font-semibold text-gray-900 sm:pl-6">
10
+ <span>{{ example.model }}</span>
11
+ <span class="inline-flex items-center rounded-md bg-gray-50 px-2 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10">{{ example.type }}</span>
12
+ <div class="text-sm font-medium text-gray-500">{{ example.description }}</div>
13
+ </th>
14
+ </tr>
15
+ </thead>
16
+ <tbody class="divide-y divide-gray-200 bg-white">
17
+ <tr>
18
+ <td class="whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-12/12">
19
+ <pre>{{ example.data }}</pre>
20
+ </td>
21
+ </tr>
22
+ </tbody>
23
+ </table>
24
+ </div>
25
+ </div>
26
+ </div>
27
+ </div>
@@ -0,0 +1,97 @@
1
+ {% if nested %}
2
+ <tr class="bg-gray-50">
3
+ <td class="whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12 flex items-center gap-x-4">
4
+ {# poor mans approach to indenting things a bit #}
5
+ {% for i in range(0,level)%}
6
+ <div class="w-2">&nbsp;</div>
7
+ {% endfor %}
8
+ <div>
9
+ &#x21b3;
10
+ </div>
11
+ {% else %}
12
+ <tr>
13
+ <td class="whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12">
14
+ {% endif %}
15
+ <div class="py-2 text-sm">
16
+ {% if field.title %}
17
+ <div>{{ field.title }}</div>
18
+ {% endif %}
19
+ <div class="font-mono">{{ field_name }}</div>
20
+ </div>
21
+ </td>
22
+ <td class="whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12">
23
+ {% if field.type %}
24
+ {{ field.type }}
25
+ {% endif %}
26
+ </td>
27
+ <td class="px-3 py-2 text-sm text-gray-500 w-7/12">
28
+ {% if field.description %}
29
+ <div class="text-gray-500">{{ field.description }}</div>
30
+ {% else %}
31
+ <div class="text-gray-400">No description</div>
32
+ {% endif %}
33
+
34
+ {% if field.example %}
35
+ <div class="mt-1 italic">
36
+ Example: <span class="font-mono">{{ field.example }}</span>
37
+ </div>
38
+ {% endif %}
39
+
40
+ <div>
41
+ {% if field.primary %}
42
+ <span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">primary</span>
43
+ {% endif %}
44
+ {% if field.required %}
45
+ <span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">required</span>
46
+ {% endif %}
47
+ {% if field.unique %}
48
+ <span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">unique</span>
49
+ {% endif %}
50
+ {% if field.format %}
51
+ <span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">format:{{ field.format }}</span>
52
+ {% endif %}
53
+ {% if field.minLength %}
54
+ <span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">minLength:{{ field.minLength }}</span>
55
+ {% endif %}
56
+ {% if field.maxLength %}
57
+ <span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">maxLength:{{ field.maxLength }}</span>
58
+ {% endif %}
59
+ {% if field.pattern %}
60
+ <span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">pattern:{{ field.pattern }}</span>
61
+ {% endif %}
62
+ {% if field.precision %}
63
+ <span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">precision:{{ field.precision }}</span>
64
+ {% endif %}
65
+ {% if field.scale %}
66
+ <span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">scale:{{ field.scale }}</span>
67
+ {% endif %}
68
+ {% if field.minimum %}
69
+ <span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">minimum:{{ field.minimum }}</span>
70
+ {% endif %}
71
+ {% if field.exclusiveMinimum %}
72
+ <span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">exclusiveMinimum:{{ field.exclusiveMinimum }}</span>
73
+ {% endif %}
74
+ {% if field.maximum %}
75
+ <span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">maximum:{{ field.maximum }}</span>
76
+ {% endif %}
77
+ {% if field.exclusiveMaximum %}
78
+ <span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">exclusiveMaximum:{{ field.exclusiveMaximum }}</span>
79
+ {% endif %}
80
+ {% if field.classification %}
81
+ <span class="inline-flex items-center rounded-md bg-blue-50 px-1 py-1 text-xs font-medium text-blue-600 ring-1 ring-inset ring-blue-500/10 mr-1 mt-1">{{ field.classification }}</span>
82
+ {% endif %}
83
+ {% if field.pii %}
84
+ <span class="inline-flex items-center rounded-md bg-yellow-50 px-1 py-1 text-xs font-medium text-yellow-600 ring-1 ring-inset ring-yellow-500/10 mr-1 mt-1">PII</span>
85
+ {% endif %}
86
+ </div>
87
+ </td>
88
+ </tr>
89
+
90
+ {% if field.fields %}
91
+ {% for field_name, field in field.fields.items() %}
92
+ {{ render_partial('partials/model_field.html', nested = True, field_name=field_name, field = field, level = level + 1) }}
93
+ {% endfor %}
94
+ <!-- Mark the end of the contained fields -->
95
+ <tr style="--tw-divide-y-reverse: 2">
96
+ </tr>
97
+ {% endif %}
@@ -0,0 +1,144 @@
1
+ <li class="relative flex gap-x-6 px-4 py-5 sm:px-6">
2
+ <div class="flex items-center gap-x-4">
3
+ <div class="hidden sm:flex sm:flex-col">
4
+ <dt class="text-sm font-medium text-gray-500">Server</dt>
5
+ <dd class="mt-1 text-sm text-gray-900">{{server_name}}</dd>
6
+ </div>
7
+ </div>
8
+
9
+ {% if server.type %}
10
+ <div class="flex items-center gap-x-4">
11
+ <div class="hidden sm:flex sm:flex-col">
12
+ <dt class="text-sm font-medium text-gray-500">Type</dt>
13
+ <dd class="mt-1 text-sm text-gray-900">{{server.type}}</dd>
14
+ </div>
15
+ </div>
16
+ {% endif %}
17
+
18
+ {% if server.project %}
19
+ <div class="flex items-center gap-x-4">
20
+ <div class="hidden sm:flex sm:flex-col">
21
+ <dt class="text-sm font-medium text-gray-500">Project</dt>
22
+ <dd class="mt-1 text-sm text-gray-900">{{server.project}}</dd>
23
+ </div>
24
+ </div>
25
+ {% endif %}
26
+
27
+ {% if server.dataset %}
28
+ <div class="flex items-center gap-x-4">
29
+ <div class="hidden sm:flex sm:flex-col">
30
+ <dt class="text-sm font-medium text-gray-500">Dataset</dt>
31
+ <dd class="mt-1 text-sm text-gray-900">{{server.dataset}}</dd>
32
+ </div>
33
+ </div>
34
+ {% endif %}
35
+
36
+ {% if server.location %}
37
+ <div class="flex items-center gap-x-4">
38
+ <div class="hidden sm:flex sm:flex-col">
39
+ <dt class="text-sm font-medium text-gray-500">Location</dt>
40
+ <dd class="mt-1 text-sm text-gray-900">{{server.location}}</dd>
41
+ </div>
42
+ </div>
43
+ {% endif %}
44
+
45
+ {% if server.endpointUrl %}
46
+ <div class="flex items-center gap-x-4">
47
+ <div class="hidden sm:flex sm:flex-col">
48
+ <dt class="text-sm font-medium text-gray-500">Endpoint URL</dt>
49
+ <dd class="mt-1 text-sm text-gray-900">{{server.endpointUrl}}</dd>
50
+ </div>
51
+ </div>
52
+ {% endif %}
53
+
54
+ {% if server.account %}
55
+ <div class="flex items-center gap-x-4">
56
+ <div class="hidden sm:flex sm:flex-col">
57
+ <dt class="text-sm font-medium text-gray-500">Account</dt>
58
+ <dd class="mt-1 text-sm text-gray-900">{{server.account}}</dd>
59
+ </div>
60
+ </div>
61
+ {% endif %}
62
+
63
+ {% if server.host %}
64
+ <div class="flex items-center gap-x-4">
65
+ <div class="hidden sm:flex sm:flex-col">
66
+ <dt class="text-sm font-medium text-gray-500">Host</dt>
67
+ <dd class="mt-1 text-sm text-gray-900">{{server.host}}</dd>
68
+ </div>
69
+ </div>
70
+ {% endif %}
71
+
72
+ {% if server.port %}
73
+ <div class="flex items-center gap-x-4">
74
+ <div class="hidden sm:flex sm:flex-col">
75
+ <dt class="text-sm font-medium text-gray-500">Port</dt>
76
+ <dd class="mt-1 text-sm text-gray-900">{{server.port}}</dd>
77
+ </div>
78
+ </div>
79
+ {% endif %}
80
+
81
+ {% if server.catalog %}
82
+ <div class="flex items-center gap-x-4">
83
+ <div class="hidden sm:flex sm:flex-col">
84
+ <dt class="text-sm font-medium text-gray-500">Catalog</dt>
85
+ <dd class="mt-1 text-sm text-gray-900">{{server.catalog}}</dd>
86
+ </div>
87
+ </div>
88
+ {% endif %}
89
+
90
+ {% if server.database %}
91
+ <div class="flex items-center gap-x-4">
92
+ <div class="hidden sm:flex sm:flex-col">
93
+ <dt class="text-sm font-medium text-gray-500">Database</dt>
94
+ <dd class="mt-1 text-sm text-gray-900">{{server.database}}</dd>
95
+ </div>
96
+ </div>
97
+ {% endif %}
98
+
99
+ {% if server.schema_ %}
100
+ <div class="flex items-center gap-x-4">
101
+ <div class="hidden sm:flex sm:flex-col">
102
+ <dt class="text-sm font-medium text-gray-500">Schema</dt>
103
+ <dd class="mt-1 text-sm text-gray-900">{{server.schema_}}</dd>
104
+ </div>
105
+ </div>
106
+ {% endif %}
107
+
108
+ {% if server.topic %}
109
+ <div class="flex items-center gap-x-4">
110
+ <div class="hidden sm:flex sm:flex-col">
111
+ <dt class="text-sm font-medium text-gray-500">Topic</dt>
112
+ <dd class="mt-1 text-sm text-gray-900">{{server.topic}}</dd>
113
+ </div>
114
+ </div>
115
+ {% endif %}
116
+
117
+ {% if server.path %}
118
+ <div class="flex items-center gap-x-4">
119
+ <div class="hidden sm:flex sm:flex-col">
120
+ <dt class="text-sm font-medium text-gray-500">Path</dt>
121
+ <dd class="mt-1 text-sm text-gray-900">{{server.path}}</dd>
122
+ </div>
123
+ </div>
124
+ {% endif %}
125
+
126
+ {% if server.format %}
127
+ <div class="flex items-center gap-x-4">
128
+ <div class="hidden sm:flex sm:flex-col">
129
+ <dt class="text-sm font-medium text-gray-500">Format</dt>
130
+ <dd class="mt-1 text-sm text-gray-900">{{server.format}}</dd>
131
+ </div>
132
+ </div>
133
+ {% endif %}
134
+
135
+ {% if server.delimiter %}
136
+ <div class="flex items-center gap-x-4">
137
+ <div class="hidden sm:flex sm:flex-col">
138
+ <dt class="text-sm font-medium text-gray-500">Delimiter</dt>
139
+ <dd class="mt-1 text-sm text-gray-900">{{server.delimiter}}</dd>
140
+ </div>
141
+ </div>
142
+ {% endif %}
143
+
144
+ </li>
@@ -566,6 +566,14 @@ video {
566
566
  border-width: 0;
567
567
  }
568
568
 
569
+ .pointer-events-none {
570
+ pointer-events: none;
571
+ }
572
+
573
+ .visible {
574
+ visibility: visible;
575
+ }
576
+
569
577
  .fixed {
570
578
  position: fixed;
571
579
  }
@@ -582,6 +590,15 @@ video {
582
590
  inset: 0px;
583
591
  }
584
592
 
593
+ .inset-y-0 {
594
+ top: 0px;
595
+ bottom: 0px;
596
+ }
597
+
598
+ .left-0 {
599
+ left: 0px;
600
+ }
601
+
585
602
  .right-0 {
586
603
  right: 0px;
587
604
  }
@@ -672,6 +689,10 @@ video {
672
689
  -webkit-line-clamp: 3;
673
690
  }
674
691
 
692
+ .block {
693
+ display: block;
694
+ }
695
+
675
696
  .inline-block {
676
697
  display: inline-block;
677
698
  }
@@ -736,6 +757,10 @@ video {
736
757
  width: 2.5rem;
737
758
  }
738
759
 
760
+ .w-2 {
761
+ width: 0.5rem;
762
+ }
763
+
739
764
  .w-2\/12 {
740
765
  width: 16.666667%;
741
766
  }
@@ -756,6 +781,14 @@ video {
756
781
  width: 58.333333%;
757
782
  }
758
783
 
784
+ .w-72 {
785
+ width: 18rem;
786
+ }
787
+
788
+ .w-9\/12 {
789
+ width: 75%;
790
+ }
791
+
759
792
  .w-full {
760
793
  width: 100%;
761
794
  }
@@ -833,11 +866,6 @@ video {
833
866
  column-gap: 1rem;
834
867
  }
835
868
 
836
- .gap-x-6 {
837
- -moz-column-gap: 1.5rem;
838
- column-gap: 1.5rem;
839
- }
840
-
841
869
  .gap-y-6 {
842
870
  row-gap: 1.5rem;
843
871
  }
@@ -925,6 +953,10 @@ video {
925
953
  border-radius: 0.375rem;
926
954
  }
927
955
 
956
+ .border-0 {
957
+ border-width: 0px;
958
+ }
959
+
928
960
  .bg-blue-50 {
929
961
  --tw-bg-opacity: 1;
930
962
  background-color: rgb(239 246 255 / var(--tw-bg-opacity));
@@ -1002,6 +1034,11 @@ video {
1002
1034
  padding-bottom: 0.25rem;
1003
1035
  }
1004
1036
 
1037
+ .py-1\.5 {
1038
+ padding-top: 0.375rem;
1039
+ padding-bottom: 0.375rem;
1040
+ }
1041
+
1005
1042
  .py-2 {
1006
1043
  padding-top: 0.5rem;
1007
1044
  padding-bottom: 0.5rem;
@@ -1024,6 +1061,14 @@ video {
1024
1061
  padding-bottom: 1.75rem;
1025
1062
  }
1026
1063
 
1064
+ .pl-10 {
1065
+ padding-left: 2.5rem;
1066
+ }
1067
+
1068
+ .pl-3 {
1069
+ padding-left: 0.75rem;
1070
+ }
1071
+
1027
1072
  .pl-4 {
1028
1073
  padding-left: 1rem;
1029
1074
  }
@@ -1215,10 +1260,6 @@ video {
1215
1260
  --tw-ring-opacity: 0.05;
1216
1261
  }
1217
1262
 
1218
- .filter {
1219
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
1220
- }
1221
-
1222
1263
  .transition-all {
1223
1264
  transition-property: all;
1224
1265
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
@@ -1231,6 +1272,16 @@ video {
1231
1272
  transition-duration: 150ms;
1232
1273
  }
1233
1274
 
1275
+ .placeholder\:text-gray-400::-moz-placeholder {
1276
+ --tw-text-opacity: 1;
1277
+ color: rgb(156 163 175 / var(--tw-text-opacity));
1278
+ }
1279
+
1280
+ .placeholder\:text-gray-400::placeholder {
1281
+ --tw-text-opacity: 1;
1282
+ color: rgb(156 163 175 / var(--tw-text-opacity));
1283
+ }
1284
+
1234
1285
  .hover\:bg-gray-50:hover {
1235
1286
  --tw-bg-opacity: 1;
1236
1287
  background-color: rgb(249 250 251 / var(--tw-bg-opacity));
@@ -1251,6 +1302,21 @@ video {
1251
1302
  color: rgb(55 65 81 / var(--tw-text-opacity));
1252
1303
  }
1253
1304
 
1305
+ .focus\:ring-2:focus {
1306
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
1307
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
1308
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
1309
+ }
1310
+
1311
+ .focus\:ring-inset:focus {
1312
+ --tw-ring-inset: inset;
1313
+ }
1314
+
1315
+ .focus\:ring-indigo-600:focus {
1316
+ --tw-ring-opacity: 1;
1317
+ --tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity));
1318
+ }
1319
+
1254
1320
  .focus-visible\:outline:focus-visible {
1255
1321
  outline-style: solid;
1256
1322
  }
@@ -1318,10 +1384,6 @@ video {
1318
1384
  flex-direction: row;
1319
1385
  }
1320
1386
 
1321
- .sm\:flex-col {
1322
- flex-direction: column;
1323
- }
1324
-
1325
1387
  .sm\:flex-wrap {
1326
1388
  flex-wrap: wrap;
1327
1389
  }
@@ -1330,12 +1392,22 @@ video {
1330
1392
  align-items: center;
1331
1393
  }
1332
1394
 
1395
+ .sm\:items-baseline {
1396
+ align-items: baseline;
1397
+ }
1398
+
1333
1399
  .sm\:space-x-6 > :not([hidden]) ~ :not([hidden]) {
1334
1400
  --tw-space-x-reverse: 0;
1335
1401
  margin-right: calc(1.5rem * var(--tw-space-x-reverse));
1336
1402
  margin-left: calc(1.5rem * calc(1 - var(--tw-space-x-reverse)));
1337
1403
  }
1338
1404
 
1405
+ .sm\:space-x-8 > :not([hidden]) ~ :not([hidden]) {
1406
+ --tw-space-x-reverse: 0;
1407
+ margin-right: calc(2rem * var(--tw-space-x-reverse));
1408
+ margin-left: calc(2rem * calc(1 - var(--tw-space-x-reverse)));
1409
+ }
1410
+
1339
1411
  .sm\:truncate {
1340
1412
  overflow: hidden;
1341
1413
  text-overflow: ellipsis;
@@ -1373,6 +1445,15 @@ video {
1373
1445
  line-height: 2.25rem;
1374
1446
  }
1375
1447
 
1448
+ .sm\:text-sm {
1449
+ font-size: 0.875rem;
1450
+ line-height: 1.25rem;
1451
+ }
1452
+
1453
+ .sm\:leading-6 {
1454
+ line-height: 1.5rem;
1455
+ }
1456
+
1376
1457
  .sm\:tracking-tight {
1377
1458
  letter-spacing: -0.025em;
1378
1459
  }