@likable-hair/svelte 3.0.20 → 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 (43) 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 +6 -4
  6. package/dist/components/composed/forms/Dropdown.svelte.d.ts +3 -0
  7. package/dist/components/composed/list/PaginatedTable.svelte +62 -10
  8. package/dist/components/composed/list/PaginatedTable.svelte.d.ts +3 -0
  9. package/dist/components/composed/search/FilterEditor.svelte +260 -0
  10. package/dist/components/composed/search/FilterEditor.svelte.d.ts +29 -0
  11. package/dist/components/composed/search/Filters.svelte +445 -42
  12. package/dist/components/composed/search/Filters.svelte.d.ts +24 -4
  13. package/dist/components/composed/search/MobileFilterEditor.svelte +342 -0
  14. package/dist/components/composed/search/MobileFilterEditor.svelte.d.ts +34 -0
  15. package/dist/components/composed/search/SearchBar.svelte +12 -11
  16. package/dist/components/composed/search/SearchBar.svelte.d.ts +1 -0
  17. package/dist/components/simple/buttons/Button.svelte +4 -0
  18. package/dist/components/simple/common/Menu.svelte +29 -10
  19. package/dist/components/simple/common/Menu.svelte.d.ts +2 -0
  20. package/dist/components/simple/dates/DatePickerTextField.svelte +91 -61
  21. package/dist/components/simple/dates/DatePickerTextField.svelte.d.ts +2 -0
  22. package/dist/components/simple/dialogs/Dialog.svelte.d.ts +1 -1
  23. package/dist/components/simple/forms/Autocomplete.css +1 -0
  24. package/dist/components/simple/forms/Autocomplete.svelte +96 -46
  25. package/dist/components/simple/forms/Autocomplete.svelte.d.ts +3 -0
  26. package/dist/components/simple/lists/SelectableVerticalList.svelte +52 -9
  27. package/dist/components/simple/lists/SelectableVerticalList.svelte.d.ts +9 -0
  28. package/dist/components/simple/lists/SimpleTable.svelte.d.ts +2 -2
  29. package/dist/components/simple/lists/columnTypes.d.ts +1 -1
  30. package/dist/components/simple/media/DescriptiveAvatar.svelte.d.ts +1 -1
  31. package/dist/components/simple/navigation/Chip.css +2 -1
  32. package/dist/components/simple/navigation/Chip.svelte +16 -5
  33. package/dist/components/simple/navigation/Chip.svelte.d.ts +1 -0
  34. package/dist/components/simple/navigation/Drawer.svelte +10 -0
  35. package/dist/components/simple/navigation/Drawer.svelte.d.ts +1 -0
  36. package/dist/utils/filters/builder.d.ts +1 -1
  37. package/dist/utils/filters/builder.js +1 -1
  38. package/dist/utils/filters/filters.d.ts +67 -4
  39. package/dist/utils/filters/filters.js +73 -0
  40. package/dist/utils/filters/modifiers/where.d.ts +1 -1
  41. package/dist/utils/filters/validator.d.ts +4 -0
  42. package/dist/utils/filters/validator.js +30 -0
  43. package/package.json +2 -1
@@ -9,12 +9,71 @@ import Button from "../../simple/buttons/Button.svelte";
9
9
  import Icon from "../../simple/media/Icon.svelte";
10
10
  import { createEventDispatcher } from "svelte";
11
11
  import SelectableVerticalList from "../../simple/lists/SelectableVerticalList.svelte";
12
- export let addFilterLabel = "Add filter", filters = [];
12
+ import Chip from "../../simple/navigation/Chip.svelte";
13
+ import FilterEditor from "./FilterEditor.svelte";
14
+ import MobileFilterEditor from "./MobileFilterEditor.svelte";
15
+ import { fly } from "svelte/transition";
16
+ export let filters = [], lang = "en", addFilterLabel = lang == "en" ? "Filters" : "Filtri", cancelFilterLabel = lang == "en" ? "Cancel" : "Annulla", applyFilterLabel = lang == "en" ? "Apply filter" : "Applica filtro", showActiveFilters = true, filterTitleLabel = lang == "en" ? "Filter by" : "Filtra per", dateLocale = "en", betweenSeparator = lang == "en" ? "and" : "e", trueString = lang == "en" ? "true" : "vero", falseString = lang == "en" ? "false" : "falso", labelsMapper = lang == "en" ? {
17
+ "equal": {
18
+ extended: "equal to",
19
+ short: "equal"
20
+ },
21
+ "like": {
22
+ short: "includes"
23
+ },
24
+ "ilike": {
25
+ short: "includes"
26
+ },
27
+ "greater": {
28
+ short: "greater",
29
+ extended: "greater than"
30
+ },
31
+ "lower": {
32
+ short: "lower",
33
+ extended: "lower than"
34
+ },
35
+ "between": {
36
+ short: "between",
37
+ extended: "is between"
38
+ },
39
+ "different": {
40
+ short: "different",
41
+ extended: "different from"
42
+ }
43
+ } : {
44
+ "equal": {
45
+ extended: "uguale a",
46
+ short: "uguale"
47
+ },
48
+ "like": {
49
+ short: "include"
50
+ },
51
+ "ilike": {
52
+ short: "include"
53
+ },
54
+ "greater": {
55
+ short: "maggiore",
56
+ extended: "maggiore di"
57
+ },
58
+ "lower": {
59
+ short: "minore",
60
+ extended: "minore di"
61
+ },
62
+ "between": {
63
+ short: "compreso",
64
+ extended: "\xE8 compreso"
65
+ },
66
+ "different": {
67
+ short: "diverso",
68
+ extended: "diverso da"
69
+ }
70
+ };
13
71
  let dispatch = createEventDispatcher();
14
- let open = false, activator;
72
+ let open = false, mobileOpen = false, activator;
15
73
  function handleAddFilterClick() {
16
74
  dispatch("addFilterClick");
17
75
  open = true;
76
+ mobileOpen = true;
18
77
  }
19
78
  $:
20
79
  filterOptions = filters.map((f) => {
@@ -23,47 +82,248 @@ $:
23
82
  name: f.name
24
83
  };
25
84
  });
85
+ $:
86
+ deletableFilterOptions = filters.map((f) => {
87
+ return {
88
+ title: f.label,
89
+ name: f.name,
90
+ appendIcon: f.active ? "mdi-delete" : void 0
91
+ };
92
+ });
26
93
  let selected;
27
94
  let focused;
28
- $:
29
- if (!!selected)
30
- selected = void 0;
31
95
  $:
32
96
  if (!!focused && !open)
33
97
  focused = void 0;
34
- function handleFilterSelection() {
98
+ let filterOpened = "new";
99
+ let filterOptionsListActivator;
100
+ let singleFilterActivator;
101
+ let singleFilterMenuAnchor = "right-center";
102
+ let singleFilterMenuOpened = false;
103
+ let selectedFilter = void 0;
104
+ $:
105
+ selectedFilterIndex = filters.findIndex((f) => {
106
+ return f.name === selected;
107
+ });
108
+ $:
109
+ selectedFilter = selected === void 0 ? void 0 : filters[selectedFilterIndex];
110
+ function handleFilterSelection(e, mobile = false) {
111
+ if (mobile) {
112
+ selected = e.detail.element.name;
113
+ singleFilterMenuOpened = true;
114
+ } else {
115
+ singleFilterActivator = filterOptionsListActivator;
116
+ singleFilterMenuAnchor = "right-center";
117
+ singleFilterMenuOpened = true;
118
+ selected = e.detail.element.name;
119
+ filterOpened = "new";
120
+ }
121
+ }
122
+ function handleCancelFilterClick() {
123
+ open = false;
124
+ mobileOpen = false;
125
+ singleFilterMenuOpened = false;
126
+ }
127
+ function handleApplyFilterClick() {
128
+ if (!!selectedFilter) {
129
+ filters[selectedFilterIndex] = selectedFilter;
130
+ open = false;
131
+ mobileOpen = false;
132
+ singleFilterMenuOpened = false;
133
+ dispatch("applyFilter");
134
+ }
135
+ }
136
+ $:
137
+ activeFilters = filters.filter((f) => f.active);
138
+ function handleRemoveFilter(filter) {
139
+ let filterIndex = filters.findIndex((f) => f.name === filter.name);
140
+ filters[filterIndex].active = false;
141
+ if (Object.keys(filters[filterIndex]).includes("value")) {
142
+ filters[filterIndex].value = void 0;
143
+ }
144
+ if (Object.keys(filters[filterIndex]).includes("from")) {
145
+ filters[filterIndex].from = void 0;
146
+ }
147
+ if (Object.keys(filters[filterIndex]).includes("to")) {
148
+ filters[filterIndex].to = void 0;
149
+ }
150
+ singleFilterMenuOpened = false;
151
+ dispatch("removeFilter", { filter: filters[filterIndex] });
152
+ }
153
+ let activeFiltersActivators = {};
154
+ function handleActiveFilterClick(filter) {
155
+ singleFilterActivator = activeFiltersActivators[filter.name];
156
+ singleFilterMenuAnchor = "bottom-center";
157
+ singleFilterMenuOpened = true;
158
+ mobileOpen = true;
159
+ selected = filter.name;
160
+ filterOpened = "edit";
161
+ }
162
+ function handleMobileBackTap() {
163
+ closeFilterMenu(0);
164
+ }
165
+ function closeFilterMenu(delay) {
166
+ setTimeout(() => {
167
+ singleFilterMenuOpened = false;
168
+ }, delay);
169
+ }
170
+ function handleDeleteIconClick(e) {
171
+ let filterIndex = e.detail.index;
172
+ let name = filters[filterIndex].name;
173
+ handleRemoveFilter({ name });
35
174
  }
36
175
  </script>
37
176
 
177
+ <MediaQuery let:mAndDown>
178
+ <div class="filters-wrapper" class:mobile={mAndDown}>
179
+ <div class="filters-container" class:mobile={mAndDown}>
180
+ {#if showActiveFilters}
181
+ {#each activeFilters as filter}
182
+ <div
183
+ class="filter-slot"
184
+ bind:this={activeFiltersActivators[filter.name]}
185
+ >
186
+ <Chip
187
+ label
188
+ close
189
+ on:close={() => handleRemoveFilter(filter)}
190
+ on:click={() => handleActiveFilterClick(filter)}
191
+ >
192
+ <span class="truncate-text inline-truncated" style:max-width="160px">
193
+ <b>{filter.label}</b>
194
+ </span>
195
+ {#if filter.type === "string" && filter.value != undefined}
196
+ {labelsMapper[filter.mode || ""].extended || labelsMapper[filter.mode || ""].short || filter.mode}
197
+ <span class="truncate-text inline-truncated">
198
+ <b>{filter.value}</b>
199
+ </span>
200
+ {:else if filter.type === "date"}
201
+ {#if filter.mode == 'between' && filter.from != undefined && filter.to != undefined}
202
+ {labelsMapper[filter.mode || ""].extended || labelsMapper[filter.mode || ""].short || filter.mode}
203
+ <span class="truncate-text inline-truncated"><b>{filter.from?.toLocaleDateString(dateLocale)}</b></span>
204
+ {betweenSeparator}
205
+ <span class="truncate-text inline-truncated"><b>{filter.to?.toLocaleDateString(dateLocale)}</b></span>
206
+ {:else if filter.mode != 'between' && filter.value != undefined}
207
+ {labelsMapper[filter.mode || ""].extended || labelsMapper[filter.mode || ""].short || filter.mode}
208
+ <span class="truncate-text inline-truncated"><b>{filter.value?.toLocaleDateString(dateLocale)}</b></span>
209
+ {/if}
210
+ {:else if filter.type == "number"}
211
+ {#if filter.mode == 'between' && filter.from != undefined && filter.to != undefined}
212
+ {labelsMapper[filter.mode || ""].extended || labelsMapper[filter.mode || ""].short || filter.mode}
213
+ <span class="truncate-text inline-truncated"><b>{filter.from}</b></span>
214
+ {betweenSeparator}
215
+ <span class="truncate-text inline-truncated"><b>{filter.to}</b></span>
216
+ {:else if filter.mode != 'between' && filter.value != undefined}
217
+ {labelsMapper[filter.mode || ""].extended || labelsMapper[filter.mode || ""].short || filter.mode}
218
+ <span class="truncate-text inline-truncated"><b>{filter.value}</b></span>
219
+ {/if}
220
+ {:else if filter.type == 'select' && !!filter.values && filter.values.length > 0}
221
+ {labelsMapper[filter.mode || ""].extended || labelsMapper[filter.mode || ""].short || filter.mode}
222
+ <span class="truncate-text inline-truncated"><b>{filter.values[0].label}</b></span>
223
+ {#if filter.values.length >= 2}
224
+ <span class="more-items">+{filter.values.length - 1}
225
+ <!--TODO create tooltip component-->
226
+ <span class="more-tooltip">
227
+ <ul>
228
+ {#each filter.values as value}
229
+ <li><div class="truncate-text">{value.label}</div></li>
230
+ {/each}
231
+ </ul>
232
+ </span>
233
+ </span>
234
+ {/if}
235
+ {:else if filter.type == 'bool' && filter.value !== undefined}
236
+ <b>{filter.value ? trueString : falseString}</b>
237
+ {/if}
238
+ </Chip>
239
+ </div>
240
+ {/each}
241
+ {/if}
242
+ {#if !mAndDown}
243
+ <div
244
+ class="filter-button"
245
+ bind:this={activator}
246
+ >
247
+ <Button
248
+ --button-color="var(--chip-color, var(--chip-default-color))"
249
+ on:click={handleAddFilterClick}
250
+ >
251
+ <Icon name="mdi-filter"></Icon>
252
+ {addFilterLabel}
253
+ {#if activeFilters.length > 0 }
254
+ ({activeFilters.length})
255
+ {/if}
256
+ </Button>
38
257
 
39
- <div
40
- class="add-filter-button"
41
- bind:this={activator}
42
- >
43
- <Button
44
- on:click={handleAddFilterClick}
45
- >
46
- <Icon name="mdi-plus"></Icon>
47
- {addFilterLabel}
48
- </Button>
49
- </div>
258
+ </div>
259
+ {/if}
260
+ </div>
261
+ {#if mAndDown}
262
+ <div
263
+ class="filter-button"
264
+ bind:this={activator}
265
+ >
266
+ <Button
267
+ --button-color="var(--chip-color, var(--chip-default-color))"
268
+ on:click={handleAddFilterClick}
269
+ >
270
+ <Icon name="mdi-filter"></Icon>
271
+ {addFilterLabel}
272
+ {#if activeFilters.length > 0 }
273
+ ({activeFilters.length})
274
+ {/if}
275
+ </Button>
50
276
 
51
- <MediaQuery let:mAndDown>
277
+ </div>
278
+ {/if}
279
+ </div>
52
280
  {#if mAndDown}
53
281
  <Drawer
54
- bind:open={open}
282
+ bind:open={mobileOpen}
55
283
  position="bottom"
56
- on:item-click
284
+ on:close={() => {closeFilterMenu(200)}}
285
+ --drawer-border-radius="20px 20px 0px 0px"
286
+ --drawer-margin="5px 5px 0px 5px"
57
287
  >
58
- <SelectableVerticalList
59
- bind:selected
60
- bind:focused
61
- bind:elements={filterOptions}
62
- --selectable-vertical-list-default-width="100%"
63
- --selectable-vertical-list-default-element-height="56px"
64
- --selectable-vertical-list-default-title-font-size="null"
65
- on:select={handleFilterSelection}
66
- ></SelectableVerticalList>
288
+ <div class="drawer-content">
289
+ {#if !!selectedFilter && singleFilterMenuOpened}
290
+ <div class="drawer-filter-detail" style:height="100%" in:fly={{delay: 100, duration: 100, x: 200}} out:fly={{duration: 100, x: -200}}>
291
+ <MobileFilterEditor
292
+ bind:filter={selectedFilter}
293
+ bind:applyFilterLabel
294
+ bind:cancelFilterLabel
295
+ on:apply={handleApplyFilterClick}
296
+ on:backClick={handleMobileBackTap}
297
+ on:cancelClick={() => {mobileOpen = false; closeFilterMenu(200)}}
298
+ {lang}
299
+ {labelsMapper}
300
+ >
301
+ <div slot="title">
302
+ <div class="mobile-title">
303
+ {selectedFilter?.label}
304
+ </div>
305
+ </div>
306
+ </MobileFilterEditor>
307
+ </div>
308
+ {:else}
309
+ <div class="drawer-filter-list" style:margin-top="20px" style:height="100%" out:fly={{duration: 100, x: -200}} in:fly={{duration: 100, x: 200, delay: 100}}>
310
+ <SelectableVerticalList
311
+ bind:selected
312
+ bind:focused
313
+ bind:elements={deletableFilterOptions}
314
+ --selectable-vertical-list-default-width="100%"
315
+ --selectable-vertical-list-default-element-height="56px"
316
+ --selectable-vertical-list-default-title-font-size="null"
317
+ on:select={(e) => {handleFilterSelection(e, true)}}
318
+ centered
319
+ bicolor
320
+ appendIconSize="18pt"
321
+ on:iconClick={handleDeleteIconClick}
322
+ --icon-color="rgb(var(--global-color-error-400))"
323
+ ></SelectableVerticalList>
324
+ </div>
325
+ {/if}
326
+ </div>
67
327
  </Drawer>
68
328
  {:else}
69
329
  <Menu
@@ -72,26 +332,169 @@ function handleFilterSelection() {
72
332
  closeOnClickOutside
73
333
  _boxShadow="rgb(var(--global-color-grey-900), .5) 0px 2px 4px"
74
334
  _height="fit-content"
75
- _maxHeight="300px"
76
- _minWidth="100px"
335
+ _minWidth="10vw"
77
336
  _borderRadius="5px"
78
- anchor="bottom-center"
337
+ anchor="bottom"
338
+ openingId="select-filter"
79
339
  >
80
- <SelectableVerticalList
81
- bind:selected
82
- bind:focused
83
- bind:elements={filterOptions}
84
- --selectable-vertical-list-default-width="100%"
85
- --selectable-vertical-list-default-element-height="56px"
86
- --selectable-vertical-list-default-title-font-size="null"
87
- on:select={handleFilterSelection}
88
- ></SelectableVerticalList>
340
+ <div
341
+ style:background-color="rgb(var(--global-color-background-200))"
342
+ bind:this={filterOptionsListActivator}
343
+ on:click|stopPropagation
344
+ on:keydown
345
+ >
346
+ <SelectableVerticalList
347
+ bind:selected
348
+ bind:focused
349
+ bind:elements={filterOptions}
350
+ --selectable-vertical-list-default-width="100%"
351
+ --selectable-vertical-list-default-element-height="56px"
352
+ --selectable-vertical-list-default-title-font-size="null"
353
+ on:select={handleFilterSelection}
354
+ ></SelectableVerticalList>
355
+ </div>
356
+ </Menu>
357
+
358
+ <Menu
359
+ _width="350px"
360
+ _borderRadius="10px"
361
+ _boxShadow="rgb(var(--global-color-grey-900), .5) 0px 2px 4px"
362
+ _overflow="unset"
363
+ activator={singleFilterActivator}
364
+ bind:open={singleFilterMenuOpened}
365
+ anchor={singleFilterMenuAnchor}
366
+ closeOnClickOutside
367
+ flipOnOverflow
368
+ openingId={ filterOpened == 'edit' ? "select-filter" : ""}
369
+ >
370
+ <div
371
+ style:min-height="160px"
372
+ on:click
373
+ on:keydown
374
+ style:border-radius="10px"
375
+ style:overflow="auto"
376
+ style:height="100%"
377
+ style:background-color="rgb(var(--global-color-background-200))"
378
+ >
379
+ <div class="filter-title">
380
+ {filterTitleLabel} {selectedFilter?.label}
381
+ </div>
382
+
383
+ {#if !!selectedFilter}
384
+ <FilterEditor
385
+ bind:filter={selectedFilter}
386
+ bind:applyFilterLabel
387
+ bind:cancelFilterLabel
388
+ on:cancel={handleCancelFilterClick}
389
+ on:apply={handleApplyFilterClick}
390
+ {lang}
391
+ {labelsMapper}
392
+ ></FilterEditor>
393
+ {/if}
394
+ </div>
89
395
  </Menu>
90
396
  {/if}
91
397
  </MediaQuery>
92
398
 
399
+
400
+
93
401
  <style>
94
- .add-filter-button {
402
+
403
+ .filter-title{
404
+ display: flex;
405
+ justify-content: center;
406
+ margin-top: 10px;
407
+ margin-left: 10px;
408
+ }
409
+
410
+ .filter-slot {
411
+ flex-shrink: 0;
412
+ flex-grow: 0;
413
+ }
414
+
415
+ .filters-container {
416
+ display: flex;
417
+ flex-wrap: wrap;
418
+ gap: 5px;
419
+ align-items: center;
420
+ }
421
+
422
+ .filters-container.mobile {
423
+ flex-wrap: nowrap;
424
+ overflow: scroll;
425
+ }
426
+
427
+ .filters-wrapper {
428
+ display: flex;
429
+ align-items: center;
430
+ gap: 20px;
431
+ max-width: 100%;
432
+ }
433
+
434
+ .filter-button {
435
+ flex-shrink: 0;
436
+ flex-grow: 0;
437
+ height: fit-content;
438
+ }
439
+
440
+ .drawer-content{
441
+ height: 100%;
442
+ }
443
+
444
+ .more-items {
445
+ position: relative;
446
+ padding: 2px 8px 2px 8px;
447
+ border-radius: 20px;
448
+ margin-left: 5px;
449
+ background-color: rgb(var(--global-color-grey-50));
450
+ color: rgb(var(--global-color-primary-500));
451
+ font-weight: 800;
452
+ font-size: .7rem;
453
+ }
454
+
455
+ .more-tooltip {
456
+ visibility: hidden;
457
+ min-width: 120px;
458
+ max-width: 300px;
95
459
  width: fit-content;
460
+ border-radius: 6px;
461
+ padding: 5px 0;
462
+ position: absolute;
463
+ text-align: left;
464
+ bottom: 125%;
465
+ left: 50%;
466
+ margin-left: -60px;
467
+ opacity: 0;
468
+ transition: opacity 0.3s;
469
+ position: absolute;
470
+ background-color: rgb(var(--global-color-background-200));
471
+ color: rgb(var(--global-color-background-950));
472
+ z-index: 100;
473
+ }
474
+
475
+ .more-tooltip ul {
476
+ list-style-type: none;
477
+ padding-left: 0px;
478
+ margin-left: 20px;
479
+ margin-right: 20px
96
480
  }
481
+
482
+
483
+ .more-items:hover .more-tooltip {
484
+ visibility: visible;
485
+ opacity: 1;
486
+ }
487
+
488
+ .truncate-text {
489
+ text-overflow: ellipsis;
490
+ overflow: hidden;
491
+ white-space: nowrap;
492
+ }
493
+
494
+ .inline-truncated {
495
+ display: inline-block;
496
+ vertical-align: middle;
497
+ max-width: 240px;
498
+ }
499
+
97
500
  </style>
@@ -1,18 +1,38 @@
1
1
  import { SvelteComponentTyped } from "svelte";
2
2
  export type ArrayElement<ArrayType extends readonly unknown[]> = ArrayType extends readonly (infer ElementType)[] ? ElementType : never;
3
+ export type LabelMapper = {
4
+ [label: string]: {
5
+ extended?: string;
6
+ short: string;
7
+ };
8
+ };
3
9
  import './Filters.css';
4
10
  import '../../../css/main.css';
5
11
  import type { Filter } from '../../../utils/filters/filters';
12
+ import type { Locale } from '../../simple/dates/utils';
6
13
  declare const __propDef: {
7
14
  props: {
8
- addFilterLabel?: string | undefined;
9
15
  filters?: Filter[] | undefined;
16
+ lang?: "it" | "en" | undefined;
17
+ addFilterLabel?: string | undefined;
18
+ cancelFilterLabel?: string | undefined;
19
+ applyFilterLabel?: string | undefined;
20
+ showActiveFilters?: boolean | undefined;
21
+ filterTitleLabel?: string | undefined;
22
+ dateLocale?: Locale | undefined;
23
+ betweenSeparator?: string | undefined;
24
+ trueString?: string | undefined;
25
+ falseString?: string | undefined;
26
+ labelsMapper?: LabelMapper | undefined;
10
27
  };
11
28
  events: {
12
- 'item-click': CustomEvent<{
13
- item: import("../../simple/navigation/Navigator.svelte").Item;
14
- }>;
29
+ click: MouseEvent;
30
+ keydown: KeyboardEvent;
15
31
  addFilterClick: CustomEvent<undefined>;
32
+ applyFilter: CustomEvent<undefined>;
33
+ removeFilter: CustomEvent<{
34
+ filter: Filter;
35
+ }>;
16
36
  } & {
17
37
  [evt: string]: CustomEvent<any>;
18
38
  };