@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,86 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import "@spectrum-css/slider/dist/index-vars.css"
|
|
3
|
+
import { createEventDispatcher } from "svelte"
|
|
4
|
+
|
|
5
|
+
export let value = false
|
|
6
|
+
export let id = null
|
|
7
|
+
export let disabled = false
|
|
8
|
+
export let min = 0
|
|
9
|
+
export let max = 100
|
|
10
|
+
export let step = 1
|
|
11
|
+
|
|
12
|
+
const dispatch = createEventDispatcher()
|
|
13
|
+
const onChange = event => {
|
|
14
|
+
dispatch("change", event.target.value)
|
|
15
|
+
}
|
|
16
|
+
</script>
|
|
17
|
+
|
|
18
|
+
<div>
|
|
19
|
+
<input
|
|
20
|
+
type="range"
|
|
21
|
+
{min}
|
|
22
|
+
{max}
|
|
23
|
+
{step}
|
|
24
|
+
{value}
|
|
25
|
+
{disabled}
|
|
26
|
+
{id}
|
|
27
|
+
on:change={onChange}
|
|
28
|
+
/>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
<style>
|
|
32
|
+
div {
|
|
33
|
+
display: grid;
|
|
34
|
+
place-items: center;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
input {
|
|
38
|
+
width: 100%;
|
|
39
|
+
padding: 0;
|
|
40
|
+
margin: 0;
|
|
41
|
+
-webkit-appearance: none;
|
|
42
|
+
background: transparent;
|
|
43
|
+
}
|
|
44
|
+
input::-webkit-slider-thumb {
|
|
45
|
+
-webkit-appearance: none;
|
|
46
|
+
}
|
|
47
|
+
input:focus {
|
|
48
|
+
outline: none;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
input[type="range"]::-webkit-slider-thumb {
|
|
52
|
+
-webkit-appearance: none;
|
|
53
|
+
border: 2px solid var(--spectrum-global-color-gray-700);
|
|
54
|
+
height: 16px;
|
|
55
|
+
width: 16px;
|
|
56
|
+
border-radius: 50%;
|
|
57
|
+
background: var(--background);
|
|
58
|
+
cursor: pointer;
|
|
59
|
+
transition: background 130ms ease-out;
|
|
60
|
+
margin-top: -7px;
|
|
61
|
+
}
|
|
62
|
+
input[type="range"]::-moz-range-thumb {
|
|
63
|
+
border: 2px solid var(--spectrum-global-color-gray-700);
|
|
64
|
+
height: 12px;
|
|
65
|
+
width: 12px;
|
|
66
|
+
border-radius: 50%;
|
|
67
|
+
background: var(--background);
|
|
68
|
+
cursor: pointer;
|
|
69
|
+
transition: background 130ms ease-out;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
input[type="range"]::-webkit-slider-runnable-track {
|
|
73
|
+
width: 100%;
|
|
74
|
+
height: 2px;
|
|
75
|
+
cursor: pointer;
|
|
76
|
+
background: var(--spectrum-global-color-gray-300);
|
|
77
|
+
border-radius: 2px;
|
|
78
|
+
}
|
|
79
|
+
input[type="range"]::-moz-range-track {
|
|
80
|
+
width: 100%;
|
|
81
|
+
height: 2px;
|
|
82
|
+
cursor: pointer;
|
|
83
|
+
background: var(--spectrum-global-color-gray-300);
|
|
84
|
+
border-radius: 2px;
|
|
85
|
+
}
|
|
86
|
+
</style>
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import "@spectrum-css/textfield/dist/index-vars.css"
|
|
3
|
+
import "@spectrum-css/actionbutton/dist/index-vars.css"
|
|
4
|
+
import "@spectrum-css/stepper/dist/index-vars.css"
|
|
5
|
+
import { createEventDispatcher } from "svelte"
|
|
6
|
+
|
|
7
|
+
export let value = null
|
|
8
|
+
export let placeholder = null
|
|
9
|
+
export let disabled = false
|
|
10
|
+
export let error = null
|
|
11
|
+
export let id = null
|
|
12
|
+
export let readonly = false
|
|
13
|
+
export let updateOnChange = true
|
|
14
|
+
export let quiet = false
|
|
15
|
+
export let min
|
|
16
|
+
export let max
|
|
17
|
+
export let step
|
|
18
|
+
|
|
19
|
+
const dispatch = createEventDispatcher()
|
|
20
|
+
let focus = false
|
|
21
|
+
|
|
22
|
+
// We need to keep the field value bound to a different variable in order
|
|
23
|
+
// to properly handle erroneous values. If we don't do this then it is
|
|
24
|
+
// possible for the field to show stale text which does not represent the
|
|
25
|
+
// real value. The reactive statement is to ensure that external changes to
|
|
26
|
+
// the value prop are reflected.
|
|
27
|
+
let fieldValue = value
|
|
28
|
+
$: fieldValue = value
|
|
29
|
+
|
|
30
|
+
// Ensure step is always a numeric value defaulting to 1
|
|
31
|
+
$: step = step == null || isNaN(step) ? 1 : step
|
|
32
|
+
|
|
33
|
+
const updateValue = value => {
|
|
34
|
+
if (readonly) {
|
|
35
|
+
return
|
|
36
|
+
}
|
|
37
|
+
const float = parseFloat(value)
|
|
38
|
+
value = isNaN(float) ? null : float
|
|
39
|
+
if (value != null) {
|
|
40
|
+
if (min != null && value < min) {
|
|
41
|
+
value = min
|
|
42
|
+
} else if (max != null && value > max) {
|
|
43
|
+
value = max
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
dispatch("change", value)
|
|
47
|
+
fieldValue = value
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const onFocus = () => {
|
|
51
|
+
if (readonly) {
|
|
52
|
+
return
|
|
53
|
+
}
|
|
54
|
+
focus = true
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const onBlur = event => {
|
|
58
|
+
if (readonly) {
|
|
59
|
+
return
|
|
60
|
+
}
|
|
61
|
+
focus = false
|
|
62
|
+
updateValue(event.target.value)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const onInput = event => {
|
|
66
|
+
if (readonly || !updateOnChange) {
|
|
67
|
+
return
|
|
68
|
+
}
|
|
69
|
+
updateValue(event.target.value)
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const updateValueOnEnter = event => {
|
|
73
|
+
if (readonly) {
|
|
74
|
+
return
|
|
75
|
+
}
|
|
76
|
+
if (event.key === "Enter") {
|
|
77
|
+
updateValue(event.target.value)
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const stepUp = () => {
|
|
82
|
+
if (value == null || isNaN(value)) {
|
|
83
|
+
updateValue(step)
|
|
84
|
+
} else {
|
|
85
|
+
updateValue(value + step)
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const stepDown = () => {
|
|
90
|
+
if (value == null || isNaN(value)) {
|
|
91
|
+
updateValue(step)
|
|
92
|
+
} else {
|
|
93
|
+
updateValue(value - step)
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
</script>
|
|
97
|
+
|
|
98
|
+
<div
|
|
99
|
+
class="spectrum-Stepper"
|
|
100
|
+
class:spectrum-Stepper--quiet={quiet}
|
|
101
|
+
class:is-invalid={!!error}
|
|
102
|
+
class:is-disabled={disabled}
|
|
103
|
+
class:is-focused={focus}
|
|
104
|
+
>
|
|
105
|
+
{#if error}
|
|
106
|
+
<svg
|
|
107
|
+
class="spectrum-Icon spectrum-Icon--sizeM spectrum-Textfield-validationIcon"
|
|
108
|
+
focusable="false"
|
|
109
|
+
aria-hidden="true"
|
|
110
|
+
>
|
|
111
|
+
<use xlink:href="#spectrum-icon-18-Alert" />
|
|
112
|
+
</svg>
|
|
113
|
+
{/if}
|
|
114
|
+
|
|
115
|
+
<div class="spectrum-Textfield spectrum-Stepper-textfield">
|
|
116
|
+
<input
|
|
117
|
+
{disabled}
|
|
118
|
+
{readonly}
|
|
119
|
+
{id}
|
|
120
|
+
bind:value={fieldValue}
|
|
121
|
+
placeholder={placeholder || ""}
|
|
122
|
+
type="number"
|
|
123
|
+
class="spectrum-Textfield-input spectrum-Stepper-input"
|
|
124
|
+
on:click
|
|
125
|
+
on:blur
|
|
126
|
+
on:focus
|
|
127
|
+
on:input
|
|
128
|
+
on:keyup
|
|
129
|
+
on:blur={onBlur}
|
|
130
|
+
on:focus={onFocus}
|
|
131
|
+
on:input={onInput}
|
|
132
|
+
on:keyup={updateValueOnEnter}
|
|
133
|
+
/>
|
|
134
|
+
</div>
|
|
135
|
+
<span class="spectrum-Stepper-buttons">
|
|
136
|
+
<button
|
|
137
|
+
class="spectrum-ActionButton spectrum-ActionButton--sizeM spectrum-Stepper-stepUp"
|
|
138
|
+
tabindex="-1"
|
|
139
|
+
on:click={stepUp}
|
|
140
|
+
>
|
|
141
|
+
<svg
|
|
142
|
+
class="spectrum-Icon spectrum-UIIcon-ChevronUp75"
|
|
143
|
+
focusable="false"
|
|
144
|
+
aria-hidden="true"
|
|
145
|
+
>
|
|
146
|
+
<use xlink:href="#spectrum-css-icon-Chevron75" />
|
|
147
|
+
</svg>
|
|
148
|
+
</button>
|
|
149
|
+
<button
|
|
150
|
+
class="spectrum-ActionButton spectrum-ActionButton--sizeM spectrum-Stepper-stepDown"
|
|
151
|
+
tabindex="-1"
|
|
152
|
+
on:click={stepDown}
|
|
153
|
+
>
|
|
154
|
+
<svg
|
|
155
|
+
class="spectrum-Icon spectrum-UIIcon-ChevronDown75"
|
|
156
|
+
focusable="false"
|
|
157
|
+
aria-hidden="true"
|
|
158
|
+
>
|
|
159
|
+
<use xlink:href="#spectrum-css-icon-Chevron75" />
|
|
160
|
+
</svg>
|
|
161
|
+
</button>
|
|
162
|
+
</span>
|
|
163
|
+
</div>
|
|
164
|
+
|
|
165
|
+
<style>
|
|
166
|
+
.spectrum-Stepper {
|
|
167
|
+
width: 100%;
|
|
168
|
+
}
|
|
169
|
+
.spectrum-Stepper::before {
|
|
170
|
+
display: none;
|
|
171
|
+
}
|
|
172
|
+
</style>
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import "@spectrum-css/switch/dist/index-vars.css"
|
|
3
|
+
import { createEventDispatcher } from "svelte"
|
|
4
|
+
|
|
5
|
+
export let value = false
|
|
6
|
+
export let id = null
|
|
7
|
+
export let text = null
|
|
8
|
+
export let disabled = false
|
|
9
|
+
export let dataCy = null
|
|
10
|
+
|
|
11
|
+
const dispatch = createEventDispatcher()
|
|
12
|
+
const onChange = event => {
|
|
13
|
+
dispatch("change", event.target.checked)
|
|
14
|
+
}
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<div class="spectrum-Switch spectrum-Switch--emphasized">
|
|
18
|
+
<input
|
|
19
|
+
data-cy={dataCy}
|
|
20
|
+
checked={value}
|
|
21
|
+
{disabled}
|
|
22
|
+
on:change={onChange}
|
|
23
|
+
{id}
|
|
24
|
+
type="checkbox"
|
|
25
|
+
class="spectrum-Switch-input"
|
|
26
|
+
/>
|
|
27
|
+
<span class="spectrum-Switch-switch" />
|
|
28
|
+
{#if text}
|
|
29
|
+
<label class="spectrum-Switch-label" for={id}>{text}</label>
|
|
30
|
+
{/if}
|
|
31
|
+
</div>
|
|
32
|
+
|
|
33
|
+
<style>
|
|
34
|
+
.spectrum-Switch-input {
|
|
35
|
+
opacity: 0;
|
|
36
|
+
}
|
|
37
|
+
</style>
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import "@spectrum-css/textfield/dist/index-vars.css"
|
|
3
|
+
import { createEventDispatcher } from "svelte"
|
|
4
|
+
|
|
5
|
+
export let value = ""
|
|
6
|
+
export let placeholder = null
|
|
7
|
+
export let disabled = false
|
|
8
|
+
export let error = null
|
|
9
|
+
export let id = null
|
|
10
|
+
export let height = null
|
|
11
|
+
export let minHeight = null
|
|
12
|
+
export const getCaretPosition = () => ({
|
|
13
|
+
start: textarea.selectionStart,
|
|
14
|
+
end: textarea.selectionEnd,
|
|
15
|
+
})
|
|
16
|
+
export let align = null
|
|
17
|
+
|
|
18
|
+
let focus = false
|
|
19
|
+
let textarea
|
|
20
|
+
const dispatch = createEventDispatcher()
|
|
21
|
+
const onChange = event => {
|
|
22
|
+
dispatch("change", event.target.value)
|
|
23
|
+
focus = false
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const getStyleString = (attribute, value) => {
|
|
27
|
+
if (!attribute || value == null) {
|
|
28
|
+
return ""
|
|
29
|
+
}
|
|
30
|
+
if (isNaN(value)) {
|
|
31
|
+
return `${attribute}:${value};`
|
|
32
|
+
}
|
|
33
|
+
return `${attribute}:${value}px;`
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
$: heightString = getStyleString("height", height)
|
|
37
|
+
$: minHeightString = getStyleString("min-height", minHeight)
|
|
38
|
+
</script>
|
|
39
|
+
|
|
40
|
+
<div
|
|
41
|
+
style={`${heightString}${minHeightString}`}
|
|
42
|
+
class="spectrum-Textfield spectrum-Textfield--multiline"
|
|
43
|
+
class:is-invalid={!!error}
|
|
44
|
+
class:is-disabled={disabled}
|
|
45
|
+
class:is-focused={focus}
|
|
46
|
+
>
|
|
47
|
+
{#if error}
|
|
48
|
+
<svg
|
|
49
|
+
class="spectrum-Icon spectrum-Icon--sizeM
|
|
50
|
+
spectrum-Textfield-validationIcon"
|
|
51
|
+
focusable="false"
|
|
52
|
+
aria-hidden="true"
|
|
53
|
+
>
|
|
54
|
+
<use xlink:href="#spectrum-icon-18-Alert" />
|
|
55
|
+
</svg>
|
|
56
|
+
{/if}
|
|
57
|
+
<!-- prettier-ignore -->
|
|
58
|
+
<textarea
|
|
59
|
+
bind:this={textarea}
|
|
60
|
+
placeholder={placeholder || ""}
|
|
61
|
+
class="spectrum-Textfield-input"
|
|
62
|
+
style={align ? `text-align: ${align}` : ""}
|
|
63
|
+
{disabled}
|
|
64
|
+
{id}
|
|
65
|
+
on:focus={() => (focus = true)}
|
|
66
|
+
on:blur={onChange}
|
|
67
|
+
>{value || ""}</textarea>
|
|
68
|
+
</div>
|
|
69
|
+
|
|
70
|
+
<style>
|
|
71
|
+
.spectrum-Textfield {
|
|
72
|
+
width: 100%;
|
|
73
|
+
}
|
|
74
|
+
textarea {
|
|
75
|
+
resize: vertical;
|
|
76
|
+
min-height: 80px !important;
|
|
77
|
+
}
|
|
78
|
+
</style>
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import "@spectrum-css/textfield/dist/index-vars.css"
|
|
3
|
+
import { createEventDispatcher, onMount } from "svelte"
|
|
4
|
+
|
|
5
|
+
export let value = null
|
|
6
|
+
export let placeholder = null
|
|
7
|
+
export let type = "text"
|
|
8
|
+
export let disabled = false
|
|
9
|
+
export let error = null
|
|
10
|
+
export let id = null
|
|
11
|
+
export let readonly = false
|
|
12
|
+
export let updateOnChange = true
|
|
13
|
+
export let quiet = false
|
|
14
|
+
export let dataCy
|
|
15
|
+
export let align
|
|
16
|
+
export let autofocus = false
|
|
17
|
+
|
|
18
|
+
const dispatch = createEventDispatcher()
|
|
19
|
+
|
|
20
|
+
let field
|
|
21
|
+
let focus = false
|
|
22
|
+
|
|
23
|
+
const updateValue = newValue => {
|
|
24
|
+
if (readonly) {
|
|
25
|
+
return
|
|
26
|
+
}
|
|
27
|
+
if (type === "number") {
|
|
28
|
+
const float = parseFloat(newValue)
|
|
29
|
+
newValue = isNaN(float) ? null : float
|
|
30
|
+
}
|
|
31
|
+
dispatch("change", newValue)
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const onFocus = () => {
|
|
35
|
+
if (readonly) {
|
|
36
|
+
return
|
|
37
|
+
}
|
|
38
|
+
focus = true
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const onBlur = event => {
|
|
42
|
+
if (readonly) {
|
|
43
|
+
return
|
|
44
|
+
}
|
|
45
|
+
focus = false
|
|
46
|
+
updateValue(event.target.value)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const onInput = event => {
|
|
50
|
+
if (readonly || !updateOnChange) {
|
|
51
|
+
return
|
|
52
|
+
}
|
|
53
|
+
updateValue(event.target.value)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const updateValueOnEnter = event => {
|
|
57
|
+
if (readonly) {
|
|
58
|
+
return
|
|
59
|
+
}
|
|
60
|
+
if (event.key === "Enter") {
|
|
61
|
+
updateValue(event.target.value)
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
onMount(() => {
|
|
66
|
+
focus = autofocus
|
|
67
|
+
if (focus) field.focus()
|
|
68
|
+
})
|
|
69
|
+
</script>
|
|
70
|
+
|
|
71
|
+
<div
|
|
72
|
+
class="spectrum-Textfield"
|
|
73
|
+
class:spectrum-Textfield--quiet={quiet}
|
|
74
|
+
class:is-invalid={!!error}
|
|
75
|
+
class:is-disabled={disabled}
|
|
76
|
+
class:is-focused={focus}
|
|
77
|
+
>
|
|
78
|
+
{#if error}
|
|
79
|
+
<svg
|
|
80
|
+
class="spectrum-Icon spectrum-Icon--sizeM spectrum-Textfield-validationIcon"
|
|
81
|
+
focusable="false"
|
|
82
|
+
aria-hidden="true"
|
|
83
|
+
>
|
|
84
|
+
<use xlink:href="#spectrum-icon-18-Alert" />
|
|
85
|
+
</svg>
|
|
86
|
+
{/if}
|
|
87
|
+
<input
|
|
88
|
+
bind:this={field}
|
|
89
|
+
{disabled}
|
|
90
|
+
{readonly}
|
|
91
|
+
{id}
|
|
92
|
+
data-cy={dataCy}
|
|
93
|
+
value={value || ""}
|
|
94
|
+
placeholder={placeholder || ""}
|
|
95
|
+
on:click
|
|
96
|
+
on:blur
|
|
97
|
+
on:focus
|
|
98
|
+
on:input
|
|
99
|
+
on:keyup
|
|
100
|
+
on:blur={onBlur}
|
|
101
|
+
on:focus={onFocus}
|
|
102
|
+
on:input={onInput}
|
|
103
|
+
on:keyup={updateValueOnEnter}
|
|
104
|
+
{type}
|
|
105
|
+
class="spectrum-Textfield-input"
|
|
106
|
+
style={align ? `text-align: ${align};` : ""}
|
|
107
|
+
inputmode={type === "number" ? "decimal" : "text"}
|
|
108
|
+
/>
|
|
109
|
+
</div>
|
|
110
|
+
|
|
111
|
+
<style>
|
|
112
|
+
.spectrum-Textfield {
|
|
113
|
+
width: 100%;
|
|
114
|
+
}
|
|
115
|
+
input:disabled {
|
|
116
|
+
color: var(--spectrum-global-color-gray-600) !important;
|
|
117
|
+
-webkit-text-fill-color: var(--spectrum-global-color-gray-600) !important;
|
|
118
|
+
}
|
|
119
|
+
</style>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export { default as CoreTextField } from "./TextField.svelte"
|
|
2
|
+
export { default as CoreSelect } from "./Select.svelte"
|
|
3
|
+
export { default as CoreMultiselect } from "./Multiselect.svelte"
|
|
4
|
+
export { default as CoreCheckbox } from "./Checkbox.svelte"
|
|
5
|
+
export { default as CoreRadioGroup } from "./RadioGroup.svelte"
|
|
6
|
+
export { default as CoreCheckboxGroup } from "./CheckboxGroup.svelte"
|
|
7
|
+
export { default as CoreTextArea } from "./TextArea.svelte"
|
|
8
|
+
export { default as CoreCombobox } from "./Combobox.svelte"
|
|
9
|
+
export { default as CoreSwitch } from "./Switch.svelte"
|
|
10
|
+
export { default as CoreSearch } from "./Search.svelte"
|
|
11
|
+
export { default as CoreDatePicker } from "./DatePicker.svelte"
|
|
12
|
+
export { default as CoreDropzone } from "./Dropzone.svelte"
|
|
13
|
+
export { default as CoreStepper } from "./Stepper.svelte"
|
|
14
|
+
export { default as CoreRichTextField } from "./RichTextField.svelte"
|
|
15
|
+
export { default as CoreSlider } from "./Slider.svelte"
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import Field from "./Field.svelte"
|
|
3
|
+
import DatePicker from "./Core/DatePicker.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 disabled = false
|
|
10
|
+
export let error = null
|
|
11
|
+
export let enableTime = true
|
|
12
|
+
export let timeOnly = false
|
|
13
|
+
export let time24hr = false
|
|
14
|
+
export let placeholder = null
|
|
15
|
+
export let appendTo = undefined
|
|
16
|
+
export let ignoreTimezones = false
|
|
17
|
+
|
|
18
|
+
const dispatch = createEventDispatcher()
|
|
19
|
+
|
|
20
|
+
const onChange = e => {
|
|
21
|
+
value = e.detail
|
|
22
|
+
dispatch("change", e.detail)
|
|
23
|
+
}
|
|
24
|
+
</script>
|
|
25
|
+
|
|
26
|
+
<Field {label} {labelPosition} {error}>
|
|
27
|
+
<DatePicker
|
|
28
|
+
{error}
|
|
29
|
+
{disabled}
|
|
30
|
+
{value}
|
|
31
|
+
{placeholder}
|
|
32
|
+
{enableTime}
|
|
33
|
+
{timeOnly}
|
|
34
|
+
{time24hr}
|
|
35
|
+
{appendTo}
|
|
36
|
+
{ignoreTimezones}
|
|
37
|
+
on:change={onChange}
|
|
38
|
+
/>
|
|
39
|
+
</Field>
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import Field from "./Field.svelte"
|
|
3
|
+
import CoreDropzone from "./Core/Dropzone.svelte"
|
|
4
|
+
import { createEventDispatcher } from "svelte"
|
|
5
|
+
|
|
6
|
+
export let value = []
|
|
7
|
+
export let label = null
|
|
8
|
+
export let labelPosition = "above"
|
|
9
|
+
export let disabled = false
|
|
10
|
+
export let error = null
|
|
11
|
+
export let fileSizeLimit = undefined
|
|
12
|
+
export let processFiles = undefined
|
|
13
|
+
export let deleteAttachments = undefined
|
|
14
|
+
export let handleFileTooLarge = undefined
|
|
15
|
+
export let handleTooManyFiles = undefined
|
|
16
|
+
export let gallery = true
|
|
17
|
+
export let fileTags = []
|
|
18
|
+
export let maximum = undefined
|
|
19
|
+
|
|
20
|
+
const dispatch = createEventDispatcher()
|
|
21
|
+
const onChange = e => {
|
|
22
|
+
value = e.detail
|
|
23
|
+
dispatch("change", e.detail)
|
|
24
|
+
}
|
|
25
|
+
</script>
|
|
26
|
+
|
|
27
|
+
<Field {label} {labelPosition} {error}>
|
|
28
|
+
<CoreDropzone
|
|
29
|
+
{error}
|
|
30
|
+
{disabled}
|
|
31
|
+
{value}
|
|
32
|
+
{fileSizeLimit}
|
|
33
|
+
{processFiles}
|
|
34
|
+
{deleteAttachments}
|
|
35
|
+
{handleFileTooLarge}
|
|
36
|
+
{handleTooManyFiles}
|
|
37
|
+
{gallery}
|
|
38
|
+
{fileTags}
|
|
39
|
+
{maximum}
|
|
40
|
+
on:change={onChange}
|
|
41
|
+
/>
|
|
42
|
+
</Field>
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import "@spectrum-css/fieldlabel/dist/index-vars.css"
|
|
3
|
+
import FieldLabel from "./FieldLabel.svelte"
|
|
4
|
+
|
|
5
|
+
export let id = null
|
|
6
|
+
export let label = null
|
|
7
|
+
export let labelPosition = "above"
|
|
8
|
+
export let error = null
|
|
9
|
+
export let tooltip = ""
|
|
10
|
+
</script>
|
|
11
|
+
|
|
12
|
+
<div class="spectrum-Form-item" class:above={labelPosition === "above"}>
|
|
13
|
+
{#if label}
|
|
14
|
+
<FieldLabel forId={id} {label} position={labelPosition} {tooltip} />
|
|
15
|
+
{/if}
|
|
16
|
+
<div class="spectrum-Form-itemField">
|
|
17
|
+
<slot />
|
|
18
|
+
{#if error}
|
|
19
|
+
<div class="error">{error}</div>
|
|
20
|
+
{/if}
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
|
|
24
|
+
<style>
|
|
25
|
+
.spectrum-Form-item.above {
|
|
26
|
+
display: flex;
|
|
27
|
+
flex-direction: column;
|
|
28
|
+
}
|
|
29
|
+
.spectrum-Form-itemField {
|
|
30
|
+
position: relative;
|
|
31
|
+
width: 100%;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.error {
|
|
35
|
+
color: var(
|
|
36
|
+
--spectrum-semantic-negative-color-default,
|
|
37
|
+
var(--spectrum-global-color-red-500)
|
|
38
|
+
);
|
|
39
|
+
font-size: var(--spectrum-global-dimension-font-size-75);
|
|
40
|
+
margin-top: var(--spectrum-global-dimension-size-75);
|
|
41
|
+
}
|
|
42
|
+
</style>
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import TooltipWrapper from "../Tooltip/TooltipWrapper.svelte"
|
|
3
|
+
|
|
4
|
+
import "@spectrum-css/fieldlabel/dist/index-vars.css"
|
|
5
|
+
|
|
6
|
+
export let forId
|
|
7
|
+
export let label
|
|
8
|
+
export let position = "above"
|
|
9
|
+
export let tooltip = ""
|
|
10
|
+
|
|
11
|
+
$: className = position === "above" ? "" : `spectrum-FieldLabel--${position}`
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
<TooltipWrapper {tooltip} size="S">
|
|
15
|
+
<label
|
|
16
|
+
for={forId}
|
|
17
|
+
class={`spectrum-FieldLabel spectrum-FieldLabel--sizeM spectrum-Form-itemLabel ${className}`}
|
|
18
|
+
>
|
|
19
|
+
{label || ""}
|
|
20
|
+
</label>
|
|
21
|
+
</TooltipWrapper>
|
|
22
|
+
|
|
23
|
+
<style>
|
|
24
|
+
label {
|
|
25
|
+
white-space: nowrap;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.spectrum-FieldLabel--right,
|
|
29
|
+
.spectrum-FieldLabel--left {
|
|
30
|
+
padding-right: var(--spectrum-global-dimension-size-200);
|
|
31
|
+
}
|
|
32
|
+
</style>
|