@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
|
@@ -1,294 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import { Heading, Body, Button } from "../"
|
|
3
|
-
import { FILE_TYPES } from "./fileTypes"
|
|
4
|
-
|
|
5
|
-
const BYTES_IN_KB = 1000
|
|
6
|
-
const BYTES_IN_MB = 1000000
|
|
7
|
-
|
|
8
|
-
export let icons = {
|
|
9
|
-
image: "fas fa-file-image",
|
|
10
|
-
code: "fas fa-file-code",
|
|
11
|
-
file: "fas fa-file",
|
|
12
|
-
fileUpload: "fas fa-upload",
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export let files = []
|
|
16
|
-
export let fileSizeLimit = BYTES_IN_MB * 20
|
|
17
|
-
export let processFiles
|
|
18
|
-
export let handleFileTooLarge
|
|
19
|
-
|
|
20
|
-
let selectedImageIdx = 0
|
|
21
|
-
let fileDragged = false
|
|
22
|
-
// Generate a random ID so that multiple dropzones on the page don't conflict
|
|
23
|
-
let id = Math.random().toString(36).substring(7)
|
|
24
|
-
|
|
25
|
-
$: selectedImage = files ? files[selectedImageIdx] : null
|
|
26
|
-
|
|
27
|
-
function determineFileIcon(extension) {
|
|
28
|
-
const ext = extension.toLowerCase()
|
|
29
|
-
|
|
30
|
-
if (FILE_TYPES.IMAGE.includes(ext)) return icons.image
|
|
31
|
-
if (FILE_TYPES.CODE.includes(ext)) return icons.code
|
|
32
|
-
|
|
33
|
-
return icons.file
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
async function processFileList(fileList) {
|
|
37
|
-
if (Array.from(fileList).some(file => file.size >= fileSizeLimit)) {
|
|
38
|
-
handleFileTooLarge(fileSizeLimit, file);
|
|
39
|
-
return
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
const processedFiles = await processFiles(fileList);
|
|
43
|
-
|
|
44
|
-
files = [...processedFiles, ...files]
|
|
45
|
-
selectedImageIdx = 0
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
async function removeFile() {
|
|
49
|
-
files.splice(selectedImageIdx, 1)
|
|
50
|
-
files = files
|
|
51
|
-
selectedImageIdx = 0
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
function navigateLeft() {
|
|
55
|
-
selectedImageIdx -= 1
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
function navigateRight() {
|
|
59
|
-
selectedImageIdx += 1
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
function handleFile(evt) {
|
|
63
|
-
processFileList(evt.target.files)
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
function handleDragOver(evt) {
|
|
67
|
-
evt.preventDefault()
|
|
68
|
-
fileDragged = true
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
function handleDragLeave(evt) {
|
|
72
|
-
evt.preventDefault()
|
|
73
|
-
fileDragged = false
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
function handleDrop(evt) {
|
|
77
|
-
evt.preventDefault()
|
|
78
|
-
processFileList(evt.dataTransfer.files)
|
|
79
|
-
fileDragged = false
|
|
80
|
-
}
|
|
81
|
-
</script>
|
|
82
|
-
|
|
83
|
-
<div
|
|
84
|
-
class="dropzone"
|
|
85
|
-
on:dragover={handleDragOver}
|
|
86
|
-
on:dragleave={handleDragLeave}
|
|
87
|
-
on:dragenter={handleDragOver}
|
|
88
|
-
on:drop={handleDrop}
|
|
89
|
-
class:fileDragged>
|
|
90
|
-
{#if selectedImage}
|
|
91
|
-
<ul>
|
|
92
|
-
<li>
|
|
93
|
-
<header>
|
|
94
|
-
<div>
|
|
95
|
-
<i class={determineFileIcon(selectedImage.extension)} />
|
|
96
|
-
<span class="filename">{selectedImage.name}</span>
|
|
97
|
-
</div>
|
|
98
|
-
<p>
|
|
99
|
-
{#if selectedImage.size <= BYTES_IN_MB}
|
|
100
|
-
{selectedImage.size / BYTES_IN_KB}KB
|
|
101
|
-
{:else}{selectedImage.size / BYTES_IN_MB}MB{/if}
|
|
102
|
-
</p>
|
|
103
|
-
</header>
|
|
104
|
-
<div class="delete-button" on:click={removeFile}>
|
|
105
|
-
<i class="ri-close-circle-fill"></i>
|
|
106
|
-
</div>
|
|
107
|
-
{#if selectedImageIdx !== 0}
|
|
108
|
-
<div class="nav left" on:click={navigateLeft}>
|
|
109
|
-
<i class="ri-arrow-left-circle-fill"></i>
|
|
110
|
-
</div>
|
|
111
|
-
{/if}
|
|
112
|
-
<img src={selectedImage.url} />
|
|
113
|
-
{#if selectedImageIdx !== files.length - 1}
|
|
114
|
-
<div class="nav right" on:click={navigateRight}>
|
|
115
|
-
<i class="ri-arrow-right-circle-fill"></i>
|
|
116
|
-
</div>
|
|
117
|
-
{/if}
|
|
118
|
-
</li>
|
|
119
|
-
</ul>
|
|
120
|
-
{/if}
|
|
121
|
-
<i class={icons.fileUpload} />
|
|
122
|
-
<input {id} type="file" multiple on:change={handleFile} {...$$restProps} />
|
|
123
|
-
<i class="ri-upload-cloud-line"></i>
|
|
124
|
-
<p class="drop">Drop your files here</p>
|
|
125
|
-
<label for={id}>Select a file from your computer</label>
|
|
126
|
-
</div>
|
|
127
|
-
|
|
128
|
-
<style>
|
|
129
|
-
.dropzone {
|
|
130
|
-
padding: var(--spacing-l);
|
|
131
|
-
border: 2px dashed var(--grey-4);
|
|
132
|
-
text-align: center;
|
|
133
|
-
display: flex;
|
|
134
|
-
align-items: center;
|
|
135
|
-
flex-direction: column;
|
|
136
|
-
border-radius: 10px;
|
|
137
|
-
transition: all 0.3s;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
.fileDragged {
|
|
141
|
-
border: 2px dashed var(--grey-7);
|
|
142
|
-
background: var(--blue-light);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
input[type="file"] {
|
|
146
|
-
display: none;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
label {
|
|
150
|
-
font-family: var(--font-sans);
|
|
151
|
-
font-size: var(--font-size-s);
|
|
152
|
-
cursor: pointer;
|
|
153
|
-
overflow: hidden;
|
|
154
|
-
color: var(--grey-7);
|
|
155
|
-
text-rendering: optimizeLegibility;
|
|
156
|
-
min-width: auto;
|
|
157
|
-
outline: none;
|
|
158
|
-
font-feature-settings: "case" 1, "rlig" 1, "calt" 0;
|
|
159
|
-
-webkit-box-align: center;
|
|
160
|
-
flex-shrink: 0;
|
|
161
|
-
align-items: center;
|
|
162
|
-
justify-content: center;
|
|
163
|
-
width: 100%;
|
|
164
|
-
text-decoration: underline;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
.drop {
|
|
169
|
-
font-family: var(--font-sans);
|
|
170
|
-
font-size: var(--font-size-s);
|
|
171
|
-
margin: 12px 0;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
div.nav {
|
|
175
|
-
padding: var(--spacing-xs);
|
|
176
|
-
position: absolute;
|
|
177
|
-
display: flex;
|
|
178
|
-
align-items: center;
|
|
179
|
-
bottom: var(--spacing-s);
|
|
180
|
-
border-radius: 5px;
|
|
181
|
-
transition: 0.2s transform;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
.nav:hover {
|
|
185
|
-
cursor: pointer;
|
|
186
|
-
color: var(--blue);
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
.left {
|
|
190
|
-
left: var(--spacing-s);
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
.right {
|
|
194
|
-
right: var(--spacing-s);
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
li {
|
|
198
|
-
position: relative;
|
|
199
|
-
height: 300px;
|
|
200
|
-
background: var(--grey-7);
|
|
201
|
-
display: flex;
|
|
202
|
-
justify-content: center;
|
|
203
|
-
border-radius: 10px;
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
img {
|
|
207
|
-
border-radius: 10px;
|
|
208
|
-
width: 100%;
|
|
209
|
-
box-shadow: 0 var(--spacing-s) 12px rgba(0, 0, 0, 0.15);
|
|
210
|
-
object-fit: contain;
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
i {
|
|
214
|
-
font-size: 2rem;
|
|
215
|
-
color: var(--ink);
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
i:hover{
|
|
219
|
-
cursor: pointer;
|
|
220
|
-
color: var(--background);
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
.file-icon {
|
|
224
|
-
color: var(--background);
|
|
225
|
-
font-size: 2em;
|
|
226
|
-
margin-right: var(--spacing-s);
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
ul {
|
|
230
|
-
padding: 0;
|
|
231
|
-
display: grid;
|
|
232
|
-
grid-gap: var(--spacing-s);
|
|
233
|
-
list-style-type: none;
|
|
234
|
-
width: 100%;
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
header {
|
|
238
|
-
display: flex;
|
|
239
|
-
align-items: center;
|
|
240
|
-
justify-content: space-between;
|
|
241
|
-
position: absolute;
|
|
242
|
-
background: linear-gradient(
|
|
243
|
-
180deg,
|
|
244
|
-
rgb(255, 255, 255),
|
|
245
|
-
rgba(255, 255, 255, 0)
|
|
246
|
-
);
|
|
247
|
-
width: 100%;
|
|
248
|
-
border-top-left-radius: 10px;
|
|
249
|
-
border-top-right-radius: 10px;
|
|
250
|
-
height: 60px;
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
header > div {
|
|
254
|
-
color: var(--ink);
|
|
255
|
-
display: flex;
|
|
256
|
-
align-items: center;
|
|
257
|
-
font-size: 12px;
|
|
258
|
-
margin-left: var(--spacing-m);
|
|
259
|
-
width: 60%;
|
|
260
|
-
overflow: hidden;
|
|
261
|
-
white-space: nowrap;
|
|
262
|
-
text-overflow: ellipsis;
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
.filename {
|
|
266
|
-
overflow: hidden;
|
|
267
|
-
margin-left: 5px;
|
|
268
|
-
text-overflow: ellipsis;
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
header > p {
|
|
272
|
-
color: var(--grey-5);
|
|
273
|
-
margin-right: var(--spacing-m);
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
.delete-button {
|
|
277
|
-
position: absolute;
|
|
278
|
-
top: var(--spacing-s);
|
|
279
|
-
right: var(--spacing-s);
|
|
280
|
-
padding: var(--spacing-s);
|
|
281
|
-
border-radius: 10px;
|
|
282
|
-
transition: all 0.3s;
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
.delete-button i {
|
|
286
|
-
font-size: 2em;
|
|
287
|
-
color: var(--ink);
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
.delete-button:hover {
|
|
291
|
-
cursor: pointer;
|
|
292
|
-
color: var(--red);
|
|
293
|
-
}
|
|
294
|
-
</style>
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import { View } from "svench";
|
|
3
|
-
import Dropzone from "./Dropzone.svelte";
|
|
4
|
-
|
|
5
|
-
async function processFiles(files) {
|
|
6
|
-
console.log("Processing", files);
|
|
7
|
-
return files;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
function handleFileTooLarge() {
|
|
11
|
-
alert("File too large.");
|
|
12
|
-
}
|
|
13
|
-
</script>
|
|
14
|
-
|
|
15
|
-
<View name="dropzone">
|
|
16
|
-
<Dropzone {processFiles} {handleFileTooLarge} />
|
|
17
|
-
</View>
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import { View } from "svench";
|
|
3
|
-
import Checkbox from "./Checkbox.svelte";
|
|
4
|
-
|
|
5
|
-
let checked = false
|
|
6
|
-
|
|
7
|
-
let menu = [
|
|
8
|
-
{text: 'Cookies and cream', checked: false},
|
|
9
|
-
{text: 'Mint choc chip', checked: false},
|
|
10
|
-
{text: 'Raspberry ripple', checked: true}
|
|
11
|
-
];
|
|
12
|
-
</script>
|
|
13
|
-
|
|
14
|
-
<View name="Single checkbox">
|
|
15
|
-
<Checkbox bind:checked value="value">
|
|
16
|
-
<label for="value">One single checkbox with text</label>
|
|
17
|
-
</Checkbox>
|
|
18
|
-
</View>
|
|
19
|
-
|
|
20
|
-
<View name="Single disabled checkbox">
|
|
21
|
-
<Checkbox disabled checked value="value">
|
|
22
|
-
<label for="someOtherValue">A disabled checkbox</label>
|
|
23
|
-
</Checkbox>
|
|
24
|
-
</View>
|
|
25
|
-
|
|
26
|
-
<View name="No text">
|
|
27
|
-
<Checkbox bind:checked value="somevalue" />
|
|
28
|
-
</View>
|
|
29
|
-
|
|
30
|
-
## Multiple checkboxes
|
|
31
|
-
Use an array and an each block to use multiple checkboxes
|
|
32
|
-
```svelte
|
|
33
|
-
<script>
|
|
34
|
-
let menu = [
|
|
35
|
-
{text: 'Cookies and cream', checked: false},
|
|
36
|
-
{text: 'Mint choc chip', checked: false},
|
|
37
|
-
{text: 'Raspberry ripple', checked: true}
|
|
38
|
-
];
|
|
39
|
-
</script>
|
|
40
|
-
|
|
41
|
-
{#each menu as {text, checked}}
|
|
42
|
-
<Checkbox value={text} bind:checked>
|
|
43
|
-
<label for={text}>{text}</label>
|
|
44
|
-
</Checkbox>
|
|
45
|
-
{/each}
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
<View name="Multiple checkboxes">
|
|
49
|
-
<div class="container">
|
|
50
|
-
{#each menu as {text, checked}}
|
|
51
|
-
<Checkbox value={text} bind:checked>
|
|
52
|
-
<label for={text}>{text}</label>
|
|
53
|
-
</Checkbox>
|
|
54
|
-
{/each}
|
|
55
|
-
</div>
|
|
56
|
-
</View>
|
|
57
|
-
|
|
58
|
-
<style>
|
|
59
|
-
label {
|
|
60
|
-
display: grid;
|
|
61
|
-
place-items: center;
|
|
62
|
-
}
|
|
63
|
-
.container {
|
|
64
|
-
display: grid;
|
|
65
|
-
grid-gap: 10px;
|
|
66
|
-
}
|
|
67
|
-
</style>
|
package/src/Form/DataList.svelte
DELETED
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import Icon from "../Icons/Icon.svelte";
|
|
3
|
-
import Label from "../Styleguide/Label.svelte";
|
|
4
|
-
import { createEventDispatcher } from "svelte";
|
|
5
|
-
|
|
6
|
-
export let label = undefined;
|
|
7
|
-
export let value = "";
|
|
8
|
-
export let name = undefined;
|
|
9
|
-
export let thin = false;
|
|
10
|
-
export let extraThin = false;
|
|
11
|
-
export let secondary = false;
|
|
12
|
-
export let outline = false;
|
|
13
|
-
export let disabled = false;
|
|
14
|
-
|
|
15
|
-
const dispatch = createEventDispatcher();
|
|
16
|
-
let focus = false
|
|
17
|
-
|
|
18
|
-
const updateValue = e => {
|
|
19
|
-
value = e.target.value;
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
function handleFocus(e) {
|
|
23
|
-
focus = true;
|
|
24
|
-
dispatch("focus", e);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
function handleBlur(e) {
|
|
28
|
-
focus = false;
|
|
29
|
-
dispatch("blur", e);
|
|
30
|
-
}
|
|
31
|
-
</script>
|
|
32
|
-
|
|
33
|
-
<style>
|
|
34
|
-
.container {
|
|
35
|
-
position: relative !important;
|
|
36
|
-
display: block;
|
|
37
|
-
border-radius: var(--border-radius-s);
|
|
38
|
-
border: var(--border-transparent);
|
|
39
|
-
background-color: var(--background);
|
|
40
|
-
}
|
|
41
|
-
.container.outline {
|
|
42
|
-
border: var(--border-dark);
|
|
43
|
-
}
|
|
44
|
-
.container.focus {
|
|
45
|
-
border: var(--border-blue);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
input,
|
|
49
|
-
select {
|
|
50
|
-
border-radius: var(--border-radius-s);
|
|
51
|
-
font-size: var(--font-size-m);
|
|
52
|
-
outline: none;
|
|
53
|
-
border: none;
|
|
54
|
-
color: var(--ink);
|
|
55
|
-
text-align: left;
|
|
56
|
-
background-color: transparent;
|
|
57
|
-
}
|
|
58
|
-
select {
|
|
59
|
-
display: block !important;
|
|
60
|
-
width: 100% !important;
|
|
61
|
-
padding: var(--spacing-m) 2rem var(--spacing-m) var(--spacing-m);
|
|
62
|
-
appearance: none !important;
|
|
63
|
-
-webkit-appearance: none !important;
|
|
64
|
-
-moz-appearance: none !important;
|
|
65
|
-
align-items: center;
|
|
66
|
-
white-space: pre;
|
|
67
|
-
opacity: 0;
|
|
68
|
-
}
|
|
69
|
-
input {
|
|
70
|
-
position: absolute;
|
|
71
|
-
top: 0;
|
|
72
|
-
left: 0;
|
|
73
|
-
width: calc(100% - 30px);
|
|
74
|
-
height: 100%;
|
|
75
|
-
border: none;
|
|
76
|
-
box-sizing: border-box;
|
|
77
|
-
padding: var(--spacing-m) 0 var(--spacing-m) var(--spacing-m);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
select.thin,
|
|
81
|
-
input.thin {
|
|
82
|
-
font-size: var(--font-size-xs);
|
|
83
|
-
}
|
|
84
|
-
select.extraThin,
|
|
85
|
-
input.extraThin {
|
|
86
|
-
font-size: var(--font-size-xs);
|
|
87
|
-
padding: var(--spacing-s) 0 var(--spacing-s) var(--spacing-m);
|
|
88
|
-
}
|
|
89
|
-
.secondary {
|
|
90
|
-
background: var(--grey-2);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
select:disabled,
|
|
94
|
-
input:disabled,
|
|
95
|
-
.disabled {
|
|
96
|
-
background: var(--grey-4);
|
|
97
|
-
color: var(--grey-6);
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
.pointer {
|
|
101
|
-
right: 0 !important;
|
|
102
|
-
top: 0 !important;
|
|
103
|
-
bottom: 0 !important;
|
|
104
|
-
position: absolute !important;
|
|
105
|
-
pointer-events: none !important;
|
|
106
|
-
align-items: center !important;
|
|
107
|
-
display: flex !important;
|
|
108
|
-
box-sizing: border-box;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
.editable-pointer {
|
|
112
|
-
border-style: solid;
|
|
113
|
-
border-width: 0 0 0 1px;
|
|
114
|
-
border-color: var(--grey-4);
|
|
115
|
-
padding-left: var(--spacing-xs);
|
|
116
|
-
}
|
|
117
|
-
.editable-pointer :global(svg) {
|
|
118
|
-
margin-right: var(--spacing-xs);
|
|
119
|
-
fill: var(--ink)
|
|
120
|
-
}
|
|
121
|
-
</style>
|
|
122
|
-
|
|
123
|
-
{#if label}
|
|
124
|
-
<Label extraSmall grey forAttr={name}>{label}</Label>
|
|
125
|
-
{/if}
|
|
126
|
-
<div class="container" class:disabled class:secondary class:outline class:focus>
|
|
127
|
-
<select
|
|
128
|
-
{name}
|
|
129
|
-
class:thin
|
|
130
|
-
class:extraThin
|
|
131
|
-
class:secondary
|
|
132
|
-
{disabled}
|
|
133
|
-
on:change
|
|
134
|
-
on:focus={handleFocus}
|
|
135
|
-
on:blur={handleBlur}
|
|
136
|
-
bind:value>
|
|
137
|
-
<slot />
|
|
138
|
-
</select>
|
|
139
|
-
<slot name="custom-input" />
|
|
140
|
-
<input
|
|
141
|
-
class:thin
|
|
142
|
-
class:extraThin
|
|
143
|
-
class:secondary
|
|
144
|
-
class:disabled
|
|
145
|
-
{disabled}
|
|
146
|
-
on:change={updateValue}
|
|
147
|
-
on:input={updateValue}
|
|
148
|
-
on:focus={handleFocus}
|
|
149
|
-
on:blur={e => {
|
|
150
|
-
updateValue(e);
|
|
151
|
-
handleBlur(e);
|
|
152
|
-
}}
|
|
153
|
-
value={value || ""}
|
|
154
|
-
type="text" />
|
|
155
|
-
<div class="pointer editable-pointer">
|
|
156
|
-
<Icon name="arrowdown" />
|
|
157
|
-
</div>
|
|
158
|
-
</div>
|
package/src/Form/DataList.svench
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import { View } from "svench";
|
|
3
|
-
import Select from "./Select.svelte";
|
|
4
|
-
import DataList from "./DataList.svelte";
|
|
5
|
-
import Spacer from "../Spacer/Spacer.svelte"
|
|
6
|
-
|
|
7
|
-
const options = ["Chocolate", "Vanilla", "Strawberry Cheesecake"];
|
|
8
|
-
</script>
|
|
9
|
-
|
|
10
|
-
<View name="default">
|
|
11
|
-
<DataList name="Test" label="Flavour">
|
|
12
|
-
{#each options as option}
|
|
13
|
-
<option value={option}>{option}</option>
|
|
14
|
-
{/each}
|
|
15
|
-
</DataList>
|
|
16
|
-
</View>
|
|
17
|
-
|
|
18
|
-
<View name="secondary">
|
|
19
|
-
<DataList secondary name="Test" label="Flavour">
|
|
20
|
-
{#each options as option}
|
|
21
|
-
<option value={option}>{option}</option>
|
|
22
|
-
{/each}
|
|
23
|
-
</DataList>
|
|
24
|
-
</View>
|
|
25
|
-
|
|
26
|
-
<View name="outline">
|
|
27
|
-
<DataList outline name="Test" label="Flavour">
|
|
28
|
-
{#each options as option}
|
|
29
|
-
<option value={option}>{option}</option>
|
|
30
|
-
{/each}
|
|
31
|
-
</DataList>
|
|
32
|
-
</View>
|
|
33
|
-
|
|
34
|
-
<View name="disabled">
|
|
35
|
-
<DataList disabled name="Test" label="Flavour">
|
|
36
|
-
{#each options as option}
|
|
37
|
-
<option value={option}>{option}</option>
|
|
38
|
-
{/each}
|
|
39
|
-
</DataList>
|
|
40
|
-
</View>
|
|
41
|
-
|
|
42
|
-
<View name="thin">
|
|
43
|
-
<DataList thin name="Test" label="Flavour">
|
|
44
|
-
{#each options as option}
|
|
45
|
-
<option value={option}>{option}</option>
|
|
46
|
-
{/each}
|
|
47
|
-
</DataList>
|
|
48
|
-
</View>
|
|
49
|
-
|
|
50
|
-
<View name="extraThin">
|
|
51
|
-
<DataList extraThin name="Test" label="Flavour">
|
|
52
|
-
{#each options as option}
|
|
53
|
-
<option value={option}>{option}</option>
|
|
54
|
-
{/each}
|
|
55
|
-
</DataList>
|
|
56
|
-
</View>
|
|
57
|
-
|
package/src/Form/Input.svench
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import { View } from "svench";
|
|
3
|
-
import Input from "./Input.svelte";
|
|
4
|
-
import Button from "../Button/Button.svelte";
|
|
5
|
-
</script>
|
|
6
|
-
|
|
7
|
-
<View name="default">
|
|
8
|
-
<Input placeholder="Enter your name" label="Name" />
|
|
9
|
-
</View>
|
|
10
|
-
|
|
11
|
-
<View name="presentation">
|
|
12
|
-
<Input presentation placeholder="Enter your name" label="Name" />
|
|
13
|
-
</View>
|
|
14
|
-
|
|
15
|
-
<View name="outline">
|
|
16
|
-
<Input outline placeholder="Enter your name" label="Name" />
|
|
17
|
-
</View>
|
|
18
|
-
|
|
19
|
-
<View name="disabled">
|
|
20
|
-
<Input disabled placeholder="Enter your name" label="Name" />
|
|
21
|
-
</View>
|
|
22
|
-
|
|
23
|
-
<View name="disabled with value">
|
|
24
|
-
<Input value="Some text" disabled placeholder="Enter your name" label="Name" />
|
|
25
|
-
</View>
|
|
26
|
-
|
|
27
|
-
<View name="thin">
|
|
28
|
-
<Input thin placeholder="Enter your name" label="Name" />
|
|
29
|
-
</View>
|
|
30
|
-
|
|
31
|
-
<View name="extraThin">
|
|
32
|
-
<Input extraThin placeholder="Enter your name" label="Name" />
|
|
33
|
-
</View>
|
|
34
|
-
|
|
35
|
-
<View name="large">
|
|
36
|
-
<Input large placeholder="Enter your name" label="Name" />
|
|
37
|
-
</View>
|
|
38
|
-
|
|
39
|
-
<View name="border">
|
|
40
|
-
<Input border presentation placeholder="Enter your name" label="Name" />
|
|
41
|
-
</View>
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
<View name="number">
|
|
45
|
-
<Input type="number" placeholder="Enter your age" label="Age" />
|
|
46
|
-
</View>
|
|
47
|
-
|
|
48
|
-
<View name="with edit buttons">
|
|
49
|
-
<Input
|
|
50
|
-
thin
|
|
51
|
-
edit
|
|
52
|
-
placeholder="Enter your name"
|
|
53
|
-
label="Name"
|
|
54
|
-
on:save={console.log} />
|
|
55
|
-
</View>
|
|
56
|
-
<View name="with error message">
|
|
57
|
-
<Input
|
|
58
|
-
placeholder="Enter your name"
|
|
59
|
-
label="Name"
|
|
60
|
-
error="This is an error message!"
|
|
61
|
-
on:save={console.log} />
|
|
62
|
-
</View>
|