@likable-hair/svelte 3.0.19 → 3.0.21

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 (53) hide show
  1. package/dist/components/composed/common/MenuOrDrawer.svelte +3 -2
  2. package/dist/components/composed/common/MenuOrDrawer.svelte.d.ts +2 -1
  3. package/dist/components/composed/common/MenuOrDrawerOptions.svelte +2 -2
  4. package/dist/components/composed/common/MenuOrDrawerOptions.svelte.d.ts +1 -1
  5. package/dist/components/composed/forms/Dropdown.svelte +19 -8
  6. package/dist/components/composed/forms/Dropdown.svelte.d.ts +7 -0
  7. package/dist/components/composed/list/PaginatedTable.svelte +179 -129
  8. package/dist/components/composed/list/PaginatedTable.svelte.d.ts +71 -2
  9. package/dist/components/composed/list/Paginator.svelte +12 -6
  10. package/dist/components/composed/search/FilterEditor.svelte +260 -0
  11. package/dist/components/composed/search/FilterEditor.svelte.d.ts +29 -0
  12. package/dist/components/composed/search/Filters.css +0 -0
  13. package/dist/components/composed/search/Filters.svelte +500 -0
  14. package/dist/components/composed/search/Filters.svelte.d.ts +46 -0
  15. package/dist/components/composed/search/MobileFilterEditor.svelte +342 -0
  16. package/dist/components/composed/search/MobileFilterEditor.svelte.d.ts +34 -0
  17. package/dist/components/composed/search/SearchBar.svelte +12 -11
  18. package/dist/components/composed/search/SearchBar.svelte.d.ts +1 -0
  19. package/dist/components/simple/buttons/Button.css +1 -0
  20. package/dist/components/simple/buttons/Button.svelte +8 -0
  21. package/dist/components/simple/common/Menu.svelte +29 -10
  22. package/dist/components/simple/common/Menu.svelte.d.ts +2 -0
  23. package/dist/components/simple/dates/DatePickerTextField.svelte +91 -61
  24. package/dist/components/simple/dates/DatePickerTextField.svelte.d.ts +2 -0
  25. package/dist/components/simple/dialogs/Dialog.svelte.d.ts +1 -1
  26. package/dist/components/simple/forms/Autocomplete.css +1 -0
  27. package/dist/components/simple/forms/Autocomplete.svelte +100 -46
  28. package/dist/components/simple/forms/Autocomplete.svelte.d.ts +4 -0
  29. package/dist/components/simple/lists/SelectableVerticalList.svelte +52 -9
  30. package/dist/components/simple/lists/SelectableVerticalList.svelte.d.ts +9 -0
  31. package/dist/components/simple/lists/SimpleTable.svelte +25 -23
  32. package/dist/components/simple/lists/SimpleTable.svelte.d.ts +3 -1
  33. package/dist/components/simple/lists/columnTypes.d.ts +35 -0
  34. package/dist/components/simple/lists/columnTypes.js +1 -0
  35. package/dist/components/simple/media/DescriptiveAvatar.svelte.d.ts +1 -1
  36. package/dist/components/simple/navigation/Chip.css +2 -1
  37. package/dist/components/simple/navigation/Chip.svelte +16 -5
  38. package/dist/components/simple/navigation/Chip.svelte.d.ts +1 -0
  39. package/dist/components/simple/navigation/Drawer.svelte +10 -0
  40. package/dist/components/simple/navigation/Drawer.svelte.d.ts +1 -0
  41. package/dist/index.d.ts +1 -0
  42. package/dist/index.js +1 -0
  43. package/dist/utils/filters/builder.d.ts +43 -0
  44. package/dist/utils/filters/builder.js +137 -0
  45. package/dist/utils/filters/filters.d.ts +89 -0
  46. package/dist/utils/filters/filters.js +102 -0
  47. package/dist/utils/filters/modifiers/join.d.ts +26 -0
  48. package/dist/utils/filters/modifiers/join.js +1 -0
  49. package/dist/utils/filters/modifiers/where.d.ts +29 -0
  50. package/dist/utils/filters/modifiers/where.js +1 -0
  51. package/dist/utils/filters/validator.d.ts +4 -0
  52. package/dist/utils/filters/validator.js +30 -0
  53. package/package.json +2 -1
@@ -0,0 +1,260 @@
1
+ <script>import Dropdown, {} from "../forms/Dropdown.svelte";
2
+ import { GenericModes, SelectModes, StringModes } from "../../../utils/filters/filters";
3
+ import SimpleTextField from "../../simple/forms/SimpleTextField.svelte";
4
+ import DatePickerTextField from "../../simple/dates/DatePickerTextField.svelte";
5
+ import Button from "../../simple/buttons/Button.svelte";
6
+ import { createEventDispatcher } from "svelte";
7
+ import Validator from "../../../utils/filters/validator";
8
+ import Autocomplete from "../../simple/forms/Autocomplete.svelte";
9
+ 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;
11
+ let tmpFilter;
12
+ let advancedModeOptions, advancedModeSelectedOptions;
13
+ function initTmpFilter() {
14
+ tmpFilter = structuredClone(filter);
15
+ if (!!tmpFilter && ["string", "number", "date", "select"].includes(tmpFilter.type) && Object.keys(tmpFilter).includes("mode")) {
16
+ if (tmpFilter.mode == "between" && tmpFilter.from !== void 0 && tmpFilter.to !== void 0 || tmpFilter.value !== void 0 || tmpFilter.type == "select" && tmpFilter.values !== void 0 && tmpFilter.values.length > 0) {
17
+ advancedModeSelectedOptions = [{
18
+ //@ts-ignore
19
+ value: tmpFilter.mode,
20
+ label: labelsMapper[tmpFilter.mode].short || tmpFilter.mode
21
+ }];
22
+ }
23
+ }
24
+ }
25
+ function closeDropDown() {
26
+ dropdownOpened = false;
27
+ }
28
+ $:
29
+ if (!!filter) {
30
+ initTmpFilter();
31
+ closeDropDown();
32
+ }
33
+ let dispatch = createEventDispatcher();
34
+ function handleCancelFilterClick(e) {
35
+ dispatch("cancel");
36
+ }
37
+ function handleApplyFilterClick() {
38
+ if (!!filter && !!tmpFilter) {
39
+ filter = structuredClone(tmpFilter);
40
+ filter.active = true;
41
+ dispatch("apply");
42
+ }
43
+ }
44
+ $:
45
+ if (!!tmpFilter) {
46
+ let modes;
47
+ if (tmpFilter.type == "string") {
48
+ modes = StringModes;
49
+ } else if (tmpFilter.type == "date") {
50
+ modes = GenericModes;
51
+ } else if (tmpFilter.type == "number") {
52
+ modes = GenericModes;
53
+ } else if (tmpFilter.type == "select") {
54
+ modes = SelectModes;
55
+ } else if (tmpFilter.type == "bool") {
56
+ modes = void 0;
57
+ }
58
+ if (!!modes) {
59
+ advancedModeOptions = modes.map((mode) => {
60
+ return {
61
+ value: mode,
62
+ label: labelsMapper[mode].short || mode
63
+ };
64
+ });
65
+ }
66
+ }
67
+ $:
68
+ if (!tmpFilter?.advanced) {
69
+ advancedModeSelectedOptions = void 0;
70
+ }
71
+ let dropdownOpened = false, calendarOpened = false, calendarOpened2 = false;
72
+ function handleAdvancedModeSelection() {
73
+ if (!!advancedModeSelectedOptions && advancedModeSelectedOptions.length > 0 && !!tmpFilter) {
74
+ if (tmpFilter.type == "date")
75
+ tmpFilter.mode = advancedModeSelectedOptions[0].value;
76
+ else if (tmpFilter.type == "number")
77
+ tmpFilter.mode = advancedModeSelectedOptions[0].value;
78
+ else if (tmpFilter.type == "string")
79
+ tmpFilter.mode = advancedModeSelectedOptions[0].value;
80
+ else if (tmpFilter.type == "select")
81
+ tmpFilter.mode = advancedModeSelectedOptions[0].value;
82
+ }
83
+ dropdownOpened = false;
84
+ }
85
+ $:
86
+ applyFilterDisabled = !Validator.isValid(tmpFilter);
87
+ $:
88
+ if (!!tmpFilter && tmpFilter.type == "bool") {
89
+ if (tmpFilter.value === void 0) {
90
+ tmpFilter.value = false;
91
+ }
92
+ }
93
+ </script>
94
+
95
+
96
+ {#if !!filter && !!tmpFilter}
97
+ <div class="filter-editor">
98
+ {#if filter.advanced}
99
+ <div class="advanced-mode">
100
+ <div class="label">
101
+ {filter.label[0].toUpperCase() + filter.label.slice(1)}
102
+ </div>
103
+ <div class="advaced-mode-selector" on:click|stopPropagation on:keypress>
104
+ <Dropdown
105
+ items={advancedModeOptions}
106
+ bind:values={advancedModeSelectedOptions}
107
+ on:change={handleAdvancedModeSelection}
108
+ bind:menuOpened={dropdownOpened}
109
+ openingId="advanced-filter"
110
+ ></Dropdown>
111
+ </div>
112
+ </div>
113
+ {/if}
114
+
115
+ <div class="fields" style:width="100%" on:click|stopPropagation on:keypress>
116
+ {#if !tmpFilter.advanced || (!!advancedModeSelectedOptions && advancedModeSelectedOptions.length > 0)}
117
+ {#if tmpFilter.type === "string" }
118
+ <SimpleTextField
119
+ bind:value={tmpFilter.value}
120
+ type="text"
121
+ placeholder={tmpFilter?.label}
122
+ --simple-textfield-width="100%"
123
+ ></SimpleTextField>
124
+ {:else if tmpFilter.type === "date" && tmpFilter.mode !== 'between'}
125
+ <div>
126
+ <DatePickerTextField
127
+ bind:selectedDate={tmpFilter.value}
128
+ openingId="advanced-filter"
129
+ bind:menuOpened={calendarOpened}
130
+ on:day-click={() => {calendarOpened = false}}
131
+ --simple-textfield-width="100%"
132
+ ></DatePickerTextField>
133
+ </div>
134
+ {:else if tmpFilter.type === "number" && tmpFilter.mode !== 'between'}
135
+ <div>
136
+ <SimpleTextField
137
+ bind:value={tmpFilter.value}
138
+ type="number"
139
+ placeholder={tmpFilter?.label}
140
+ --simple-textfield-width="100%"
141
+ ></SimpleTextField>
142
+ </div>
143
+ {:else if tmpFilter.type === "select"}
144
+ <div
145
+ style:width="100%"
146
+ >
147
+ <Autocomplete
148
+ bind:values={tmpFilter.values}
149
+ items={tmpFilter.items}
150
+ multiple
151
+ maxVisibleChips={2}
152
+ --simple-textfield-width="0px"
153
+ --simple-text-field-margin-left="0px"
154
+ ></Autocomplete>
155
+ </div>
156
+ {:else if tmpFilter.type === "date" && tmpFilter.mode === 'between'}
157
+ <div>
158
+ <DatePickerTextField
159
+ bind:selectedDate={tmpFilter.from}
160
+ openingId="advanced-filter"
161
+ placeholder={betweenFromLabel}
162
+ bind:menuOpened={calendarOpened}
163
+ on:day-click={() => {calendarOpened = false}}
164
+ --simple-textfield-width="100%"
165
+ ></DatePickerTextField>
166
+ </div>
167
+ <div>
168
+ <DatePickerTextField
169
+ bind:selectedDate={tmpFilter.to}
170
+ openingId="advanced-filter"
171
+ placeholder={betweenToLabel}
172
+ bind:menuOpened={calendarOpened2}
173
+ on:day-click={() => {calendarOpened2 = false}}
174
+ --simple-textfield-width="100%"
175
+ ></DatePickerTextField>
176
+ </div>
177
+ {:else if tmpFilter.type === "number" && tmpFilter.mode === 'between'}
178
+ <div>
179
+ <SimpleTextField
180
+ bind:value={tmpFilter.from}
181
+ type="number"
182
+ placeholder={betweenFromLabel}
183
+ --simple-textfield-width="100%"
184
+ ></SimpleTextField>
185
+ </div>
186
+ <div>
187
+ <SimpleTextField
188
+ bind:value={tmpFilter.to}
189
+ type="number"
190
+ placeholder={betweenToLabel}
191
+ --simple-textfield-width="100%"
192
+ ></SimpleTextField>
193
+ </div>
194
+ {:else if tmpFilter.type == 'bool'}
195
+ <div class="bool-filter">
196
+ <Checkbox
197
+ bind:value={tmpFilter.value}
198
+ ></Checkbox>
199
+ <span style:margin-left="10px">
200
+ {tmpFilter.desctiprion}
201
+ </span>
202
+ </div>
203
+ {/if}
204
+ {/if}
205
+ </div>
206
+
207
+ <div class="sub-filter-button">
208
+ <Button
209
+ --button-background-color="transparent"
210
+ --button-hover-background-color="rgb(var(--global-color-primary-500))"
211
+ --button-hover-box-shadow="0 0 0.5rem rgba(0, 0, 0, 0.3)"
212
+ --button-box-shadow="none"
213
+ on:click={handleCancelFilterClick}
214
+ >
215
+ {cancelFilterLabel}
216
+ </Button>
217
+
218
+ <Button
219
+ --button-min-width="100px"
220
+ on:click={handleApplyFilterClick}
221
+ disabled={applyFilterDisabled}
222
+ >
223
+ {applyFilterLabel}
224
+
225
+ </Button>
226
+ </div>
227
+ </div>
228
+ {/if}
229
+
230
+ <style>
231
+ .filter-editor {
232
+ display: flex;
233
+ flex-direction: column;
234
+ align-items: left;
235
+ gap:10px;
236
+ margin: 5%;
237
+ }
238
+
239
+ .sub-filter-button {
240
+ display: flex;
241
+ column-gap: 10px;
242
+ flex-direction: row;
243
+ align-items: start;
244
+ margin-top: 10px;
245
+ }
246
+
247
+ .advanced-mode {
248
+ display: flex;
249
+ gap: 10px;
250
+ align-items: center;
251
+ }
252
+
253
+ .label {
254
+ max-width: 200px;
255
+ text-overflow: ellipsis;
256
+ overflow: hidden;
257
+ white-space: nowrap;
258
+ }
259
+
260
+ </style>
@@ -0,0 +1,29 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ import type { Filter } from "../../../utils/filters/filters";
3
+ import type { LabelMapper } from "./Filters.svelte";
4
+ declare const __propDef: {
5
+ props: {
6
+ filter?: Filter | undefined;
7
+ lang?: "it" | "en" | undefined;
8
+ cancelFilterLabel?: string | undefined;
9
+ applyFilterLabel?: string | undefined;
10
+ betweenFromLabel?: string | undefined;
11
+ betweenToLabel?: string | undefined;
12
+ labelsMapper: LabelMapper;
13
+ };
14
+ events: {
15
+ click: MouseEvent;
16
+ keypress: KeyboardEvent;
17
+ apply: CustomEvent<undefined>;
18
+ cancel: CustomEvent<undefined>;
19
+ } & {
20
+ [evt: string]: CustomEvent<any>;
21
+ };
22
+ slots: {};
23
+ };
24
+ export type FilterEditorProps = typeof __propDef.props;
25
+ export type FilterEditorEvents = typeof __propDef.events;
26
+ export type FilterEditorSlots = typeof __propDef.slots;
27
+ export default class FilterEditor extends SvelteComponentTyped<FilterEditorProps, FilterEditorEvents, FilterEditorSlots> {
28
+ }
29
+ export {};
File without changes