@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.
@@ -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
- import Autocomplete from "../../../components/simple/forms/Autocomplete.svelte";
4
- import type { ComponentProps } from "svelte";
5
- interface Props {
6
- items: Item[];
7
- values?: Item[];
8
- multiple?: boolean;
9
- searcher: (params: {
10
- searchText: string;
11
- }) => Promise<Item[]>;
12
- placeholder?: string;
13
- searchThreshold?: number;
14
- debounceTimeout?: number;
15
- searching?: boolean;
16
- search?: boolean;
17
- searchText?: string;
18
- maxVisibleChips?: number;
19
- menuOpened?: boolean;
20
- mobileDrawer?: boolean;
21
- closeOnSelect?: boolean;
22
- disabled?: boolean;
23
- chipLabelSnippet?: ComponentProps<typeof Autocomplete>['chipLabelSnippet'];
24
- itemLabelSnippet?: ComponentProps<typeof Autocomplete>['itemLabelSnippet'];
25
- onchange?: ComponentProps<typeof Autocomplete>['onchange'];
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
- declare const AsyncAutocomplete: import("svelte").Component<Props, {}, "">;
28
- type AsyncAutocomplete = ReturnType<typeof AsyncAutocomplete>;
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 = $bindable(), options = $bindable(), resetZoom = $bindable(), ...rest } = $props();
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, {}, "data" | "options" | "resetZoom">;
10
+ declare const Bar: import("svelte").Component<Props, {}, "options" | "resetZoom">;
11
11
  type Bar = ReturnType<typeof Bar>;
12
12
  export default Bar;
@@ -104,7 +104,7 @@ let chartOptions = $derived({
104
104
  </script>
105
105
 
106
106
  <Bar
107
- bind:data={data}
107
+ data={data}
108
108
  bind:resetZoom
109
109
  options={chartOptions}
110
110
  width={width}
@@ -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 = $bindable(), options = $bindable(), resetZoom = $bindable(), ...rest } = $props();
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, {}, "data" | "options" | "resetZoom">;
10
+ declare const Line: import("svelte").Component<Props, {}, "options" | "resetZoom">;
11
11
  type Line = ReturnType<typeof Line>;
12
12
  export default Line;
@@ -90,7 +90,7 @@ let chartOptions = $derived({
90
90
  </script>
91
91
 
92
92
  <Line
93
- bind:data={(data as ComponentProps<typeof Line>['data'])}
93
+ data={(data as ComponentProps<typeof Line>['data'])}
94
94
  options={chartOptions}
95
95
  bind:resetZoom
96
96
  ></Line>
@@ -1,18 +1,18 @@
1
1
  <script module lang="ts">export {};
2
2
  </script>
3
3
 
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();
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.findIndex((i) => i.value === item.value) != -1;
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.filter((i) => i.value != item.value);
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.pop();
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.findIndex((i) => i.value === item.value) != -1;
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 == 'Backspace' && searchText == '') {
128
+ else if (event.key == "Backspace" && searchText == "") {
129
129
  pop();
130
130
  }
131
- else if (event.key == 'Escape' || event.key == 'Tab') {
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('.item-' + focusedIndex);
138
+ let child = menuElement.querySelector(".item-" + focusedIndex);
139
139
  if (!!child)
140
- scrollInMenu(menuElement, child, 'instant');
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 && it.label?.toString().toLowerCase().includes((searchText).toLowerCase());
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.length != 0) {
182
- input.style.width = Math.max(searchText?.length || placeholder?.length, 1) + 'ch';
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 = 'auto';
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 '../../composed/common/MenuOrDrawer.svelte';
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({ values, searchText, disabled, openMenu, handleKeyDown, unselect, select})}
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({ notVisibleChipNumber, maxVisibleChips, values, searchText, disabled })}
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
- placeholder={placeholder}
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
- {#if !mobileDrawer}
265
- <Menu
266
- {activator}
267
- _width={localMenuWidth || ""}
268
- _height={menuHeight}
269
- _maxHeight="300px"
270
- _boxShadow={menuBoxShadow}
271
- _borderRadius={menuBorderRadius}
272
- bind:open={menuOpened}
273
- anchor="bottom-center"
274
- closeOnClickOutside
275
- bind:refreshPosition
276
- bind:menuElement
277
- bind:openingId={openingId}
278
- flipOnOverflow
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
- <ul
281
- class={clazz.menu || ''}
282
- style:background-color="rgb(var(--global-color-background-100))"
283
- >
284
- {#each filteredItems as item, index}
285
- <li class="item-{index}">
286
- {#if itemSnippet}
287
- {@render itemSnippet({
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
- onclick={() => toggle(item)}
301
- onkeypress={() => toggle(item)}
302
- role="button"
303
- tabindex="0"
304
- >
305
- {#if itemLabelSnippet}
306
- {@render itemLabelSnippet({ item })}
307
- {:else}
308
- {item.label}
309
- {/if}
310
- </div>
311
- {/if}
312
- </li>
313
- {/each}
314
- </ul>
315
- </Menu>
316
- {:else}
317
- <MenuOrDrawer
318
- {activator}
319
- _width={localMenuWidth || ""}
320
- _height={menuHeight}
321
- _maxHeight="300px"
322
- _boxShadow={menuBoxShadow}
323
- _borderRadius={menuBorderRadius}
324
- bind:open={menuOpened}
325
- {onclose}
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
- <ul
328
- class={clazz.menu || ''}
329
- style:background-color="rgb(var(--global-color-background-100))"
330
- >
331
- {#each filteredItems as item, index}
332
- <li class="item-{index}">
333
- {#if itemSnippet}
334
- {@render itemSnippet({
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
- onclick={() => toggle(item)}
348
- onkeypress={() => toggle(item)}
349
- role="button"
350
- tabindex="0"
351
- >
352
- {#if itemLabelSnippet}
353
- {@render itemLabelSnippet({ item })}
354
- {:else}
355
- {item.label}
356
- {/if}
357
- </div>
358
- {/if}
359
- </li>
360
- {/each}
361
- </ul>
362
- </MenuOrDrawer>
363
- {/if}
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(--autocomplete-options-max-width, var(--autocomplete-default-options-max-width));
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 '../../../css/main.css';
7
- import './Autocomplete.css';
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 '../../composed/common/MenuOrDrawer.svelte';
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(false), id = undefined, disabled = false, onchange, } = $props();
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(undefined), placeholder = undefined, persistOverUpload = true, disabled = false, maxFiles = undefined, class: clazz = '', onfileDrop, onfileSelect, onchange, bodySnippet, } = $props();
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([]), 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();
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.filter((elem) => {
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.length == 0}
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(false), label = undefined, disabled = false, onblur, onchange, onfocus, oninput, onkeydown, onkeypress, onkeyup, } = $props();
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(undefined), disabled = false, placeholder = undefined, onchange, optionAttributes, ...rest } = $props();
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(undefined), 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();
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(undefined), disabled = false, onchange: onchangeInternal, } = $props();
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(""), 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();
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(false), rounded = false, onchange, falseOptionSnippet, trueOptionSnippet, } = $props();
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(false), height = "100%", width = "100%", backgroundColor, firstColor, secondColor = firstColor, fontSize = "12px", hoverBackgroundColor, hoverBoxShadow, animationDuration = 200, falseOptionSnippet, trueOptionSnippet, } = $props();
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
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@likable-hair/svelte",
3
3
  "description": "A Svelte component for likablehair and others",
4
- "version": "4.0.2",
4
+ "version": "4.0.4",
5
5
  "scripts": {
6
6
  "host": "vite --host",
7
7
  "dev": "vite dev",