@budibase/bbui 1.58.13 → 2.0.1
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/LICENSE +375 -0
- package/dist/bbui.es.js +14 -0
- package/dist/bbui.es.js.map +1 -0
- package/package.json +68 -32
- package/src/ActionButton/ActionButton.svelte +102 -0
- package/src/ActionGroup/ActionGroup.svelte +26 -0
- package/src/ActionMenu/ActionMenu.svelte +44 -0
- package/src/Actions/autoresize_textarea.js +9 -9
- package/src/Actions/click_outside.js +5 -5
- package/src/Actions/position_dropdown.js +46 -37
- package/src/Avatar/Avatar.svelte +62 -0
- package/src/Badge/Badge.svelte +29 -0
- package/src/Banner/Banner.svelte +72 -0
- package/src/Banner/BannerDisplay.svelte +41 -0
- package/src/Button/Button.svelte +102 -200
- package/src/ButtonGroup/ButtonGroup.svelte +30 -0
- package/src/ClearButton/ClearButton.svelte +19 -0
- package/src/ColorPicker/ColorPicker.svelte +297 -0
- package/src/DetailSummary/DetailSummary.svelte +83 -0
- package/src/Divider/Divider.svelte +28 -0
- package/src/Drawer/Drawer.svelte +76 -51
- package/src/Drawer/DrawerContent.svelte +46 -0
- package/src/Form/Checkbox.svelte +21 -132
- package/src/Form/Combobox.svelte +45 -0
- package/src/Form/Core/Checkbox.svelte +69 -0
- package/src/Form/Core/CheckboxGroup.svelte +68 -0
- package/src/Form/Core/Combobox.svelte +142 -0
- package/src/Form/Core/DatePicker.svelte +257 -0
- package/src/Form/Core/Dropzone.svelte +453 -0
- package/src/Form/Core/InputDropdown.svelte +228 -0
- package/src/Form/Core/Multiselect.svelte +90 -0
- package/src/Form/Core/Picker.svelte +259 -0
- package/src/Form/Core/PickerDropdown.svelte +415 -0
- package/src/Form/Core/RadioGroup.svelte +48 -0
- package/src/Form/Core/RichTextField.svelte +42 -0
- package/src/Form/Core/Search.svelte +105 -0
- package/src/Form/Core/Select.svelte +75 -0
- package/src/Form/Core/Slider.svelte +86 -0
- package/src/Form/Core/Stepper.svelte +172 -0
- package/src/Form/Core/Switch.svelte +37 -0
- package/src/Form/Core/TextArea.svelte +78 -0
- package/src/Form/Core/TextField.svelte +119 -0
- package/src/Form/Core/index.js +15 -0
- package/src/Form/DatePicker.svelte +39 -0
- package/src/Form/Dropzone.svelte +42 -0
- package/src/Form/Field.svelte +42 -0
- package/src/Form/FieldLabel.svelte +32 -0
- package/src/Form/Input.svelte +41 -187
- package/src/Form/InputDropdown.svelte +55 -0
- package/src/Form/Multiselect.svelte +36 -320
- package/src/Form/PickerDropdown.svelte +132 -0
- package/src/Form/RadioGroup.svelte +42 -0
- package/src/Form/RichTextField.svelte +36 -0
- package/src/Form/Search.svelte +36 -0
- package/src/Form/Select.svelte +48 -88
- package/src/Form/Slider.svelte +16 -91
- package/src/Form/Stepper.svelte +45 -0
- package/src/Form/TextArea.svelte +30 -128
- package/src/Form/Toggle.svelte +20 -110
- package/src/Icon/Icon.svelte +91 -0
- package/src/Icon/IconAvatar.svelte +58 -0
- package/src/IconPicker/IconPicker.svelte +177 -0
- package/src/IconSideNav/IconSideNav.svelte +14 -0
- package/src/IconSideNav/IconSideNavItem.svelte +56 -0
- package/src/InlineAlert/InlineAlert.svelte +60 -0
- package/src/Label/Label.svelte +29 -0
- package/src/Layout/Layout.svelte +94 -0
- package/src/Layout/Page.svelte +32 -0
- package/src/Link/Link.svelte +24 -0
- package/src/List/List.svelte +28 -0
- package/src/List/ListItem.svelte +90 -0
- package/src/Markdown/MarkdownEditor.svelte +60 -0
- package/src/Markdown/MarkdownViewer.svelte +70 -0
- package/src/Markdown/SpectrumMDE.svelte +184 -0
- package/src/Menu/Item.svelte +96 -0
- package/src/Menu/Menu.svelte +7 -0
- package/src/Menu/Menu.svench +19 -0
- package/src/Menu/Section.svelte +10 -0
- package/src/Menu/Separator.svelte +1 -0
- package/src/Modal/Content.svelte +0 -11
- package/src/Modal/CustomContent.svelte +9 -6
- package/src/Modal/Modal.svelte +104 -51
- package/src/Modal/ModalContent.svelte +131 -73
- package/src/Modal/QuizModal.svelte +16 -17
- package/src/Notification/Notification.svelte +70 -0
- package/src/Notification/NotificationDisplay.svelte +43 -0
- package/src/Pagination/Pagination.svelte +57 -0
- package/src/Popover/Popover.svelte +43 -33
- package/src/ProgressBar/ProgressBar.svelte +67 -0
- package/src/ProgressCircle/ProgressCircle.svelte +62 -0
- package/src/SideNavigation/Item.svelte +61 -0
- package/src/SideNavigation/Navigation.svelte +12 -0
- package/src/StatusLight/StatusLight.svelte +80 -0
- package/src/Stores/Notifications.svench.svx +1 -1
- package/src/Stores/banner.js +65 -0
- package/src/Stores/notifications.js +75 -38
- package/src/Table/ArrayRenderer.svelte +17 -0
- package/src/Table/AttachmentRenderer.svelte +73 -0
- package/src/Table/BoldRenderer.svelte +15 -0
- package/src/Table/BooleanRenderer.svelte +42 -0
- package/src/Table/CellRenderer.svelte +69 -0
- package/src/Table/CodeRenderer.svelte +14 -0
- package/src/Table/DateTimeRenderer.svelte +29 -0
- package/src/Table/InternalRenderer.svelte +24 -0
- package/src/Table/RelationshipRenderer.svelte +40 -0
- package/src/Table/SelectEditRenderer.svelte +28 -0
- package/src/Table/StringRenderer.svelte +14 -0
- package/src/Table/Table.svelte +635 -0
- package/src/Table/index.js +1 -0
- package/src/Tabs/Tab.svelte +88 -0
- package/src/Tabs/Tabs.svelte +130 -0
- package/src/Tags/Tag.svelte +43 -0
- package/src/Tags/Tags.svelte +7 -0
- package/src/Tooltip/Tooltip.svelte +34 -0
- package/src/Tooltip/TooltipWrapper.svelte +60 -0
- package/src/TreeView/Item.svelte +41 -0
- package/src/TreeView/Tree.svelte +16 -0
- package/src/Typography/Body.svelte +21 -0
- package/src/Typography/Code.svelte +10 -0
- package/src/Typography/Detail.svelte +19 -0
- package/src/Typography/Heading.svelte +17 -0
- package/{dist → src}/bbui.css +2 -99
- package/src/context.js +1 -1
- package/src/helpers.js +134 -0
- package/src/index.js +95 -40
- package/src/spectrum-icons-rollup.js +31 -0
- package/src/spectrum-icons-vite.js +31 -0
- package/dist/dist/bundle.css +0 -42
- package/dist/dist/bundle.css.map +0 -64
- package/dist/index.js +0 -36193
- package/dist/index.mjs +0 -36147
- package/src/Button/Close.svelte +0 -59
- package/src/Button/Close.svench +0 -36
- package/src/Button/TextButton.svelte +0 -128
- package/src/Button/TextButton.svench +0 -69
- package/src/DatePicker/DatePicker.svelte +0 -45
- package/src/DatePicker/DatePicker.svench +0 -17
- package/src/DropdownMenu/DropdownMenu.svelte +0 -77
- package/src/DropdownMenu/DropdownMenu.svench +0 -161
- package/src/Dropzone/Dropzone.svelte +0 -294
- package/src/Dropzone/Dropzone.svench +0 -17
- package/src/Dropzone/fileTypes.js +0 -5
- package/src/Form/Checkbox.svench.svx +0 -67
- package/src/Form/DataList.svelte +0 -158
- package/src/Form/DataList.svench +0 -57
- package/src/Form/Input.svench +0 -62
- package/src/Form/Multiselect.svench +0 -63
- package/src/Form/Radio.svelte +0 -133
- package/src/Form/Radio.svench.svx +0 -64
- package/src/Form/RichText.svelte +0 -61
- package/src/Form/RichText.svench.svx +0 -40
- package/src/Form/Select.svench +0 -62
- package/src/Form/Slider.svench +0 -26
- package/src/Form/TextArea.svench +0 -30
- package/src/Form/Toggle.svench +0 -21
- package/src/Icons/Contribution.svelte +0 -14
- package/src/Icons/Icon.svelte +0 -36
- package/src/Icons/Icon.svench +0 -109
- package/src/Icons/icon-paths.js +0 -136
- package/src/Links/Home.svelte +0 -51
- package/src/Links/Home.svench +0 -19
- package/src/List/Items/DetailSummary.svelte +0 -85
- package/src/List/Items/DetailSummary.svench +0 -53
- package/src/List/Search.svelte +0 -34
- package/src/List/Search.svench +0 -8
- package/src/Spacer/Spacer.svelte +0 -50
- package/src/Spacer/Spacer.svench +0 -51
- package/src/Styleguide/Body.svelte +0 -72
- package/src/Styleguide/Borders.svench +0 -175
- package/src/Styleguide/Budibase-logo.svelte +0 -68
- package/src/Styleguide/Color.svench +0 -201
- package/src/Styleguide/Heading.svelte +0 -74
- package/src/Styleguide/Label.svelte +0 -70
- package/src/Styleguide/Logo.svelte +0 -16
- package/src/Styleguide/Logo.svench +0 -8
- package/src/Styleguide/Spacing.svench +0 -191
- package/src/Styleguide/Typography.svench +0 -227
- package/src/Switcher/Switcher.svelte +0 -47
- package/src/Switcher/Switcher.svench +0 -27
- package/src/index.svench.svx +0 -35
- 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>
|
package/src/Form/Select.svelte
CHANGED
|
@@ -1,95 +1,55 @@
|
|
|
1
1
|
<script>
|
|
2
|
-
import
|
|
3
|
-
import
|
|
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
|
|
7
|
-
export let
|
|
8
|
-
export let
|
|
9
|
-
export let
|
|
10
|
-
export let
|
|
11
|
-
export let
|
|
12
|
-
export let
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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
|
-
|
|
58
|
-
|
|
59
|
-
|
|
23
|
+
const dispatch = createEventDispatcher()
|
|
24
|
+
const onChange = e => {
|
|
25
|
+
value = e.detail
|
|
26
|
+
dispatch("change", e.detail)
|
|
60
27
|
}
|
|
61
28
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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
|
-
</
|
|
35
|
+
</script>
|
|
74
36
|
|
|
75
|
-
<
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
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>
|
package/src/Form/Slider.svelte
CHANGED
|
@@ -1,99 +1,24 @@
|
|
|
1
1
|
<script>
|
|
2
|
-
import
|
|
2
|
+
import Field from "./Field.svelte"
|
|
3
|
+
import Slider from "./Core/Slider.svelte"
|
|
4
|
+
import { createEventDispatcher } from "svelte"
|
|
3
5
|
|
|
4
|
-
export let
|
|
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
|
|
9
|
-
export let
|
|
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
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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
|
-
|
|
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
|
-
<
|
|
77
|
-
{
|
|
78
|
-
|
|
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>
|