@budibase/bbui 3.8.4 → 3.8.6

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/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": "3.8.4",
4
+ "version": "3.8.6",
5
5
  "license": "MPL-2.0",
6
6
  "svelte": "src/index.ts",
7
7
  "module": "dist/bbui.mjs",
@@ -99,5 +99,5 @@
99
99
  }
100
100
  }
101
101
  },
102
- "gitHead": "26eae99d75fe3fe7e467e186ee9d40acdc6dff95"
102
+ "gitHead": "74dd49640111c5d634c8a8417ce4019cdc1a77b0"
103
103
  }
@@ -134,7 +134,7 @@
134
134
  return getThemeClassNames(theme)
135
135
  }
136
136
 
137
- const onChange = (value: string | null) => {
137
+ const onChange = (value: string | undefined) => {
138
138
  dispatch("change", value)
139
139
  dropdown?.hide()
140
140
  }
@@ -243,7 +243,7 @@
243
243
  size="S"
244
244
  name="Close"
245
245
  hoverable
246
- on:click={() => onChange(null)}
246
+ on:click={() => onChange(undefined)}
247
247
  />
248
248
  </div>
249
249
  </div>
@@ -7,6 +7,7 @@
7
7
  const BYTES_IN_MB = 1000000
8
8
 
9
9
  export let value: File | undefined = undefined
10
+ export let statusText: string | undefined = undefined
10
11
  export let title: string = "Upload file"
11
12
  export let disabled: boolean = false
12
13
  export let allowClear: boolean | undefined = undefined
@@ -57,7 +58,16 @@
57
58
  <!-- svelte-ignore a11y-no-static-element-interactions -->
58
59
  <!-- svelte-ignore a11y-click-events-have-key-events -->
59
60
  <div class="field">
60
- {#if value}
61
+ {#if statusText}
62
+ <div class="file-view status">
63
+ <div class="filename">{statusText}</div>
64
+ {#if !disabled || (allowClear === true && disabled)}
65
+ <div class="delete-button" on:click={clearFile}>
66
+ <Icon name="Close" size="XS" />
67
+ </div>
68
+ {/if}
69
+ </div>
70
+ {:else if value}
61
71
  <div class="file-view">
62
72
  {#if previewUrl}
63
73
  <img class="preview" alt="" src={previewUrl} />
@@ -97,6 +107,9 @@
97
107
  border-radius: var(--spectrum-global-dimension-size-50);
98
108
  padding: 0px var(--spectrum-alias-item-padding-m);
99
109
  }
110
+ .file-view.status {
111
+ background-color: var(--spectrum-global-color-gray-100);
112
+ }
100
113
  input[type="file"] {
101
114
  display: none;
102
115
  }
@@ -1,15 +1,16 @@
1
- <script>
1
+ <script lang="ts">
2
2
  import "@spectrum-css/switch/dist/index-vars.css"
3
3
  import { createEventDispatcher } from "svelte"
4
4
 
5
- export let value = false
6
- export let id = null
7
- export let text = null
8
- export let disabled = false
5
+ export let value: boolean = false
6
+ export let id: string | null = null
7
+ export let text: string | null = null
8
+ export let disabled: boolean = false
9
9
 
10
10
  const dispatch = createEventDispatcher()
11
- const onChange = event => {
12
- dispatch("change", event.target.checked)
11
+ const onChange = (event: Event) => {
12
+ const target = event.target as HTMLInputElement
13
+ dispatch("change", target.checked)
13
14
  }
14
15
  </script>
15
16
 
@@ -13,6 +13,7 @@
13
13
  export let error: string | undefined = undefined
14
14
  export let title: string | undefined = undefined
15
15
  export let value: File | undefined = undefined
16
+ export let statusText: string | undefined = undefined
16
17
  export let tooltip: string | undefined = undefined
17
18
  export let helpText: string | undefined = undefined
18
19
 
@@ -29,6 +30,7 @@
29
30
  {allowClear}
30
31
  {title}
31
32
  {value}
33
+ {statusText}
32
34
  {previewUrl}
33
35
  {handleFileTooLarge}
34
36
  {extensions}
@@ -1,23 +1,29 @@
1
- <script>
1
+ <script lang="ts">
2
2
  import Field from "./Field.svelte"
3
3
  import Switch from "./Core/Switch.svelte"
4
4
  import { createEventDispatcher } from "svelte"
5
5
 
6
- export let value = undefined
7
- export let label = null
8
- export let labelPosition = "above"
9
- export let text = undefined
10
- export let disabled = false
11
- export let error = null
12
- export let helpText = null
6
+ export let value: boolean | null | undefined = undefined
7
+ export let label: string | undefined = undefined
8
+ export let labelPosition: "above" = "above"
9
+ export let text: string | undefined = undefined
10
+ export let disabled: boolean | undefined = false
11
+ export let error: string | undefined = undefined
12
+ export let helpText: string | undefined = undefined
13
13
 
14
14
  const dispatch = createEventDispatcher()
15
- const onChange = e => {
15
+ const onChange = (e: CustomEvent<boolean>) => {
16
16
  value = e.detail
17
17
  dispatch("change", e.detail)
18
18
  }
19
19
  </script>
20
20
 
21
21
  <Field {helpText} {label} {labelPosition} {error}>
22
- <Switch {error} {disabled} {text} {value} on:change={onChange} on:click />
22
+ <Switch
23
+ {disabled}
24
+ {text}
25
+ value={value ?? undefined}
26
+ on:change={onChange}
27
+ on:click
28
+ />
23
29
  </Field>
package/src/helpers.ts CHANGED
@@ -238,3 +238,21 @@ export const hexToRGBA = (color: string, opacity: number): string => {
238
238
  const b = parseInt(color.substring(4, 6), 16)
239
239
  return `rgba(${r}, ${g}, ${b}, ${opacity})`
240
240
  }
241
+
242
+ export function rgbToHex(rgbStr: string | undefined): string {
243
+ if (rgbStr?.startsWith("#")) return rgbStr
244
+
245
+ const rgbMatch = rgbStr?.match(
246
+ /rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*[\d.]+)?\)/
247
+ )
248
+ if (!rgbMatch) return rgbStr || "#FFFFFF"
249
+
250
+ const r = parseInt(rgbMatch[1])
251
+ const g = parseInt(rgbMatch[2])
252
+ const b = parseInt(rgbMatch[3])
253
+
254
+ return `#${((1 << 24) | (r << 16) | (g << 8) | b)
255
+ .toString(16)
256
+ .slice(1)
257
+ .toUpperCase()}`
258
+ }