@budibase/bbui 1.58.13 → 2.0.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 (181) hide show
  1. package/LICENSE +375 -0
  2. package/dist/bbui.es.js +14 -0
  3. package/dist/bbui.es.js.map +1 -0
  4. package/package.json +68 -32
  5. package/src/ActionButton/ActionButton.svelte +102 -0
  6. package/src/ActionGroup/ActionGroup.svelte +26 -0
  7. package/src/ActionMenu/ActionMenu.svelte +44 -0
  8. package/src/Actions/autoresize_textarea.js +9 -9
  9. package/src/Actions/click_outside.js +5 -5
  10. package/src/Actions/position_dropdown.js +46 -37
  11. package/src/Avatar/Avatar.svelte +62 -0
  12. package/src/Badge/Badge.svelte +29 -0
  13. package/src/Banner/Banner.svelte +72 -0
  14. package/src/Banner/BannerDisplay.svelte +41 -0
  15. package/src/Button/Button.svelte +102 -200
  16. package/src/ButtonGroup/ButtonGroup.svelte +30 -0
  17. package/src/ClearButton/ClearButton.svelte +19 -0
  18. package/src/ColorPicker/ColorPicker.svelte +297 -0
  19. package/src/DetailSummary/DetailSummary.svelte +83 -0
  20. package/src/Divider/Divider.svelte +28 -0
  21. package/src/Drawer/Drawer.svelte +76 -51
  22. package/src/Drawer/DrawerContent.svelte +46 -0
  23. package/src/Form/Checkbox.svelte +21 -132
  24. package/src/Form/Combobox.svelte +45 -0
  25. package/src/Form/Core/Checkbox.svelte +69 -0
  26. package/src/Form/Core/CheckboxGroup.svelte +68 -0
  27. package/src/Form/Core/Combobox.svelte +142 -0
  28. package/src/Form/Core/DatePicker.svelte +257 -0
  29. package/src/Form/Core/Dropzone.svelte +453 -0
  30. package/src/Form/Core/InputDropdown.svelte +228 -0
  31. package/src/Form/Core/Multiselect.svelte +90 -0
  32. package/src/Form/Core/Picker.svelte +259 -0
  33. package/src/Form/Core/PickerDropdown.svelte +415 -0
  34. package/src/Form/Core/RadioGroup.svelte +48 -0
  35. package/src/Form/Core/RichTextField.svelte +42 -0
  36. package/src/Form/Core/Search.svelte +105 -0
  37. package/src/Form/Core/Select.svelte +75 -0
  38. package/src/Form/Core/Slider.svelte +86 -0
  39. package/src/Form/Core/Stepper.svelte +172 -0
  40. package/src/Form/Core/Switch.svelte +37 -0
  41. package/src/Form/Core/TextArea.svelte +78 -0
  42. package/src/Form/Core/TextField.svelte +119 -0
  43. package/src/Form/Core/index.js +15 -0
  44. package/src/Form/DatePicker.svelte +39 -0
  45. package/src/Form/Dropzone.svelte +42 -0
  46. package/src/Form/Field.svelte +42 -0
  47. package/src/Form/FieldLabel.svelte +32 -0
  48. package/src/Form/Input.svelte +41 -187
  49. package/src/Form/InputDropdown.svelte +55 -0
  50. package/src/Form/Multiselect.svelte +36 -320
  51. package/src/Form/PickerDropdown.svelte +132 -0
  52. package/src/Form/RadioGroup.svelte +42 -0
  53. package/src/Form/RichTextField.svelte +36 -0
  54. package/src/Form/Search.svelte +36 -0
  55. package/src/Form/Select.svelte +48 -88
  56. package/src/Form/Slider.svelte +16 -91
  57. package/src/Form/Stepper.svelte +45 -0
  58. package/src/Form/TextArea.svelte +30 -128
  59. package/src/Form/Toggle.svelte +20 -110
  60. package/src/Icon/Icon.svelte +91 -0
  61. package/src/Icon/IconAvatar.svelte +58 -0
  62. package/src/IconPicker/IconPicker.svelte +177 -0
  63. package/src/IconSideNav/IconSideNav.svelte +14 -0
  64. package/src/IconSideNav/IconSideNavItem.svelte +56 -0
  65. package/src/InlineAlert/InlineAlert.svelte +60 -0
  66. package/src/Label/Label.svelte +29 -0
  67. package/src/Layout/Layout.svelte +94 -0
  68. package/src/Layout/Page.svelte +32 -0
  69. package/src/Link/Link.svelte +24 -0
  70. package/src/List/List.svelte +28 -0
  71. package/src/List/ListItem.svelte +90 -0
  72. package/src/Markdown/MarkdownEditor.svelte +60 -0
  73. package/src/Markdown/MarkdownViewer.svelte +70 -0
  74. package/src/Markdown/SpectrumMDE.svelte +184 -0
  75. package/src/Menu/Item.svelte +96 -0
  76. package/src/Menu/Menu.svelte +7 -0
  77. package/src/Menu/Menu.svench +19 -0
  78. package/src/Menu/Section.svelte +10 -0
  79. package/src/Menu/Separator.svelte +1 -0
  80. package/src/Modal/Content.svelte +0 -11
  81. package/src/Modal/CustomContent.svelte +9 -6
  82. package/src/Modal/Modal.svelte +104 -51
  83. package/src/Modal/ModalContent.svelte +131 -73
  84. package/src/Modal/QuizModal.svelte +16 -17
  85. package/src/Notification/Notification.svelte +70 -0
  86. package/src/Notification/NotificationDisplay.svelte +43 -0
  87. package/src/Pagination/Pagination.svelte +57 -0
  88. package/src/Popover/Popover.svelte +43 -33
  89. package/src/ProgressBar/ProgressBar.svelte +67 -0
  90. package/src/ProgressCircle/ProgressCircle.svelte +62 -0
  91. package/src/SideNavigation/Item.svelte +61 -0
  92. package/src/SideNavigation/Navigation.svelte +12 -0
  93. package/src/StatusLight/StatusLight.svelte +80 -0
  94. package/src/Stores/Notifications.svench.svx +1 -1
  95. package/src/Stores/banner.js +65 -0
  96. package/src/Stores/notifications.js +75 -38
  97. package/src/Table/ArrayRenderer.svelte +17 -0
  98. package/src/Table/AttachmentRenderer.svelte +73 -0
  99. package/src/Table/BoldRenderer.svelte +15 -0
  100. package/src/Table/BooleanRenderer.svelte +42 -0
  101. package/src/Table/CellRenderer.svelte +69 -0
  102. package/src/Table/CodeRenderer.svelte +14 -0
  103. package/src/Table/DateTimeRenderer.svelte +29 -0
  104. package/src/Table/InternalRenderer.svelte +24 -0
  105. package/src/Table/RelationshipRenderer.svelte +40 -0
  106. package/src/Table/SelectEditRenderer.svelte +28 -0
  107. package/src/Table/StringRenderer.svelte +14 -0
  108. package/src/Table/Table.svelte +635 -0
  109. package/src/Table/index.js +1 -0
  110. package/src/Tabs/Tab.svelte +88 -0
  111. package/src/Tabs/Tabs.svelte +130 -0
  112. package/src/Tags/Tag.svelte +43 -0
  113. package/src/Tags/Tags.svelte +7 -0
  114. package/src/Tooltip/Tooltip.svelte +34 -0
  115. package/src/Tooltip/TooltipWrapper.svelte +60 -0
  116. package/src/TreeView/Item.svelte +41 -0
  117. package/src/TreeView/Tree.svelte +16 -0
  118. package/src/Typography/Body.svelte +21 -0
  119. package/src/Typography/Code.svelte +10 -0
  120. package/src/Typography/Detail.svelte +19 -0
  121. package/src/Typography/Heading.svelte +17 -0
  122. package/{dist → src}/bbui.css +2 -99
  123. package/src/context.js +1 -1
  124. package/src/helpers.js +134 -0
  125. package/src/index.js +95 -40
  126. package/src/spectrum-icons-rollup.js +31 -0
  127. package/src/spectrum-icons-vite.js +31 -0
  128. package/dist/dist/bundle.css +0 -42
  129. package/dist/dist/bundle.css.map +0 -64
  130. package/dist/index.js +0 -36193
  131. package/dist/index.mjs +0 -36147
  132. package/src/Button/Close.svelte +0 -59
  133. package/src/Button/Close.svench +0 -36
  134. package/src/Button/TextButton.svelte +0 -128
  135. package/src/Button/TextButton.svench +0 -69
  136. package/src/DatePicker/DatePicker.svelte +0 -45
  137. package/src/DatePicker/DatePicker.svench +0 -17
  138. package/src/DropdownMenu/DropdownMenu.svelte +0 -77
  139. package/src/DropdownMenu/DropdownMenu.svench +0 -161
  140. package/src/Dropzone/Dropzone.svelte +0 -294
  141. package/src/Dropzone/Dropzone.svench +0 -17
  142. package/src/Dropzone/fileTypes.js +0 -5
  143. package/src/Form/Checkbox.svench.svx +0 -67
  144. package/src/Form/DataList.svelte +0 -158
  145. package/src/Form/DataList.svench +0 -57
  146. package/src/Form/Input.svench +0 -62
  147. package/src/Form/Multiselect.svench +0 -63
  148. package/src/Form/Radio.svelte +0 -133
  149. package/src/Form/Radio.svench.svx +0 -64
  150. package/src/Form/RichText.svelte +0 -61
  151. package/src/Form/RichText.svench.svx +0 -40
  152. package/src/Form/Select.svench +0 -62
  153. package/src/Form/Slider.svench +0 -26
  154. package/src/Form/TextArea.svench +0 -30
  155. package/src/Form/Toggle.svench +0 -21
  156. package/src/Icons/Contribution.svelte +0 -14
  157. package/src/Icons/Icon.svelte +0 -36
  158. package/src/Icons/Icon.svench +0 -109
  159. package/src/Icons/icon-paths.js +0 -136
  160. package/src/Links/Home.svelte +0 -51
  161. package/src/Links/Home.svench +0 -19
  162. package/src/List/Items/DetailSummary.svelte +0 -85
  163. package/src/List/Items/DetailSummary.svench +0 -53
  164. package/src/List/Search.svelte +0 -34
  165. package/src/List/Search.svench +0 -8
  166. package/src/Spacer/Spacer.svelte +0 -50
  167. package/src/Spacer/Spacer.svench +0 -51
  168. package/src/Styleguide/Body.svelte +0 -72
  169. package/src/Styleguide/Borders.svench +0 -175
  170. package/src/Styleguide/Budibase-logo.svelte +0 -68
  171. package/src/Styleguide/Color.svench +0 -201
  172. package/src/Styleguide/Heading.svelte +0 -74
  173. package/src/Styleguide/Label.svelte +0 -70
  174. package/src/Styleguide/Logo.svelte +0 -16
  175. package/src/Styleguide/Logo.svench +0 -8
  176. package/src/Styleguide/Spacing.svench +0 -191
  177. package/src/Styleguide/Typography.svench +0 -227
  178. package/src/Switcher/Switcher.svelte +0 -47
  179. package/src/Switcher/Switcher.svench +0 -27
  180. package/src/index.svench.svx +0 -35
  181. package/src/utils/buildStyle.js +0 -14
@@ -0,0 +1,132 @@
1
+ <script>
2
+ import Field from "./Field.svelte"
3
+ import PickerDropdown from "./Core/PickerDropdown.svelte"
4
+ import { createEventDispatcher } from "svelte"
5
+
6
+ export let primaryValue = null
7
+ export let secondaryValue = null
8
+ export let inputType = "text"
9
+ export let label = null
10
+ export let labelPosition = "above"
11
+ export let secondaryPlaceholder = null
12
+ export let autocomplete
13
+ export let placeholder = null
14
+ export let disabled = false
15
+ export let readonly = false
16
+ export let error = null
17
+ export let getSecondaryOptionLabel = option =>
18
+ extractProperty(option, "label")
19
+ export let getSecondaryOptionValue = option =>
20
+ extractProperty(option, "value")
21
+ export let getSecondaryOptionColour = () => {}
22
+ export let getSecondaryOptionIcon = () => {}
23
+ export let quiet = false
24
+ export let dataCy
25
+ export let autofocus
26
+ export let primaryOptions = []
27
+ export let secondaryOptions = []
28
+ export let searchTerm
29
+ export let showClearIcon = true
30
+
31
+ let primaryLabel
32
+ let secondaryLabel
33
+ const dispatch = createEventDispatcher()
34
+
35
+ $: secondaryFieldText = getSecondaryFieldText(
36
+ secondaryValue,
37
+ secondaryOptions,
38
+ secondaryPlaceholder
39
+ )
40
+ $: secondaryFieldIcon = getSecondaryFieldAttribute(
41
+ getSecondaryOptionIcon,
42
+ secondaryValue,
43
+ secondaryOptions
44
+ )
45
+ $: secondaryFieldColour = getSecondaryFieldAttribute(
46
+ getSecondaryOptionColour,
47
+ secondaryValue,
48
+ secondaryOptions
49
+ )
50
+
51
+ const getSecondaryFieldAttribute = (getAttribute, value, options) => {
52
+ // Wait for options to load if there is a value but no options
53
+
54
+ if (!options?.length) {
55
+ return ""
56
+ }
57
+
58
+ const index = options.findIndex(
59
+ (option, idx) => getSecondaryOptionValue(option, idx) === value
60
+ )
61
+
62
+ return index !== -1 ? getAttribute(options[index], index) : null
63
+ }
64
+
65
+ const getSecondaryFieldText = (value, options, placeholder) => {
66
+ // Always use placeholder if no value
67
+ if (value == null || value === "") {
68
+ return placeholder || "Choose an option"
69
+ }
70
+
71
+ return getSecondaryFieldAttribute(getSecondaryOptionLabel, value, options)
72
+ }
73
+
74
+ const onPickPrimary = e => {
75
+ primaryLabel = e?.detail?.label || null
76
+ primaryValue = e?.detail?.value || null
77
+ dispatch("pickprimary", e?.detail?.value || {})
78
+ }
79
+
80
+ const onPickSecondary = e => {
81
+ secondaryValue = e.detail
82
+ dispatch("picksecondary", e.detail)
83
+ }
84
+
85
+ const extractProperty = (value, property) => {
86
+ if (value && typeof value === "object") {
87
+ return value[property]
88
+ }
89
+ return value
90
+ }
91
+
92
+ const updateSearchTerm = e => {
93
+ searchTerm = e.detail
94
+ }
95
+ </script>
96
+
97
+ <Field {label} {labelPosition} {error}>
98
+ <PickerDropdown
99
+ {searchTerm}
100
+ {autocomplete}
101
+ {dataCy}
102
+ {error}
103
+ {disabled}
104
+ {readonly}
105
+ {placeholder}
106
+ {inputType}
107
+ {quiet}
108
+ {autofocus}
109
+ {primaryOptions}
110
+ {secondaryOptions}
111
+ {getSecondaryOptionLabel}
112
+ {getSecondaryOptionValue}
113
+ {getSecondaryOptionIcon}
114
+ {getSecondaryOptionColour}
115
+ {secondaryFieldText}
116
+ {secondaryFieldIcon}
117
+ {secondaryFieldColour}
118
+ {primaryValue}
119
+ {secondaryValue}
120
+ {primaryLabel}
121
+ {secondaryLabel}
122
+ {showClearIcon}
123
+ on:pickprimary={onPickPrimary}
124
+ on:picksecondary={onPickSecondary}
125
+ on:search={updateSearchTerm}
126
+ on:click
127
+ on:input
128
+ on:blur
129
+ on:focus
130
+ on:keyup
131
+ />
132
+ </Field>
@@ -0,0 +1,42 @@
1
+ <script>
2
+ import Field from "./Field.svelte"
3
+ import RadioGroup from "./Core/RadioGroup.svelte"
4
+ import { createEventDispatcher } from "svelte"
5
+
6
+ export let value = null
7
+ export let label = null
8
+ export let disabled = false
9
+ export let labelPosition = "above"
10
+ export let error = null
11
+ export let options = []
12
+ export let direction = "vertical"
13
+ export let getOptionLabel = option => extractProperty(option, "label")
14
+ export let getOptionValue = option => extractProperty(option, "value")
15
+ export let getOptionTitle = option => extractProperty(option, "label")
16
+
17
+ const dispatch = createEventDispatcher()
18
+ const onChange = e => {
19
+ value = e.detail
20
+ dispatch("change", e.detail)
21
+ }
22
+ const extractProperty = (value, property) => {
23
+ if (value && typeof value === "object") {
24
+ return value[property]
25
+ }
26
+ return value
27
+ }
28
+ </script>
29
+
30
+ <Field {label} {labelPosition} {error}>
31
+ <RadioGroup
32
+ {error}
33
+ {disabled}
34
+ {value}
35
+ {options}
36
+ {direction}
37
+ {getOptionLabel}
38
+ {getOptionValue}
39
+ {getOptionTitle}
40
+ on:change={onChange}
41
+ />
42
+ </Field>
@@ -0,0 +1,36 @@
1
+ <script>
2
+ import Field from "./Field.svelte"
3
+ import RichTextField from "./Core/RichTextField.svelte"
4
+ import { createEventDispatcher } from "svelte"
5
+
6
+ export let value = null
7
+ export let label = null
8
+ export let labelPosition = "above"
9
+ export let placeholder = null
10
+ export let disabled = false
11
+ export let error = null
12
+ export let height = null
13
+ export let id = null
14
+ export let fullScreenOffset = null
15
+ export let easyMDEOptions = null
16
+
17
+ const dispatch = createEventDispatcher()
18
+ const onChange = e => {
19
+ value = e.detail
20
+ dispatch("change", e.detail)
21
+ }
22
+ </script>
23
+
24
+ <Field {label} {labelPosition} {error}>
25
+ <RichTextField
26
+ {error}
27
+ {disabled}
28
+ {value}
29
+ {placeholder}
30
+ {height}
31
+ {id}
32
+ {fullScreenOffset}
33
+ {easyMDEOptions}
34
+ on:change={onChange}
35
+ />
36
+ </Field>
@@ -0,0 +1,36 @@
1
+ <script>
2
+ import Field from "./Field.svelte"
3
+ import Search from "./Core/Search.svelte"
4
+ import { createEventDispatcher } from "svelte"
5
+
6
+ export let value = null
7
+ export let label = null
8
+ export let labelPosition = "above"
9
+ export let placeholder = null
10
+ export let disabled = false
11
+ export let updateOnChange = true
12
+ export let quiet = false
13
+ export let inputRef
14
+
15
+ const dispatch = createEventDispatcher()
16
+ const onChange = e => {
17
+ value = e.detail
18
+ dispatch("change", e.detail)
19
+ }
20
+ </script>
21
+
22
+ <Field {label} {labelPosition}>
23
+ <Search
24
+ {updateOnChange}
25
+ {disabled}
26
+ {value}
27
+ {placeholder}
28
+ {quiet}
29
+ bind:inputRef
30
+ on:change={onChange}
31
+ on:click
32
+ on:input
33
+ on:focus
34
+ on:blur
35
+ />
36
+ </Field>
@@ -1,95 +1,55 @@
1
1
  <script>
2
- import Icon from "../Icons/Icon.svelte";
3
- import Label from "../Styleguide/Label.svelte";
2
+ import Field from "./Field.svelte"
3
+ import Select from "./Core/Select.svelte"
4
+ import { createEventDispatcher } from "svelte"
4
5
 
5
- export let value = "";
6
- export let name = undefined;
7
- export let label = undefined;
8
- export let thin = false;
9
- export let extraThin = false;
10
- export let secondary = false;
11
- export let outline = false;
12
- export let disabled = false;
13
- </script>
14
-
15
- <style>
16
- select {
17
- font-family: var(--font-sans);
18
- display: block !important;
19
- width: 100% !important;
20
- border-radius: var(--border-radius-s);
21
- border: none;
22
- text-align: left;
23
- color: var(--ink);
24
- font-size: var(--font-size-s);
25
- padding: var(--spacing-m) 2rem var(--spacing-m) var(--spacing-m) !important;
26
- appearance: none !important;
27
- -webkit-appearance: none !important;
28
- -moz-appearance: none !important;
29
- align-items: center;
30
- white-space: pre;
31
- outline: none;
32
- border: var(--border-transparent);
33
- background-color: var(--background);
34
- }
35
- select.thin {
36
- padding: var(--spacing-m);
37
- font-size: var(--font-size-xs);
38
- }
39
- select.extraThin {
40
- padding: var(--spacing-s) 2rem var(--spacing-s) var(--spacing-m) !important;
41
- font-size: var(--font-size-xs);
42
- }
43
- select.secondary {
44
- background: var(--grey-2);
45
- }
46
- select.outline {
47
- border: var(--border-light-2);
48
- }
49
- select:focus {
50
- border: var(--border-blue);
51
- }
52
- select:disabled {
53
- background: var(--grey-4);
54
- color: var(--grey-6);
55
- }
6
+ export let value = null
7
+ export let label = undefined
8
+ export let disabled = false
9
+ export let readonly = false
10
+ export let labelPosition = "above"
11
+ export let error = null
12
+ export let placeholder = "Choose an option"
13
+ export let options = []
14
+ export let getOptionLabel = option => extractProperty(option, "label")
15
+ export let getOptionValue = option => extractProperty(option, "value")
16
+ export let getOptionIcon = option => option?.icon
17
+ export let getOptionColour = option => option?.colour
18
+ export let quiet = false
19
+ export let autoWidth = false
20
+ export let sort = false
21
+ export let tooltip = ""
56
22
 
57
- .relative {
58
- position: relative !important;
59
- display: block;
23
+ const dispatch = createEventDispatcher()
24
+ const onChange = e => {
25
+ value = e.detail
26
+ dispatch("change", e.detail)
60
27
  }
61
28
 
62
- .pointer {
63
- right: 0 !important;
64
- top: 0 !important;
65
- bottom: 0 !important;
66
- position: absolute !important;
67
- pointer-events: none !important;
68
- padding-left: 0.5rem !important;
69
- align-items: center !important;
70
- display: flex !important;
71
- color: var(--ink);
29
+ const extractProperty = (value, property) => {
30
+ if (value && typeof value === "object") {
31
+ return value[property]
32
+ }
33
+ return value
72
34
  }
73
- </style>
35
+ </script>
74
36
 
75
- <div>
76
- {#if label}
77
- <Label extraSmall grey forAttr={name}>{label}</Label>
78
- {/if}
79
- <div class="relative">
80
- <select
81
- {name}
82
- class:thin
83
- class:extraThin
84
- class:secondary
85
- class:outline
86
- {disabled}
87
- on:change
88
- bind:value>
89
- <slot />
90
- </select>
91
- <div class="pointer">
92
- <Icon name="arrowdown" />
93
- </div>
94
- </div>
95
- </div>
37
+ <Field {label} {labelPosition} {error} {tooltip}>
38
+ <Select
39
+ {quiet}
40
+ {error}
41
+ {disabled}
42
+ {readonly}
43
+ {value}
44
+ {options}
45
+ {placeholder}
46
+ {autoWidth}
47
+ {sort}
48
+ {getOptionLabel}
49
+ {getOptionValue}
50
+ {getOptionIcon}
51
+ {getOptionColour}
52
+ on:change={onChange}
53
+ on:click
54
+ />
55
+ </Field>
@@ -1,99 +1,24 @@
1
1
  <script>
2
- import Label from "../Styleguide/Label.svelte"
2
+ import Field from "./Field.svelte"
3
+ import Slider from "./Core/Slider.svelte"
4
+ import { createEventDispatcher } from "svelte"
3
5
 
4
- export let label
6
+ export let value = null
7
+ export let label = null
8
+ export let labelPosition = "above"
5
9
  export let min = 0
6
10
  export let max = 100
7
11
  export let step = 1
8
- export let value
9
- export let showValue = false
10
- export let showRange = false
11
- </script>
12
-
13
- <style>
14
- .container {
15
- display: flex;
16
- flex-direction: row;
17
- justify-content: flex-start;
18
- align-items: center;
19
- gap: var(--spacing-s);
20
- }
12
+ export let disabled = false
13
+ export let error = null
21
14
 
22
- span {
23
- flex: 0 0 auto;
24
- color: var(--grey-5);
25
- font-family: var(--font-sans);
26
- font-size: var(--font-size-xs);
27
- font-weight: 400;
28
- }
29
-
30
- input[type="range"] {
31
- width: 100%;
32
- margin: 0;
33
- background-color: transparent;
34
- -webkit-appearance: none;
35
- flex: 1 1 auto;
36
- }
37
- input[type="range"]:focus {
38
- outline: none;
15
+ const dispatch = createEventDispatcher()
16
+ const onChange = e => {
17
+ value = e.detail
18
+ dispatch("change", e.detail)
39
19
  }
40
- input[type="range"]::-webkit-slider-runnable-track {
41
- background: var(--grey-4);
42
- border-radius: 9px;
43
- width: 100%;
44
- height: 18px;
45
- cursor: pointer;
46
- padding: 0 2px;
47
- }
48
- input[type="range"]::-webkit-slider-thumb {
49
- width: 14px;
50
- height: 14px;
51
- background: white;
52
- border-radius: 100%;
53
- cursor: pointer;
54
- -webkit-appearance: none;
55
- border: none;
56
- margin-top: 2px;
57
- }
58
- input[type="range"]::-moz-range-track {
59
- background: var(--grey-4);
60
- border-radius: 9px;
61
- width: 100%;
62
- height: 18px;
63
- cursor: pointer;
64
- padding: 0 2px;
65
- }
66
- input[type="range"]::-moz-range-thumb {
67
- width: 14px;
68
- height: 14px;
69
- background: white;
70
- border-radius: 100%;
71
- cursor: pointer;
72
- border: none;
73
- }
74
- </style>
20
+ </script>
75
21
 
76
- <div>
77
- {#if label}
78
- <Label extraSmall grey>
79
- {label}
80
- {#if showValue && value != null}
81
- ({value})
82
- {/if}
83
- </Label>
84
- {/if}
85
- <div class="container">
86
- {#if showRange && min != null}
87
- <span>{min}</span>
88
- {/if}
89
- <input
90
- type="range"
91
- bind:value
92
- {min}
93
- {max}
94
- {step} />
95
- {#if showRange && max != null}
96
- <span>{max}</span>
97
- {/if}
98
- </div>
99
- </div>
22
+ <Field {label} {labelPosition} {error}>
23
+ <Slider {disabled} {value} {min} {max} {step} on:change={onChange} />
24
+ </Field>
@@ -0,0 +1,45 @@
1
+ <script>
2
+ import Field from "./Field.svelte"
3
+ import Stepper from "./Core/Stepper.svelte"
4
+ import { createEventDispatcher } from "svelte"
5
+
6
+ export let value = null
7
+ export let label = null
8
+ export let labelPosition = "above"
9
+ export let placeholder = null
10
+ export let disabled = false
11
+ export let readonly = false
12
+ export let error = null
13
+ export let updateOnChange = true
14
+ export let quiet = false
15
+ export let min = null
16
+ export let max = null
17
+ export let step = 1
18
+
19
+ const dispatch = createEventDispatcher()
20
+ const onChange = e => {
21
+ value = e.detail
22
+ dispatch("change", e.detail)
23
+ }
24
+ </script>
25
+
26
+ <Field {label} {labelPosition} {error}>
27
+ <Stepper
28
+ {updateOnChange}
29
+ {error}
30
+ {disabled}
31
+ {readonly}
32
+ {value}
33
+ {placeholder}
34
+ {quiet}
35
+ {min}
36
+ {max}
37
+ {step}
38
+ on:change={onChange}
39
+ on:click
40
+ on:input
41
+ on:blur
42
+ on:focus
43
+ on:keyup
44
+ />
45
+ </Field>