@budibase/bbui 0.0.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 (149) hide show
  1. package/LICENSE +375 -0
  2. package/README.md +42 -0
  3. package/dist/bbui.es.js +8 -0
  4. package/dist/bbui.es.js.map +1 -0
  5. package/package.json +94 -0
  6. package/src/Accordion/Accordion.svelte +58 -0
  7. package/src/ActionButton/ActionButton.svelte +132 -0
  8. package/src/ActionGroup/ActionGroup.svelte +26 -0
  9. package/src/ActionMenu/ActionMenu.svelte +43 -0
  10. package/src/Actions/ClickOutside.svench.svx +30 -0
  11. package/src/Actions/PositionDropdown.svench.svx +81 -0
  12. package/src/Actions/autoresize_textarea.js +14 -0
  13. package/src/Actions/click_outside.js +76 -0
  14. package/src/Actions/position_dropdown.js +116 -0
  15. package/src/Avatar/Avatar.svelte +63 -0
  16. package/src/Badge/Badge.svelte +42 -0
  17. package/src/Banner/Banner.svelte +72 -0
  18. package/src/Banner/BannerDisplay.svelte +41 -0
  19. package/src/Button/Button.svelte +118 -0
  20. package/src/Button/Button.svench +138 -0
  21. package/src/ButtonGroup/ButtonGroup.svelte +30 -0
  22. package/src/ClearButton/ClearButton.svelte +19 -0
  23. package/src/ColorPicker/ColorPicker.svelte +304 -0
  24. package/src/DetailSummary/DetailSummary.svelte +92 -0
  25. package/src/Divider/Divider.svelte +28 -0
  26. package/src/Drawer/Drawer.svelte +113 -0
  27. package/src/Drawer/Drawer.svench +42 -0
  28. package/src/Drawer/DrawerContent.svelte +45 -0
  29. package/src/FancyForm/FancyButton.svelte +30 -0
  30. package/src/FancyForm/FancyButtonRadio.svelte +70 -0
  31. package/src/FancyForm/FancyCheckbox.svelte +53 -0
  32. package/src/FancyForm/FancyField.svelte +126 -0
  33. package/src/FancyForm/FancyFieldLabel.svelte +25 -0
  34. package/src/FancyForm/FancyForm.svelte +40 -0
  35. package/src/FancyForm/FancyInput.svelte +109 -0
  36. package/src/FancyForm/FancySelect.svelte +147 -0
  37. package/src/FancyForm/index.js +6 -0
  38. package/src/Form/Checkbox.svelte +23 -0
  39. package/src/Form/Combobox.svelte +45 -0
  40. package/src/Form/Core/Checkbox.svelte +69 -0
  41. package/src/Form/Core/CheckboxGroup.svelte +68 -0
  42. package/src/Form/Core/Combobox.svelte +142 -0
  43. package/src/Form/Core/DatePicker.svelte +265 -0
  44. package/src/Form/Core/Dropzone.svelte +482 -0
  45. package/src/Form/Core/EnvDropdown.svelte +276 -0
  46. package/src/Form/Core/File.svelte +115 -0
  47. package/src/Form/Core/InputDropdown.svelte +235 -0
  48. package/src/Form/Core/Multiselect.svelte +99 -0
  49. package/src/Form/Core/Picker.svelte +314 -0
  50. package/src/Form/Core/PickerDropdown.svelte +431 -0
  51. package/src/Form/Core/RadioGroup.svelte +65 -0
  52. package/src/Form/Core/RichTextField.svelte +42 -0
  53. package/src/Form/Core/Search.svelte +105 -0
  54. package/src/Form/Core/Select.svelte +90 -0
  55. package/src/Form/Core/Slider.svelte +86 -0
  56. package/src/Form/Core/Stepper.svelte +172 -0
  57. package/src/Form/Core/Switch.svelte +35 -0
  58. package/src/Form/Core/TextArea.svelte +78 -0
  59. package/src/Form/Core/TextField.svelte +115 -0
  60. package/src/Form/Core/index.js +16 -0
  61. package/src/Form/DatePicker.svelte +46 -0
  62. package/src/Form/Dropzone.svelte +44 -0
  63. package/src/Form/EnvDropdown.svelte +50 -0
  64. package/src/Form/Field.svelte +42 -0
  65. package/src/Form/FieldLabel.svelte +32 -0
  66. package/src/Form/File.svelte +37 -0
  67. package/src/Form/Input.svelte +45 -0
  68. package/src/Form/InputDropdown.svelte +53 -0
  69. package/src/Form/Multiselect.svelte +49 -0
  70. package/src/Form/PickerDropdown.svelte +131 -0
  71. package/src/Form/RadioGroup.svelte +42 -0
  72. package/src/Form/RichTextField.svelte +36 -0
  73. package/src/Form/Search.svelte +36 -0
  74. package/src/Form/Select.svelte +67 -0
  75. package/src/Form/Slider.svelte +24 -0
  76. package/src/Form/Stepper.svelte +45 -0
  77. package/src/Form/TextArea.svelte +34 -0
  78. package/src/Form/Toggle.svelte +22 -0
  79. package/src/Icon/Icon.svelte +94 -0
  80. package/src/Icon/IconAvatar.svelte +61 -0
  81. package/src/IconPicker/IconPicker.svelte +184 -0
  82. package/src/IconSideNav/IconSideNav.svelte +14 -0
  83. package/src/IconSideNav/IconSideNavItem.svelte +56 -0
  84. package/src/InlineAlert/InlineAlert.svelte +63 -0
  85. package/src/Input/CopyInput.svelte +59 -0
  86. package/src/Label/Label.svelte +31 -0
  87. package/src/Layout/Layout.svelte +94 -0
  88. package/src/Layout/Page.svelte +101 -0
  89. package/src/Link/Link.svelte +27 -0
  90. package/src/List/List.svelte +28 -0
  91. package/src/List/ListItem.svelte +93 -0
  92. package/src/Markdown/MarkdownEditor.svelte +60 -0
  93. package/src/Markdown/MarkdownViewer.svelte +70 -0
  94. package/src/Markdown/SpectrumMDE.svelte +184 -0
  95. package/src/Menu/Item.svelte +94 -0
  96. package/src/Menu/Menu.svelte +7 -0
  97. package/src/Menu/Menu.svench +19 -0
  98. package/src/Menu/Section.svelte +10 -0
  99. package/src/Menu/Separator.svelte +1 -0
  100. package/src/Modal/Content.svelte +6 -0
  101. package/src/Modal/CustomContent.svelte +37 -0
  102. package/src/Modal/Modal.svelte +178 -0
  103. package/src/Modal/Modal.svench +116 -0
  104. package/src/Modal/ModalContent.svelte +190 -0
  105. package/src/Modal/QuizModal.svelte +53 -0
  106. package/src/Notification/Notification.svelte +74 -0
  107. package/src/Notification/NotificationDisplay.svelte +43 -0
  108. package/src/Pagination/Pagination.svelte +57 -0
  109. package/src/Popover/Popover.svelte +95 -0
  110. package/src/Popover/Popover.svench +120 -0
  111. package/src/ProgressBar/ProgressBar.svelte +67 -0
  112. package/src/ProgressCircle/ProgressCircle.svelte +62 -0
  113. package/src/SideNavigation/Item.svelte +59 -0
  114. package/src/SideNavigation/Navigation.svelte +12 -0
  115. package/src/StatusLight/StatusLight.svelte +80 -0
  116. package/src/Stores/Notifications.svench.svx +78 -0
  117. package/src/Stores/banner.js +65 -0
  118. package/src/Stores/notifications.js +84 -0
  119. package/src/Table/ArrayRenderer.svelte +18 -0
  120. package/src/Table/AttachmentRenderer.svelte +73 -0
  121. package/src/Table/BoldRenderer.svelte +15 -0
  122. package/src/Table/BooleanRenderer.svelte +42 -0
  123. package/src/Table/CellRenderer.svelte +70 -0
  124. package/src/Table/CodeRenderer.svelte +14 -0
  125. package/src/Table/DateTimeRenderer.svelte +29 -0
  126. package/src/Table/InternalRenderer.svelte +24 -0
  127. package/src/Table/RelationshipRenderer.svelte +35 -0
  128. package/src/Table/SelectEditRenderer.svelte +28 -0
  129. package/src/Table/StringRenderer.svelte +22 -0
  130. package/src/Table/Table.svelte +657 -0
  131. package/src/Table/index.js +1 -0
  132. package/src/Tabs/Tab.svelte +88 -0
  133. package/src/Tabs/Tabs.svelte +130 -0
  134. package/src/Tags/Tag.svelte +43 -0
  135. package/src/Tags/Tags.svelte +17 -0
  136. package/src/Tooltip/Tooltip.svelte +34 -0
  137. package/src/Tooltip/TooltipWrapper.svelte +60 -0
  138. package/src/TreeView/Item.svelte +41 -0
  139. package/src/TreeView/Tree.svelte +16 -0
  140. package/src/Typography/Body.svelte +22 -0
  141. package/src/Typography/Code.svelte +10 -0
  142. package/src/Typography/Detail.svelte +19 -0
  143. package/src/Typography/Heading.svelte +24 -0
  144. package/src/bbui.css +118 -0
  145. package/src/context.js +4 -0
  146. package/src/helpers.js +116 -0
  147. package/src/index.js +109 -0
  148. package/src/spectrum-icons-rollup.js +31 -0
  149. package/src/spectrum-icons-vite.js +31 -0
@@ -0,0 +1,482 @@
1
+ <script>
2
+ import "@spectrum-css/dropzone/dist/index-vars.css"
3
+ import "@spectrum-css/typography/dist/index-vars.css"
4
+ import "@spectrum-css/illustratedmessage/dist/index-vars.css"
5
+ import { createEventDispatcher } from "svelte"
6
+ import { uuid } from "../../helpers"
7
+ import Icon from "../../Icon/Icon.svelte"
8
+ import Link from "../../Link/Link.svelte"
9
+ import Tag from "../../Tags/Tag.svelte"
10
+ import Tags from "../../Tags/Tags.svelte"
11
+
12
+ const BYTES_IN_KB = 1000
13
+ const BYTES_IN_MB = 1000000
14
+
15
+ export let value = []
16
+ export let id = null
17
+ export let disabled = false
18
+ export let compact = false
19
+ export let fileSizeLimit = BYTES_IN_MB * 20
20
+ export let processFiles = null
21
+ export let deleteAttachments = null
22
+ export let handleFileTooLarge = null
23
+ export let handleTooManyFiles = null
24
+ export let gallery = true
25
+ export let error = null
26
+ export let fileTags = []
27
+ export let maximum = null
28
+ export let extensions = "*"
29
+
30
+ const dispatch = createEventDispatcher()
31
+ const imageExtensions = [
32
+ "png",
33
+ "tiff",
34
+ "gif",
35
+ "raw",
36
+ "jpg",
37
+ "jpeg",
38
+ "svg",
39
+ "bmp",
40
+ "jfif",
41
+ ]
42
+
43
+ const fieldId = id || uuid()
44
+ let selectedImageIdx = 0
45
+ let fileDragged = false
46
+ let selectedUrl
47
+ let fileInput
48
+ $: selectedImage = value?.[selectedImageIdx] ?? null
49
+ $: fileCount = value?.length ?? 0
50
+ $: isImage =
51
+ imageExtensions.includes(selectedImage?.extension?.toLowerCase()) ||
52
+ selectedImage?.type?.startsWith("image")
53
+
54
+ $: {
55
+ if (selectedImage?.url) {
56
+ selectedUrl = selectedImage?.url
57
+ } else if (selectedImage) {
58
+ try {
59
+ let reader = new FileReader()
60
+ reader.readAsDataURL(selectedImage)
61
+ reader.onload = e => {
62
+ selectedUrl = e.target.result
63
+ }
64
+ } catch (error) {
65
+ selectedUrl = null
66
+ }
67
+ }
68
+ }
69
+
70
+ $: showDropzone =
71
+ (!maximum || (maximum && value?.length < maximum)) && !disabled
72
+
73
+ async function processFileList(fileList) {
74
+ if (
75
+ handleFileTooLarge &&
76
+ Array.from(fileList).some(file => file.size >= fileSizeLimit)
77
+ ) {
78
+ handleFileTooLarge(fileSizeLimit, value)
79
+ return
80
+ }
81
+
82
+ const fileCount = fileList.length + value.length
83
+ if (handleTooManyFiles && maximum && fileCount > maximum) {
84
+ handleTooManyFiles(maximum)
85
+ return
86
+ }
87
+
88
+ if (processFiles) {
89
+ const processedFiles = await processFiles(fileList)
90
+ const newValue = [...value, ...processedFiles]
91
+ dispatch("change", newValue)
92
+ selectedImageIdx = newValue.length - 1
93
+ } else {
94
+ dispatch("change", fileList)
95
+ }
96
+ }
97
+
98
+ async function removeFile() {
99
+ dispatch(
100
+ "change",
101
+ value.filter((x, idx) => idx !== selectedImageIdx)
102
+ )
103
+ if (deleteAttachments) {
104
+ await deleteAttachments(
105
+ value.filter((x, idx) => idx === selectedImageIdx).map(item => item.key)
106
+ )
107
+ fileInput.value = ""
108
+ }
109
+ selectedImageIdx = 0
110
+ }
111
+
112
+ function navigateLeft() {
113
+ selectedImageIdx -= 1
114
+ }
115
+
116
+ function navigateRight() {
117
+ selectedImageIdx += 1
118
+ }
119
+
120
+ function handleFile(evt) {
121
+ processFileList(evt.target.files)
122
+ }
123
+
124
+ function handleDragOver(evt) {
125
+ evt.preventDefault()
126
+ fileDragged = true
127
+ }
128
+
129
+ function handleDragLeave(evt) {
130
+ evt.preventDefault()
131
+ fileDragged = false
132
+ }
133
+
134
+ function handleDrop(evt) {
135
+ evt.preventDefault()
136
+ processFileList(evt.dataTransfer.files)
137
+ fileDragged = false
138
+ }
139
+ </script>
140
+
141
+ <div class="container" class:compact>
142
+ {#if selectedImage}
143
+ {#if gallery}
144
+ <div class="gallery">
145
+ <div class="title">
146
+ <div class="filename">
147
+ {#if selectedUrl}
148
+ <Link
149
+ target="_blank"
150
+ download={selectedImage.name}
151
+ href={selectedUrl}
152
+ >
153
+ {selectedImage.name}
154
+ </Link>
155
+ {:else}
156
+ {selectedImage.name}
157
+ {/if}
158
+ </div>
159
+ {#if selectedImage.size}
160
+ <div class="filesize">
161
+ {#if selectedImage.size <= BYTES_IN_MB}
162
+ {`${selectedImage.size / BYTES_IN_KB} KB`}
163
+ {:else}{`${selectedImage.size / BYTES_IN_MB} MB`}{/if}
164
+ </div>
165
+ {/if}
166
+ {#if !disabled}
167
+ <div class="delete-button" on:click={removeFile}>
168
+ <Icon name="Close" />
169
+ </div>
170
+ {/if}
171
+ </div>
172
+ {#if isImage}
173
+ <img alt="preview" src={selectedUrl} />
174
+ {:else}
175
+ <div class="placeholder">
176
+ <div class="extension">
177
+ {selectedImage.name || "Unknown file"}
178
+ </div>
179
+ <div>Preview not supported</div>
180
+ </div>
181
+ {/if}
182
+ <div
183
+ class="nav left"
184
+ class:visible={selectedImageIdx > 0}
185
+ on:click={navigateLeft}
186
+ >
187
+ <Icon name="ChevronLeft" />
188
+ </div>
189
+ <div
190
+ class="nav right"
191
+ class:visible={selectedImageIdx < fileCount - 1}
192
+ on:click={navigateRight}
193
+ >
194
+ <Icon name="ChevronRight" />
195
+ </div>
196
+ <div class="footer">File {selectedImageIdx + 1} of {fileCount}</div>
197
+ </div>
198
+ {:else if value?.length}
199
+ {#each value as file}
200
+ <div class="gallery">
201
+ <div class="title">
202
+ <div class="filename">{file.name}</div>
203
+ {#if file.size}
204
+ <div class="filesize">
205
+ {#if file.size <= BYTES_IN_MB}
206
+ {`${file.size / BYTES_IN_KB} KB`}
207
+ {:else}{`${file.size / BYTES_IN_MB} MB`}{/if}
208
+ </div>
209
+ {/if}
210
+ {#if !disabled}
211
+ <div class="delete-button" on:click={removeFile}>
212
+ <Icon name="Close" />
213
+ </div>
214
+ {/if}
215
+ </div>
216
+ </div>
217
+ {/each}
218
+ {/if}
219
+ {/if}
220
+ {#if showDropzone}
221
+ <div
222
+ class="spectrum-Dropzone"
223
+ class:is-invalid={!!error}
224
+ class:disabled
225
+ role="region"
226
+ tabindex="0"
227
+ on:dragover={handleDragOver}
228
+ on:dragleave={handleDragLeave}
229
+ on:dragenter={handleDragOver}
230
+ on:drop={handleDrop}
231
+ class:is-dragged={fileDragged}
232
+ >
233
+ <div class="spectrum-IllustratedMessage spectrum-IllustratedMessage--cta">
234
+ <input
235
+ id={fieldId}
236
+ {disabled}
237
+ type="file"
238
+ multiple
239
+ accept={extensions}
240
+ bind:this={fileInput}
241
+ on:change={handleFile}
242
+ />
243
+ {#if !compact}
244
+ <svg
245
+ class="spectrum-IllustratedMessage-illustration"
246
+ width="125"
247
+ height="60"
248
+ viewBox="0 0 199 97.7"
249
+ >
250
+ <defs>
251
+ <style>
252
+ .cls-1,
253
+ .cls-2 {
254
+ fill: none;
255
+ stroke-linecap: round;
256
+ stroke-linejoin: round;
257
+ }
258
+ .cls-1 {
259
+ stroke-width: 3px;
260
+ }
261
+ .cls-2 {
262
+ stroke-width: 2px;
263
+ }
264
+ </style>
265
+ </defs>
266
+ <path
267
+ class="cls-1"
268
+ d="M110.53,85.66,100.26,95.89a1.09,1.09,0,0,1-1.52,0L88.47,85.66"
269
+ />
270
+ <line class="cls-1" x1="99.5" y1="95.5" x2="99.5" y2="58.5" />
271
+ <path class="cls-1" d="M105.5,73.5h19a2,2,0,0,0,2-2v-43" />
272
+ <path
273
+ class="cls-1"
274
+ d="M126.5,22.5h-19a2,2,0,0,1-2-2V1.5h-31a2,2,0,0,0-2,2v68a2,2,0,0,0,2,2h19"
275
+ />
276
+ <line class="cls-1" x1="105.5" y1="1.5" x2="126.5" y2="22.5" />
277
+ <path
278
+ class="cls-2"
279
+ d="M47.93,50.49a5,5,0,1,0-4.83-5A4.93,4.93,0,0,0,47.93,50.49Z"
280
+ />
281
+ <path
282
+ class="cls-2"
283
+ d="M36.6,65.93,42.05,60A2.06,2.06,0,0,1,45,60l12.68,13.2"
284
+ />
285
+ <path
286
+ class="cls-2"
287
+ d="M3.14,73.23,22.42,53.76a1.65,1.65,0,0,1,2.38,0l19.05,19.7"
288
+ />
289
+ <path
290
+ class="cls-1"
291
+ d="M139.5,36.5H196A1.49,1.49,0,0,1,197.5,38V72A1.49,1.49,0,0,1,196,73.5H141A1.49,1.49,0,0,1,139.5,72V32A1.49,1.49,0,0,1,141,30.5H154a2.43,2.43,0,0,1,1.67.66l6,5.66"
292
+ />
293
+ <rect
294
+ class="cls-1"
295
+ x="1.5"
296
+ y="34.5"
297
+ width="58"
298
+ height="39"
299
+ rx="2"
300
+ ry="2"
301
+ />
302
+ </svg>
303
+ <h2
304
+ class="spectrum-Heading spectrum-Heading--sizeL spectrum-Heading--light spectrum-IllustratedMessage-heading"
305
+ >
306
+ Drag and drop your file
307
+ </h2>
308
+ {/if}
309
+ {#if !disabled}
310
+ <p
311
+ class="spectrum-Body spectrum-Body--sizeS spectrum-IllustratedMessage-description"
312
+ >
313
+ <label for={fieldId} class="spectrum-Link">
314
+ Select a file to upload
315
+ </label>
316
+ {#if !compact}
317
+ <br />
318
+ from your computer
319
+ {/if}
320
+ </p>
321
+ {#if fileTags.length}
322
+ <Tags>
323
+ <div class="tags">
324
+ {#each fileTags as tag}
325
+ <div class="tag">
326
+ <Tag>
327
+ {tag}
328
+ </Tag>
329
+ </div>
330
+ {/each}
331
+ </div>
332
+ </Tags>
333
+ {/if}
334
+ {/if}
335
+ </div>
336
+ </div>
337
+ {/if}
338
+ </div>
339
+
340
+ <style>
341
+ .container {
342
+ --spectrum-dropzone-padding: var(--spectrum-global-dimension-size-400);
343
+ --spectrum-heading-l-text-size: var(
344
+ --spectrum-global-dimension-font-size-400
345
+ );
346
+ }
347
+
348
+ .gallery,
349
+ .spectrum-Dropzone {
350
+ user-select: none;
351
+ }
352
+ .spectrum-Dropzone.is-invalid {
353
+ border-color: var(--spectrum-global-color-red-400);
354
+ }
355
+ input[type="file"] {
356
+ display: none;
357
+ }
358
+ .compact .spectrum-Dropzone {
359
+ padding: 6px 0 !important;
360
+ }
361
+
362
+ .gallery {
363
+ display: flex;
364
+ flex-direction: column;
365
+ justify-content: flex-start;
366
+ align-items: stretch;
367
+ background-color: var(--spectrum-global-color-gray-50);
368
+ color: var(--spectrum-alias-text-color);
369
+ font-size: var(--spectrum-alias-item-text-size-m);
370
+ box-sizing: border-box;
371
+ border: var(--spectrum-alias-border-size-thin)
372
+ var(--spectrum-alias-border-color) solid;
373
+ border-radius: var(--spectrum-alias-border-radius-regular);
374
+ padding: 10px;
375
+ margin-bottom: 10px;
376
+ position: relative;
377
+ }
378
+ .placeholder,
379
+ img {
380
+ height: 120px;
381
+ max-width: 100%;
382
+ object-fit: contain;
383
+ margin: 20px 30px;
384
+ }
385
+ .compact .placeholder,
386
+ .compact img {
387
+ margin: 10px 16px;
388
+ }
389
+ .compact img {
390
+ height: 90px;
391
+ }
392
+ .compact .gallery {
393
+ padding: 6px 10px;
394
+ margin-bottom: 8px;
395
+ }
396
+ .title {
397
+ display: flex;
398
+ flex-direction: row;
399
+ justify-content: flex-start;
400
+ align-items: center;
401
+ }
402
+ .filename {
403
+ flex: 1 1 auto;
404
+ overflow: hidden;
405
+ text-overflow: ellipsis;
406
+ white-space: nowrap;
407
+ width: 0;
408
+ margin-right: 10px;
409
+ user-select: all;
410
+ }
411
+ .placeholder {
412
+ display: flex;
413
+ flex-direction: column;
414
+ justify-content: center;
415
+ align-items: center;
416
+ text-align: center;
417
+ }
418
+ .extension {
419
+ color: var(--spectrum-global-color-gray-600);
420
+ text-transform: uppercase;
421
+ font-weight: 600;
422
+ margin-bottom: 5px;
423
+ user-select: all;
424
+ }
425
+
426
+ .nav {
427
+ padding: var(--spacing-xs);
428
+ position: absolute;
429
+ top: 50%;
430
+ border-radius: 5px;
431
+ display: none;
432
+ transition: all 0.3s;
433
+ }
434
+ .nav.visible {
435
+ display: block;
436
+ }
437
+ .nav:hover {
438
+ cursor: pointer;
439
+ color: var(--blue);
440
+ }
441
+ .left {
442
+ left: 5px;
443
+ }
444
+ .right {
445
+ right: 5px;
446
+ }
447
+ .delete-button {
448
+ transition: all 0.3s;
449
+ margin-left: 10px;
450
+ display: flex;
451
+ }
452
+ .delete-button:hover {
453
+ cursor: pointer;
454
+ color: var(--red);
455
+ }
456
+
457
+ .spectrum-Dropzone.disabled {
458
+ pointer-events: none;
459
+ background-color: var(--spectrum-global-color-gray-200);
460
+ }
461
+ .disabled .spectrum-Heading--sizeL {
462
+ color: var(--spectrum-alias-text-color-disabled);
463
+ }
464
+ .compact .spectrum-Dropzone {
465
+ padding-top: 8px;
466
+ padding-bottom: 8px;
467
+ }
468
+ .compact .spectrum-IllustratedMessage-description {
469
+ margin: 0;
470
+ }
471
+
472
+ .tags {
473
+ margin-top: 20px;
474
+ display: flex;
475
+ flex-wrap: wrap;
476
+ justify-content: center;
477
+ }
478
+
479
+ .tag {
480
+ margin-top: 8px;
481
+ }
482
+ </style>