@likable-hair/svelte 4.2.0 → 4.2.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.
Files changed (36) hide show
  1. package/dist/components/composed/common/MenuOrDrawer.svelte +1 -1
  2. package/dist/components/composed/common/MenuOrDrawerOptions.svelte +1 -1
  3. package/dist/components/composed/forms/AsyncAutocomplete.svelte.d.ts +1 -0
  4. package/dist/components/composed/forms/DatePickerTextField.svelte +10 -2
  5. package/dist/components/composed/forms/DatePickerTextField.svelte.d.ts +1 -0
  6. package/dist/components/composed/forms/Dropdown.svelte +15 -6
  7. package/dist/components/composed/forms/PeriodPicker.svelte +111 -0
  8. package/dist/components/composed/forms/PeriodPicker.svelte.d.ts +21 -0
  9. package/dist/components/composed/forms/PeriodSelector.svelte +621 -0
  10. package/dist/components/composed/forms/PeriodSelector.svelte.d.ts +59 -0
  11. package/dist/components/composed/list/DynamicTable.svelte +130 -82
  12. package/dist/components/composed/list/DynamicTable.svelte.d.ts +2 -0
  13. package/dist/components/composed/list/EnhancedPaginatedTable.svelte +1 -2
  14. package/dist/components/composed/list/EnhancedPaginatedTable.svelte.d.ts +2 -1
  15. package/dist/components/composed/list/PaginatedTable.svelte +19 -16
  16. package/dist/components/composed/list/PaginatedTable.svelte.d.ts +2 -1
  17. package/dist/components/composed/search/DynamicFilters.svelte +10 -10
  18. package/dist/components/composed/search/DynamicFilters.svelte.d.ts +6 -0
  19. package/dist/components/composed/search/FilterEditor.svelte +10 -9
  20. package/dist/components/simple/buttons/Button.css +1 -0
  21. package/dist/components/simple/buttons/Button.svelte +4 -1
  22. package/dist/components/simple/common/Menu.svelte +124 -104
  23. package/dist/components/simple/common/Menu.svelte.d.ts +2 -0
  24. package/dist/components/simple/dates/Calendar.css +2 -2
  25. package/dist/components/simple/dates/Calendar.svelte +76 -27
  26. package/dist/components/simple/dates/Calendar.svelte.d.ts +1 -0
  27. package/dist/components/simple/dates/DatePicker.svelte +30 -12
  28. package/dist/components/simple/dates/DatePicker.svelte.d.ts +8 -1
  29. package/dist/components/simple/forms/Autocomplete.svelte +2 -2
  30. package/dist/components/simple/forms/Autocomplete.svelte.d.ts +1 -0
  31. package/dist/components/simple/lists/SelectableVerticalList.svelte +5 -4
  32. package/dist/components/simple/lists/SimpleTable.svelte +86 -54
  33. package/dist/components/simple/lists/SimpleTable.svelte.d.ts +1 -1
  34. package/dist/index.d.ts +2 -0
  35. package/dist/index.js +2 -0
  36. package/package.json +1 -1
@@ -3,7 +3,7 @@ import Drawer from '../../simple/navigation/Drawer.svelte';
3
3
  import Menu from '../../simple/common/Menu.svelte';
4
4
  import MediaQuery from '../../simple/common/MediaQuery.svelte';
5
5
  import lodash from 'lodash';
6
- let { open = $bindable(false), drawerProps, menuProps, children, } = $props();
6
+ let { open = $bindable(), drawerProps, menuProps, children, } = $props();
7
7
  const menuPropsDefaultValue = {
8
8
  closeOnClickOutside: true,
9
9
  _boxShadow: "rgb(var(--global-color-grey-900), .5) 0px 2px 4px",
@@ -5,7 +5,7 @@
5
5
  import MenuOrDrawer from "./MenuOrDrawer.svelte";
6
6
  import SelectableVerticalList from '../../simple/lists/SelectableVerticalList.svelte';
7
7
  import lodash from 'lodash';
8
- let { open = $bindable(false), elements = [], onselect, menuProps, drawerProps, } = $props();
8
+ let { open = $bindable(), elements = [], onselect, menuProps, drawerProps, } = $props();
9
9
  const menuPropsDefaultValue = {
10
10
  anchor: 'bottom-center',
11
11
  stayInViewport: true,
@@ -48,6 +48,7 @@ declare class __sveltets_Render<Data> {
48
48
  menuAnchor?: ComponentProps<typeof Menu>["anchor"];
49
49
  menuStayInViewport?: ComponentProps<typeof Menu>["stayInViewport"];
50
50
  menuFlipOnOverflow?: ComponentProps<typeof Menu>["flipOnOverflow"];
51
+ menuMaxHeight?: string;
51
52
  adaptInputWidth?: boolean;
52
53
  class?: {
53
54
  activator?: string;
@@ -49,6 +49,10 @@ let activator = $state(), refreshPosition = $state(false), menuElement = $state(
49
49
  }
50
50
  }
51
51
  };
52
+ let selectableYears = $derived.by(() => {
53
+ const range = maxYearInRange - minYearInRange + 1;
54
+ return Array.from({ length: range }, (_, i) => minYearInRange + i);
55
+ });
52
56
  function handleTextFieldFocus(mobile) {
53
57
  if (!mobile || !mobileDialog) {
54
58
  menuOpened = true;
@@ -128,10 +132,11 @@ function handleInputChange(e) {
128
132
  selectedDateTo = undefined;
129
133
  }
130
134
  }
131
- if (oninput) {
135
+ if (oninput && (id == 'to' || id == 'from')) {
132
136
  oninput({
133
137
  detail: {
134
- datetime: id == "to" ? selectedDateTo : selectedDate
138
+ datetime: id == "to" ? selectedDateTo : selectedDate,
139
+ type: id,
135
140
  }
136
141
  });
137
142
  }
@@ -210,6 +215,7 @@ $effect(() => {
210
215
  {appendInnerSnippet}
211
216
  {prependSnippet}
212
217
  {appendSnippet}
218
+ autocomplete='off'
213
219
  --simple-textfield-default-padding='0.65rem 0.8rem'
214
220
  --simple-textfield-default-inner-gap='4px'
215
221
  >
@@ -248,6 +254,7 @@ $effect(() => {
248
254
  onyearClick={handleYearSelect}
249
255
  onmonthClick={handleMonthSelect}
250
256
  skipTabs
257
+ {selectableYears}
251
258
  {disabled}
252
259
  {type}
253
260
  ></DatePicker>
@@ -281,6 +288,7 @@ $effect(() => {
281
288
  onyearClick={handleYearSelect}
282
289
  onmonthClick={handleMonthSelect}
283
290
  skipTabs
291
+ {selectableYears}
284
292
  {disabled}
285
293
  {type}
286
294
  ></DatePicker>
@@ -33,6 +33,7 @@ declare const DatePickerTextField: import("svelte").Component<{
33
33
  oninput?: (event: {
34
34
  detail: {
35
35
  datetime: Date | undefined;
36
+ type: "from" | "to";
36
37
  };
37
38
  }) => void;
38
39
  activatorSnippet?: Snippet<[{
@@ -2,7 +2,7 @@
2
2
  import Autocomplete, {} from "../../../components/simple/forms/Autocomplete.svelte";
3
3
  import Button from '../../simple/buttons/Button.svelte';
4
4
  import Icon from '../../simple/media/Icon.svelte';
5
- let { items = [], values = $bindable([]), multiple = false, lang = 'en', searchText = $bindable(), maxVisibleChips, placeholder = lang === 'en' ? "Select" : "Seleziona", clearable = true, mandatory = true, icon, menuOpened = $bindable(false), openingId = $bindable("autocomplete-menu"), width, height, minWidth, menuWidth = width, mobileDrawer = false, disabled = false, onchange, itemLabelSnippet, labelSnippet, } = $props();
5
+ let { items = [], values = $bindable([]), multiple = false, lang = 'en', searchText = $bindable(), maxVisibleChips, placeholder = lang === 'en' ? "Select" : "Seleziona", clearable = true, mandatory = true, icon, menuOpened = $bindable(false), openingId = $bindable("autocomplete-menu"), width, height, minWidth = 'none', menuWidth = width, mobileDrawer = false, disabled = false, onchange, itemLabelSnippet, labelSnippet, } = $props();
6
6
  let generatedLabel = $derived(values.length == 1 ? values[0].label : `${values.length} Selezionati`);
7
7
  function handleCloseClick(event) {
8
8
  if (event) {
@@ -44,11 +44,6 @@ function handleCloseClick(event) {
44
44
  >
45
45
  {#snippet selectionContainerSnippet({ openMenu, handleKeyDown })}
46
46
  <Button
47
- --button-default-background-color="transparent"
48
- --button-default-focus-background-color="rgb(var(--global-color-primary-400), .3)"
49
- --button-default-focus-color="rgb(var(--global-color-contrast-900))"
50
- --button-default-border="2px solid rgb(var(--global-color-primary-400))"
51
- --button-default-color="rgb(var(--global-color-contrast-800))"
52
47
  onclick={openMenu}
53
48
  onkeydown={(event) => {
54
49
  handleKeyDown(event.detail.nativeEvent)
@@ -57,6 +52,20 @@ function handleCloseClick(event) {
57
52
  event.detail.nativeEvent.preventDefault()
58
53
  }
59
54
  }}
55
+ --button-padding="var(--dropdown-button-padding, 10px 12px)"
56
+ --button-border='var(--dropdown-button-border, none)'
57
+ --button-background-color='var(--dropdown-button-background-color, rgb(var(--global-color-background-300), .6))'
58
+ --button-hover-background-color='var(--dropdown-button-hover-color, rgb(var(--global-color-background-300), .6))'
59
+ --button-focus-background-color='var(--dropdown-button-focus-color, rgb(var(--global-color-background-300), .6))'
60
+ --button-active-background-color='var(--dropdown-button-active-color, rgb(var(--global-color-background-300), .6))'
61
+ --button-hover-color='var(--dropdown-button-hover-color, rgb(var(--global-color-contrast-800)))'
62
+ --button-color='var(--dropdown-button-color, rgb(var(--global-color-contrast-800)))'
63
+ --button-focus-color='var(--dropdown-button-focus-color, rgb(var(--global-color-contrast-800)))'
64
+ --button-border-radius='var(--dropdown-button-border-radius, 4px)'
65
+ --button-height='var(--dropdown-button-height, 38.78px)'
66
+ --button-active-box-shadow='var(--dropdown-button-active-box-shadow)'
67
+ --button-focus-box-shadow='var(--dropdown-button-focus-box-shadow)'
68
+ --button-box-sizing='var(--dropdown-button-box-sizing, border-box)'
60
69
  >
61
70
  {#if labelSnippet}
62
71
  {@render labelSnippet({
@@ -0,0 +1,111 @@
1
+ <script lang="ts" generics="Data extends string">import SimpleTextField from "../../simple/forms/SimpleTextField.svelte";
2
+ import MenuOrDrawer from "../common/MenuOrDrawer.svelte";
3
+ import PeriodSelector from "./PeriodSelector.svelte";
4
+ import Button from "../../simple/buttons/Button.svelte";
5
+ import { fly } from "svelte/transition";
6
+ import Icon from "../../simple/media/Icon.svelte";
7
+ let { onchange, timespanSettings = $bindable(), valid = $bindable(), isSelectionMode = $bindable(), lang = 'en', timeRangeLabel = lang == 'en' ? 'Select range mode' : 'Seleziona una modalità', ...rest } = $props();
8
+ let open = $state(false), input = $state(), text = $derived(timeRangeLabel);
9
+ function handleChange(event) {
10
+ if (timespanSettings?.method == 'quick') {
11
+ open = false;
12
+ }
13
+ onchange?.(event);
14
+ }
15
+ </script>
16
+
17
+ <SimpleTextField
18
+ onfocus={() => open = true}
19
+ oninput={() => text = timeRangeLabel}
20
+ bind:value={text}
21
+ bind:input
22
+ >
23
+ {#snippet appendInnerSnippet()}
24
+ <Icon
25
+ name='mdi-chevron-down'
26
+ onclick={() => {
27
+ if (!open) open = true
28
+ else if (valid) open = false
29
+ }}
30
+ ></Icon>
31
+ {/snippet}
32
+ </SimpleTextField>
33
+ <MenuOrDrawer
34
+ bind:open
35
+ menuProps={{
36
+ activator: input,
37
+ _activatorGap: 16,
38
+ closeOnClickOutside: valid,
39
+ _offsetLeft: -16,
40
+ anchor: 'bottom',
41
+ flipOnOverflow: true,
42
+ stayInViewport: true,
43
+ openingId: 'period-picker',
44
+ _overflow: 'hidden',
45
+ }}
46
+ drawerProps={{
47
+ closeOnClickOutside: valid,
48
+ _space: 'min(50%,420px)',
49
+ _borderRadius: '4px',
50
+ _overflow: 'hidden',
51
+ }}
52
+ >
53
+ {#snippet children({ isDrawer, isMenu })}
54
+ <div
55
+ class:menu={isMenu}
56
+ class:drawer={isDrawer}
57
+ >
58
+ <PeriodSelector
59
+ onchange={handleChange}
60
+ bind:timespanSettings
61
+ bind:valid
62
+ bind:timeRangeLabel
63
+ bind:isSelectionMode
64
+ {lang}
65
+ {...rest}
66
+ ></PeriodSelector>
67
+ {#if !isSelectionMode}
68
+ <div
69
+ class:button-end={isMenu}
70
+ class:button-full={isDrawer}
71
+ in:fly={{ x: 200, duration: 250, delay: 200 }}
72
+ out:fly={{ x: 200, duration: 250 }}
73
+ >
74
+ <Button
75
+ disabled={!valid}
76
+ onclick={() => open = false}
77
+ >
78
+ {lang == 'en' ? 'Apply' : 'Applica'}
79
+ </Button>
80
+ </div>
81
+ {/if}
82
+ </div>
83
+ {/snippet}
84
+ </MenuOrDrawer>
85
+
86
+ <style>
87
+ .menu {
88
+ padding: 8px;
89
+ box-shadow: 2px 2px 2px 2px rgba(0, 0, 0, 0.2);
90
+ border-radius: 4px;
91
+ background-color: rgb(var(--global-color-background-200));
92
+ width: 400px;
93
+ --period-selector-min-height: 290px;
94
+ }
95
+
96
+ .drawer {
97
+ padding: 12px;
98
+ --period-selector-max-width: none;
99
+ --period-selector-list-element-padding: 8px;
100
+ }
101
+
102
+ .button-end {
103
+ display: flex;
104
+ justify-content: end;
105
+ }
106
+
107
+ .button-full {
108
+ display: flex;
109
+ --button-width: 100%
110
+ }
111
+ </style>
@@ -0,0 +1,21 @@
1
+ import type { ComponentProps } from "svelte";
2
+ import PeriodSelector from "./PeriodSelector.svelte";
3
+ interface Props extends Omit<ComponentProps<typeof PeriodSelector<Data>>, 'showTimeRangeLabel'> {
4
+ }
5
+ declare class __sveltets_Render<Data extends string> {
6
+ props(): Props;
7
+ events(): {};
8
+ slots(): {};
9
+ bindings(): "timespanSettings" | "valid" | "isSelectionMode";
10
+ exports(): {};
11
+ }
12
+ interface $$IsomorphicComponent {
13
+ new <Data extends string>(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']>> & {
14
+ $$bindings?: ReturnType<__sveltets_Render<Data>['bindings']>;
15
+ } & ReturnType<__sveltets_Render<Data>['exports']>;
16
+ <Data extends string>(internal: unknown, props: ReturnType<__sveltets_Render<Data>['props']> & {}): ReturnType<__sveltets_Render<Data>['exports']>;
17
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
18
+ }
19
+ declare const PeriodPicker: $$IsomorphicComponent;
20
+ type PeriodPicker<Data extends string> = InstanceType<typeof PeriodPicker<Data>>;
21
+ export default PeriodPicker;