@likable-hair/svelte 4.0.2 → 4.0.4
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/dist/components/composed/forms/AsyncAutocomplete.svelte +1 -1
- package/dist/components/composed/forms/AsyncAutocomplete.svelte.d.ts +46 -25
- package/dist/components/simple/charts/Bar.svelte +1 -1
- package/dist/components/simple/charts/Bar.svelte.d.ts +1 -1
- package/dist/components/simple/charts/BarChart.svelte +1 -1
- package/dist/components/simple/charts/Line.svelte +1 -1
- package/dist/components/simple/charts/Line.svelte.d.ts +1 -1
- package/dist/components/simple/charts/LineChart.svelte +1 -1
- package/dist/components/simple/forms/Autocomplete.svelte +159 -145
- package/dist/components/simple/forms/Autocomplete.svelte.d.ts +3 -3
- package/dist/components/simple/forms/Checkbox.svelte +1 -1
- package/dist/components/simple/forms/FileInput.svelte +1 -1
- package/dist/components/simple/forms/FileInputList.svelte +9 -9
- package/dist/components/simple/forms/RadioButton.svelte +1 -1
- package/dist/components/simple/forms/Select.svelte +1 -1
- package/dist/components/simple/forms/SimpleTextField.svelte +1 -1
- package/dist/components/simple/forms/Switch.svelte +1 -1
- package/dist/components/simple/forms/Textarea.svelte +1 -1
- package/dist/components/simple/forms/VerticalSwitch.svelte +1 -1
- package/dist/components/simple/forms/VerticalTextSwitch.svelte +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script lang="ts" module>export {};
|
|
2
2
|
</script>
|
|
3
3
|
|
|
4
|
-
<script lang="ts">import Autocomplete from "../../../components/simple/forms/Autocomplete.svelte";
|
|
4
|
+
<script lang="ts" generics="Data">import Autocomplete from "../../../components/simple/forms/Autocomplete.svelte";
|
|
5
5
|
import debounceStore from "../../../stores/debounce";
|
|
6
6
|
import { writable } from 'svelte/store';
|
|
7
7
|
let { items = [], values = [], multiple = false, searcher, placeholder, searchThreshold = 2, debounceTimeout = 500, searching = false, search = false, searchText, maxVisibleChips, menuOpened = false, mobileDrawer = false, closeOnSelect = false, disabled = false, chipLabelSnippet, itemLabelSnippet, onchange, } = $props();
|
|
@@ -1,29 +1,50 @@
|
|
|
1
1
|
import type { Item } from "../../../components/simple/forms/Autocomplete.svelte";
|
|
2
2
|
export type { Item };
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
3
|
+
declare class __sveltets_Render<Data> {
|
|
4
|
+
props(): {
|
|
5
|
+
items: Item<Data>[];
|
|
6
|
+
values?: Item<Data>[] | undefined;
|
|
7
|
+
multiple?: boolean;
|
|
8
|
+
searcher: (params: {
|
|
9
|
+
searchText: string;
|
|
10
|
+
}) => Promise<Item<Data>[]>;
|
|
11
|
+
placeholder?: string;
|
|
12
|
+
searchThreshold?: number;
|
|
13
|
+
debounceTimeout?: number;
|
|
14
|
+
searching?: boolean;
|
|
15
|
+
search?: boolean;
|
|
16
|
+
searchText?: string;
|
|
17
|
+
maxVisibleChips?: number;
|
|
18
|
+
menuOpened?: boolean;
|
|
19
|
+
mobileDrawer?: boolean;
|
|
20
|
+
closeOnSelect?: boolean;
|
|
21
|
+
disabled?: boolean;
|
|
22
|
+
chipLabelSnippet?: import("svelte").Snippet<[{
|
|
23
|
+
selection: Item<Data>;
|
|
24
|
+
}]> | undefined;
|
|
25
|
+
itemLabelSnippet?: import("svelte").Snippet<[{
|
|
26
|
+
item: Item<Data>;
|
|
27
|
+
}]> | undefined;
|
|
28
|
+
onchange?: ((event: {
|
|
29
|
+
detail: {
|
|
30
|
+
unselect: Item<Data> | undefined;
|
|
31
|
+
select: Item<Data> | undefined;
|
|
32
|
+
selection: Item<Data>[];
|
|
33
|
+
};
|
|
34
|
+
}) => void) | undefined;
|
|
35
|
+
};
|
|
36
|
+
events(): {};
|
|
37
|
+
slots(): {};
|
|
38
|
+
bindings(): "";
|
|
39
|
+
exports(): {};
|
|
26
40
|
}
|
|
27
|
-
|
|
28
|
-
|
|
41
|
+
interface $$IsomorphicComponent {
|
|
42
|
+
new <Data>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<Data>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<Data>['props']>, ReturnType<__sveltets_Render<Data>['events']>, ReturnType<__sveltets_Render<Data>['slots']>> & {
|
|
43
|
+
$$bindings?: ReturnType<__sveltets_Render<Data>['bindings']>;
|
|
44
|
+
} & ReturnType<__sveltets_Render<Data>['exports']>;
|
|
45
|
+
<Data>(internal: unknown, props: ReturnType<__sveltets_Render<Data>['props']> & {}): ReturnType<__sveltets_Render<Data>['exports']>;
|
|
46
|
+
z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
|
|
47
|
+
}
|
|
48
|
+
declare const AsyncAutocomplete: $$IsomorphicComponent;
|
|
49
|
+
type AsyncAutocomplete<Data> = InstanceType<typeof AsyncAutocomplete<Data>>;
|
|
29
50
|
export default AsyncAutocomplete;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script lang="ts">import { Chart, Tooltip, } from 'chart.js';
|
|
2
2
|
import 'chart.js/auto';
|
|
3
3
|
import 'chartjs-adapter-date-fns';
|
|
4
|
-
let { data
|
|
4
|
+
let { data, options = $bindable(), resetZoom = $bindable(), ...rest } = $props();
|
|
5
5
|
Chart.register(Tooltip);
|
|
6
6
|
let canvasElem, chart;
|
|
7
7
|
$effect(() => {
|
|
@@ -7,6 +7,6 @@ interface Props extends HTMLCanvasAttributes {
|
|
|
7
7
|
options: ChartOptions<'bar'>;
|
|
8
8
|
resetZoom?: boolean;
|
|
9
9
|
}
|
|
10
|
-
declare const Bar: import("svelte").Component<Props, {}, "
|
|
10
|
+
declare const Bar: import("svelte").Component<Props, {}, "options" | "resetZoom">;
|
|
11
11
|
type Bar = ReturnType<typeof Bar>;
|
|
12
12
|
export default Bar;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script lang="ts">import { Chart, Tooltip, } from 'chart.js';
|
|
2
2
|
import 'chart.js/auto';
|
|
3
3
|
import 'chartjs-adapter-date-fns';
|
|
4
|
-
let { data
|
|
4
|
+
let { data, options = $bindable(), resetZoom = $bindable(), ...rest } = $props();
|
|
5
5
|
Chart.register(Tooltip);
|
|
6
6
|
let canvasElem, chart;
|
|
7
7
|
$effect(() => {
|
|
@@ -7,6 +7,6 @@ interface Props extends HTMLCanvasAttributes {
|
|
|
7
7
|
options: ChartOptions<'line'>;
|
|
8
8
|
resetZoom?: boolean;
|
|
9
9
|
}
|
|
10
|
-
declare const Line: import("svelte").Component<Props, {}, "
|
|
10
|
+
declare const Line: import("svelte").Component<Props, {}, "options" | "resetZoom">;
|
|
11
11
|
type Line = ReturnType<typeof Line>;
|
|
12
12
|
export default Line;
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
<script module lang="ts">export {};
|
|
2
2
|
</script>
|
|
3
3
|
|
|
4
|
-
<script lang="ts" generics="Data">import
|
|
5
|
-
import
|
|
6
|
-
import { scrollInMenu } from
|
|
7
|
-
let { values = $bindable(
|
|
4
|
+
<script lang="ts" generics="Data">import "../../../css/main.css";
|
|
5
|
+
import "./Autocomplete.css";
|
|
6
|
+
import { scrollInMenu } from "../common/scroller";
|
|
7
|
+
let { values = $bindable(), items = [], searchFunction = undefined, multiple = false, disabled = false, mandatory = false, placeholder = "", width = "auto", height = "auto", maxWidth = undefined, minWidth = "200px", openingId = $bindable("autocomplete-menu"), searchText = $bindable(undefined), maxVisibleChips = undefined, menuOpened = $bindable(false), closeOnSelect = !multiple, emptySearchTextOnMenuClose = true, menuBoxShadow = "rgb(var(--global-color-background-300), .5) 0px 2px 4px", menuBorderRadius = "5px", mobileDrawer = false, menuWidth = undefined, class: clazz = {}, selectionContainerSnippet, selectionSnippet, chipLabelSnippet, exceedCounterSnippet, menuSnippet, itemLabelSnippet, itemSnippet, onchange, onfocus, onblur, onkeydown, onclose, } = $props();
|
|
8
8
|
let notVisibleChipNumber = $derived(Math.max((values?.length || 0) - (maxVisibleChips || 0), 0));
|
|
9
9
|
function select(item) {
|
|
10
10
|
if (disabled)
|
|
11
11
|
return;
|
|
12
|
-
const alreadyPresent = values
|
|
12
|
+
const alreadyPresent = values?.findIndex((i) => i.value === item.value) !== -1;
|
|
13
13
|
if (!alreadyPresent) {
|
|
14
14
|
if (multiple)
|
|
15
|
-
values = [...values, item];
|
|
15
|
+
values = [...(values || []), item];
|
|
16
16
|
else
|
|
17
17
|
values = [item];
|
|
18
18
|
refreshMenuWidth();
|
|
@@ -22,7 +22,7 @@ function select(item) {
|
|
|
22
22
|
unselect: undefined,
|
|
23
23
|
select: item,
|
|
24
24
|
selection: values,
|
|
25
|
-
}
|
|
25
|
+
},
|
|
26
26
|
});
|
|
27
27
|
}
|
|
28
28
|
}
|
|
@@ -32,25 +32,25 @@ function select(item) {
|
|
|
32
32
|
function unselect(item) {
|
|
33
33
|
if (disabled)
|
|
34
34
|
return;
|
|
35
|
-
if (values.length == 1 && mandatory)
|
|
35
|
+
if (!!values && values.length == 1 && mandatory)
|
|
36
36
|
return;
|
|
37
|
-
values = values
|
|
37
|
+
values = values?.filter((i) => i.value != item.value);
|
|
38
38
|
refreshMenuWidth();
|
|
39
39
|
if (onchange) {
|
|
40
40
|
onchange({
|
|
41
41
|
detail: {
|
|
42
42
|
unselect: item,
|
|
43
43
|
select: undefined,
|
|
44
|
-
selection: values,
|
|
45
|
-
}
|
|
44
|
+
selection: values || [],
|
|
45
|
+
},
|
|
46
46
|
});
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
function pop() {
|
|
50
|
-
if (values.length == 1 && mandatory)
|
|
50
|
+
if (!!values && values.length == 1 && mandatory)
|
|
51
51
|
return;
|
|
52
|
-
let poppedElement = values
|
|
53
|
-
values = [...values];
|
|
52
|
+
let poppedElement = values?.pop();
|
|
53
|
+
values = [...(values || [])];
|
|
54
54
|
refreshMenuWidth();
|
|
55
55
|
if (onchange) {
|
|
56
56
|
onchange({
|
|
@@ -58,12 +58,12 @@ function pop() {
|
|
|
58
58
|
unselect: poppedElement,
|
|
59
59
|
select: undefined,
|
|
60
60
|
selection: values,
|
|
61
|
-
}
|
|
61
|
+
},
|
|
62
62
|
});
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
function toggle(item) {
|
|
66
|
-
const alreadyPresent = values
|
|
66
|
+
const alreadyPresent = values?.findIndex((i) => i.value === item.value) != -1;
|
|
67
67
|
if (alreadyPresent)
|
|
68
68
|
unselect(item);
|
|
69
69
|
else
|
|
@@ -125,19 +125,19 @@ function handleKeyDown(event) {
|
|
|
125
125
|
else if (event.key == "Enter" && focusedIndex != undefined) {
|
|
126
126
|
toggle(filteredItems[focusedIndex]);
|
|
127
127
|
}
|
|
128
|
-
else if (event.key ==
|
|
128
|
+
else if (event.key == "Backspace" && searchText == "") {
|
|
129
129
|
pop();
|
|
130
130
|
}
|
|
131
|
-
else if (event.key ==
|
|
132
|
-
searchText =
|
|
131
|
+
else if (event.key == "Escape" || event.key == "Tab") {
|
|
132
|
+
searchText = "";
|
|
133
133
|
if (!!input)
|
|
134
134
|
input.blur();
|
|
135
135
|
menuOpened = false;
|
|
136
136
|
}
|
|
137
137
|
if (focusedIndex !== undefined && !!menuElement) {
|
|
138
|
-
let child = menuElement.querySelector(
|
|
138
|
+
let child = menuElement.querySelector(".item-" + focusedIndex);
|
|
139
139
|
if (!!child)
|
|
140
|
-
scrollInMenu(menuElement, child,
|
|
140
|
+
scrollInMenu(menuElement, child, "instant");
|
|
141
141
|
}
|
|
142
142
|
}
|
|
143
143
|
let input = $state();
|
|
@@ -161,7 +161,11 @@ $effect(() => {
|
|
|
161
161
|
if (searchFunction)
|
|
162
162
|
return searchFunction(it, searchText);
|
|
163
163
|
else
|
|
164
|
-
return !!searchText &&
|
|
164
|
+
return (!!searchText &&
|
|
165
|
+
it.label
|
|
166
|
+
?.toString()
|
|
167
|
+
.toLowerCase()
|
|
168
|
+
.includes(searchText.toLowerCase()));
|
|
165
169
|
});
|
|
166
170
|
}
|
|
167
171
|
else {
|
|
@@ -178,11 +182,12 @@ $effect(() => {
|
|
|
178
182
|
});
|
|
179
183
|
$effect(() => {
|
|
180
184
|
if (!!input) {
|
|
181
|
-
if (!disabled && values
|
|
182
|
-
input.style.width =
|
|
185
|
+
if (!disabled && values?.length !== 0) {
|
|
186
|
+
input.style.width =
|
|
187
|
+
Math.max(searchText?.length || placeholder?.length, 1) + "ch";
|
|
183
188
|
}
|
|
184
189
|
else {
|
|
185
|
-
input.style.width =
|
|
190
|
+
input.style.width = "auto";
|
|
186
191
|
}
|
|
187
192
|
}
|
|
188
193
|
});
|
|
@@ -190,7 +195,7 @@ import Chip from "../navigation/Chip.svelte";
|
|
|
190
195
|
import Menu from "../common/Menu.svelte";
|
|
191
196
|
import {} from "svelte";
|
|
192
197
|
import SimpleTextField from "./SimpleTextField.svelte";
|
|
193
|
-
import MenuOrDrawer from
|
|
198
|
+
import MenuOrDrawer from "../../composed/common/MenuOrDrawer.svelte";
|
|
194
199
|
</script>
|
|
195
200
|
|
|
196
201
|
<svelte:window />
|
|
@@ -204,19 +209,25 @@ import MenuOrDrawer from '../../composed/common/MenuOrDrawer.svelte';
|
|
|
204
209
|
style:opacity={disabled ? "50%" : "100%"}
|
|
205
210
|
onclick={handleContainerClick}
|
|
206
211
|
onkeypress={handleContainerClick}
|
|
207
|
-
class={clazz.activator ||
|
|
212
|
+
class={clazz.activator || ""}
|
|
208
213
|
role="button"
|
|
209
214
|
tabindex="0"
|
|
210
215
|
>
|
|
211
216
|
{#if selectionContainerSnippet}
|
|
212
|
-
{@render selectionContainerSnippet({
|
|
217
|
+
{@render selectionContainerSnippet({
|
|
218
|
+
values: values || [],
|
|
219
|
+
searchText,
|
|
220
|
+
disabled,
|
|
221
|
+
openMenu,
|
|
222
|
+
handleKeyDown,
|
|
223
|
+
unselect,
|
|
224
|
+
select,
|
|
225
|
+
})}
|
|
213
226
|
{:else}
|
|
214
|
-
<div
|
|
215
|
-
class="selection-container"
|
|
216
|
-
>
|
|
227
|
+
<div class="selection-container">
|
|
217
228
|
{#each (values || []).slice(0, maxVisibleChips) as selection}
|
|
218
229
|
{#if selectionSnippet}
|
|
219
|
-
{@render selectionSnippet({ selection, unselect})}
|
|
230
|
+
{@render selectionSnippet({ selection, unselect })}
|
|
220
231
|
{:else}
|
|
221
232
|
<div tabindex="-1">
|
|
222
233
|
<Chip
|
|
@@ -237,7 +248,13 @@ import MenuOrDrawer from '../../composed/common/MenuOrDrawer.svelte';
|
|
|
237
248
|
{/each}
|
|
238
249
|
{#if maxVisibleChips !== undefined && notVisibleChipNumber > 0}
|
|
239
250
|
{#if exceedCounterSnippet}
|
|
240
|
-
{@render exceedCounterSnippet({
|
|
251
|
+
{@render exceedCounterSnippet({
|
|
252
|
+
notVisibleChipNumber,
|
|
253
|
+
maxVisibleChips,
|
|
254
|
+
values: values || [],
|
|
255
|
+
searchText,
|
|
256
|
+
disabled,
|
|
257
|
+
})}
|
|
241
258
|
{:else}
|
|
242
259
|
<div class="not-visible-chip-number">+ {notVisibleChipNumber}</div>
|
|
243
260
|
{/if}
|
|
@@ -250,7 +267,7 @@ import MenuOrDrawer from '../../composed/common/MenuOrDrawer.svelte';
|
|
|
250
267
|
onblur={handleTextFieldBlur}
|
|
251
268
|
onkeydown={handleKeyDown}
|
|
252
269
|
{disabled}
|
|
253
|
-
|
|
270
|
+
{placeholder}
|
|
254
271
|
bind:this={input}
|
|
255
272
|
/>
|
|
256
273
|
</div>
|
|
@@ -260,109 +277,112 @@ import MenuOrDrawer from '../../composed/common/MenuOrDrawer.svelte';
|
|
|
260
277
|
{#key searchText}
|
|
261
278
|
{#if menuSnippet}
|
|
262
279
|
{@render menuSnippet()}
|
|
263
|
-
{:else}
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
280
|
+
{:else if !mobileDrawer}
|
|
281
|
+
<Menu
|
|
282
|
+
{activator}
|
|
283
|
+
_width={localMenuWidth || ""}
|
|
284
|
+
_height={menuHeight}
|
|
285
|
+
_maxHeight="300px"
|
|
286
|
+
_boxShadow={menuBoxShadow}
|
|
287
|
+
_borderRadius={menuBorderRadius}
|
|
288
|
+
bind:open={menuOpened}
|
|
289
|
+
anchor="bottom-center"
|
|
290
|
+
closeOnClickOutside
|
|
291
|
+
bind:refreshPosition
|
|
292
|
+
bind:menuElement
|
|
293
|
+
bind:openingId
|
|
294
|
+
flipOnOverflow
|
|
295
|
+
>
|
|
296
|
+
<ul
|
|
297
|
+
class={clazz.menu || ""}
|
|
298
|
+
style:background-color="rgb(var(--global-color-background-100))"
|
|
279
299
|
>
|
|
280
|
-
|
|
281
|
-
class={
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
item,
|
|
289
|
-
index,
|
|
290
|
-
selected: (values || [])
|
|
291
|
-
.findIndex((i) => { return i.value == item.value }) != -1
|
|
292
|
-
})}
|
|
293
|
-
{:else}
|
|
294
|
-
<div
|
|
295
|
-
class:selection-item={true}
|
|
296
|
-
class:focused={index == focusedIndex}
|
|
297
|
-
class:selected={(values || []).findIndex((i) => {
|
|
300
|
+
{#each filteredItems as item, index}
|
|
301
|
+
<li class="item-{index}">
|
|
302
|
+
{#if itemSnippet}
|
|
303
|
+
{@render itemSnippet({
|
|
304
|
+
item,
|
|
305
|
+
index,
|
|
306
|
+
selected:
|
|
307
|
+
(values || []).findIndex((i) => {
|
|
298
308
|
return i.value == item.value;
|
|
299
|
-
}) != -1
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
309
|
+
}) != -1,
|
|
310
|
+
})}
|
|
311
|
+
{:else}
|
|
312
|
+
<div
|
|
313
|
+
class:selection-item={true}
|
|
314
|
+
class:focused={index == focusedIndex}
|
|
315
|
+
class:selected={(values || []).findIndex((i) => {
|
|
316
|
+
return i.value == item.value;
|
|
317
|
+
}) != -1}
|
|
318
|
+
onclick={() => toggle(item)}
|
|
319
|
+
onkeypress={() => toggle(item)}
|
|
320
|
+
role="button"
|
|
321
|
+
tabindex="0"
|
|
322
|
+
>
|
|
323
|
+
{#if itemLabelSnippet}
|
|
324
|
+
{@render itemLabelSnippet({ item })}
|
|
325
|
+
{:else}
|
|
326
|
+
{item.label}
|
|
327
|
+
{/if}
|
|
328
|
+
</div>
|
|
329
|
+
{/if}
|
|
330
|
+
</li>
|
|
331
|
+
{/each}
|
|
332
|
+
</ul>
|
|
333
|
+
</Menu>
|
|
334
|
+
{:else}
|
|
335
|
+
<MenuOrDrawer
|
|
336
|
+
{activator}
|
|
337
|
+
_width={localMenuWidth || ""}
|
|
338
|
+
_height={menuHeight}
|
|
339
|
+
_maxHeight="300px"
|
|
340
|
+
_boxShadow={menuBoxShadow}
|
|
341
|
+
_borderRadius={menuBorderRadius}
|
|
342
|
+
bind:open={menuOpened}
|
|
343
|
+
{onclose}
|
|
344
|
+
>
|
|
345
|
+
<ul
|
|
346
|
+
class={clazz.menu || ""}
|
|
347
|
+
style:background-color="rgb(var(--global-color-background-100))"
|
|
326
348
|
>
|
|
327
|
-
|
|
328
|
-
class={
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
item,
|
|
336
|
-
index,
|
|
337
|
-
selected: (values || [])
|
|
338
|
-
.findIndex((i) => { return i.value == item.value }) != -1
|
|
339
|
-
})}
|
|
340
|
-
{:else}
|
|
341
|
-
<div
|
|
342
|
-
class:selection-item={true}
|
|
343
|
-
class:focused={index == focusedIndex}
|
|
344
|
-
class:selected={(values || []).findIndex((i) => {
|
|
349
|
+
{#each filteredItems as item, index}
|
|
350
|
+
<li class="item-{index}">
|
|
351
|
+
{#if itemSnippet}
|
|
352
|
+
{@render itemSnippet({
|
|
353
|
+
item,
|
|
354
|
+
index,
|
|
355
|
+
selected:
|
|
356
|
+
(values || []).findIndex((i) => {
|
|
345
357
|
return i.value == item.value;
|
|
346
|
-
}) != -1
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
358
|
+
}) != -1,
|
|
359
|
+
})}
|
|
360
|
+
{:else}
|
|
361
|
+
<div
|
|
362
|
+
class:selection-item={true}
|
|
363
|
+
class:focused={index == focusedIndex}
|
|
364
|
+
class:selected={(values || []).findIndex((i) => {
|
|
365
|
+
return i.value == item.value;
|
|
366
|
+
}) != -1}
|
|
367
|
+
onclick={() => toggle(item)}
|
|
368
|
+
onkeypress={() => toggle(item)}
|
|
369
|
+
role="button"
|
|
370
|
+
tabindex="0"
|
|
371
|
+
>
|
|
372
|
+
{#if itemLabelSnippet}
|
|
373
|
+
{@render itemLabelSnippet({ item })}
|
|
374
|
+
{:else}
|
|
375
|
+
{item.label}
|
|
376
|
+
{/if}
|
|
377
|
+
</div>
|
|
378
|
+
{/if}
|
|
379
|
+
</li>
|
|
380
|
+
{/each}
|
|
381
|
+
</ul>
|
|
382
|
+
</MenuOrDrawer>
|
|
364
383
|
{/if}
|
|
365
384
|
{/key}
|
|
385
|
+
|
|
366
386
|
<style>
|
|
367
387
|
ul {
|
|
368
388
|
list-style: none;
|
|
@@ -375,10 +395,7 @@ import MenuOrDrawer from '../../composed/common/MenuOrDrawer.svelte';
|
|
|
375
395
|
flex-wrap: wrap;
|
|
376
396
|
align-items: center;
|
|
377
397
|
gap: 5px;
|
|
378
|
-
border: var(
|
|
379
|
-
--autocomplete-border,
|
|
380
|
-
var(--autocomplete-default-border)
|
|
381
|
-
);
|
|
398
|
+
border: var(--autocomplete-border, var(--autocomplete-default-border));
|
|
382
399
|
background-color: var(
|
|
383
400
|
--autocomplete-background-color,
|
|
384
401
|
var(--autocomplete-default-background-color)
|
|
@@ -387,15 +404,12 @@ import MenuOrDrawer from '../../composed/common/MenuOrDrawer.svelte';
|
|
|
387
404
|
--autocomplete-border-radius,
|
|
388
405
|
var(--autocomplete-default-border-radius)
|
|
389
406
|
);
|
|
390
|
-
padding: var(
|
|
391
|
-
--autocomplete-padding,
|
|
392
|
-
var(--autocomplete-default-padding)
|
|
393
|
-
);
|
|
407
|
+
padding: var(--autocomplete-padding, var(--autocomplete-default-padding));
|
|
394
408
|
min-height: var(
|
|
395
409
|
--autocomplete-min-height,
|
|
396
410
|
var(--autocomplete-default-min-height)
|
|
397
411
|
);
|
|
398
|
-
transition: all .1s;
|
|
412
|
+
transition: all 0.1s;
|
|
399
413
|
}
|
|
400
414
|
|
|
401
415
|
.selection-container:focus-within {
|
|
@@ -403,10 +417,7 @@ import MenuOrDrawer from '../../composed/common/MenuOrDrawer.svelte';
|
|
|
403
417
|
--autocomplete-focus-border,
|
|
404
418
|
var(
|
|
405
419
|
--autocomplete-default-focus-border,
|
|
406
|
-
var(
|
|
407
|
-
--autocomplete-border,
|
|
408
|
-
var(--autocomplete-default-border)
|
|
409
|
-
)
|
|
420
|
+
var(--autocomplete-border, var(--autocomplete-default-border))
|
|
410
421
|
)
|
|
411
422
|
);
|
|
412
423
|
box-shadow: var(
|
|
@@ -417,7 +428,10 @@ import MenuOrDrawer from '../../composed/common/MenuOrDrawer.svelte';
|
|
|
417
428
|
|
|
418
429
|
.selection-item {
|
|
419
430
|
padding: 10px;
|
|
420
|
-
max-width: var(
|
|
431
|
+
max-width: var(
|
|
432
|
+
--autocomplete-options-max-width,
|
|
433
|
+
var(--autocomplete-default-options-max-width)
|
|
434
|
+
);
|
|
421
435
|
text-overflow: ellipsis;
|
|
422
436
|
white-space: nowrap;
|
|
423
437
|
overflow: hidden;
|
|
@@ -3,11 +3,11 @@ export type Item<Data = any> = {
|
|
|
3
3
|
label?: string | number;
|
|
4
4
|
data?: Data;
|
|
5
5
|
};
|
|
6
|
-
import
|
|
7
|
-
import
|
|
6
|
+
import "../../../css/main.css";
|
|
7
|
+
import "./Autocomplete.css";
|
|
8
8
|
import { type ComponentProps, type Snippet } from "svelte";
|
|
9
9
|
import SimpleTextField from "./SimpleTextField.svelte";
|
|
10
|
-
import MenuOrDrawer from
|
|
10
|
+
import MenuOrDrawer from "../../composed/common/MenuOrDrawer.svelte";
|
|
11
11
|
declare class __sveltets_Render<Data> {
|
|
12
12
|
props(): {
|
|
13
13
|
values?: Item<Data>[] | undefined;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script lang="ts">import './Checkbox.css';
|
|
2
2
|
import '../../../css/main.css';
|
|
3
3
|
import { onMount } from 'svelte';
|
|
4
|
-
let { value = $bindable(
|
|
4
|
+
let { value = $bindable(), id = undefined, disabled = false, onchange, } = $props();
|
|
5
5
|
onMount(() => {
|
|
6
6
|
window.addEventListener('keydown', handleKeyDown);
|
|
7
7
|
window.addEventListener('keyup', handleKeyUp);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<script lang="ts">import '../../../css/main.css';
|
|
2
2
|
import './FileInput.css';
|
|
3
|
-
let { files = $bindable(
|
|
3
|
+
let { files = $bindable(), placeholder = undefined, persistOverUpload = true, disabled = false, maxFiles = undefined, class: clazz = '', onfileDrop, onfileSelect, onchange, bodySnippet, } = $props();
|
|
4
4
|
let inputElement = undefined;
|
|
5
5
|
let dropAreaActive = $state(false);
|
|
6
6
|
const highlight = (highlighted) => {
|
|
@@ -3,7 +3,7 @@ import "./FileInputList.css";
|
|
|
3
3
|
import Button from "../buttons/Button.svelte";
|
|
4
4
|
import FileInput from "./FileInput.svelte";
|
|
5
5
|
import Icon from "../media/Icon.svelte";
|
|
6
|
-
let { files = $bindable(
|
|
6
|
+
let { files = $bindable(), persistOverUpload = true, dropAreaActive = true, icon = "mdi-file-document", message = "Drop file here or click to upload", disabled = false, maxFiles = undefined, class: clazz = '', onchange, onfileChange, onfileDrop, onfileSelect, bodySnippet: bodyOuterSnippet, messageSnippet, fileListSnippet, } = $props();
|
|
7
7
|
let fileActive = $state(null);
|
|
8
8
|
function handleFileMouseEnter(file) {
|
|
9
9
|
dropAreaActive = false;
|
|
@@ -17,13 +17,13 @@ function handleFileClick(file) {
|
|
|
17
17
|
alert(file.name);
|
|
18
18
|
}
|
|
19
19
|
function handleRemove(file) {
|
|
20
|
-
files = files
|
|
20
|
+
files = files?.filter((elem) => {
|
|
21
21
|
return elem != file;
|
|
22
22
|
});
|
|
23
23
|
if (onfileChange) {
|
|
24
24
|
onfileChange({
|
|
25
25
|
detail: {
|
|
26
|
-
files
|
|
26
|
+
files: files || []
|
|
27
27
|
}
|
|
28
28
|
});
|
|
29
29
|
}
|
|
@@ -32,7 +32,7 @@ function handleFileDrop() {
|
|
|
32
32
|
if (onfileChange) {
|
|
33
33
|
onfileChange({
|
|
34
34
|
detail: {
|
|
35
|
-
files
|
|
35
|
+
files: files || []
|
|
36
36
|
}
|
|
37
37
|
});
|
|
38
38
|
}
|
|
@@ -44,7 +44,7 @@ function handleFileSelect() {
|
|
|
44
44
|
if (onfileChange) {
|
|
45
45
|
onfileChange({
|
|
46
46
|
detail: {
|
|
47
|
-
files
|
|
47
|
+
files: files || []
|
|
48
48
|
}
|
|
49
49
|
});
|
|
50
50
|
}
|
|
@@ -58,7 +58,7 @@ function handleFileSelect() {
|
|
|
58
58
|
<FileInput
|
|
59
59
|
bind:files
|
|
60
60
|
{persistOverUpload}
|
|
61
|
-
disabled={disabled || (maxFiles !== undefined && files.length >= maxFiles)}
|
|
61
|
+
disabled={disabled || (maxFiles !== undefined && !!files && files.length >= maxFiles)}
|
|
62
62
|
--file-input-border-radius="var(--file-input-list-border-radius,var(--file-input-list-default-border-radius))"
|
|
63
63
|
--file-input-background-color="var(--file-input-list-background-color,var(--file-input-list-default-background-color))"
|
|
64
64
|
--file-input-color="var(--file-input-list-color,var(--file-input-list-default-color))"
|
|
@@ -79,7 +79,7 @@ function handleFileSelect() {
|
|
|
79
79
|
style:display="flex"
|
|
80
80
|
>
|
|
81
81
|
<div class="body-container" class:{active}>
|
|
82
|
-
{#if files
|
|
82
|
+
{#if files?.length == 0}
|
|
83
83
|
{#if messageSnippet}
|
|
84
84
|
{@render messageSnippet({ message })}
|
|
85
85
|
{:else}
|
|
@@ -87,11 +87,11 @@ function handleFileSelect() {
|
|
|
87
87
|
{/if}
|
|
88
88
|
{:else}
|
|
89
89
|
{#if fileListSnippet}
|
|
90
|
-
{@render fileListSnippet({ files })}
|
|
90
|
+
{@render fileListSnippet({ files: files || [] })}
|
|
91
91
|
{:else}
|
|
92
92
|
<table class="file-list">
|
|
93
93
|
<tbody>
|
|
94
|
-
{#each files as file}
|
|
94
|
+
{#each (files || []) as file}
|
|
95
95
|
<tr
|
|
96
96
|
onclick={(e) => {
|
|
97
97
|
e.stopPropagation()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<script lang="ts">import './RadioButton.css';
|
|
2
2
|
import "../../../css/main.css";
|
|
3
|
-
let { name, value, id = undefined, checked = $bindable(
|
|
3
|
+
let { name, value, id = undefined, checked = $bindable(), label = undefined, disabled = false, onblur, onchange, onfocus, oninput, onkeydown, onkeypress, onkeyup, } = $props();
|
|
4
4
|
</script>
|
|
5
5
|
|
|
6
6
|
<input
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script lang="ts" module>import './Select.css';
|
|
2
2
|
</script>
|
|
3
3
|
<script lang="ts">import { Icon } from "../../..";
|
|
4
|
-
let { options, name = undefined, value = $bindable(
|
|
4
|
+
let { options, name = undefined, value = $bindable(), disabled = false, placeholder = undefined, onchange, optionAttributes, ...rest } = $props();
|
|
5
5
|
</script>
|
|
6
6
|
|
|
7
7
|
<select
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script lang="ts">import '../../../css/main.css';
|
|
2
2
|
import './SimpleTextField.css';
|
|
3
3
|
import Icon from "../media/Icon.svelte";
|
|
4
|
-
let { value = $bindable(
|
|
4
|
+
let { value = $bindable(), type = "text", placeholder = undefined, disabled = false, readonly = false, id = undefined, appendIcon = undefined, appendInnerIcon = undefined, prependIcon = undefined, prependInnerIcon = undefined, iconSize = "12pt", name = undefined, hint = undefined, input = $bindable(undefined), class: clazz = {}, prependSnippet, prependInnerSnippet, appendInnerSnippet, appendSnippet, hintSnippet, onchange, oninput, onfocus, onblur, onkeydown, onkeyup, onkeypress, ...rest } = $props();
|
|
5
5
|
</script>
|
|
6
6
|
|
|
7
7
|
<div
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script lang="ts">import './Switch.css';
|
|
2
|
-
let { value = $bindable(
|
|
2
|
+
let { value = $bindable(), disabled = false, onchange: onchangeInternal, } = $props();
|
|
3
3
|
function onchange(event) {
|
|
4
4
|
if (onchangeInternal) {
|
|
5
5
|
onchangeInternal({
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script lang="ts">import { createId } from '@paralleldrive/cuid2';
|
|
2
|
-
let { label = undefined, placeholder = "placeholder", textAreaId = createId(), fontFamily = "inherit", value = $bindable(
|
|
2
|
+
let { label = undefined, placeholder = "placeholder", textAreaId = createId(), fontFamily = "inherit", value = $bindable(), resizable = true, disabled = false, readOnly = false, maxLength = undefined, textColor = "black", border = "none", borderRadius = "5px", focusedBoxShadow = undefined, backgroundColor = undefined, padding = undefined, paddingLeft = undefined, paddingRight = undefined, paddingBottom = undefined, paddingTop = undefined, fontSize = undefined, labelFontSize = undefined, labelColor = undefined, width = "100%", height = "100%" } = $props();
|
|
3
3
|
</script>
|
|
4
4
|
|
|
5
5
|
<div class="container">
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script lang="ts">import './VerticalSwitch.css';
|
|
2
|
-
let { value = $bindable(
|
|
2
|
+
let { value = $bindable(), rounded = false, onchange, falseOptionSnippet, trueOptionSnippet, } = $props();
|
|
3
3
|
</script>
|
|
4
4
|
|
|
5
5
|
<div
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script lang="ts">import { fly } from "svelte/transition";
|
|
2
|
-
let { value = $bindable(
|
|
2
|
+
let { value = $bindable(), height = "100%", width = "100%", backgroundColor, firstColor, secondColor = firstColor, fontSize = "12px", hoverBackgroundColor, hoverBoxShadow, animationDuration = 200, falseOptionSnippet, trueOptionSnippet, } = $props();
|
|
3
3
|
let optionHeight = $state(undefined);
|
|
4
4
|
</script>
|
|
5
5
|
|