@budibase/bbui 3.5.2 → 3.6.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.
Files changed (51) hide show
  1. package/dist/bbui.mjs +14368 -16206
  2. package/package.json +2 -2
  3. package/src/ActionMenu/ActionMenu.svelte +14 -13
  4. package/src/Avatar/Avatar.svelte +1 -1
  5. package/src/ColorPicker/ColorPicker.svelte +66 -34
  6. package/src/Form/Core/File.svelte +27 -21
  7. package/src/Form/Core/Multiselect.svelte +1 -1
  8. package/src/Form/Core/TextArea.svelte +49 -17
  9. package/src/Form/DatePicker.svelte +1 -1
  10. package/src/Form/File.svelte +14 -15
  11. package/src/Form/Multiselect.svelte +15 -14
  12. package/src/Form/Select.svelte +6 -9
  13. package/src/Form/TextArea.svelte +15 -6
  14. package/src/Form/Toggle.svelte +2 -2
  15. package/src/Icon/Icon.svelte +1 -1
  16. package/src/Icon/IconAvatar.svelte +7 -8
  17. package/src/IconPicker/IconPicker.svelte +16 -11
  18. package/src/InlineAlert/InlineAlert.svelte +10 -10
  19. package/src/Input/CopyInput.svelte +13 -11
  20. package/src/Label/Label.svelte +4 -4
  21. package/src/Layout/Layout.svelte +14 -9
  22. package/src/Layout/Page.svelte +6 -6
  23. package/src/List/List.svelte +2 -2
  24. package/src/List/ListItem.svelte +2 -2
  25. package/src/Markdown/MarkdownEditor.svelte +12 -12
  26. package/src/Markdown/MarkdownViewer.svelte +5 -4
  27. package/src/Markdown/SpectrumMDE.svelte +11 -11
  28. package/src/Menu/Item.svelte +7 -7
  29. package/src/Menu/Menu.svelte +1 -1
  30. package/src/Menu/Section.svelte +2 -2
  31. package/src/Modal/Content.svelte +2 -2
  32. package/src/Modal/CustomContent.svelte +4 -4
  33. package/src/Modal/Modal.svelte +36 -33
  34. package/src/Modal/ModalContent.svelte +33 -31
  35. package/src/Notification/Notification.svelte +9 -9
  36. package/src/Notification/NotificationDisplay.svelte +1 -1
  37. package/src/Pagination/Pagination.svelte +6 -8
  38. package/src/ProgressBar/ProgressBar.svelte +15 -14
  39. package/src/ProgressCircle/ProgressCircle.svelte +11 -11
  40. package/src/Tooltip/TooltipWrapper.svelte +1 -1
  41. package/src/bbui.css +10 -0
  42. package/src/context.d.ts +8 -0
  43. package/src/index.ts +0 -3
  44. package/src/types/actionMenu.ts +3 -0
  45. package/src/Form/PickerDropdown.svelte +0 -132
  46. package/src/IconSideNav/IconSideNav.svelte +0 -14
  47. package/src/IconSideNav/IconSideNavItem.svelte +0 -58
  48. package/src/Menu/Menu.svench +0 -19
  49. package/src/Modal/Modal.svench +0 -116
  50. package/src/Modal/QuizModal.svelte +0 -53
  51. package/src/Stores/Notifications.svench.svx +0 -78
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.5.2",
4
+ "version": "3.6.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": "2d3a130fceeb689d3013606dde57bab8db41c586"
102
+ "gitHead": "fcc8291c1f2968ee7fd17bd47ee6ca19181a14a7"
103
103
  }
@@ -1,25 +1,26 @@
1
- <script>
1
+ <script lang="ts">
2
2
  import { setContext, getContext } from "svelte"
3
3
  import Popover from "../Popover/Popover.svelte"
4
4
  import Menu from "../Menu/Menu.svelte"
5
+ import type { PopoverAlignment } from "../constants"
5
6
 
6
- export let disabled = false
7
- export let align = "left"
8
- export let portalTarget
9
- export let openOnHover = false
10
- export let animate
11
- export let offset
7
+ export let disabled: boolean = false
8
+ export let align: `${PopoverAlignment}` = "left"
9
+ export let portalTarget: string | undefined = undefined
10
+ export let openOnHover: boolean = false
11
+ export let animate: boolean | undefined = true
12
+ export let offset: number | undefined = undefined
12
13
 
13
14
  const actionMenuContext = getContext("actionMenu")
14
15
 
15
- let anchor
16
- let dropdown
17
- let timeout
16
+ let anchor: HTMLElement | undefined
17
+ let dropdown: Popover
18
+ let timeout: ReturnType<typeof setTimeout>
18
19
 
19
20
  // This is needed because display: contents is considered "invisible".
20
21
  // It should only ever be an action button, so should be fine.
21
- function getAnchor(node) {
22
- anchor = node.firstChild
22
+ function getAnchor(node: HTMLDivElement) {
23
+ anchor = (node.firstChild as HTMLElement) ?? undefined
23
24
  }
24
25
 
25
26
  export const show = () => {
@@ -37,7 +38,7 @@
37
38
  actionMenuContext?.hide()
38
39
  }
39
40
 
40
- const openMenu = event => {
41
+ const openMenu = (event: Event) => {
41
42
  if (!disabled) {
42
43
  event.stopPropagation()
43
44
  show()
@@ -14,7 +14,7 @@
14
14
  export let url = ""
15
15
  export let disabled = false
16
16
  export let initials = "JD"
17
- export let color = null
17
+ export let color = ""
18
18
 
19
19
  const DefaultColor = "#3aab87"
20
20
 
@@ -1,4 +1,4 @@
1
- <script>
1
+ <script lang="ts">
2
2
  import Popover from "../Popover/Popover.svelte"
3
3
  import Layout from "../Layout/Layout.svelte"
4
4
  import { createEventDispatcher } from "svelte"
@@ -11,15 +11,17 @@
11
11
  getThemeClassNames,
12
12
  DefaultAppTheme,
13
13
  } from "@budibase/shared-core"
14
+ import type { Theme } from "@budibase/types"
15
+ import type { PopoverAlignment } from "../constants"
14
16
 
15
- export let value
16
- export let size = "M"
17
- export let spectrumTheme
18
- export let offset
19
- export let align
17
+ export let value: string | undefined = undefined
18
+ export let size: "S" | "M" | "L" = "M"
19
+ export let spectrumTheme: Theme | undefined = undefined
20
+ export let offset: number | undefined = undefined
21
+ export let align: PopoverAlignment | undefined = undefined
20
22
 
21
- let dropdown
22
- let preview
23
+ let dropdown: Popover | undefined
24
+ let preview: HTMLElement | undefined
23
25
 
24
26
  $: customValue = getCustomValue(value)
25
27
  $: checkColor = getCheckColor(value)
@@ -28,23 +30,7 @@
28
30
  const dispatch = createEventDispatcher()
29
31
  const categories = [
30
32
  {
31
- label: "Theme",
32
- colors: [
33
- "gray-50",
34
- "gray-75",
35
- "gray-100",
36
- "gray-200",
37
- "gray-300",
38
- "gray-400",
39
- "gray-500",
40
- "gray-600",
41
- "gray-700",
42
- "gray-800",
43
- "gray-900",
44
- ],
45
- },
46
- {
47
- label: "Colors",
33
+ label: "Theme colors",
48
34
  colors: [
49
35
  "red-100",
50
36
  "orange-100",
@@ -91,13 +77,56 @@
91
77
  "indigo-700",
92
78
  "magenta-700",
93
79
 
80
+ "gray-50",
81
+ "gray-75",
82
+ "gray-100",
83
+ "gray-200",
84
+ "gray-300",
85
+ "gray-400",
86
+ "gray-500",
87
+ "gray-600",
88
+ "gray-700",
89
+ "gray-800",
90
+ "gray-900",
91
+ ],
92
+ },
93
+ {
94
+ label: "Static colors",
95
+ colors: [
96
+ "static-red-400",
97
+ "static-orange-400",
98
+ "static-yellow-400",
99
+ "static-green-400",
100
+ "static-seafoam-400",
101
+ "static-blue-400",
102
+ "static-indigo-400",
103
+ "static-magenta-400",
104
+
105
+ "static-red-800",
106
+ "static-orange-800",
107
+ "static-yellow-800",
108
+ "static-green-800",
109
+ "static-seafoam-800",
110
+ "static-blue-800",
111
+ "static-indigo-800",
112
+ "static-magenta-800",
113
+
114
+ "static-red-1200",
115
+ "static-orange-1200",
116
+ "static-yellow-1200",
117
+ "static-green-1200",
118
+ "static-seafoam-1200",
119
+ "static-blue-1200",
120
+ "static-indigo-1200",
121
+ "static-magenta-1200",
122
+
94
123
  "static-white",
95
124
  "static-black",
96
125
  ],
97
126
  },
98
127
  ]
99
128
 
100
- const getThemeClasses = theme => {
129
+ const getThemeClasses = (theme: Theme | undefined) => {
101
130
  if (!theme) {
102
131
  return ""
103
132
  }
@@ -105,12 +134,12 @@
105
134
  return getThemeClassNames(theme)
106
135
  }
107
136
 
108
- const onChange = value => {
137
+ const onChange = (value: string | null) => {
109
138
  dispatch("change", value)
110
- dropdown.hide()
139
+ dropdown?.hide()
111
140
  }
112
141
 
113
- const getCustomValue = value => {
142
+ const getCustomValue = (value: string | undefined) => {
114
143
  if (!value) {
115
144
  return value
116
145
  }
@@ -125,11 +154,11 @@
125
154
  return found ? null : value
126
155
  }
127
156
 
128
- const prettyPrint = color => {
157
+ const prettyPrint = (color: string) => {
129
158
  return capitalise(color.split("-").join(" "))
130
159
  }
131
160
 
132
- const getCheckColor = value => {
161
+ const getCheckColor = (value: string | undefined) => {
133
162
  // Use dynamic color for theme grays
134
163
  if (value?.includes("-gray-")) {
135
164
  return /^.*(gray-(50|75|100|200|300|400|500))\)$/.test(value)
@@ -137,10 +166,13 @@
137
166
  : "var(--spectrum-global-color-gray-50)"
138
167
  }
139
168
 
140
- // Use contrasating check for the dim colours
169
+ // Use contrasting check for the dim colours
141
170
  if (value?.includes("-100")) {
142
171
  return "var(--spectrum-global-color-gray-900)"
143
172
  }
173
+ if (value?.includes("-1200") || value?.includes("-800")) {
174
+ return "var(--spectrum-global-color-static-gray-50)"
175
+ }
144
176
 
145
177
  // Use black check for static white
146
178
  if (value?.includes("static-black")) {
@@ -157,7 +189,7 @@
157
189
  bind:this={preview}
158
190
  class="preview size--{size || 'M'}"
159
191
  on:click={() => {
160
- dropdown.toggle()
192
+ dropdown?.toggle()
161
193
  }}
162
194
  >
163
195
  <div
@@ -169,7 +201,7 @@
169
201
 
170
202
  <!-- svelte-ignore a11y-no-static-element-interactions -->
171
203
  <!-- svelte-ignore a11y-click-events-have-key-events -->
172
- <Popover bind:this={dropdown} anchor={preview} maxHeight={320} {offset} {align}>
204
+ <Popover bind:this={dropdown} anchor={preview} maxHeight={350} {offset} {align}>
173
205
  <Layout paddingX="XL" paddingY="L">
174
206
  <div class="container">
175
207
  {#each categories as category}
@@ -1,43 +1,47 @@
1
- <script>
1
+ <script lang="ts">
2
2
  import ActionButton from "../../ActionButton/ActionButton.svelte"
3
3
  import { uuid } from "../../helpers"
4
4
  import Icon from "../../Icon/Icon.svelte"
5
5
  import { createEventDispatcher } from "svelte"
6
6
 
7
- export let value = null
8
- export let title = "Upload file"
9
- export let disabled = false
10
- export let allowClear = null
11
- export let extensions = null
12
- export let handleFileTooLarge = null
13
- export let fileSizeLimit = BYTES_IN_MB * 20
14
- export let id = null
15
- export let previewUrl = null
7
+ const BYTES_IN_MB = 1000000
8
+
9
+ export let value: File | undefined = undefined
10
+ export let title: string = "Upload file"
11
+ export let disabled: boolean = false
12
+ export let allowClear: boolean | undefined = undefined
13
+ export let extensions: string[] | undefined = undefined
14
+ export let handleFileTooLarge: ((_file: File) => void) | undefined = undefined
15
+ export let fileSizeLimit: number = BYTES_IN_MB * 20
16
+ export let id: string | undefined = undefined
17
+ export let previewUrl: string | undefined = undefined
16
18
 
17
19
  const fieldId = id || uuid()
18
20
  const BYTES_IN_KB = 1000
19
- const BYTES_IN_MB = 1000000
20
21
 
21
22
  const dispatch = createEventDispatcher()
22
23
 
23
- let fileInput
24
+ let fileInput: HTMLInputElement | undefined
24
25
 
25
26
  $: inputAccept = Array.isArray(extensions) ? extensions.join(",") : "*"
26
27
 
27
- async function processFile(targetFile) {
28
- if (handleFileTooLarge && targetFile?.size >= fileSizeLimit) {
29
- handleFileTooLarge(targetFile)
30
- return
28
+ async function processFile(targetFile: File | undefined) {
29
+ if (targetFile) {
30
+ if (handleFileTooLarge && targetFile.size >= fileSizeLimit) {
31
+ handleFileTooLarge(targetFile)
32
+ return
33
+ }
34
+ dispatch("change", targetFile)
31
35
  }
32
- dispatch("change", targetFile)
33
36
  }
34
37
 
35
- function handleFile(evt) {
36
- processFile(evt.target.files[0])
38
+ function handleFile(evt: Event) {
39
+ const target = evt.target as HTMLInputElement
40
+ processFile(target.files?.[0])
37
41
  }
38
42
 
39
43
  function clearFile() {
40
- dispatch("change", null)
44
+ dispatch("change", undefined)
41
45
  }
42
46
  </script>
43
47
 
@@ -75,7 +79,9 @@
75
79
  {/if}
76
80
  </div>
77
81
  {/if}
78
- <ActionButton {disabled} on:click={fileInput.click()}>{title}</ActionButton>
82
+ <ActionButton {disabled} on:click={() => fileInput?.click()}>
83
+ {title}
84
+ </ActionButton>
79
85
  </div>
80
86
 
81
87
  <style>
@@ -20,7 +20,7 @@
20
20
  export let searchTerm: string | null = null
21
21
  export let customPopoverHeight: string | undefined = undefined
22
22
  export let open: boolean = false
23
- export let loading: boolean
23
+ export let loading: boolean = false
24
24
  export let onOptionMouseenter = () => {}
25
25
  export let onOptionMouseleave = () => {}
26
26
 
@@ -2,49 +2,78 @@
2
2
  import "@spectrum-css/textfield/dist/index-vars.css"
3
3
  import { createEventDispatcher } from "svelte"
4
4
 
5
- export let value = ""
5
+ export let value: string | undefined = ""
6
6
  export let placeholder: string | undefined = undefined
7
- export let disabled = false
8
- export let readonly = false
7
+ export let disabled: boolean = false
8
+ export let readonly: boolean = false
9
9
  export let id: string | undefined = undefined
10
10
  export let height: string | number | undefined = undefined
11
11
  export let minHeight: string | number | undefined = undefined
12
+ export let align = null
13
+ export let updateOnChange: boolean = false
14
+
12
15
  export const getCaretPosition = () => ({
13
16
  start: textarea.selectionStart,
14
17
  end: textarea.selectionEnd,
15
18
  })
16
- export let align = null
17
19
 
18
- let focus = false
19
- let textarea: any
20
20
  const dispatch = createEventDispatcher()
21
- const onChange = (event: any) => {
22
- dispatch("change", event.target.value)
23
- focus = false
21
+
22
+ let isFocused = false
23
+ let textarea: HTMLTextAreaElement
24
+ let scrollable = false
25
+
26
+ $: heightString = getStyleString("height", height)
27
+ $: minHeightString = getStyleString("min-height", minHeight)
28
+ $: dispatch("scrollable", scrollable)
29
+
30
+ export function focus() {
31
+ textarea.focus()
32
+ }
33
+
34
+ export function contents() {
35
+ return textarea.value
36
+ }
37
+
38
+ const onBlur = () => {
39
+ isFocused = false
40
+ updateValue()
41
+ }
42
+
43
+ const onChange = () => {
44
+ scrollable = textarea.clientHeight < textarea.scrollHeight
45
+ if (!updateOnChange) {
46
+ return
47
+ }
48
+ updateValue()
49
+ }
50
+
51
+ const updateValue = () => {
52
+ if (readonly || disabled) {
53
+ return
54
+ }
55
+ dispatch("change", textarea.value)
24
56
  }
25
57
 
26
58
  const getStyleString = (
27
59
  attribute: string,
28
60
  value: string | number | undefined
29
61
  ) => {
30
- if (!attribute || value == null) {
62
+ if (value == null) {
31
63
  return ""
32
64
  }
33
- if (typeof value === "number" && isNaN(value)) {
65
+ if (typeof value !== "number" || isNaN(value)) {
34
66
  return `${attribute}:${value};`
35
67
  }
36
68
  return `${attribute}:${value}px;`
37
69
  }
38
-
39
- $: heightString = getStyleString("height", height)
40
- $: minHeightString = getStyleString("min-height", minHeight)
41
70
  </script>
42
71
 
43
72
  <div
44
73
  style={`${heightString}${minHeightString}`}
45
74
  class="spectrum-Textfield spectrum-Textfield--multiline"
46
75
  class:is-disabled={disabled}
47
- class:is-focused={focus}
76
+ class:is-focused={isFocused}
48
77
  >
49
78
  <!-- prettier-ignore -->
50
79
  <textarea
@@ -55,8 +84,11 @@
55
84
  {disabled}
56
85
  {readonly}
57
86
  {id}
58
- on:focus={() => (focus = true)}
59
- on:blur={onChange}
87
+ on:input={onChange}
88
+ on:focus={() => (isFocused = true)}
89
+ on:blur={onBlur}
90
+ on:blur
91
+ on:keypress
60
92
  >{value || ""}</textarea>
61
93
  </div>
62
94
 
@@ -3,7 +3,7 @@
3
3
  import DatePicker from "./Core/DatePicker/DatePicker.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
@@ -1,23 +1,23 @@
1
- <script>
1
+ <script lang="ts">
2
2
  import Field from "./Field.svelte"
3
3
  import { CoreFile } from "./Core"
4
4
  import { createEventDispatcher } from "svelte"
5
5
 
6
- export let label = null
7
- export let labelPosition = "above"
8
- export let disabled = false
9
- export let allowClear = null
10
- export let handleFileTooLarge = () => {}
11
- export let previewUrl = null
12
- export let extensions = null
13
- export let error = null
14
- export let title = null
15
- export let value = null
16
- export let tooltip = null
17
- export let helpText = null
6
+ export let label: string | undefined = undefined
7
+ export let labelPosition: string = "above"
8
+ export let disabled: boolean = false
9
+ export let allowClear: boolean | undefined = undefined
10
+ export let handleFileTooLarge: (_file: File) => void = () => {}
11
+ export let previewUrl: string | undefined = undefined
12
+ export let extensions: string[] | undefined = undefined
13
+ export let error: string | undefined = undefined
14
+ export let title: string | undefined = undefined
15
+ export let value: File | undefined = undefined
16
+ export let tooltip: string | undefined = undefined
17
+ export let helpText: string | undefined = undefined
18
18
 
19
19
  const dispatch = createEventDispatcher()
20
- const onChange = e => {
20
+ const onChange = (e: CustomEvent) => {
21
21
  value = e.detail
22
22
  dispatch("change", e.detail)
23
23
  }
@@ -25,7 +25,6 @@
25
25
 
26
26
  <Field {helpText} {label} {labelPosition} {error} {tooltip}>
27
27
  <CoreFile
28
- {error}
29
28
  {disabled}
30
29
  {allowClear}
31
30
  {title}
@@ -1,29 +1,31 @@
1
- <script>
1
+ <script lang="ts" generics="Option">
2
2
  import { createEventDispatcher } from "svelte"
3
3
  import Multiselect from "./Core/Multiselect.svelte"
4
4
  import Field from "./Field.svelte"
5
5
 
6
- export let value = []
7
- export let label = null
6
+ export let value: string[] | string = []
7
+ export let label: string | undefined = undefined
8
8
  export let disabled = false
9
9
  export let readonly = false
10
10
  export let labelPosition = "above"
11
- export let error = null
12
- export let placeholder = null
13
- export let options = []
14
- export let getOptionLabel = option => option
15
- export let getOptionValue = option => option
11
+ export let error: string | undefined = undefined
12
+ export let placeholder: string | undefined = undefined
13
+ export let options: Option[] = []
14
+ export let getOptionLabel = (option: Option) => option
15
+ export let getOptionValue = (option: Option) => option
16
16
  export let sort = false
17
17
  export let autoWidth = false
18
18
  export let autocomplete = false
19
- export let searchTerm = null
20
- export let customPopoverHeight
21
- export let helpText = null
19
+ export let searchTerm: string | undefined = undefined
20
+ export let customPopoverHeight: string | undefined = undefined
21
+ export let helpText: string | undefined = undefined
22
22
  export let onOptionMouseenter = () => {}
23
23
  export let onOptionMouseleave = () => {}
24
24
 
25
+ $: arrayValue = value && !Array.isArray(value) ? [value] : (value as string[])
26
+
25
27
  const dispatch = createEventDispatcher()
26
- const onChange = e => {
28
+ const onChange = (e: any) => {
27
29
  value = e.detail
28
30
  dispatch("change", e.detail)
29
31
  }
@@ -31,10 +33,9 @@
31
33
 
32
34
  <Field {helpText} {label} {labelPosition} {error}>
33
35
  <Multiselect
34
- {error}
35
36
  {disabled}
36
37
  {readonly}
37
- {value}
38
+ bind:value={arrayValue}
38
39
  {options}
39
40
  {placeholder}
40
41
  {sort}
@@ -1,9 +1,4 @@
1
- <script lang="ts" context="module">
2
- type O = any
3
- type V = any
4
- </script>
5
-
6
- <script lang="ts">
1
+ <script lang="ts" generics="O extends any,V">
7
2
  import Field from "./Field.svelte"
8
3
  import Select from "./Core/Select.svelte"
9
4
  import { createEventDispatcher } from "svelte"
@@ -22,9 +17,11 @@
22
17
  export let getOptionValue = (option: O, _index?: number) =>
23
18
  extractProperty(option, "value")
24
19
  export let getOptionSubtitle = (option: O, _index?: number) =>
25
- option?.subtitle
26
- export let getOptionIcon = (option: O, _index?: number) => option?.icon
27
- export let getOptionColour = (option: O, _index?: number) => option?.colour
20
+ (option as any)?.subtitle
21
+ export let getOptionIcon = (option: O, _index?: number) =>
22
+ (option as any)?.icon
23
+ export let getOptionColour = (option: O, _index?: number) =>
24
+ (option as any)?.colour
28
25
  export let useOptionIconImage = false
29
26
  export let isOptionEnabled:
30
27
  | ((_option: O, _index?: number) => boolean)
@@ -5,17 +5,25 @@
5
5
 
6
6
  export let value: string | undefined = undefined
7
7
  export let label: string | undefined = undefined
8
- export let labelPosition: string = "above"
8
+ export let labelPosition = "above"
9
9
  export let placeholder: string | undefined = undefined
10
10
  export let disabled = false
11
11
  export let error: string | undefined = undefined
12
- export let getCaretPosition: any = undefined
13
- export let height: string | number | undefined = undefined
14
- export let minHeight: string | number | undefined = undefined
12
+ export let height: number | undefined = undefined
13
+ export let minHeight: number | undefined = undefined
15
14
  export let helpText: string | undefined = undefined
16
15
 
16
+ let textarea: TextArea
17
+ export function focus() {
18
+ textarea.focus()
19
+ }
20
+
21
+ export function contents() {
22
+ return textarea.contents()
23
+ }
24
+
17
25
  const dispatch = createEventDispatcher()
18
- const onChange = (e: any) => {
26
+ const onChange = (e: CustomEvent<string>) => {
19
27
  value = e.detail
20
28
  dispatch("change", e.detail)
21
29
  }
@@ -23,12 +31,13 @@
23
31
 
24
32
  <Field {helpText} {label} {labelPosition} {error}>
25
33
  <TextArea
26
- bind:getCaretPosition
34
+ bind:this={textarea}
27
35
  {disabled}
28
36
  {value}
29
37
  {placeholder}
30
38
  {height}
31
39
  {minHeight}
32
40
  on:change={onChange}
41
+ on:keypress
33
42
  />
34
43
  </Field>
@@ -3,10 +3,10 @@
3
3
  import Switch from "./Core/Switch.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
- export let text = null
9
+ export let text = undefined
10
10
  export let disabled = false
11
11
  export let error = null
12
12
  export let helpText = null
@@ -25,12 +25,12 @@
25
25
  noWrap={tooltipWrap}
26
26
  >
27
27
  <div class="icon" class:newStyles>
28
+ <!-- svelte-ignore a11y-mouse-events-have-key-events -->
28
29
  <svg
29
30
  on:contextmenu
30
31
  on:click
31
32
  on:mouseover
32
33
  on:mouseleave
33
- on:focus
34
34
  class:hoverable
35
35
  class:disabled
36
36
  class="spectrum-Icon spectrum-Icon--size{size}"