@budibase/bbui 3.4.21 → 3.4.23

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 (38) hide show
  1. package/dist/bbui.mjs +2616 -2971
  2. package/package.json +2 -2
  3. package/src/Actions/position_dropdown.ts +1 -1
  4. package/src/Badge/Badge.svelte +2 -0
  5. package/src/ClearButton/ClearButton.svelte +3 -3
  6. package/src/Drawer/Drawer.svelte +1 -1
  7. package/src/Form/Checkbox.svelte +11 -11
  8. package/src/Form/Core/Multiselect.svelte +42 -32
  9. package/src/Icon/Icon.svelte +3 -0
  10. package/src/Layout/Page.svelte +1 -1
  11. package/src/Link/Link.svelte +1 -1
  12. package/src/Popover/Popover.svelte +3 -2
  13. package/src/Stores/{banner.js → banner.ts} +26 -11
  14. package/src/Stores/{notifications.js → notifications.ts} +31 -10
  15. package/src/Table/ArrayRenderer.svelte +2 -2
  16. package/src/Table/AttachmentRenderer.svelte +5 -5
  17. package/src/Table/BoldRenderer.svelte +2 -2
  18. package/src/Table/BooleanRenderer.svelte +2 -2
  19. package/src/Table/CellRenderer.svelte +10 -10
  20. package/src/Table/CodeRenderer.svelte +2 -2
  21. package/src/Table/DateTimeRenderer.svelte +4 -4
  22. package/src/Table/InternalRenderer.svelte +3 -3
  23. package/src/Table/RelationshipRenderer.svelte +5 -5
  24. package/src/Table/SelectEditRenderer.svelte +6 -6
  25. package/src/Table/StringRenderer.svelte +3 -3
  26. package/src/Table/Table.svelte +71 -50
  27. package/src/Tabs/Tabs.svelte +48 -23
  28. package/src/Tags/Tag.svelte +6 -6
  29. package/src/Tags/Tags.svelte +1 -1
  30. package/src/Tooltip/TooltipWrapper.svelte +4 -4
  31. package/src/TreeView/Item.svelte +6 -6
  32. package/src/TreeView/Tree.svelte +4 -4
  33. package/src/Typography/Code.svelte +2 -2
  34. package/src/Typography/Detail.svelte +4 -4
  35. package/src/index.ts +0 -2
  36. package/src/SideNavigation/Item.svelte +0 -63
  37. package/src/SideNavigation/Navigation.svelte +0 -13
  38. /package/src/Table/{index.js → index.ts} +0 -0
@@ -1,4 +1,4 @@
1
- <script>
1
+ <script lang="ts">
2
2
  import { createEventDispatcher } from "svelte"
3
3
  import "@spectrum-css/table/dist/index-vars.css"
4
4
  import CellRenderer from "./CellRenderer.svelte"
@@ -8,6 +8,7 @@
8
8
  import Checkbox from "../Form/Checkbox.svelte"
9
9
 
10
10
  /**
11
+ /**
11
12
  * The expected schema is our normal couch schemas for our tables.
12
13
  * Each field schema can be enriched with a few extra properties to customise
13
14
  * the behaviour.
@@ -24,42 +25,42 @@
24
25
  * borderLeft: show a left border
25
26
  * borderRight: show a right border
26
27
  */
27
- export let data = []
28
- export let schema = {}
29
- export let showAutoColumns = false
30
- export let rowCount = 0
31
- export let quiet = false
32
- export let loading = false
33
- export let allowSelectRows
34
- export let allowEditRows = true
35
- export let allowEditColumns = true
36
- export let allowClickRows = true
37
- export let selectedRows = []
38
- export let customRenderers = []
39
- export let disableSorting = false
40
- export let autoSortColumns = true
41
- export let compact = false
42
- export let customPlaceholder = false
43
- export let showHeaderBorder = true
44
- export let placeholderText = "No rows found"
45
- export let snippets = []
46
- export let defaultSortColumn = undefined
47
- export let defaultSortOrder = "Ascending"
28
+ export let data: any[] = []
29
+ export let schema: Record<string, any> = {}
30
+ export let showAutoColumns: boolean = false
31
+ export let rowCount: number = 0
32
+ export let quiet: boolean = false
33
+ export let loading: boolean = false
34
+ export let allowSelectRows: boolean = false
35
+ export let allowEditRows: boolean = true
36
+ export let allowEditColumns: boolean = true
37
+ export let allowClickRows: boolean = true
38
+ export let selectedRows: any[] = []
39
+ export let customRenderers: any[] = []
40
+ export let disableSorting: boolean = false
41
+ export let autoSortColumns: boolean = true
42
+ export let compact: boolean = false
43
+ export let customPlaceholder: boolean = false
44
+ export let showHeaderBorder: boolean = true
45
+ export let placeholderText: string = "No rows found"
46
+ export let snippets: any[] = []
47
+ export let defaultSortColumn: string | undefined = undefined
48
+ export let defaultSortOrder: "Ascending" | "Descending" = "Ascending"
48
49
 
49
50
  const dispatch = createEventDispatcher()
50
51
 
51
52
  // Config
52
- const headerHeight = 36
53
+ const headerHeight: number = 36
53
54
  $: rowHeight = compact ? 46 : 55
54
55
 
55
56
  // Sorting state
56
- let sortColumn
57
- let sortOrder
57
+ let sortColumn: string | undefined
58
+ let sortOrder: "Ascending" | "Descending" | undefined
58
59
 
59
60
  // Table state
60
- let height = 0
61
- let loaded = false
62
- let checkboxStatus = false
61
+ let height: number = 0
62
+ let loaded: boolean = false
63
+ let checkboxStatus: boolean = false
63
64
 
64
65
  $: schema = fixSchema(schema)
65
66
  $: if (!loading) loaded = true
@@ -95,8 +96,8 @@
95
96
  }
96
97
  }
97
98
 
98
- const fixSchema = schema => {
99
- let fixedSchema = {}
99
+ const fixSchema = (schema: Record<string, any>): Record<string, any> => {
100
+ let fixedSchema: Record<string, any> = {}
100
101
  Object.entries(schema || {}).forEach(([fieldName, fieldSchema]) => {
101
102
  if (typeof fieldSchema === "string") {
102
103
  fixedSchema[fieldName] = {
@@ -120,7 +121,13 @@
120
121
  return fixedSchema
121
122
  }
122
123
 
123
- const getVisibleRowCount = (loaded, height, allRows, rowCount, rowHeight) => {
124
+ const getVisibleRowCount = (
125
+ loaded: boolean,
126
+ height: number,
127
+ allRows: number,
128
+ rowCount: number,
129
+ rowHeight: number
130
+ ): number => {
124
131
  if (!loaded) {
125
132
  return rowCount || 0
126
133
  }
@@ -131,12 +138,12 @@
131
138
  }
132
139
 
133
140
  const getHeightStyle = (
134
- visibleRowCount,
135
- rowCount,
136
- totalRowCount,
137
- rowHeight,
138
- loading
139
- ) => {
141
+ visibleRowCount: number,
142
+ rowCount: number,
143
+ totalRowCount: number,
144
+ rowHeight: number,
145
+ loading: boolean
146
+ ): string => {
140
147
  if (loading) {
141
148
  return `height: ${headerHeight + visibleRowCount * rowHeight}px;`
142
149
  }
@@ -146,7 +153,11 @@
146
153
  return `height: ${headerHeight + visibleRowCount * rowHeight}px;`
147
154
  }
148
155
 
149
- const getGridStyle = (fields, schema, showEditColumn) => {
156
+ const getGridStyle = (
157
+ fields: string[],
158
+ schema: Record<string, any>,
159
+ showEditColumn: boolean
160
+ ): string => {
150
161
  let style = "grid-template-columns:"
151
162
  if (showEditColumn) {
152
163
  style += " auto"
@@ -163,7 +174,11 @@
163
174
  return style
164
175
  }
165
176
 
166
- const sortRows = (rows, sortColumn, sortOrder) => {
177
+ const sortRows = (
178
+ rows: any[],
179
+ sortColumn: string | undefined,
180
+ sortOrder: string | undefined
181
+ ): any[] => {
167
182
  sortColumn = sortColumn ?? defaultSortColumn
168
183
  sortOrder = sortOrder ?? defaultSortOrder
169
184
  if (!sortColumn || !sortOrder || disableSorting) {
@@ -180,7 +195,7 @@
180
195
  })
181
196
  }
182
197
 
183
- const sortBy = fieldSchema => {
198
+ const sortBy = (fieldSchema: Record<string, any>): void => {
184
199
  if (fieldSchema.sortable === false) {
185
200
  return
186
201
  }
@@ -193,7 +208,7 @@
193
208
  dispatch("sort", { column: sortColumn, order: sortOrder })
194
209
  }
195
210
 
196
- const getDisplayName = schema => {
211
+ const getDisplayName = (schema: Record<string, any>): string => {
197
212
  let name = schema?.displayName
198
213
  if (schema && name === undefined) {
199
214
  name = schema.name
@@ -201,9 +216,13 @@
201
216
  return name || ""
202
217
  }
203
218
 
204
- const getFields = (schema, showAutoColumns, autoSortColumns) => {
205
- let columns = []
206
- let autoColumns = []
219
+ const getFields = (
220
+ schema: Record<string, any>,
221
+ showAutoColumns: boolean,
222
+ autoSortColumns: boolean
223
+ ): string[] => {
224
+ let columns: any[] = []
225
+ let autoColumns: any[] = []
207
226
  Object.entries(schema || {}).forEach(([field, fieldSchema]) => {
208
227
  if (!field || !fieldSchema) {
209
228
  return
@@ -235,17 +254,17 @@
235
254
  .map(column => column.name)
236
255
  }
237
256
 
238
- const editColumn = (e, field) => {
257
+ const editColumn = (e: Event, field: any): void => {
239
258
  e.stopPropagation()
240
259
  dispatch("editcolumn", field)
241
260
  }
242
261
 
243
- const editRow = (e, row) => {
262
+ const editRow = (e: Event, row: any): void => {
244
263
  e.stopPropagation()
245
264
  dispatch("editrow", cloneDeep(row))
246
265
  }
247
266
 
248
- const toggleSelectRow = row => {
267
+ const toggleSelectRow = (row: any): void => {
249
268
  if (!allowSelectRows) {
250
269
  return
251
270
  }
@@ -258,7 +277,7 @@
258
277
  }
259
278
  }
260
279
 
261
- const toggleSelectAll = e => {
280
+ const toggleSelectAll = (e: CustomEvent): void => {
262
281
  const select = !!e.detail
263
282
  if (select) {
264
283
  // Add any rows which are not already in selected rows
@@ -278,8 +297,10 @@
278
297
  }
279
298
  }
280
299
 
281
- const computeCellStyles = schema => {
282
- let styles = {}
300
+ const computeCellStyles = (
301
+ schema: Record<string, any>
302
+ ): Record<string, string> => {
303
+ let styles: Record<string, string> = {}
283
304
  Object.keys(schema || {}).forEach(field => {
284
305
  styles[field] = ""
285
306
  if (schema[field].color) {
@@ -1,28 +1,48 @@
1
- <script>
1
+ <script lang="ts">
2
2
  import "@spectrum-css/tabs/dist/index-vars.css"
3
3
  import { writable } from "svelte/store"
4
4
  import { onMount, setContext, createEventDispatcher } from "svelte"
5
5
 
6
- export let selected
7
- export let vertical = false
8
- export let noPadding = false
6
+ interface TabInfo {
7
+ width?: number
8
+ height?: number
9
+ left?: number
10
+ top?: number
11
+ }
12
+
13
+ interface TabState {
14
+ title: string
15
+ id: string
16
+ emphasized: boolean
17
+ info?: TabInfo
18
+ }
19
+
20
+ export let selected: string
21
+ export let vertical: boolean = false
22
+ export let noPadding: boolean = false
9
23
  // added as a separate option as noPadding is used for vertical padding
10
- export let noHorizPadding = false
11
- export let quiet = false
12
- export let emphasized = false
13
- export let onTop = false
14
- export let size = "M"
15
- export let beforeSwitch = null
24
+ export let noHorizPadding: boolean = false
25
+ export let quiet: boolean = false
26
+ export let emphasized: boolean = false
27
+ export let onTop: boolean = false
28
+ export let size: "S" | "M" | "L" = "M"
29
+ export let beforeSwitch: ((_title: string) => boolean) | null = null
16
30
 
17
- let thisSelected = undefined
31
+ let thisSelected: string | undefined = undefined
32
+ let container: HTMLElement | undefined
18
33
 
19
34
  let _id = id()
20
- const tab = writable({ title: selected, id: _id, emphasized })
35
+ const tab = writable<TabState>({ title: selected, id: _id, emphasized })
21
36
  setContext("tab", tab)
22
37
 
23
- let container
38
+ let top: string | undefined
39
+ let left: string | undefined
40
+ let width: string | undefined
41
+ let height: string | undefined
24
42
 
25
- const dispatch = createEventDispatcher()
43
+ const dispatch = createEventDispatcher<{
44
+ select: string
45
+ }>()
26
46
 
27
47
  $: {
28
48
  if (thisSelected !== selected) {
@@ -44,29 +64,34 @@
44
64
  }
45
65
  if ($tab.title !== thisSelected) {
46
66
  tab.update(state => {
47
- state.title = thisSelected
67
+ state.title = thisSelected as string
48
68
  return state
49
69
  })
50
70
  }
51
71
  }
52
72
 
53
- let top, left, width, height
54
- $: calculateIndicatorLength($tab)
55
- $: calculateIndicatorOffset($tab)
73
+ $: $tab && calculateIndicatorLength()
74
+ $: $tab && calculateIndicatorOffset()
56
75
 
57
76
  function calculateIndicatorLength() {
58
77
  if (!vertical) {
59
- width = $tab.info?.width + "px"
78
+ width = ($tab.info?.width ?? 0) + "px"
60
79
  } else {
61
- height = $tab.info?.height + 4 + "px"
80
+ height = ($tab.info?.height ?? 0) + 4 + "px"
62
81
  }
63
82
  }
64
83
 
65
84
  function calculateIndicatorOffset() {
66
85
  if (!vertical) {
67
- left = $tab.info?.left - container?.getBoundingClientRect().left + "px"
86
+ left =
87
+ ($tab.info?.left ?? 0) -
88
+ (container?.getBoundingClientRect().left ?? 0) +
89
+ "px"
68
90
  } else {
69
- top = $tab.info?.top - container?.getBoundingClientRect().top + "px"
91
+ top =
92
+ ($tab.info?.top ?? 0) -
93
+ (container?.getBoundingClientRect().top ?? 0) +
94
+ "px"
70
95
  }
71
96
  }
72
97
 
@@ -75,7 +100,7 @@
75
100
  calculateIndicatorOffset()
76
101
  })
77
102
 
78
- function id() {
103
+ function id(): string {
79
104
  return "_" + Math.random().toString(36).slice(2, 9)
80
105
  }
81
106
  </script>
@@ -1,13 +1,13 @@
1
- <script>
1
+ <script lang="ts">
2
2
  import "@spectrum-css/tags/dist/index-vars.css"
3
3
  import Avatar from "../Avatar/Avatar.svelte"
4
4
  import ClearButton from "../ClearButton/ClearButton.svelte"
5
5
 
6
- export let icon = ""
7
- export let avatar = ""
8
- export let invalid = false
9
- export let disabled = false
10
- export let closable = false
6
+ export let icon: string = ""
7
+ export let avatar: string = ""
8
+ export let invalid: boolean = false
9
+ export let disabled: boolean = false
10
+ export let closable: boolean = false
11
11
  </script>
12
12
 
13
13
  <div
@@ -1,4 +1,4 @@
1
- <script>
1
+ <script lang="ts">
2
2
  import "@spectrum-css/tags/dist/index-vars.css"
3
3
  </script>
4
4
 
@@ -1,10 +1,10 @@
1
- <script>
1
+ <script lang="ts">
2
2
  import Icon from "../Icon/Icon.svelte"
3
3
  import AbsTooltip from "./AbsTooltip.svelte"
4
4
 
5
- export let tooltip = ""
6
- export let size = "M"
7
- export let disabled = true
5
+ export let tooltip: string = ""
6
+ export let size: "S" | "M" = "M"
7
+ export let disabled: boolean = true
8
8
  </script>
9
9
 
10
10
  <div class:container={!!tooltip}>
@@ -1,9 +1,9 @@
1
- <script>
2
- export let selected = false
3
- export let open = false
4
- export let href = false
5
- export let title
6
- export let icon
1
+ <script lang="ts">
2
+ export let selected: boolean = false
3
+ export let open: boolean = false
4
+ export let href: string | null = null
5
+ export let title: string
6
+ export let icon: string | undefined
7
7
  </script>
8
8
 
9
9
  <li
@@ -1,9 +1,9 @@
1
- <script>
1
+ <script lang="ts">
2
2
  import "@spectrum-css/treeview/dist/index-vars.css"
3
3
 
4
- export let quiet = false
5
- export let standalone = true
6
- export let width = "250px"
4
+ export let quiet: boolean = false
5
+ export let standalone: boolean = true
6
+ export let width: string = "250px"
7
7
  </script>
8
8
 
9
9
  <ul
@@ -1,8 +1,8 @@
1
- <script>
1
+ <script lang="ts">
2
2
  import "@spectrum-css/typography/dist/index-vars.css"
3
3
 
4
4
  // Sizes
5
- export let size = "M"
5
+ export let size: "S" | "M" | "L" = "M"
6
6
  </script>
7
7
 
8
8
  <code class="spectrum-Code spectrum-Code--size{size}">
@@ -1,9 +1,9 @@
1
- <script>
1
+ <script lang="ts">
2
2
  import "@spectrum-css/typography/dist/index-vars.css"
3
3
 
4
- export let size = "M"
5
- export let serif = false
6
- export let weight = 600
4
+ export let size: "S" | "M" | "L" = "M"
5
+ export let serif: boolean = false
6
+ export let weight: number | null = null
7
7
  </script>
8
8
 
9
9
  <p
package/src/index.ts CHANGED
@@ -65,8 +65,6 @@ export { default as Modal } from "./Modal/Modal.svelte"
65
65
  export { default as ModalContent, keepOpen } from "./Modal/ModalContent.svelte"
66
66
  export { default as NotificationDisplay } from "./Notification/NotificationDisplay.svelte"
67
67
  export { default as Notification } from "./Notification/Notification.svelte"
68
- export { default as SideNavigation } from "./SideNavigation/Navigation.svelte"
69
- export { default as SideNavigationItem } from "./SideNavigation/Item.svelte"
70
68
  export { default as Context } from "./context"
71
69
  export { default as Table } from "./Table/Table.svelte"
72
70
  export { default as Tabs } from "./Tabs/Tabs.svelte"
@@ -1,63 +0,0 @@
1
- <script>
2
- import { getContext } from "svelte"
3
-
4
- const multilevel = getContext("sidenav-type")
5
- import Badge from "../Badge/Badge.svelte"
6
-
7
- export let href = ""
8
- export let external = false
9
- export let heading = ""
10
- export let icon = ""
11
- export let selected = false
12
- export let disabled = false
13
- export let badge = ""
14
- </script>
15
-
16
- <!-- svelte-ignore a11y-click-events-have-key-events -->
17
- <!-- svelte-ignore a11y-no-noninteractive-element-interactions -->
18
- <li
19
- class="spectrum-SideNav-item"
20
- class:is-selected={selected}
21
- class:is-disabled={disabled}
22
- on:click
23
- >
24
- {#if heading}
25
- <h2 class="spectrum-SideNav-heading" id="nav-heading-{heading}">
26
- {heading}
27
- </h2>
28
- {/if}
29
- <a
30
- target={external ? "_blank" : ""}
31
- {href}
32
- class="spectrum-SideNav-itemLink"
33
- aria-current="page"
34
- >
35
- {#if icon}
36
- <svg
37
- class="spectrum-Icon spectrum-Icon--sizeM spectrum-SideNav-itemIcon"
38
- focusable="false"
39
- aria-hidden="true"
40
- >
41
- <use xlink:href="#spectrum-icon-18-{icon}" />
42
- </svg>
43
- {/if}
44
- <slot />
45
- {#if badge}
46
- <div class="badge">
47
- <Badge active size="S">{badge}</Badge>
48
- </div>
49
- {/if}
50
- </a>
51
-
52
- {#if multilevel && $$slots.subnav}
53
- <ul class="spectrum-SideNav">
54
- <slot name="subnav" />
55
- </ul>
56
- {/if}
57
- </li>
58
-
59
- <style>
60
- .badge {
61
- margin-left: 10px;
62
- }
63
- </style>
@@ -1,13 +0,0 @@
1
- <script>
2
- import { setContext } from "svelte"
3
- import "@spectrum-css/sidenav/dist/index-vars.css"
4
-
5
- export let multilevel = false
6
- setContext("sidenav-type", multilevel)
7
- </script>
8
-
9
- <nav>
10
- <ul class="spectrum-SideNav" class:spectrum-SideNav--multiLevel={multilevel}>
11
- <slot />
12
- </ul>
13
- </nav>
File without changes