@budibase/bbui 1.0.105-alpha.3 → 1.0.105-alpha.32
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.
- package/dist/bbui.es.js +35 -35
- package/dist/bbui.es.js.map +1 -1
- package/package.json +3 -3
- package/src/ActionButton/ActionButton.svelte +0 -4
- package/src/Layout/Layout.svelte +8 -0
- package/src/Layout/Page.svelte +3 -2
- package/src/ProgressBar/ProgressBar.svelte +5 -5
- package/src/Table/InternalRenderer.svelte +12 -33
- package/src/Table/Table.svelte +30 -8
- package/src/Tabs/Tabs.svelte +1 -1
- package/src/Typography/Body.svelte +2 -0
- package/src/Typography/Heading.svelte +2 -1
- package/src/helpers.js +26 -0
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@budibase/bbui",
|
|
3
3
|
"description": "A UI solution used in the different Budibase projects.",
|
|
4
|
-
"version": "1.0.105-alpha.
|
|
4
|
+
"version": "1.0.105-alpha.32",
|
|
5
5
|
"license": "MPL-2.0",
|
|
6
6
|
"svelte": "src/index.js",
|
|
7
7
|
"module": "dist/bbui.es.js",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
],
|
|
39
39
|
"dependencies": {
|
|
40
40
|
"@adobe/spectrum-css-workflow-icons": "^1.2.1",
|
|
41
|
-
"@budibase/string-templates": "^1.0.105-alpha.
|
|
41
|
+
"@budibase/string-templates": "^1.0.105-alpha.32",
|
|
42
42
|
"@spectrum-css/actionbutton": "^1.0.1",
|
|
43
43
|
"@spectrum-css/actiongroup": "^1.0.1",
|
|
44
44
|
"@spectrum-css/avatar": "^3.0.2",
|
|
@@ -84,5 +84,5 @@
|
|
|
84
84
|
"svelte-flatpickr": "^3.2.3",
|
|
85
85
|
"svelte-portal": "^1.0.0"
|
|
86
86
|
},
|
|
87
|
-
"gitHead": "
|
|
87
|
+
"gitHead": "bd32fae00f09e82a8c82144e946e2e6a89b2f6ca"
|
|
88
88
|
}
|
package/src/Layout/Layout.svelte
CHANGED
|
@@ -36,6 +36,10 @@
|
|
|
36
36
|
padding-left: var(--spacing-l);
|
|
37
37
|
padding-right: var(--spacing-l);
|
|
38
38
|
}
|
|
39
|
+
.paddingX-XL {
|
|
40
|
+
padding-left: var(--spacing-xl);
|
|
41
|
+
padding-right: var(--spacing-xl);
|
|
42
|
+
}
|
|
39
43
|
.paddingY-S {
|
|
40
44
|
padding-top: var(--spacing-s);
|
|
41
45
|
padding-bottom: var(--spacing-s);
|
|
@@ -48,6 +52,10 @@
|
|
|
48
52
|
padding-top: var(--spacing-l);
|
|
49
53
|
padding-bottom: var(--spacing-l);
|
|
50
54
|
}
|
|
55
|
+
.paddingY-XL {
|
|
56
|
+
padding-top: var(--spacing-xl);
|
|
57
|
+
padding-bottom: var(--spacing-xl);
|
|
58
|
+
}
|
|
51
59
|
.gap-XXS {
|
|
52
60
|
grid-gap: var(--spacing-xs);
|
|
53
61
|
}
|
package/src/Layout/Page.svelte
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
<script>
|
|
2
2
|
export let wide = false
|
|
3
|
+
export let maxWidth = "80ch"
|
|
3
4
|
</script>
|
|
4
5
|
|
|
5
|
-
<div class:wide>
|
|
6
|
+
<div style="--max-width: {maxWidth}" class:wide>
|
|
6
7
|
<slot />
|
|
7
8
|
</div>
|
|
8
9
|
|
|
@@ -12,7 +13,7 @@
|
|
|
12
13
|
flex-direction: column;
|
|
13
14
|
justify-content: flex-start;
|
|
14
15
|
align-items: stretch;
|
|
15
|
-
max-width:
|
|
16
|
+
max-width: var(--max-width);
|
|
16
17
|
margin: 0 auto;
|
|
17
18
|
padding: calc(var(--spacing-xl) * 2);
|
|
18
19
|
min-height: calc(100% - var(--spacing-xl) * 4);
|
|
@@ -16,11 +16,11 @@
|
|
|
16
16
|
easing: easing,
|
|
17
17
|
})
|
|
18
18
|
|
|
19
|
-
$: if (value) $progress = value
|
|
19
|
+
$: if (value || value === 0) $progress = value
|
|
20
20
|
</script>
|
|
21
21
|
|
|
22
22
|
<div
|
|
23
|
-
class:spectrum-ProgressBar--indeterminate={!value}
|
|
23
|
+
class:spectrum-ProgressBar--indeterminate={!value && value !== 0}
|
|
24
24
|
class:spectrum-ProgressBar--sideLabel={sideLabel}
|
|
25
25
|
class="spectrum-ProgressBar spectrum-ProgressBar--size{size}"
|
|
26
26
|
value={$progress}
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
aria-valuenow={$progress}
|
|
29
29
|
aria-valuemin="0"
|
|
30
30
|
aria-valuemax="100"
|
|
31
|
-
style={width ? `width: ${width}
|
|
31
|
+
style={width ? `width: ${width};` : ""}
|
|
32
32
|
>
|
|
33
33
|
{#if $$slots}
|
|
34
34
|
<div
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
<slot />
|
|
38
38
|
</div>
|
|
39
39
|
{/if}
|
|
40
|
-
{#if value}
|
|
40
|
+
{#if value || value === 0}
|
|
41
41
|
<div
|
|
42
42
|
class="spectrum-FieldLabel spectrum-ProgressBar-percentage spectrum-FieldLabel--size{size}"
|
|
43
43
|
>
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
<div class="spectrum-ProgressBar-track">
|
|
48
48
|
<div
|
|
49
49
|
class="spectrum-ProgressBar-fill"
|
|
50
|
-
style={value ? `width: ${$progress}%` : ""}
|
|
50
|
+
style={value || value === 0 ? `width: ${$progress}%` : ""}
|
|
51
51
|
/>
|
|
52
52
|
</div>
|
|
53
53
|
<div class="spectrum-ProgressBar-label" hidden="" />
|
|
@@ -1,42 +1,21 @@
|
|
|
1
1
|
<script>
|
|
2
2
|
import Icon from "../Icon/Icon.svelte"
|
|
3
|
+
import { copyToClipboard } from "../helpers"
|
|
3
4
|
import { notifications } from "../Stores/notifications"
|
|
5
|
+
|
|
4
6
|
export let value
|
|
5
7
|
|
|
6
|
-
const onClick = e => {
|
|
8
|
+
const onClick = async e => {
|
|
7
9
|
e.stopPropagation()
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
// Fall back to the textarea hack
|
|
18
|
-
let textArea = document.createElement("textarea")
|
|
19
|
-
textArea.value = value
|
|
20
|
-
textArea.style.position = "fixed"
|
|
21
|
-
textArea.style.left = "-9999px"
|
|
22
|
-
textArea.style.top = "-9999px"
|
|
23
|
-
document.body.appendChild(textArea)
|
|
24
|
-
textArea.focus()
|
|
25
|
-
textArea.select()
|
|
26
|
-
document.execCommand("copy")
|
|
27
|
-
textArea.remove()
|
|
28
|
-
res()
|
|
29
|
-
}
|
|
30
|
-
})
|
|
31
|
-
.then(() => {
|
|
32
|
-
notifications.success("Copied to clipboard")
|
|
33
|
-
})
|
|
34
|
-
.catch(() => {
|
|
35
|
-
notifications.error(
|
|
36
|
-
"Failed to copy to clipboard. Check the dev console for the value."
|
|
37
|
-
)
|
|
38
|
-
console.warn("Failed to copy the value", value)
|
|
39
|
-
})
|
|
10
|
+
try {
|
|
11
|
+
await copyToClipboard(value)
|
|
12
|
+
notifications.success("Copied to clipboard")
|
|
13
|
+
} catch (error) {
|
|
14
|
+
notifications.error(
|
|
15
|
+
"Failed to copy to clipboard. Check the dev console for the value."
|
|
16
|
+
)
|
|
17
|
+
console.warn("Failed to copy the value", value)
|
|
18
|
+
}
|
|
40
19
|
}
|
|
41
20
|
</script>
|
|
42
21
|
|
package/src/Table/Table.svelte
CHANGED
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
export let disableSorting = false
|
|
37
37
|
export let autoSortColumns = true
|
|
38
38
|
export let compact = false
|
|
39
|
+
export let customPlaceholder = false
|
|
39
40
|
|
|
40
41
|
const dispatch = createEventDispatcher()
|
|
41
42
|
|
|
@@ -387,13 +388,24 @@
|
|
|
387
388
|
</div>
|
|
388
389
|
{/each}
|
|
389
390
|
{:else}
|
|
390
|
-
<div
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
391
|
+
<div
|
|
392
|
+
class="placeholder"
|
|
393
|
+
class:placeholder--custom={customPlaceholder}
|
|
394
|
+
class:placeholder--no-fields={!fields?.length}
|
|
395
|
+
>
|
|
396
|
+
{#if customPlaceholder}
|
|
397
|
+
<slot name="placeholder" />
|
|
398
|
+
{:else}
|
|
399
|
+
<div class="placeholder-content">
|
|
400
|
+
<svg
|
|
401
|
+
class="spectrum-Icon spectrum-Icon--sizeXXL"
|
|
402
|
+
focusable="false"
|
|
403
|
+
>
|
|
404
|
+
<use xlink:href="#spectrum-icon-18-Table" />
|
|
405
|
+
</svg>
|
|
406
|
+
<div>No rows found</div>
|
|
407
|
+
</div>
|
|
408
|
+
{/if}
|
|
397
409
|
</div>
|
|
398
410
|
{/if}
|
|
399
411
|
</div>
|
|
@@ -458,6 +470,13 @@
|
|
|
458
470
|
justify-content: flex-start;
|
|
459
471
|
align-items: center;
|
|
460
472
|
user-select: none;
|
|
473
|
+
border-top: var(--table-border);
|
|
474
|
+
}
|
|
475
|
+
.spectrum-Table-headCell:first-of-type {
|
|
476
|
+
border-left: var(--table-border);
|
|
477
|
+
}
|
|
478
|
+
.spectrum-Table-headCell:last-of-type {
|
|
479
|
+
border-right: var(--table-border);
|
|
461
480
|
}
|
|
462
481
|
.spectrum-Table-headCell--alignCenter {
|
|
463
482
|
justify-content: center;
|
|
@@ -576,16 +595,19 @@
|
|
|
576
595
|
border-top: none;
|
|
577
596
|
grid-column: 1 / -1;
|
|
578
597
|
background-color: var(--table-bg);
|
|
598
|
+
padding: 40px;
|
|
579
599
|
}
|
|
580
600
|
.placeholder--no-fields {
|
|
581
601
|
border-top: var(--table-border);
|
|
582
602
|
}
|
|
603
|
+
.placeholder--custom {
|
|
604
|
+
justify-content: flex-start;
|
|
605
|
+
}
|
|
583
606
|
.wrapper--quiet .placeholder {
|
|
584
607
|
border-left: none;
|
|
585
608
|
border-right: none;
|
|
586
609
|
}
|
|
587
610
|
.placeholder-content {
|
|
588
|
-
padding: 40px;
|
|
589
611
|
display: flex;
|
|
590
612
|
flex-direction: column;
|
|
591
613
|
justify-content: center;
|
package/src/Tabs/Tabs.svelte
CHANGED
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
padding-left: var(--spacing-xl);
|
|
109
109
|
padding-right: var(--spacing-xl);
|
|
110
110
|
position: relative;
|
|
111
|
-
border-bottom: var(--
|
|
111
|
+
border-bottom: 1px solid var(--spectrum-global-color-gray-300);
|
|
112
112
|
}
|
|
113
113
|
.spectrum-Tabs-content {
|
|
114
114
|
margin-top: var(--spectrum-global-dimension-static-size-150);
|
|
@@ -5,12 +5,14 @@
|
|
|
5
5
|
export let serif = false
|
|
6
6
|
export let weight = null
|
|
7
7
|
export let textAlign = null
|
|
8
|
+
export let color = null
|
|
8
9
|
</script>
|
|
9
10
|
|
|
10
11
|
<p
|
|
11
12
|
style={`
|
|
12
13
|
${weight ? `font-weight:${weight};` : ""}
|
|
13
14
|
${textAlign ? `text-align:${textAlign};` : ""}
|
|
15
|
+
${color ? `color:${color};` : ""}
|
|
14
16
|
`}
|
|
15
17
|
class="spectrum-Body spectrum-Body--size{size}"
|
|
16
18
|
class:spectrum-Body--serif={serif}
|
|
@@ -5,12 +5,13 @@
|
|
|
5
5
|
export let size = "M"
|
|
6
6
|
export let textAlign
|
|
7
7
|
export let noPadding = false
|
|
8
|
+
export let weight = "default" // light, heavy, default
|
|
8
9
|
</script>
|
|
9
10
|
|
|
10
11
|
<h1
|
|
11
12
|
style={textAlign ? `text-align:${textAlign}` : ``}
|
|
12
13
|
class:noPadding
|
|
13
|
-
class="spectrum-Heading spectrum-Heading--size{size}"
|
|
14
|
+
class="spectrum-Heading spectrum-Heading--size{size} spectrum-Heading--{weight}"
|
|
14
15
|
>
|
|
15
16
|
<slot />
|
|
16
17
|
</h1>
|
package/src/helpers.js
CHANGED
|
@@ -106,3 +106,29 @@ export const deepSet = (obj, key, value) => {
|
|
|
106
106
|
export const cloneDeep = obj => {
|
|
107
107
|
return JSON.parse(JSON.stringify(obj))
|
|
108
108
|
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Copies a value to the clipboard
|
|
112
|
+
* @param value the value to copy
|
|
113
|
+
*/
|
|
114
|
+
export const copyToClipboard = value => {
|
|
115
|
+
return new Promise(res => {
|
|
116
|
+
if (navigator.clipboard && window.isSecureContext) {
|
|
117
|
+
// Try using the clipboard API first
|
|
118
|
+
navigator.clipboard.writeText(value).then(res)
|
|
119
|
+
} else {
|
|
120
|
+
// Fall back to the textarea hack
|
|
121
|
+
let textArea = document.createElement("textarea")
|
|
122
|
+
textArea.value = value
|
|
123
|
+
textArea.style.position = "fixed"
|
|
124
|
+
textArea.style.left = "-9999px"
|
|
125
|
+
textArea.style.top = "-9999px"
|
|
126
|
+
document.body.appendChild(textArea)
|
|
127
|
+
textArea.focus()
|
|
128
|
+
textArea.select()
|
|
129
|
+
document.execCommand("copy")
|
|
130
|
+
textArea.remove()
|
|
131
|
+
res()
|
|
132
|
+
}
|
|
133
|
+
})
|
|
134
|
+
}
|