@budibase/bbui 3.9.5 → 3.10.0

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.9.5",
4
+ "version": "3.10.0",
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": "c8333d77db162c596063ce5f1cafe9997b45e828"
102
+ "gitHead": "35c16326f7215671d405cd811b28e78f5be70d07"
103
103
  }
@@ -13,7 +13,7 @@
13
13
  export let readonly = false
14
14
  export let error = null
15
15
  export let enableTime = true
16
- export let value = null
16
+ export let value = undefined
17
17
  export let placeholder = null
18
18
  export let timeOnly = false
19
19
  export let ignoreTimezones = false
@@ -7,6 +7,8 @@
7
7
  export let type = "number"
8
8
 
9
9
  $: style = width ? `width:${width}px;` : ""
10
+
11
+ const selectAll = event => event.target.select()
10
12
  </script>
11
13
 
12
14
  <input
@@ -16,7 +18,7 @@
16
18
  {value}
17
19
  {min}
18
20
  {max}
19
- onclick="this.select()"
21
+ on:click={selectAll}
20
22
  on:change
21
23
  on:input
22
24
  />
@@ -1,24 +1,87 @@
1
- <script>
1
+ <script lang="ts">
2
+ import dayjs, { type Dayjs } from "dayjs"
3
+ import { createEventDispatcher } from "svelte"
2
4
  import CoreDatePicker from "./DatePicker/DatePicker.svelte"
3
5
  import Icon from "../../Icon/Icon.svelte"
6
+ import { parseDate } from "../../helpers"
7
+ import { writable } from "svelte/store"
4
8
 
5
- let fromDate
6
- let toDate
9
+ export let enableTime: boolean | undefined = false
10
+ export let timeOnly: boolean | undefined = false
11
+ export let ignoreTimezones: boolean | undefined = false
12
+ export let value: string[] | undefined = []
13
+
14
+ const dispatch = createEventDispatcher()
15
+ const valueStore = writable<string[]>()
16
+
17
+ let fromDate: Dayjs | null
18
+ let toDate: Dayjs | null
19
+
20
+ $: valueStore.set(value || [])
21
+ $: parseValue($valueStore)
22
+
23
+ $: parsedFrom = fromDate ? parseDate(fromDate, { enableTime }) : undefined
24
+ $: parsedTo = toDate ? parseDate(toDate, { enableTime }) : undefined
25
+
26
+ const parseValue = (value: string[]) => {
27
+ if (!Array.isArray(value) || !value[0] || !value[1]) {
28
+ fromDate = null
29
+ toDate = null
30
+ } else {
31
+ fromDate = dayjs(value[0])
32
+ toDate = dayjs(value[1])
33
+ }
34
+ }
35
+
36
+ const onChangeFrom = (utc: string) => {
37
+ // Preserve the time if its editable
38
+ const fromDate = utc
39
+ ? enableTime
40
+ ? dayjs(utc)
41
+ : dayjs(utc).startOf("day")
42
+ : null
43
+ if (fromDate && (!toDate || fromDate.isAfter(toDate))) {
44
+ toDate = !enableTime ? fromDate.endOf("day") : fromDate
45
+ } else if (!fromDate) {
46
+ toDate = null
47
+ }
48
+
49
+ dispatch("change", [fromDate, toDate])
50
+ }
51
+
52
+ const onChangeTo = (utc: string) => {
53
+ // Preserve the time if its editable
54
+ const toDate = utc
55
+ ? enableTime
56
+ ? dayjs(utc)
57
+ : dayjs(utc).startOf("day")
58
+ : null
59
+ if (toDate && (!fromDate || toDate.isBefore(fromDate))) {
60
+ fromDate = !enableTime ? toDate.startOf("day") : toDate
61
+ } else if (!toDate) {
62
+ fromDate = null
63
+ }
64
+ dispatch("change", [fromDate, toDate])
65
+ }
7
66
  </script>
8
67
 
9
68
  <div class="date-range">
10
69
  <CoreDatePicker
11
- value={fromDate}
12
- on:change={e => (fromDate = e.detail)}
13
- enableTime={false}
70
+ value={parsedFrom}
71
+ on:change={e => onChangeFrom(e.detail)}
72
+ {enableTime}
73
+ {timeOnly}
74
+ {ignoreTimezones}
14
75
  />
15
76
  <div class="arrow">
16
77
  <Icon name="ChevronRight" />
17
78
  </div>
18
79
  <CoreDatePicker
19
- value={toDate}
20
- on:change={e => (toDate = e.detail)}
21
- enableTime={false}
80
+ value={parsedTo}
81
+ on:change={e => onChangeTo(e.detail)}
82
+ {enableTime}
83
+ {timeOnly}
84
+ {ignoreTimezones}
22
85
  />
23
86
  </div>
24
87
 
@@ -3,7 +3,7 @@
3
3
  import DateRangePicker from "./Core/DateRangePicker.svelte"
4
4
  import { createEventDispatcher } from "svelte"
5
5
 
6
- export let value = null
6
+ export let value = undefined
7
7
  export let label = null
8
8
  export let labelPosition = "above"
9
9
  export let disabled = false
@@ -12,6 +12,8 @@
12
12
  export let helpText = null
13
13
  export let appendTo = undefined
14
14
  export let ignoreTimezones = false
15
+ export let enableTime = false
16
+ export let timeOnly = false
15
17
 
16
18
  const dispatch = createEventDispatcher()
17
19
 
@@ -29,6 +31,8 @@
29
31
  {value}
30
32
  {appendTo}
31
33
  {ignoreTimezones}
34
+ {enableTime}
35
+ {timeOnly}
32
36
  on:change={onChange}
33
37
  />
34
38
  </Field>
@@ -11,7 +11,7 @@
11
11
  export let hoverColor: string | undefined = undefined
12
12
  export let tooltip: string | undefined = undefined
13
13
  export let tooltipPosition: TooltipPosition = TooltipPosition.Bottom
14
- export let tooltipType = TooltipType.Default
14
+ export let tooltipType: TooltipType = TooltipType.Default
15
15
  export let tooltipColor: string | undefined = undefined
16
16
  export let tooltipWrap: boolean = true
17
17
  export let newStyles: boolean = false
@@ -1,7 +1,7 @@
1
1
  <script lang="ts">
2
2
  export let horizontal: boolean = false
3
3
  export let paddingX: "S" | "M" | "L" | "XL" | "XXL" = "M"
4
- export let paddingY: "S" | "M" | "L" | "XL" | "XXL" = "M"
4
+ export let paddingY: "none" | "S" | "M" | "L" | "XL" | "XXL" = "M"
5
5
  export let noPadding: boolean = false
6
6
  export let gap: "XXS" | "XS" | "S" | "M" | "L" | "XL" = "M"
7
7
  export let noGap: boolean = false
package/src/context.d.ts CHANGED
@@ -1,9 +1,9 @@
1
- import { ActionMenu } from "./types"
2
- import { ModalContext } from "./types"
1
+ import { ActionMenu, ModalContext, ScrollContext } from "./types"
3
2
 
4
3
  declare module "svelte" {
5
4
  export function getContext(key: "actionMenu"): ActionMenu | undefined
6
5
  export function getContext(key: "bbui-modal"): ModalContext
6
+ export function getContext(key: "scroll"): ScrollContext
7
7
  }
8
8
 
9
9
  export const Modal = "bbui-modal"
@@ -1,3 +1,4 @@
1
1
  export * from "./actionMenu"
2
2
  export * from "./envDropdown"
3
3
  export * from "./modalContext"
4
+ export * from "./scrollContext"
@@ -0,0 +1,3 @@
1
+ export interface ScrollContext {
2
+ scrollTo: (bounds: DOMRect) => void
3
+ }