@likable-hair/svelte 3.1.5 → 3.1.6

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 (37) hide show
  1. package/dist/components/composed/forms/DatePickerTextField.svelte +8 -3
  2. package/dist/components/composed/forms/DatePickerTextField.svelte.d.ts +8 -0
  3. package/dist/components/composed/forms/Dropdown.svelte +10 -9
  4. package/dist/components/composed/forms/Dropdown.svelte.d.ts +1 -0
  5. package/dist/components/composed/forms/ToggleList.svelte +90 -0
  6. package/dist/components/composed/forms/ToggleList.svelte.d.ts +25 -0
  7. package/dist/components/composed/list/PaginatedTable.svelte +26 -18
  8. package/dist/components/composed/list/PaginatedTable.svelte.d.ts +8 -11
  9. package/dist/components/composed/search/FilterEditor.svelte +67 -54
  10. package/dist/components/composed/search/FilterEditor.svelte.d.ts +7 -4
  11. package/dist/components/composed/search/Filters.svelte +573 -194
  12. package/dist/components/composed/search/Filters.svelte.d.ts +14 -7
  13. package/dist/components/composed/search/MobileFilterEditor.svelte +27 -43
  14. package/dist/components/composed/search/MobileFilterEditor.svelte.d.ts +5 -3
  15. package/dist/components/simple/charts/GanymedePieChart.svelte +42 -0
  16. package/dist/components/simple/charts/GanymedePieChart.svelte.d.ts +33 -0
  17. package/dist/components/simple/forms/Autocomplete.svelte +1 -1
  18. package/dist/components/simple/lists/Paginator.css +13 -0
  19. package/dist/components/simple/lists/Paginator.svelte +151 -0
  20. package/dist/components/{composed/list → simple/lists}/Paginator.svelte.d.ts +2 -2
  21. package/dist/components/simple/lists/SidebarMenuList.svelte +1 -1
  22. package/dist/components/simple/navigation/Chip.css +4 -1
  23. package/dist/components/simple/navigation/Chip.svelte +25 -0
  24. package/dist/components/simple/navigation/Drawer.svelte +20 -8
  25. package/dist/index.d.ts +1 -0
  26. package/dist/index.js +1 -0
  27. package/dist/stores/theme.d.ts +9 -30
  28. package/dist/stores/theme.js +123 -30
  29. package/dist/utils/filters/builder.d.ts +5 -0
  30. package/dist/utils/filters/builder.js +28 -0
  31. package/dist/utils/filters/filters.d.ts +48 -5
  32. package/dist/utils/filters/filters.js +27 -8
  33. package/dist/utils/filters/modifiers/where.d.ts +10 -2
  34. package/dist/utils/filters/validator.js +3 -3
  35. package/package.json +2 -2
  36. package/dist/components/composed/list/Paginator.css +0 -4
  37. package/dist/components/composed/list/Paginator.svelte +0 -146
@@ -65,6 +65,10 @@ onMount(() => {
65
65
  mask.value = DateTime.fromJSDate(selectedDate).toFormat(pattern);
66
66
  }
67
67
  });
68
+ $:
69
+ if (!selectedDate) {
70
+ mask.value = "";
71
+ }
68
72
  function handleInputChange(event) {
69
73
  setTimeout(() => {
70
74
  const typedValue = mask.value;
@@ -126,8 +130,9 @@ $:
126
130
  <div
127
131
  bind:this={activator}
128
132
  class="date-picker-activator {clazz.activator || ''}"
133
+ style:width="var(--simple-textfield-width)"
129
134
  >
130
- <slot
135
+ <slot
131
136
  name="activator"
132
137
  {mask}
133
138
  {handleTextFieldFocus}
@@ -158,11 +163,11 @@ $:
158
163
  </slot>
159
164
  </svelte:fragment>
160
165
  <svelte:fragment slot="prepend" let:prependIcon let:iconSize>
161
- <slot name="append-inner" {prependIcon} {iconSize}>
166
+ <slot name="prepend" {prependIcon} {iconSize}>
162
167
  </slot>
163
168
  </svelte:fragment>
164
169
  <svelte:fragment slot="append" let:appendIcon let:iconSize>
165
- <slot name="append-inner" {appendIcon} {iconSize}>
170
+ <slot name="append" {appendIcon} {iconSize}>
166
171
  </slot>
167
172
  </svelte:fragment>
168
173
  </SimpleTextField>
@@ -46,6 +46,14 @@ declare const __propDef: {
46
46
  iconSize: string;
47
47
  };
48
48
  'append-inner': {
49
+ appendInnerIcon: string | undefined;
50
+ iconSize: string;
51
+ };
52
+ prepend: {
53
+ prependIcon: string | undefined;
54
+ iconSize: string;
55
+ };
56
+ append: {
49
57
  appendIcon: string | undefined;
50
58
  iconSize: string;
51
59
  };
@@ -6,7 +6,7 @@ import Button from "../../simple/buttons/Button.svelte";
6
6
  import Icon from "../../simple/media/Icon.svelte";
7
7
  import { createEventDispatcher } from "svelte";
8
8
  let dispatch = createEventDispatcher();
9
- export let items = [], values = [], multiple = false, lang = "en", searchText = void 0, maxVisibleChips = void 0, placeholder = lang == "en" ? "Select" : "Seleziona", clearable = true, mandatory = true, icon = void 0, menuOpened = false, openingId = void 0, width = void 0;
9
+ export let items = [], values = [], multiple = false, lang = "en", searchText = void 0, maxVisibleChips = void 0, placeholder = lang == "en" ? "Select" : "Seleziona", clearable = true, mandatory = true, icon = void 0, menuOpened = false, openingId = void 0, width = void 0, mobileDrawer = false;
10
10
  $:
11
11
  generatedLabel = values.length == 1 ? values[0].label : `${values.length} Selezionati`;
12
12
  function handleCloseClick(event) {
@@ -34,6 +34,7 @@ function handleCloseClick(event) {
34
34
  bind:menuOpened
35
35
  bind:openingId
36
36
  bind:width
37
+ {mobileDrawer}
37
38
  >
38
39
  <svelte:fragment slot="selection-container" let:openMenu let:handleKeyDown>
39
40
  <Button
@@ -51,14 +52,14 @@ function handleCloseClick(event) {
51
52
  }
52
53
  }}
53
54
  >
54
- <slot
55
- name="label"
56
- {values}
57
- {items}
58
- {searchText}
59
- {generatedLabel}
60
- {placeholder}
61
- {clearable}
55
+ <slot
56
+ name="label"
57
+ {values}
58
+ {items}
59
+ {searchText}
60
+ {generatedLabel}
61
+ {placeholder}
62
+ {clearable}
62
63
  {handleCloseClick}
63
64
  >
64
65
  <div class="label">
@@ -16,6 +16,7 @@ declare const __propDef: {
16
16
  menuOpened?: boolean | undefined;
17
17
  openingId?: string | undefined;
18
18
  width?: string | undefined;
19
+ mobileDrawer?: boolean | undefined;
19
20
  };
20
21
  events: {
21
22
  change: CustomEvent<any>;
@@ -0,0 +1,90 @@
1
+ <script context="module"></script>
2
+
3
+ <script>import "../../../css/main.css";
4
+ export let values = [], items, multiple = true, disabled = false;
5
+ let dispatch = createEventDispatcher();
6
+ function select(item) {
7
+ const alreadyPresent = values.findIndex((i) => i.value === item.value) != -1;
8
+ if (!alreadyPresent) {
9
+ if (multiple)
10
+ values = [...values, item];
11
+ else
12
+ values = [item];
13
+ dispatch("change", {
14
+ unselect: void 0,
15
+ select: item,
16
+ selection: values
17
+ });
18
+ }
19
+ }
20
+ function unselect(item) {
21
+ values = values.filter((i) => i.value != item.value);
22
+ dispatch("change", {
23
+ unselect: item,
24
+ select: void 0,
25
+ selection: values
26
+ });
27
+ }
28
+ function toggle(item) {
29
+ const alreadyPresent = values.findIndex((i) => i.value === item.value) != -1;
30
+ if (alreadyPresent)
31
+ unselect(item);
32
+ else
33
+ select(item);
34
+ }
35
+ import Chip from "../../simple/navigation/Chip.svelte";
36
+ import { createEventDispatcher } from "svelte";
37
+ </script>
38
+
39
+ <svelte:window />
40
+
41
+ <div
42
+ class="toggle-container"
43
+ class:disabled
44
+ >
45
+ <div
46
+ class="selection-container"
47
+ >
48
+ {#each (items || []) as item}
49
+ <div class="chip">
50
+ <Chip
51
+ outlined={values.findIndex(i => i.value === item.value) === -1}
52
+ on:click={() => toggle(item)}
53
+ buttonTabIndex={0}
54
+ truncateText
55
+ --button-focus-color="red"
56
+ >
57
+ {item.label}
58
+ </Chip>
59
+ </div>
60
+ {/each}
61
+ </div>
62
+ </div>
63
+
64
+
65
+ <style>
66
+ .selection-container {
67
+ display: flex;
68
+ flex-wrap: wrap;
69
+ align-items: center;
70
+ gap: 5px;
71
+ transition: all .1s;
72
+ }
73
+
74
+ .toggle-container {
75
+ opacity: 100%;
76
+ width: var(--toggle-list-width, auto);
77
+ max-width: var(--toggle-list-max-width, auto);
78
+ height: var(--toggle-list-heigth, auto);
79
+ }
80
+
81
+ .toggle-container.disabled {
82
+ opacity: 50%;
83
+ }
84
+
85
+ .chip {
86
+ --chip-default-outlined-color: var(--toggle-list-unselected-color, var(--chip-default-background-color));
87
+ }
88
+
89
+
90
+ </style>
@@ -0,0 +1,25 @@
1
+ import { SvelteComponent } from "svelte";
2
+ export type Item = {
3
+ value: string | number;
4
+ label?: string | number;
5
+ data?: any;
6
+ };
7
+ import '../../../css/main.css';
8
+ declare const __propDef: {
9
+ props: {
10
+ values?: Item[] | undefined;
11
+ items: Item[];
12
+ multiple?: boolean | undefined;
13
+ disabled?: boolean | undefined;
14
+ };
15
+ events: {
16
+ [evt: string]: CustomEvent<any>;
17
+ };
18
+ slots: {};
19
+ };
20
+ export type ToggleListProps = typeof __propDef.props;
21
+ export type ToggleListEvents = typeof __propDef.events;
22
+ export type ToggleListSlots = typeof __propDef.slots;
23
+ export default class ToggleList extends SvelteComponent<ToggleListProps, ToggleListEvents, ToggleListSlots> {
24
+ }
25
+ export {};
@@ -1,6 +1,6 @@
1
1
  <script context="module">import SimpleTable from "../../simple/lists/SimpleTable.svelte";
2
2
  import Icon from "../../simple/media/Icon.svelte";
3
- import Paginator from "./Paginator.svelte";
3
+ import Paginator from "../../simple/lists/Paginator.svelte";
4
4
  import Dropdown from "../forms/Dropdown.svelte";
5
5
  import { createEventDispatcher } from "svelte";
6
6
  </script>
@@ -14,7 +14,7 @@ export let headers = [], items = [], sortedBy = void 0, sortDirection = void 0,
14
14
  { label: "20", value: 20 },
15
15
  { label: "50", value: 50 },
16
16
  { label: "100", value: 100 }
17
- ], hideRowsPerPage = false, totalElements = void 0, rowsPerPage = 20, filters = [], searchBarColumns = void 0, searchBarVisible = true, searchBarPlaceholder = "Type something to search...", customFiltersValid = {}, customFiltersValues = void 0, lang = "en";
17
+ ], hideRowsPerPage = false, totalElements = void 0, rowsPerPage = 20, filters = [], searchBarColumns = void 0, searchBarVisible = true, searchBarPlaceholder = "Type something to search...", lang = "en", editFilterMode = "one-edit";
18
18
  let searchBarInput, searchText = void 0;
19
19
  let dispatch = createEventDispatcher();
20
20
  let rowsPerPageSelection = [];
@@ -39,14 +39,13 @@ function handleSearchChange(searchText2) {
39
39
  let converter = new Converter();
40
40
  let builder;
41
41
  builder = converter.createBuilder({
42
- filters: filters || [],
43
- customFiltersValues
42
+ filters: filters || []
44
43
  });
45
44
  if (!!searchText2 && !!searchBarColumns && searchBarColumns.length > 0) {
46
45
  builder.where((b) => {
47
- b.where(searchBarColumns[0], "like", searchText2);
46
+ b.where(searchBarColumns[0], "ilike", "%" + searchText2 + "%");
48
47
  for (let i = 1; i < searchBarColumns.length; i += 1) {
49
- b.orWhere(searchBarColumns[i], "like", searchText2);
48
+ b.orWhere(searchBarColumns[i], "ilike", "%" + searchText2 + "%");
50
49
  }
51
50
  });
52
51
  }
@@ -64,12 +63,14 @@ function handleFiltersChange() {
64
63
  <div class="paginated-table">
65
64
  {#if searchBarVisible}
66
65
  <slot name="search-bar" {handleSearchChange}>
67
- <SearchBar
68
- placeholder={searchBarPlaceholder}
69
- bind:input={searchBarInput}
70
- bind:value={searchText}
71
- >
72
- </SearchBar>
66
+ <div class="search-bar-container">
67
+ <SearchBar
68
+ placeholder={searchBarPlaceholder}
69
+ bind:input={searchBarInput}
70
+ bind:value={searchText}
71
+ >
72
+ </SearchBar>
73
+ </div>
73
74
  </slot>
74
75
  {/if}
75
76
  <div class="filter-container">
@@ -79,16 +80,16 @@ function handleFiltersChange() {
79
80
  on:removeFilter={handleFiltersChange}
80
81
  --filters-default-wrapper-width="100%"
81
82
  {lang}
82
- {customFiltersValid}
83
+ {editFilterMode}
83
84
  >
84
85
  <svelte:fragment slot="append">
85
86
  <slot name="filter-append"></slot>
86
87
  </svelte:fragment>
87
- <svelte:fragment slot="custom" let:filter>
88
- <slot name="custom-filter" {filter}></slot>
88
+ <svelte:fragment slot="custom-chip" let:filter>
89
+ <slot name="custom-filter-chip" {filter}></slot>
89
90
  </svelte:fragment>
90
- <svelte:fragment slot="custom-mobile" let:filter>
91
- <slot name="custom-filter-mobile" {filter}></slot>
91
+ <svelte:fragment slot="custom" let:filter let:updateFunction let:mAndDown>
92
+ <slot name="custom-filter" {filter} {updateFunction} {mAndDown}></slot>
92
93
  </svelte:fragment>
93
94
  </Filters>
94
95
  </div>
@@ -210,7 +211,7 @@ function handleFiltersChange() {
210
211
  }
211
212
 
212
213
  .filter-container {
213
- margin-top: 10px;
214
+ margin-top: var(--paginated-table-filter-container-margin-top, 10px);
214
215
  display: flex;
215
216
  align-items: center;
216
217
  flex-direction: row;
@@ -218,6 +219,13 @@ function handleFiltersChange() {
218
219
  width: 100%;
219
220
  }
220
221
 
222
+ .search-bar-container {
223
+ padding: var(
224
+ --paginated-table-search-bar-container-padding,
225
+ var(--paginated-table-search-bar-container-default-padding, 0)
226
+ );
227
+ }
228
+
221
229
  @media only screen and (max-width: 768px) {
222
230
  .per-page-dropdown {
223
231
  display: none;
@@ -1,6 +1,6 @@
1
1
  import { SvelteComponent } from "svelte";
2
2
  import SimpleTable from "../../simple/lists/SimpleTable.svelte";
3
- import Paginator from "./Paginator.svelte";
3
+ import Paginator from "../../simple/lists/Paginator.svelte";
4
4
  import Dropdown from "../forms/Dropdown.svelte";
5
5
  import { type ComponentProps } from "svelte";
6
6
  type ArrayElement<ArrayType extends readonly unknown[]> = ArrayType extends readonly (infer ElementType)[] ? ElementType : never;
@@ -25,13 +25,8 @@ declare const __propDef: {
25
25
  searchBarColumns?: string[] | undefined;
26
26
  searchBarVisible?: boolean | undefined;
27
27
  searchBarPlaceholder?: string | undefined;
28
- customFiltersValid?: {
29
- [filterName: string]: boolean;
30
- } | undefined;
31
- customFiltersValues?: {
32
- [filterName: string]: any;
33
- } | undefined;
34
28
  lang?: "it" | "en" | undefined;
29
+ editFilterMode?: "one-edit" | "multi-edit" | undefined;
35
30
  };
36
31
  events: {
37
32
  sort: CustomEvent<{
@@ -51,11 +46,13 @@ declare const __propDef: {
51
46
  handleSearchChange: (searchText: string | undefined) => void;
52
47
  };
53
48
  'filter-append': {};
54
- 'custom-filter': {
55
- filter: import("../../../utils/filters/filters").Filter | undefined;
49
+ 'custom-filter-chip': {
50
+ filter: import("../../../utils/filters/filters").Filter;
56
51
  };
57
- 'custom-filter-mobile': {
58
- filter: import("../../../utils/filters/filters").Filter | undefined;
52
+ 'custom-filter': {
53
+ filter: import("../../../utils/filters/filters").Filter;
54
+ updateFunction: (filterName: string, newValue: any, newValid: boolean) => void;
55
+ mAndDown: boolean;
59
56
  };
60
57
  header: {
61
58
  head: import("../../simple/lists/SimpleTable.svelte").Header;
@@ -2,13 +2,12 @@
2
2
  import { GenericModes, SelectModes, StringModes } from "../../../utils/filters/filters";
3
3
  import SimpleTextField from "../../simple/forms/SimpleTextField.svelte";
4
4
  import DatePickerTextField from "../forms/DatePickerTextField.svelte";
5
- import Button from "../../simple/buttons/Button.svelte";
6
- import { createEventDispatcher } from "svelte";
7
5
  import Validator from "../../../utils/filters/validator";
8
6
  import Autocomplete from "../../simple/forms/Autocomplete.svelte";
9
7
  import Checkbox from "../../simple/forms/Checkbox.svelte";
10
- export let filter = void 0, lang = "en", cancelFilterLabel = lang == "en" ? "Cancel" : "Annulla", applyFilterLabel = lang == "en" ? "Apply filter" : "Applica filter", betweenFromLabel = lang == "en" ? "From" : "Da", betweenToLabel = lang == "en" ? "To" : "A", labelsMapper, forceApplyValid = false;
11
- let tmpFilter;
8
+ import Icon from "../../simple/media/Icon.svelte";
9
+ import ToggleList from "../forms/ToggleList.svelte";
10
+ export let filter = void 0, lang = "en", betweenFromLabel = lang == "en" ? "From" : "Da", betweenToLabel = lang == "en" ? "To" : "A", labelsMapper, forceApplyValid = false, editFilterMode = "one-edit", tmpFilter = void 0, mobile = false;
12
11
  let advancedModeOptions, advancedModeSelectedOptions;
13
12
  function initTmpFilter() {
14
13
  tmpFilter = filter === void 0 ? void 0 : { ...filter };
@@ -30,17 +29,6 @@ $:
30
29
  initTmpFilter();
31
30
  closeDropDown();
32
31
  }
33
- let dispatch = createEventDispatcher();
34
- function handleCancelFilterClick(e) {
35
- dispatch("cancel");
36
- }
37
- function handleApplyFilterClick() {
38
- if (!!filter && !!tmpFilter) {
39
- filter = { ...tmpFilter };
40
- filter.active = true;
41
- dispatch("apply");
42
- }
43
- }
44
32
  $:
45
33
  if (!!tmpFilter) {
46
34
  let modes;
@@ -90,35 +78,42 @@ $:
90
78
  tmpFilter.value = false;
91
79
  }
92
80
  }
81
+ $:
82
+ if (!!tmpFilter && tmpFilter.type == "select") {
83
+ if (tmpFilter.values === void 0) {
84
+ tmpFilter.values = [];
85
+ }
86
+ }
93
87
  </script>
94
88
 
95
89
 
96
90
  {#if !!filter && !!tmpFilter}
97
- <div class="filter-editor">
91
+ <div class="filter-editor" style:margin={editFilterMode === 'one-edit' ? '5%' : '0'}>
98
92
  {#if filter.advanced}
99
93
  <div class="advanced-mode">
100
94
  <div class="label">
101
95
  {filter.label[0].toUpperCase() + filter.label.slice(1)}
102
96
  </div>
103
- <div class="advaced-mode-selector" on:click|stopPropagation on:keypress>
97
+ <div class="advaced-mode-selector" on:click|stopPropagation on:keypress role="presentation" tabindex="-1">
104
98
  <Dropdown
105
99
  items={advancedModeOptions}
106
100
  bind:values={advancedModeSelectedOptions}
107
101
  on:change={handleAdvancedModeSelection}
108
102
  bind:menuOpened={dropdownOpened}
109
103
  openingId="advanced-filter"
104
+ mobileDrawer={mobile}
110
105
  ></Dropdown>
111
106
  </div>
112
107
  </div>
113
108
  {/if}
114
109
 
115
- <div class="fields" style:width="100%" on:click|stopPropagation on:keypress>
110
+ <div class="fields" style:width="100%" on:click|stopPropagation on:keypress role="presentation" tabindex="-1">
116
111
  {#if !tmpFilter.advanced || (!!advancedModeSelectedOptions && advancedModeSelectedOptions.length > 0)}
117
112
  {#if tmpFilter.type === "string" }
118
113
  <SimpleTextField
119
114
  bind:value={tmpFilter.value}
120
115
  type="text"
121
- placeholder={tmpFilter?.label}
116
+ placeholder={editFilterMode == 'one-edit' ? tmpFilter?.label : undefined}
122
117
  --simple-textfield-width="100%"
123
118
  ></SimpleTextField>
124
119
  {:else if tmpFilter.type === "date" && tmpFilter.mode !== 'between'}
@@ -129,18 +124,30 @@ $:
129
124
  bind:menuOpened={calendarOpened}
130
125
  on:day-click={() => {calendarOpened = false}}
131
126
  --simple-textfield-width="100%"
132
- ></DatePickerTextField>
127
+ >
128
+ <svelte:fragment slot="append-inner">
129
+ <Icon
130
+ name="mdi-close-circle"
131
+ click
132
+ on:click={() => {
133
+ if(!!tmpFilter && tmpFilter.type === 'date' && tmpFilter.mode !== 'between') {
134
+ tmpFilter.value = undefined
135
+ }
136
+ }}
137
+ ></Icon>
138
+ </svelte:fragment>
139
+ </DatePickerTextField>
133
140
  </div>
134
141
  {:else if tmpFilter.type === "number" && tmpFilter.mode !== 'between'}
135
142
  <div>
136
143
  <SimpleTextField
137
144
  bind:value={tmpFilter.value}
138
145
  type="number"
139
- placeholder={tmpFilter?.label}
146
+ placeholder={editFilterMode == 'one-edit' ? tmpFilter?.label : undefined}
140
147
  --simple-textfield-width="100%"
141
148
  ></SimpleTextField>
142
149
  </div>
143
- {:else if tmpFilter.type === "select"}
150
+ {:else if tmpFilter.type === "select" && (tmpFilter.view === undefined || tmpFilter.view === 'autocomplete')}
144
151
  <div
145
152
  style:width="100%"
146
153
  >
@@ -151,8 +158,19 @@ $:
151
158
  maxVisibleChips={2}
152
159
  --simple-textfield-width="0px"
153
160
  --simple-text-field-margin-left="0px"
161
+ mobileDrawer={mobile}
154
162
  ></Autocomplete>
155
163
  </div>
164
+ {:else if tmpFilter.type === "select" && (tmpFilter.view === 'toggle')}
165
+ <div
166
+ style:width="100%"
167
+ >
168
+ <ToggleList
169
+ bind:values={tmpFilter.values}
170
+ items={tmpFilter.items}
171
+ multiple
172
+ ></ToggleList>
173
+ </div>
156
174
  {:else if tmpFilter.type === "date" && tmpFilter.mode === 'between'}
157
175
  <div>
158
176
  <DatePickerTextField
@@ -162,7 +180,19 @@ $:
162
180
  bind:menuOpened={calendarOpened}
163
181
  on:day-click={() => {calendarOpened = false}}
164
182
  --simple-textfield-width="100%"
165
- ></DatePickerTextField>
183
+ >
184
+ <svelte:fragment slot="append-inner">
185
+ <Icon
186
+ name="mdi-close-circle"
187
+ click
188
+ on:click={() => {
189
+ if(!!tmpFilter && tmpFilter.type === 'date' && tmpFilter.mode === 'between') {
190
+ tmpFilter.from = undefined
191
+ }
192
+ }}
193
+ ></Icon>
194
+ </svelte:fragment>
195
+ </DatePickerTextField>
166
196
  </div>
167
197
  <div>
168
198
  <DatePickerTextField
@@ -172,7 +202,19 @@ $:
172
202
  bind:menuOpened={calendarOpened2}
173
203
  on:day-click={() => {calendarOpened2 = false}}
174
204
  --simple-textfield-width="100%"
175
- ></DatePickerTextField>
205
+ >
206
+ <svelte:fragment slot="append-inner">
207
+ <Icon
208
+ name="mdi-close-circle"
209
+ click
210
+ on:click={() => {
211
+ if(!!tmpFilter && tmpFilter.type === 'date' && tmpFilter.mode === 'between') {
212
+ tmpFilter.to = undefined
213
+ }
214
+ }}
215
+ ></Icon>
216
+ </svelte:fragment>
217
+ </DatePickerTextField>
176
218
  </div>
177
219
  {:else if tmpFilter.type === "number" && tmpFilter.mode === 'between'}
178
220
  <div>
@@ -205,27 +247,7 @@ $:
205
247
  {/if}
206
248
  {/if}
207
249
  </div>
208
-
209
- <div class="sub-filter-button">
210
- <Button
211
- --button-background-color="transparent"
212
- --button-hover-background-color="rgb(var(--global-color-primary-500))"
213
- --button-hover-box-shadow="0 0 0.5rem rgba(0, 0, 0, 0.3)"
214
- --button-box-shadow="none"
215
- on:click={handleCancelFilterClick}
216
- >
217
- {cancelFilterLabel}
218
- </Button>
219
-
220
- <Button
221
- --button-min-width="100px"
222
- on:click={handleApplyFilterClick}
223
- disabled={applyFilterDisabled}
224
- >
225
- {applyFilterLabel}
226
-
227
- </Button>
228
- </div>
250
+ <slot name="filter-actions" {applyFilterDisabled} filter={tmpFilter}></slot>
229
251
  </div>
230
252
  {/if}
231
253
 
@@ -235,15 +257,6 @@ $:
235
257
  flex-direction: column;
236
258
  align-items: left;
237
259
  gap:10px;
238
- margin: 5%;
239
- }
240
-
241
- .sub-filter-button {
242
- display: flex;
243
- column-gap: 10px;
244
- flex-direction: row;
245
- align-items: start;
246
- margin-top: 10px;
247
260
  }
248
261
 
249
262
  .advanced-mode {
@@ -5,18 +5,17 @@ declare const __propDef: {
5
5
  props: {
6
6
  filter?: Filter | undefined;
7
7
  lang?: "it" | "en" | undefined;
8
- cancelFilterLabel?: string | undefined;
9
- applyFilterLabel?: string | undefined;
10
8
  betweenFromLabel?: string | undefined;
11
9
  betweenToLabel?: string | undefined;
12
10
  labelsMapper: LabelMapper;
13
11
  forceApplyValid?: boolean | undefined;
12
+ editFilterMode?: "one-edit" | "multi-edit" | undefined;
13
+ tmpFilter?: Filter | undefined;
14
+ mobile?: boolean | undefined;
14
15
  };
15
16
  events: {
16
17
  click: MouseEvent;
17
18
  keypress: KeyboardEvent;
18
- apply: CustomEvent<undefined>;
19
- cancel: CustomEvent<undefined>;
20
19
  } & {
21
20
  [evt: string]: CustomEvent<any>;
22
21
  };
@@ -24,6 +23,10 @@ declare const __propDef: {
24
23
  custom: {
25
24
  filter: Filter | undefined;
26
25
  };
26
+ 'filter-actions': {
27
+ applyFilterDisabled: boolean;
28
+ filter: Filter | undefined;
29
+ };
27
30
  };
28
31
  };
29
32
  export type FilterEditorProps = typeof __propDef.props;