@budibase/bbui 3.23.17 → 3.23.19

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.23.17",
4
+ "version": "3.23.19",
5
5
  "license": "MPL-2.0",
6
6
  "svelte": "src/index.ts",
7
7
  "module": "dist/bbui.mjs",
@@ -106,5 +106,5 @@
106
106
  }
107
107
  }
108
108
  },
109
- "gitHead": "dc0b829769782be5be7fb538483b0facd0392f12"
109
+ "gitHead": "f7d6fb730b00e7e5cd91883b5b1b15a7f6ecda1e"
110
110
  }
@@ -1,36 +1,59 @@
1
- <script>
2
- import Field from "./Field.svelte"
3
- import Combobox from "./Core/Combobox.svelte"
1
+ <script lang="ts" generics="O">
4
2
  import { createEventDispatcher } from "svelte"
5
3
 
6
- export let value = null
7
- export let label = undefined
4
+ import Combobox from "./Core/Combobox.svelte"
5
+ import Field from "./Field.svelte"
6
+ import type { LabelPosition } from "../types"
7
+
8
+ export let value: string | undefined = undefined
9
+ export let label: string | undefined = undefined
8
10
  export let disabled = false
9
11
  export let readonly = false
10
- export let labelPosition = "above"
11
- export let error = null
12
+ export let labelPosition: LabelPosition = "above"
13
+ export let error: string | undefined | false = undefined
12
14
  export let placeholder = "Choose an option or type"
13
- export let options = []
14
- export let helpText = null
15
- export let getOptionLabel = option => extractProperty(option, "label")
16
- export let getOptionValue = option => extractProperty(option, "value")
17
-
18
- const dispatch = createEventDispatcher()
19
- const onChange = e => {
20
- value = e.detail
21
- dispatch("change", e.detail)
22
- }
23
- const extractProperty = (value, property) => {
24
- if (value && typeof value === "object") {
25
- return value[property]
15
+ export let options: O[] = []
16
+ export let helpText: string | undefined = undefined
17
+ const extractProperty = (item: O, property: string): string => {
18
+ if (item && typeof item === "object" && property in item) {
19
+ const record = item as Record<string, unknown>
20
+ const extracted = record[property]
21
+ if (typeof extracted === "string") {
22
+ return extracted
23
+ }
24
+ if (typeof extracted === "number" || typeof extracted === "boolean") {
25
+ return String(extracted)
26
+ }
27
+ return ""
28
+ }
29
+
30
+ if (item === null || item === undefined) {
31
+ return ""
26
32
  }
27
- return value
33
+
34
+ return String(item)
35
+ }
36
+
37
+ const defaultGetOptionLabel = (item: O) => extractProperty(item, "label")
38
+ const defaultGetOptionValue = (item: O) => extractProperty(item, "value")
39
+
40
+ type OptionFormatter = (_option: O) => string
41
+
42
+ export let getOptionLabel: OptionFormatter = defaultGetOptionLabel
43
+ export let getOptionValue: OptionFormatter = defaultGetOptionValue
44
+
45
+ const dispatch = createEventDispatcher<{
46
+ change: string | undefined
47
+ }>()
48
+
49
+ const onChange = (event: CustomEvent<string | undefined>) => {
50
+ value = event.detail
51
+ dispatch("change", event.detail)
28
52
  }
29
53
  </script>
30
54
 
31
55
  <Field {helpText} {label} {labelPosition} {error}>
32
56
  <Combobox
33
- {error}
34
57
  {disabled}
35
58
  {value}
36
59
  {options}
@@ -71,6 +71,7 @@
71
71
  export let indeterminate: boolean = false
72
72
  export let allSelected: boolean = false
73
73
  export let toggleSelectAll: () => void = () => {}
74
+ export let hideChevron: boolean = false
74
75
 
75
76
  const dispatch = createEventDispatcher()
76
77
 
@@ -193,7 +194,9 @@
193
194
  >
194
195
  {fieldText}
195
196
  </span>
196
- <Icon name="caret-down" size="S" />
197
+ {#if !hideChevron}
198
+ <Icon name="caret-down" size="S" />
199
+ {/if}
197
200
  </button>
198
201
 
199
202
  <!-- svelte-ignore a11y-click-events-have-key-events -->
@@ -265,7 +268,7 @@
265
268
  </li>
266
269
  {/if}
267
270
  {#if filteredOptions.length}
268
- {#each filteredOptions as option, idx}
271
+ {#each filteredOptions as option, idx (getOptionValue(option, idx) ?? idx)}
269
272
  <li
270
273
  class="spectrum-Menu-item"
271
274
  class:is-selected={isOptionSelected(getOptionValue(option, idx))}
@@ -42,6 +42,7 @@
42
42
  export let onOptionMouseenter = () => {}
43
43
  export let onOptionMouseleave = () => {}
44
44
  export let customPopoverHeight: string | undefined = undefined
45
+ export let hideChevron: boolean = false
45
46
 
46
47
  const dispatch = createEventDispatcher()
47
48
 
@@ -127,4 +128,5 @@
127
128
  onSelectOption={selectOption}
128
129
  {loading}
129
130
  {customPopoverHeight}
131
+ {hideChevron}
130
132
  />
@@ -43,6 +43,7 @@
43
43
  export let onOptionMouseenter = () => {}
44
44
  export let onOptionMouseleave = () => {}
45
45
  export let loading: boolean | undefined = false
46
+ export let hideChevron: boolean = false
46
47
 
47
48
  const dispatch = createEventDispatcher()
48
49
  const onChange = (e: CustomEvent<any>) => {
@@ -71,6 +72,7 @@
71
72
  {sort}
72
73
  {align}
73
74
  {footer}
75
+ {hideChevron}
74
76
  {getOptionLabel}
75
77
  {getOptionValue}
76
78
  {getOptionIcon}