stacks 0.47.2 → 0.48.1

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 (148) hide show
  1. package/buddy/art/social.png +0 -0
  2. package/buddy/package.json +1 -1
  3. package/buddy/src/commands/make.ts +27 -12
  4. package/buddy/src/commands/test.ts +40 -2
  5. package/core/actions/package.json +2 -2
  6. package/core/actions/src/helpers/utils.ts +21 -1
  7. package/core/actions/src/make.ts +37 -6
  8. package/core/actions/src/test-coverage.ts +1 -1
  9. package/core/actions/src/test-feature.ts +5 -0
  10. package/core/actions/src/test-unit.ts +5 -0
  11. package/core/ai/package.json +1 -1
  12. package/core/alias/package.json +1 -1
  13. package/core/alias/src/index.ts +8 -0
  14. package/core/arrays/package.json +1 -1
  15. package/core/auth/package.json +1 -1
  16. package/core/build/package.json +3 -3
  17. package/core/cache/package.json +3 -3
  18. package/core/chat/README.md +33 -40
  19. package/core/chat/package.json +4 -5
  20. package/core/cli/package.json +1 -1
  21. package/core/cloud/package.json +1 -1
  22. package/core/collections/package.json +1 -1
  23. package/core/config/package.json +1 -1
  24. package/core/dashboard/package.json +1 -1
  25. package/core/database/package.json +1 -1
  26. package/core/datetime/package.json +1 -1
  27. package/core/desktop/package.json +1 -1
  28. package/core/docs/node_modules/.bin/vitepress +2 -2
  29. package/core/docs/package.json +2 -2
  30. package/core/domains/package.json +1 -1
  31. package/core/drivers/package.json +1 -1
  32. package/core/email/README.md +101 -35
  33. package/core/email/package.json +10 -2
  34. package/core/email/src/utils/config.ts +1 -1
  35. package/core/error-handling/package.json +2 -2
  36. package/core/events/package.json +1 -1
  37. package/core/git/package.json +1 -1
  38. package/core/health/package.json +1 -1
  39. package/core/lint/node_modules/.bin/eslint +2 -2
  40. package/core/lint/package.json +3 -3
  41. package/core/logging/package.json +1 -1
  42. package/core/modules/package.json +1 -1
  43. package/core/notifications/README.md +7 -2
  44. package/core/notifications/package.json +5 -1
  45. package/core/notifications/src/drivers/chat.ts +1 -0
  46. package/core/notifications/src/drivers/email.ts +1 -0
  47. package/core/notifications/src/drivers/push.ts +1 -0
  48. package/core/notifications/src/drivers/sms.ts +1 -0
  49. package/core/notifications/src/index.ts +37 -9
  50. package/core/notifications/src/utils/config.ts +2 -2
  51. package/core/notifications/tests/chat/Slack.test.ts +5 -4
  52. package/core/notifications/tests/email/Mailgun.test.ts +4 -3
  53. package/core/notifications/tests/email/Sendgrid.test.ts +3 -3
  54. package/core/notifications/tests/sms/Twilio.test.ts +3 -3
  55. package/core/objects/package.json +1 -1
  56. package/core/path/package.json +1 -1
  57. package/core/path/src/index.ts +25 -0
  58. package/core/payments/package.json +1 -1
  59. package/core/push/README.md +24 -42
  60. package/core/push/package.json +1 -1
  61. package/core/realtime/package.json +1 -1
  62. package/core/router/package.json +1 -1
  63. package/core/search-engine/package.json +1 -1
  64. package/core/security/package.json +1 -1
  65. package/core/server/package.json +1 -1
  66. package/core/sms/README.md +82 -35
  67. package/core/sms/package.json +10 -4
  68. package/core/storage/package.json +1 -1
  69. package/core/storage/src/index.ts +13 -0
  70. package/core/strings/README.md +10 -2
  71. package/core/strings/package.json +4 -2
  72. package/core/strings/src/case.ts +14 -0
  73. package/core/strings/src/index.ts +4 -97
  74. package/core/strings/src/pluralize.ts +1 -0
  75. package/core/strings/src/utils.ts +80 -0
  76. package/core/strings/src/validation.ts +182 -0
  77. package/core/tables/README.md +109 -0
  78. package/core/tables/examples/vue/App.vue +12 -0
  79. package/core/tables/examples/vue/favicon.png +0 -0
  80. package/core/tables/examples/vue/index.html +20 -0
  81. package/core/tables/examples/web/favicon.png +0 -0
  82. package/core/tables/examples/web/index.html +13 -0
  83. package/core/tables/node_modules/.bin/mkdist +17 -0
  84. package/core/tables/node_modules/.bin/tsc +17 -0
  85. package/core/tables/node_modules/.bin/tsserver +17 -0
  86. package/core/tables/node_modules/.bin/unbuild +17 -0
  87. package/core/tables/package.json +97 -0
  88. package/core/tables/src/cli/index.ts +1 -0
  89. package/core/tables/src/components/Demo.vue +89 -0
  90. package/core/tables/src/components/README.md +111 -0
  91. package/core/tables/src/components/Table.vue +342 -0
  92. package/core/tables/src/components/TableBody.vue +33 -0
  93. package/core/tables/src/components/TableCellActionItems.vue +9 -0
  94. package/core/tables/src/components/TableFilters.vue +703 -0
  95. package/core/tables/src/components/TableHead.vue +87 -0
  96. package/core/tables/src/components/TablePagination.vue +146 -0
  97. package/core/tables/src/components/TableRow.vue +78 -0
  98. package/core/tables/src/components/TableSearch.vue +38 -0
  99. package/core/tables/src/components/Tooltip.vue +10 -0
  100. package/core/tables/src/config/tables.ts +1 -0
  101. package/core/tables/src/docs/index.md +0 -0
  102. package/core/tables/src/functions/README.md +8 -0
  103. package/core/tables/src/functions/dark.ts +3 -0
  104. package/core/tables/src/functions/index.ts +2 -0
  105. package/core/tables/src/functions/table.ts +180 -0
  106. package/core/tables/tests/example.test.ts +7 -0
  107. package/core/testing/node_modules/.bin/vitest +2 -2
  108. package/core/testing/package.json +9 -6
  109. package/core/types/node_modules/.bin/vitepress +2 -2
  110. package/core/types/package.json +3 -3
  111. package/core/types/src/cli.ts +10 -2
  112. package/core/types/src/hashing.ts +15 -0
  113. package/core/types/src/index.ts +2 -0
  114. package/core/types/src/notifications.ts +1 -0
  115. package/core/types/src/reactivity.ts +3 -0
  116. package/core/types/src/tables.ts +48 -0
  117. package/core/ui/node_modules/.bin/vue-tsc +2 -2
  118. package/core/ui/package.json +2 -2
  119. package/core/utils/package.json +1 -1
  120. package/core/x-ray/package.json +1 -1
  121. package/package.json +3 -2
  122. package/tsconfig.json +8 -0
  123. package/vitest.config.ts +2 -0
  124. package/core/notifications/src/drivers/chat/discord.ts +0 -15
  125. package/core/notifications/src/drivers/chat/index.ts +0 -2
  126. package/core/notifications/src/drivers/chat/slack.ts +0 -22
  127. package/core/notifications/src/drivers/email/actions/send.ts +0 -36
  128. package/core/notifications/src/drivers/email/emailjs.ts +0 -21
  129. package/core/notifications/src/drivers/email/index.ts +0 -9
  130. package/core/notifications/src/drivers/email/mailgun.ts +0 -19
  131. package/core/notifications/src/drivers/email/mailjet.ts +0 -18
  132. package/core/notifications/src/drivers/email/mandrill.ts +0 -17
  133. package/core/notifications/src/drivers/email/netcore.ts +0 -17
  134. package/core/notifications/src/drivers/email/nodemailer.ts +0 -21
  135. package/core/notifications/src/drivers/email/postmark.ts +0 -17
  136. package/core/notifications/src/drivers/email/sendgrid.ts +0 -18
  137. package/core/notifications/src/drivers/email/ses.ts +0 -19
  138. package/core/notifications/src/drivers/push/expo.ts +0 -19
  139. package/core/notifications/src/drivers/push/fcm.ts +0 -19
  140. package/core/notifications/src/drivers/sms/gupshup.ts +0 -21
  141. package/core/notifications/src/drivers/sms/index.ts +0 -8
  142. package/core/notifications/src/drivers/sms/nexmo.ts +0 -22
  143. package/core/notifications/src/drivers/sms/plivo.ts +0 -22
  144. package/core/notifications/src/drivers/sms/sms77.ts +0 -21
  145. package/core/notifications/src/drivers/sms/sns.ts +0 -22
  146. package/core/notifications/src/drivers/sms/telnyx.ts +0 -22
  147. package/core/notifications/src/drivers/sms/termii.ts +0 -21
  148. package/core/notifications/src/drivers/sms/twilio.ts +0 -22
@@ -0,0 +1,703 @@
1
+ <script setup lang="ts">
2
+ import { ref } from 'vue-demi'
3
+ import Multiselect from '@vueform/multiselect'
4
+
5
+ interface Props {
6
+ filterValues: object | any // the Meilisearch index you would like to use for this table
7
+ }
8
+
9
+ const {
10
+ filterValues,
11
+ } = defineProps<Props>()
12
+
13
+ const multiselect = ref(null)
14
+
15
+ const multiselectComputed: any = computed(() => {
16
+ if (multiselect.value)
17
+ return multiselect.value
18
+ })
19
+
20
+ const { searchFilters, type, table } = await useTable()
21
+
22
+ const activeFilters = await searchFilters(type.value)
23
+
24
+ const filterValue = ref({})
25
+ const filterLength = ref(0)
26
+
27
+ const allFilters = activeFilters.map((filter: string) => {
28
+ const filterName = filter.split('_')
29
+ const name = []
30
+
31
+ for (let i = 0; i < filterName.length; i++)
32
+ name[i] = filterName[i].charAt(0).toUpperCase() + filterName[i].substring(1)
33
+
34
+ // Directly return the joined string
35
+ return { name: name.join(' '), column: snakeCase(name.join(' ')) }
36
+ })
37
+
38
+ function getFilters(filterKey: string): any {
39
+ return filterValues[filterKey]
40
+ }
41
+
42
+ function snakeCase(char: string) {
43
+ return char.replace(/\W+/g, ' ')
44
+ .split(/ |\B(?=[A-Z])/)
45
+ .map(word => word.toLowerCase())
46
+ .join('_')
47
+ }
48
+
49
+ async function applyFilters() {
50
+ let length = 0
51
+ const mappedFilters = Object.keys(filterValue.value).map((key) => {
52
+ length = length += 1
53
+
54
+ filterLength.value = length
55
+
56
+ return filterValue.value[key].map((filter: any) => {
57
+ return `${key} = ${filter}`
58
+ })
59
+ })
60
+
61
+ table.filterValue = mappedFilters
62
+ table.currentPage = 1
63
+ }
64
+
65
+ async function clearAllFilters() {
66
+ table.filterValue = []
67
+ table.currentPage = 1
68
+
69
+ filterValue.value = {}
70
+ filterLength.value = 0
71
+
72
+ if (multiselectComputed.value) {
73
+ for (let index = 0; index < multiselectComputed.value.length; index++) {
74
+ if (multiselectComputed.value[index])
75
+ multiselectComputed.value[index].clear()
76
+ }
77
+ }
78
+ }
79
+
80
+ function modifyFilters(name: string, value: any, id: number) {
81
+ filterValue.value[name] = [...value]
82
+ }
83
+ </script>
84
+
85
+ <template>
86
+ <div class="bg-white max-w-7xl mx-auto">
87
+ <!-- Filters -->
88
+ <section
89
+ aria-labelledby="filter-heading"
90
+ class="relative z-10 border-t border-b border-gray-200 grid items-center"
91
+ >
92
+ <h2
93
+ id="filter-heading"
94
+ class="sr-only"
95
+ >
96
+ Filters
97
+ </h2>
98
+ <div class="relative col-start-1 row-start-1 py-4">
99
+ <div class="max-w-7xl mx-auto flex space-x-6 divide-x divide-gray-200 text-sm px-4 sm:px-6 lg:px-8">
100
+ <div>
101
+ <button
102
+ type="button"
103
+ class="group text-gray-700 font-medium flex items-center"
104
+ aria-controls="disclosure-1"
105
+ aria-expanded="false"
106
+ >
107
+ <!-- Heroicon name: solid/filter -->
108
+ <svg
109
+ class="flex-none w-5 h-5 mr-2 text-gray-400 group-hover:text-gray-500"
110
+ aria-hidden="true"
111
+ xmlns="http://www.w3.org/2000/svg"
112
+ viewBox="0 0 20 20"
113
+ fill="currentColor"
114
+ >
115
+ <path
116
+ fill-rule="evenodd"
117
+ d="M3 3a1 1 0 011-1h12a1 1 0 011 1v3a1 1 0 01-.293.707L12 11.414V15a1 1 0 01-.293.707l-2 2A1 1 0 018 17v-5.586L3.293 6.707A1 1 0 013 6V3z"
118
+ clip-rule="evenodd"
119
+ />
120
+ </svg>
121
+ {{ filterLength }} Filters
122
+ </button>
123
+ </div>
124
+ <div class="pl-6">
125
+ <button
126
+ type="button"
127
+ class="text-gray-500"
128
+ @click="clearAllFilters"
129
+ >
130
+ Clear all
131
+ </button>
132
+ </div>
133
+ </div>
134
+ </div>
135
+ <div
136
+ id="disclosure-1"
137
+ class="border-t border-gray-200 py-10"
138
+ >
139
+ <div class="max-w-7xl mx-auto px-4 text-sm sm:px-6 md:gap-x-6 lg:px-8">
140
+ <div class="grid grid-cols-1 gap-y-10 auto-rows-min md:grid-cols-4 md:gap-x-6">
141
+ <fieldset
142
+ v-for="(filter, index) in allFilters"
143
+ :key="index"
144
+ >
145
+ <legend class="block font-medium">
146
+ {{ filter.name }}
147
+ </legend>
148
+ <div class="pt-6 space-y-6 sm:pt-4 sm:space-y-4">
149
+ <div class="flex items-center text-base sm:text-sm">
150
+ <Multiselect
151
+ ref="multiselect"
152
+ :options="getFilters(filter.column)"
153
+ mode="tags"
154
+ :close-on-select="false"
155
+ :searchable="true"
156
+ :create-option="true"
157
+ @input="modifyFilters(filter.column, $event, index)"
158
+ />
159
+ </div>
160
+ </div>
161
+ </fieldset>
162
+ </div>
163
+
164
+ <div class="flex justify-end">
165
+ <button
166
+ type="button"
167
+ class="inline-flex items-center px-3 py-1.5 border border-transparent text-xs font-medium rounded-full shadow-sm text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500"
168
+ @click="applyFilters"
169
+ >
170
+ Apply filters
171
+ </button>
172
+ </div>
173
+ </div>
174
+ </div>
175
+ </section>
176
+ </div>
177
+ </template>
178
+
179
+ <style>
180
+ /*
181
+ Ensure the default browser behavior of the `hidden` attribute.
182
+ */
183
+
184
+ [hidden] {
185
+ display: none;
186
+ }
187
+
188
+ *, ::before, ::after {
189
+ --tw-translate-x: 0;
190
+ --tw-translate-y: 0;
191
+ --tw-rotate: 0;
192
+ --tw-skew-x: 0;
193
+ --tw-skew-y: 0;
194
+ --tw-scale-x: 1;
195
+ --tw-scale-y: 1;
196
+ --tw-pan-x: ;
197
+ --tw-pan-y: ;
198
+ --tw-pinch-zoom: ;
199
+ --tw-scroll-snap-strictness: proximity;
200
+ --tw-ordinal: ;
201
+ --tw-slashed-zero: ;
202
+ --tw-numeric-figure: ;
203
+ --tw-numeric-spacing: ;
204
+ --tw-numeric-fraction: ;
205
+ --tw-ring-inset: ;
206
+ --tw-ring-offset-width: 0px;
207
+ --tw-ring-offset-color: #fff;
208
+ --tw-ring-color: rgb(59 130 246 / 0.5);
209
+ --tw-ring-offset-shadow: 0 0 #0000;
210
+ --tw-ring-shadow: 0 0 #0000;
211
+ --tw-shadow: 0 0 #0000;
212
+ --tw-shadow-colored: 0 0 #0000;
213
+ --tw-blur: ;
214
+ --tw-brightness: ;
215
+ --tw-contrast: ;
216
+ --tw-grayscale: ;
217
+ --tw-hue-rotate: ;
218
+ --tw-invert: ;
219
+ --tw-saturate: ;
220
+ --tw-sepia: ;
221
+ --tw-drop-shadow: ;
222
+ --tw-backdrop-blur: ;
223
+ --tw-backdrop-brightness: ;
224
+ --tw-backdrop-contrast: ;
225
+ --tw-backdrop-grayscale: ;
226
+ --tw-backdrop-hue-rotate: ;
227
+ --tw-backdrop-invert: ;
228
+ --tw-backdrop-opacity: ;
229
+ --tw-backdrop-saturate: ;
230
+ --tw-backdrop-sepia: ;
231
+ }
232
+
233
+ .form-input,.form-textarea,.form-select,.form-multiselect {
234
+ -webkit-appearance: none;
235
+ -moz-appearance: none;
236
+ appearance: none;
237
+ background-color: #fff;
238
+ border-color: #6b7280;
239
+ border-width: 1px;
240
+ border-radius: 0px;
241
+ padding-top: 0.5rem;
242
+ padding-right: 0.75rem;
243
+ padding-bottom: 0.5rem;
244
+ padding-left: 0.75rem;
245
+ font-size: 1rem;
246
+ line-height: 1.5rem;
247
+ --tw-shadow: 0 0 #0000;
248
+ }
249
+
250
+ .form-input:focus, .form-textarea:focus, .form-select:focus, .form-multiselect:focus {
251
+ outline: 2px solid transparent;
252
+ outline-offset: 2px;
253
+ --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);
254
+ --tw-ring-offset-width: 0px;
255
+ --tw-ring-offset-color: #fff;
256
+ --tw-ring-color: #2563eb;
257
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
258
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
259
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
260
+ border-color: #2563eb;
261
+ }
262
+
263
+ .form-input::-moz-placeholder, .form-textarea::-moz-placeholder {
264
+ color: #6b7280;
265
+ opacity: 1;
266
+ }
267
+
268
+ .form-input:-ms-input-placeholder, .form-textarea:-ms-input-placeholder {
269
+ color: #6b7280;
270
+ opacity: 1;
271
+ }
272
+
273
+ .form-input::placeholder,.form-textarea::placeholder {
274
+ color: #6b7280;
275
+ opacity: 1;
276
+ }
277
+
278
+ .form-input::-webkit-datetime-edit-fields-wrapper {
279
+ padding: 0;
280
+ }
281
+
282
+ .form-input::-webkit-date-and-time-value {
283
+ min-height: 1.5em;
284
+ }
285
+
286
+ .form-input::-webkit-datetime-edit,.form-input::-webkit-datetime-edit-year-field,.form-input::-webkit-datetime-edit-month-field,.form-input::-webkit-datetime-edit-day-field,.form-input::-webkit-datetime-edit-hour-field,.form-input::-webkit-datetime-edit-minute-field,.form-input::-webkit-datetime-edit-second-field,.form-input::-webkit-datetime-edit-millisecond-field,.form-input::-webkit-datetime-edit-meridiem-field {
287
+ padding-top: 0;
288
+ padding-bottom: 0;
289
+ }
290
+
291
+ .form-select {
292
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");
293
+ background-position: right 0.5rem center;
294
+ background-repeat: no-repeat;
295
+ background-size: 1.5em 1.5em;
296
+ padding-right: 2.5rem;
297
+ -webkit-print-color-adjust: exact;
298
+ color-adjust: exact;
299
+ print-color-adjust: exact;
300
+ }
301
+
302
+ .form-checkbox,.form-radio {
303
+ -webkit-appearance: none;
304
+ -moz-appearance: none;
305
+ appearance: none;
306
+ padding: 0;
307
+ -webkit-print-color-adjust: exact;
308
+ color-adjust: exact;
309
+ print-color-adjust: exact;
310
+ display: inline-block;
311
+ vertical-align: middle;
312
+ background-origin: border-box;
313
+ -webkit-user-select: none;
314
+ -moz-user-select: none;
315
+ -ms-user-select: none;
316
+ user-select: none;
317
+ flex-shrink: 0;
318
+ height: 1rem;
319
+ width: 1rem;
320
+ color: #2563eb;
321
+ background-color: #fff;
322
+ border-color: #6b7280;
323
+ border-width: 1px;
324
+ --tw-shadow: 0 0 #0000;
325
+ }
326
+
327
+ .form-checkbox {
328
+ border-radius: 0px;
329
+ }
330
+
331
+ .form-radio {
332
+ border-radius: 100%;
333
+ }
334
+
335
+ .form-checkbox:focus,.form-radio:focus {
336
+ outline: 2px solid transparent;
337
+ outline-offset: 2px;
338
+ --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);
339
+ --tw-ring-offset-width: 2px;
340
+ --tw-ring-offset-color: #fff;
341
+ --tw-ring-color: #2563eb;
342
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
343
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
344
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
345
+ }
346
+
347
+ .form-checkbox:checked,.form-radio:checked {
348
+ border-color: transparent;
349
+ background-color: currentColor;
350
+ background-size: 100% 100%;
351
+ background-position: center;
352
+ background-repeat: no-repeat;
353
+ }
354
+
355
+ .form-checkbox:checked {
356
+ background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e");
357
+ }
358
+
359
+ .form-radio:checked {
360
+ background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e");
361
+ }
362
+
363
+ .form-checkbox:checked:hover,.form-checkbox:checked:focus,.form-radio:checked:hover,.form-radio:checked:focus {
364
+ border-color: transparent;
365
+ background-color: currentColor;
366
+ }
367
+
368
+ .form-checkbox:indeterminate {
369
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");
370
+ border-color: transparent;
371
+ background-color: currentColor;
372
+ background-size: 100% 100%;
373
+ background-position: center;
374
+ background-repeat: no-repeat;
375
+ }
376
+
377
+ .form-checkbox:indeterminate:hover,.form-checkbox:indeterminate:focus {
378
+ border-color: transparent;
379
+ background-color: currentColor;
380
+ }
381
+
382
+ .mx-auto {
383
+ margin-left: auto;
384
+ margin-right: auto;
385
+ }
386
+
387
+ .mt-2 {
388
+ margin-top: 0.5rem;
389
+ }
390
+
391
+ .mt-4 {
392
+ margin-top: 1rem;
393
+ }
394
+
395
+ .mt-8 {
396
+ margin-top: 2rem;
397
+ }
398
+
399
+ .mt-1 {
400
+ margin-top: 0.25rem;
401
+ }
402
+
403
+ .ml-2 {
404
+ margin-left: 0.5rem;
405
+ }
406
+
407
+ .mt-0 {
408
+ margin-top: 0px;
409
+ }
410
+
411
+ .block {
412
+ display: block;
413
+ }
414
+
415
+ .flex {
416
+ display: flex;
417
+ }
418
+
419
+ .inline-flex {
420
+ display: inline-flex;
421
+ }
422
+
423
+ .grid {
424
+ display: grid;
425
+ }
426
+
427
+ .h-24 {
428
+ height: 6rem;
429
+ }
430
+
431
+ .w-full {
432
+ width: 100%;
433
+ }
434
+
435
+ .max-w-xl {
436
+ max-width: 36rem;
437
+ }
438
+
439
+ .max-w-md {
440
+ max-width: 28rem;
441
+ }
442
+
443
+ .max-w-4xl {
444
+ max-width: 56rem;
445
+ }
446
+
447
+ .grid-cols-1 {
448
+ grid-template-columns: repeat(1, minmax(0, 1fr));
449
+ }
450
+
451
+ .grid-cols-2 {
452
+ grid-template-columns: repeat(2, minmax(0, 1fr));
453
+ }
454
+
455
+ .items-start {
456
+ align-items: flex-start;
457
+ }
458
+
459
+ .items-center {
460
+ align-items: center;
461
+ }
462
+
463
+ .gap-6 {
464
+ gap: 1.5rem;
465
+ }
466
+
467
+ .space-x-4 > :not([hidden]) ~ :not([hidden]) {
468
+ --tw-space-x-reverse: 0;
469
+ margin-right: calc(1rem * var(--tw-space-x-reverse));
470
+ margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));
471
+ }
472
+
473
+ .divide-y > :not([hidden]) ~ :not([hidden]) {
474
+ --tw-divide-y-reverse: 0;
475
+ border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
476
+ border-bottom-width: calc(1px * var(--tw-divide-y-reverse));
477
+ }
478
+
479
+ .rounded-md {
480
+ border-radius: 0.375rem;
481
+ }
482
+
483
+ .rounded {
484
+ border-radius: 0.25rem;
485
+ }
486
+
487
+ .border-0 {
488
+ border-width: 0px;
489
+ }
490
+
491
+ .border-2 {
492
+ border-width: 2px;
493
+ }
494
+
495
+ .border-b-2 {
496
+ border-bottom-width: 2px;
497
+ }
498
+
499
+ .border-gray-300 {
500
+ --tw-border-opacity: 1;
501
+ border-color: rgb(209 213 219 / var(--tw-border-opacity));
502
+ }
503
+
504
+ .border-gray-200 {
505
+ --tw-border-opacity: 1;
506
+ border-color: rgb(229 231 235 / var(--tw-border-opacity));
507
+ }
508
+
509
+ .border-transparent {
510
+ border-color: transparent;
511
+ }
512
+
513
+ .bg-gray-100 {
514
+ --tw-bg-opacity: 1;
515
+ background-color: rgb(243 244 246 / var(--tw-bg-opacity));
516
+ }
517
+
518
+ .bg-gray-200 {
519
+ --tw-bg-opacity: 1;
520
+ background-color: rgb(229 231 235 / var(--tw-bg-opacity));
521
+ }
522
+
523
+ .px-6 {
524
+ padding-left: 1.5rem;
525
+ padding-right: 1.5rem;
526
+ }
527
+
528
+ .py-12 {
529
+ padding-top: 3rem;
530
+ padding-bottom: 3rem;
531
+ }
532
+
533
+ .py-8 {
534
+ padding-top: 2rem;
535
+ padding-bottom: 2rem;
536
+ }
537
+
538
+ .px-0\.5 {
539
+ padding-left: 0.125rem;
540
+ padding-right: 0.125rem;
541
+ }
542
+
543
+ .px-0 {
544
+ padding-left: 0px;
545
+ padding-right: 0px;
546
+ }
547
+
548
+ .text-4xl {
549
+ font-size: 2.25rem;
550
+ line-height: 2.5rem;
551
+ }
552
+
553
+ .text-lg {
554
+ font-size: 1.125rem;
555
+ line-height: 1.75rem;
556
+ }
557
+
558
+ .text-2xl {
559
+ font-size: 1.5rem;
560
+ line-height: 2rem;
561
+ }
562
+
563
+ .font-bold {
564
+ font-weight: 700;
565
+ }
566
+
567
+ .text-gray-900 {
568
+ --tw-text-opacity: 1;
569
+ color: rgb(17 24 39 / var(--tw-text-opacity));
570
+ }
571
+
572
+ .text-gray-600 {
573
+ --tw-text-opacity: 1;
574
+ color: rgb(75 85 99 / var(--tw-text-opacity));
575
+ }
576
+
577
+ .text-gray-700 {
578
+ --tw-text-opacity: 1;
579
+ color: rgb(55 65 81 / var(--tw-text-opacity));
580
+ }
581
+
582
+ .text-indigo-600 {
583
+ --tw-text-opacity: 1;
584
+ color: rgb(79 70 229 / var(--tw-text-opacity));
585
+ }
586
+
587
+ .text-black {
588
+ --tw-text-opacity: 1;
589
+ color: rgb(0 0 0 / var(--tw-text-opacity));
590
+ }
591
+
592
+ .text-gray-500 {
593
+ --tw-text-opacity: 1;
594
+ color: rgb(107 114 128 / var(--tw-text-opacity));
595
+ }
596
+
597
+ .underline {
598
+ -webkit-text-decoration-line: underline;
599
+ text-decoration-line: underline;
600
+ }
601
+
602
+ .antialiased {
603
+ -webkit-font-smoothing: antialiased;
604
+ -moz-osx-font-smoothing: grayscale;
605
+ }
606
+
607
+ .shadow-sm {
608
+ --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
609
+ --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
610
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
611
+ }
612
+
613
+ .focus\:border-indigo-300:focus {
614
+ --tw-border-opacity: 1;
615
+ border-color: rgb(165 180 252 / var(--tw-border-opacity));
616
+ }
617
+
618
+ .focus\:border-black:focus {
619
+ --tw-border-opacity: 1;
620
+ border-color: rgb(0 0 0 / var(--tw-border-opacity));
621
+ }
622
+
623
+ .focus\:border-gray-300:focus {
624
+ --tw-border-opacity: 1;
625
+ border-color: rgb(209 213 219 / var(--tw-border-opacity));
626
+ }
627
+
628
+ .focus\:border-gray-500:focus {
629
+ --tw-border-opacity: 1;
630
+ border-color: rgb(107 114 128 / var(--tw-border-opacity));
631
+ }
632
+
633
+ .focus\:border-transparent:focus {
634
+ border-color: transparent;
635
+ }
636
+
637
+ .focus\:bg-white:focus {
638
+ --tw-bg-opacity: 1;
639
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity));
640
+ }
641
+
642
+ .focus\:bg-gray-200:focus {
643
+ --tw-bg-opacity: 1;
644
+ background-color: rgb(229 231 235 / var(--tw-bg-opacity));
645
+ }
646
+
647
+ .focus\:ring:focus {
648
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
649
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);
650
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
651
+ }
652
+
653
+ .focus\:ring-0:focus {
654
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
655
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);
656
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
657
+ }
658
+
659
+ .focus\:ring-1:focus {
660
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
661
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
662
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
663
+ }
664
+
665
+ .focus\:ring-indigo-200:focus {
666
+ --tw-ring-opacity: 1;
667
+ --tw-ring-color: rgb(199 210 254 / var(--tw-ring-opacity));
668
+ }
669
+
670
+ .focus\:ring-black:focus {
671
+ --tw-ring-opacity: 1;
672
+ --tw-ring-color: rgb(0 0 0 / var(--tw-ring-opacity));
673
+ }
674
+
675
+ .focus\:ring-gray-500:focus {
676
+ --tw-ring-opacity: 1;
677
+ --tw-ring-color: rgb(107 114 128 / var(--tw-ring-opacity));
678
+ }
679
+
680
+ .focus\:ring-opacity-50:focus {
681
+ --tw-ring-opacity: 0.5;
682
+ }
683
+
684
+ .focus\:ring-offset-0:focus {
685
+ --tw-ring-offset-width: 0px;
686
+ }
687
+
688
+ .focus\:ring-offset-2:focus {
689
+ --tw-ring-offset-width: 2px;
690
+ }
691
+
692
+ @media (min-width: 768px) {
693
+ .md\:max-w-4xl {
694
+ max-width: 56rem;
695
+ }
696
+
697
+ .md\:grid-cols-2 {
698
+ grid-template-columns: repeat(2, minmax(0, 1fr));
699
+ }
700
+ }
701
+ </style>
702
+
703
+ <style src="@vueform/multiselect/themes/default.css"></style>