@likable-hair/svelte 3.3.21 → 3.3.23

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 (202) hide show
  1. package/dist/components/composed/buttons/ActivableButton.svelte +6 -2
  2. package/dist/components/composed/buttons/ActivableButton.svelte.d.ts +36 -32
  3. package/dist/components/composed/common/MenuOrDrawer.svelte +21 -5
  4. package/dist/components/composed/common/MenuOrDrawer.svelte.d.ts +50 -36
  5. package/dist/components/composed/common/MenuOrDrawerOptions.svelte +29 -13
  6. package/dist/components/composed/common/MenuOrDrawerOptions.svelte.d.ts +34 -30
  7. package/dist/components/composed/common/QuickActions.svelte +52 -20
  8. package/dist/components/composed/common/QuickActions.svelte.d.ts +24 -20
  9. package/dist/components/composed/common/ToolTip.svelte +31 -22
  10. package/dist/components/composed/common/ToolTip.svelte.d.ts +32 -43
  11. package/dist/components/composed/forms/AsyncAutocomplete.svelte +44 -23
  12. package/dist/components/composed/forms/AsyncAutocomplete.svelte.d.ts +44 -39
  13. package/dist/components/composed/forms/AvatarDropdown.svelte +57 -27
  14. package/dist/components/composed/forms/AvatarDropdown.svelte.d.ts +45 -41
  15. package/dist/components/composed/forms/ConfirmOrCancelButtons.svelte +35 -17
  16. package/dist/components/composed/forms/ConfirmOrCancelButtons.svelte.d.ts +41 -37
  17. package/dist/components/composed/forms/CountriesAutocomplete.svelte +16 -7
  18. package/dist/components/composed/forms/CountriesAutocomplete.svelte.d.ts +31 -60
  19. package/dist/components/composed/forms/DatePickerTextField.svelte +166 -114
  20. package/dist/components/composed/forms/DatePickerTextField.svelte.d.ts +67 -63
  21. package/dist/components/composed/forms/Dropdown.svelte +51 -21
  22. package/dist/components/composed/forms/Dropdown.svelte.d.ts +48 -43
  23. package/dist/components/composed/forms/IconsDropdown.svelte +61 -33
  24. package/dist/components/composed/forms/IconsDropdown.svelte.d.ts +30 -26
  25. package/dist/components/composed/forms/LabelAndSelect.svelte +32 -7
  26. package/dist/components/composed/forms/LabelAndSelect.svelte.d.ts +35 -31
  27. package/dist/components/composed/forms/LabelAndTextField.svelte +30 -5
  28. package/dist/components/composed/forms/LabelAndTextField.svelte.d.ts +46 -42
  29. package/dist/components/composed/forms/ToggleList.svelte +59 -33
  30. package/dist/components/composed/forms/ToggleList.svelte.d.ts +21 -17
  31. package/dist/components/composed/forms/YearPickerTextField.svelte +114 -74
  32. package/dist/components/composed/forms/YearPickerTextField.svelte.d.ts +53 -49
  33. package/dist/components/composed/list/DynamicTable.svelte +1102 -707
  34. package/dist/components/composed/list/DynamicTable.svelte.d.ts +369 -365
  35. package/dist/components/composed/list/PaginatedTable.svelte +139 -76
  36. package/dist/components/composed/list/PaginatedTable.svelte.d.ts +108 -108
  37. package/dist/components/composed/progress/HorizontalStackedProgress.svelte +58 -30
  38. package/dist/components/composed/progress/HorizontalStackedProgress.svelte.d.ts +25 -21
  39. package/dist/components/composed/search/DynamicFilters.svelte +103 -82
  40. package/dist/components/composed/search/DynamicFilters.svelte.d.ts +31 -27
  41. package/dist/components/composed/search/FilterEditor.svelte +106 -77
  42. package/dist/components/composed/search/FilterEditor.svelte.d.ts +37 -33
  43. package/dist/components/composed/search/Filters.svelte +361 -292
  44. package/dist/components/composed/search/Filters.svelte.d.ts +55 -51
  45. package/dist/components/composed/search/GlobalSearchTextField.svelte +79 -41
  46. package/dist/components/composed/search/GlobalSearchTextField.svelte.d.ts +43 -39
  47. package/dist/components/composed/search/MobileFilterEditor.svelte +135 -93
  48. package/dist/components/composed/search/MobileFilterEditor.svelte.d.ts +39 -35
  49. package/dist/components/composed/search/SearchBar.svelte +28 -5
  50. package/dist/components/composed/search/SearchBar.svelte.d.ts +34 -30
  51. package/dist/components/composed/search/SearchResults.svelte +42 -7
  52. package/dist/components/composed/search/SearchResults.svelte.d.ts +40 -36
  53. package/dist/components/composed/shop/ProductCard.svelte +18 -4
  54. package/dist/components/composed/shop/ProductCard.svelte.d.ts +32 -28
  55. package/dist/components/composed/shop/ProductsGrid.svelte +22 -2
  56. package/dist/components/composed/shop/ProductsGrid.svelte.d.ts +44 -40
  57. package/dist/components/layouts/CollapsibleSideBarLayout.svelte +77 -38
  58. package/dist/components/layouts/CollapsibleSideBarLayout.svelte.d.ts +109 -69
  59. package/dist/components/layouts/StableDividedSideBarLayout.svelte +47 -17
  60. package/dist/components/layouts/StableDividedSideBarLayout.svelte.d.ts +50 -32
  61. package/dist/components/layouts/UnstableDividedSideBarLayout.svelte +53 -30
  62. package/dist/components/layouts/UnstableDividedSideBarLayout.svelte.d.ts +103 -63
  63. package/dist/components/simple/buttons/Button.svelte +78 -32
  64. package/dist/components/simple/buttons/Button.svelte.d.ts +47 -35
  65. package/dist/components/simple/buttons/LinkButton.svelte +54 -22
  66. package/dist/components/simple/buttons/LinkButton.svelte.d.ts +50 -33
  67. package/dist/components/simple/charts/GanymedeBarChart.svelte +172 -134
  68. package/dist/components/simple/charts/GanymedeBarChart.svelte.d.ts +50 -46
  69. package/dist/components/simple/charts/GanymedeLineChart.svelte +157 -115
  70. package/dist/components/simple/charts/GanymedeLineChart.svelte.d.ts +51 -47
  71. package/dist/components/simple/charts/GanymedePieChart.svelte +62 -39
  72. package/dist/components/simple/charts/GanymedePieChart.svelte.d.ts +37 -33
  73. package/dist/components/simple/common/Card.svelte +20 -1
  74. package/dist/components/simple/common/Card.svelte.d.ts +51 -38
  75. package/dist/components/simple/common/CollapsibleDivider.svelte +23 -11
  76. package/dist/components/simple/common/CollapsibleDivider.svelte.d.ts +29 -25
  77. package/dist/components/simple/common/Divider.svelte +8 -2
  78. package/dist/components/simple/common/Divider.svelte.d.ts +23 -19
  79. package/dist/components/simple/common/Gesture.svelte +64 -46
  80. package/dist/components/simple/common/Gesture.svelte.d.ts +21 -17
  81. package/dist/components/simple/common/InfiniteScroll.svelte +52 -29
  82. package/dist/components/simple/common/InfiniteScroll.svelte.d.ts +24 -20
  83. package/dist/components/simple/common/IntersectionObserver.svelte +45 -32
  84. package/dist/components/simple/common/IntersectionObserver.svelte.d.ts +34 -21
  85. package/dist/components/simple/common/MediaQuery.svelte +30 -21
  86. package/dist/components/simple/common/MediaQuery.svelte.d.ts +34 -30
  87. package/dist/components/simple/common/Menu.svelte +290 -201
  88. package/dist/components/simple/common/Menu.svelte.d.ts +51 -40
  89. package/dist/components/simple/common/Playground.svelte +18 -17
  90. package/dist/components/simple/common/Playground.svelte.d.ts +19 -15
  91. package/dist/components/simple/common/VerticalDraggableList.svelte +35 -16
  92. package/dist/components/simple/common/VerticalDraggableList.svelte.d.ts +33 -29
  93. package/dist/components/simple/dashboards/DashboardGridShaper.svelte +32 -26
  94. package/dist/components/simple/dashboards/DashboardGridShaper.svelte.d.ts +16 -12
  95. package/dist/components/simple/dates/Calendar.svelte +52 -28
  96. package/dist/components/simple/dates/Calendar.svelte.d.ts +45 -41
  97. package/dist/components/simple/dates/DatePicker.svelte +90 -60
  98. package/dist/components/simple/dates/DatePicker.svelte.d.ts +44 -40
  99. package/dist/components/simple/dates/MonthSelector.svelte +37 -15
  100. package/dist/components/simple/dates/MonthSelector.svelte.d.ts +35 -31
  101. package/dist/components/simple/dates/TimePicker.svelte +45 -31
  102. package/dist/components/simple/dates/TimePicker.svelte.d.ts +24 -20
  103. package/dist/components/simple/dates/TimePickerTextField.svelte +56 -35
  104. package/dist/components/simple/dates/TimePickerTextField.svelte.d.ts +28 -24
  105. package/dist/components/simple/dates/YearSelector.svelte +54 -29
  106. package/dist/components/simple/dates/YearSelector.svelte.d.ts +35 -31
  107. package/dist/components/simple/dialogs/Dialog.svelte +92 -62
  108. package/dist/components/simple/dialogs/Dialog.svelte.d.ts +42 -28
  109. package/dist/components/simple/forms/Autocomplete.svelte +201 -142
  110. package/dist/components/simple/forms/Autocomplete.svelte.d.ts +83 -79
  111. package/dist/components/simple/forms/Checkbox.svelte +40 -24
  112. package/dist/components/simple/forms/Checkbox.svelte.d.ts +25 -21
  113. package/dist/components/simple/forms/FileInput.svelte +88 -48
  114. package/dist/components/simple/forms/FileInput.svelte.d.ts +37 -33
  115. package/dist/components/simple/forms/FileInputList.svelte +52 -34
  116. package/dist/components/simple/forms/FileInputList.svelte.d.ts +43 -39
  117. package/dist/components/simple/forms/RadioButton.svelte +11 -3
  118. package/dist/components/simple/forms/RadioButton.svelte.d.ts +31 -27
  119. package/dist/components/simple/forms/Select.svelte +16 -3
  120. package/dist/components/simple/forms/Select.svelte.d.ts +24 -20
  121. package/dist/components/simple/forms/SimpleTextField.svelte +53 -6
  122. package/dist/components/simple/forms/SimpleTextField.svelte.d.ts +64 -60
  123. package/dist/components/simple/forms/Switch.svelte +30 -16
  124. package/dist/components/simple/forms/Switch.svelte.d.ts +25 -21
  125. package/dist/components/simple/forms/Textarea.svelte +27 -2
  126. package/dist/components/simple/forms/Textarea.svelte.d.ts +41 -37
  127. package/dist/components/simple/forms/Textfield.svelte +56 -18
  128. package/dist/components/simple/forms/Textfield.svelte.d.ts +55 -51
  129. package/dist/components/simple/forms/TreeEditor.svelte +141 -95
  130. package/dist/components/simple/forms/TreeEditor.svelte.d.ts +42 -38
  131. package/dist/components/simple/forms/TreeEditorItem.svelte +77 -42
  132. package/dist/components/simple/forms/TreeEditorItem.svelte.d.ts +54 -50
  133. package/dist/components/simple/forms/VerticalSwitch.svelte +11 -1
  134. package/dist/components/simple/forms/VerticalSwitch.svelte.d.ts +32 -28
  135. package/dist/components/simple/forms/VerticalTextSwitch.svelte +15 -3
  136. package/dist/components/simple/forms/VerticalTextSwitch.svelte.d.ts +30 -26
  137. package/dist/components/simple/lists/ColorInvertedSelector.svelte +53 -23
  138. package/dist/components/simple/lists/ColorInvertedSelector.svelte.d.ts +46 -42
  139. package/dist/components/simple/lists/HierarchyMenu.svelte +38 -19
  140. package/dist/components/simple/lists/HierarchyMenu.svelte.d.ts +34 -30
  141. package/dist/components/simple/lists/Paginator.svelte +50 -41
  142. package/dist/components/simple/lists/Paginator.svelte.d.ts +23 -19
  143. package/dist/components/simple/lists/SelectableMenuList.svelte +43 -15
  144. package/dist/components/simple/lists/SelectableMenuList.svelte.d.ts +24 -20
  145. package/dist/components/simple/lists/SelectableVerticalList.svelte +99 -57
  146. package/dist/components/simple/lists/SelectableVerticalList.svelte.d.ts +51 -47
  147. package/dist/components/simple/lists/SidebarMenuList.svelte +115 -70
  148. package/dist/components/simple/lists/SidebarMenuList.svelte.d.ts +26 -22
  149. package/dist/components/simple/lists/SimpleTable.svelte +264 -154
  150. package/dist/components/simple/lists/SimpleTable.svelte.d.ts +70 -66
  151. package/dist/components/simple/loaders/CircularLoader.svelte +16 -5
  152. package/dist/components/simple/loaders/CircularLoader.svelte.d.ts +19 -15
  153. package/dist/components/simple/loaders/Skeleton.svelte +3 -2
  154. package/dist/components/simple/loaders/Skeleton.svelte.d.ts +16 -12
  155. package/dist/components/simple/media/AttachmentDownloader.svelte +17 -3
  156. package/dist/components/simple/media/AttachmentDownloader.svelte.d.ts +32 -28
  157. package/dist/components/simple/media/Avatar.svelte +18 -12
  158. package/dist/components/simple/media/Avatar.svelte.d.ts +31 -20
  159. package/dist/components/simple/media/Carousel.svelte +29 -11
  160. package/dist/components/simple/media/Carousel.svelte.d.ts +28 -24
  161. package/dist/components/simple/media/DescriptiveAvatar.svelte +12 -4
  162. package/dist/components/simple/media/DescriptiveAvatar.svelte.d.ts +44 -28
  163. package/dist/components/simple/media/FlagIcon.svelte +8 -5
  164. package/dist/components/simple/media/FlagIcon.svelte.d.ts +19 -15
  165. package/dist/components/simple/media/Gallery.svelte +49 -29
  166. package/dist/components/simple/media/Gallery.svelte.d.ts +27 -23
  167. package/dist/components/simple/media/Icon.svelte +9 -4
  168. package/dist/components/simple/media/Icon.svelte.d.ts +24 -20
  169. package/dist/components/simple/media/Image.svelte +42 -20
  170. package/dist/components/simple/media/Image.svelte.d.ts +44 -33
  171. package/dist/components/simple/media/ImageGrid.svelte +37 -12
  172. package/dist/components/simple/media/ImageGrid.svelte.d.ts +32 -28
  173. package/dist/components/simple/navigation/Breadcrumb.svelte +28 -10
  174. package/dist/components/simple/navigation/Breadcrumb.svelte.d.ts +26 -22
  175. package/dist/components/simple/navigation/Chip.svelte +44 -23
  176. package/dist/components/simple/navigation/Chip.svelte.d.ts +42 -31
  177. package/dist/components/simple/navigation/Drawer.svelte +107 -65
  178. package/dist/components/simple/navigation/Drawer.svelte.d.ts +50 -37
  179. package/dist/components/simple/navigation/HeaderMenu.svelte +40 -23
  180. package/dist/components/simple/navigation/HeaderMenu.svelte.d.ts +39 -35
  181. package/dist/components/simple/navigation/Navigator.svelte +30 -8
  182. package/dist/components/simple/navigation/Navigator.svelte.d.ts +28 -24
  183. package/dist/components/simple/navigation/TabSwitcher.svelte +83 -47
  184. package/dist/components/simple/navigation/TabSwitcher.svelte.d.ts +38 -34
  185. package/dist/components/simple/notifiers/AlertBanner.svelte +43 -15
  186. package/dist/components/simple/notifiers/AlertBanner.svelte.d.ts +41 -37
  187. package/dist/components/simple/progress/ProgressBar.svelte +20 -13
  188. package/dist/components/simple/progress/ProgressBar.svelte.d.ts +21 -17
  189. package/dist/components/simple/timeline/SimpleTimeLine.svelte +19 -5
  190. package/dist/components/simple/timeline/SimpleTimeLine.svelte.d.ts +39 -35
  191. package/dist/components/simple/typography/Code.svelte +27 -12
  192. package/dist/components/simple/typography/Code.svelte.d.ts +28 -24
  193. package/dist/stores/debounce.d.ts +0 -1
  194. package/dist/stores/layouts/unstableSidebarOpened.d.ts +0 -1
  195. package/dist/stores/mediaQuery.d.ts +0 -1
  196. package/dist/stores/theme.d.ts +0 -1
  197. package/dist/utils/filters/builder.d.ts +2 -0
  198. package/dist/utils/filters/builder.js +20 -0
  199. package/dist/utils/filters/filters.d.ts +2 -0
  200. package/dist/utils/filters/filters.js +6 -2
  201. package/dist/utils/filters/modifiers/where.d.ts +10 -3
  202. package/package.json +1 -1
@@ -1,323 +1,392 @@
1
- <script context="module"></script>
2
-
3
- <script>import "./Filters.css";
4
- import "../../../css/main.css";
5
- import Drawer from "../../simple/navigation/Drawer.svelte";
6
- import Menu from "../../simple/common/Menu.svelte";
7
- import MediaQuery from "../../simple/common/MediaQuery.svelte";
8
- import Button from "../../simple/buttons/Button.svelte";
9
- import Icon from "../../simple/media/Icon.svelte";
10
- import { createEventDispatcher } from "svelte";
11
- import { isDateMode, isSelectMode, isStringMode } from "../../../utils/filters/filters";
12
- import SelectableVerticalList from "../../simple/lists/SelectableVerticalList.svelte";
13
- import Chip from "../../simple/navigation/Chip.svelte";
14
- import FilterEditor from "./FilterEditor.svelte";
15
- import MobileFilterEditor from "./MobileFilterEditor.svelte";
16
- import { fly } from "svelte/transition";
17
- import Dialog from "../../simple/dialogs/Dialog.svelte";
18
- import Validator from "../../../utils/filters/validator";
19
- import ToolTip from "../common/ToolTip.svelte";
20
- import { DateTime } from "luxon";
21
- 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 = lang == "en" ? "en" : "it", betweenSeparator = lang == "en" ? "and" : "e", trueString = lang == "en" ? "true" : "vero", falseString = lang == "en" ? "false" : "falso", editFilterMode = "one-edit", labelsMapper = lang == "en" ? {
22
- "equal": {
23
- extended: "equal to",
24
- short: "equal"
25
- },
26
- "like": {
27
- short: "includes"
28
- },
29
- "ilike": {
30
- short: "includes"
31
- },
32
- "contains": {
33
- short: "contains"
34
- },
35
- "greater": {
36
- short: "greater",
37
- extended: "greater than"
38
- },
39
- "lower": {
40
- short: "lower",
41
- extended: "lower than"
42
- },
43
- "between": {
44
- short: "between",
45
- extended: "is between"
46
- },
47
- "different": {
48
- short: "different",
49
- extended: "different from"
50
- }
51
- } : {
52
- "equal": {
53
- extended: "uguale a",
54
- short: "uguale"
55
- },
56
- "like": {
57
- short: "include"
58
- },
59
- "ilike": {
60
- short: "include"
61
- },
62
- "contains": {
63
- short: "contiene"
64
- },
65
- "greater": {
66
- short: "maggiore",
67
- extended: "maggiore di"
68
- },
69
- "lower": {
70
- short: "minore",
71
- extended: "minore di"
72
- },
73
- "between": {
74
- short: "compreso",
75
- extended: "\xE8 compreso tra"
76
- },
77
- "different": {
78
- short: "diverso",
79
- extended: "diverso da"
80
- }
81
- };
82
- let dispatch = createEventDispatcher();
83
- let open = false, mobileOpen = false, activator;
84
- function handleAddFilterClick() {
85
- dispatch("addFilterClick");
86
- open = true;
87
- mobileOpen = true;
88
- }
89
- $:
90
- filterOptions = filters.map((f) => {
1
+ <script lang="ts" context="module">
2
+ export type ArrayElement<ArrayType extends readonly unknown[]> = ArrayType extends readonly (infer ElementType)[] ? ElementType : never;
3
+
4
+ export type LabelMapper = {
5
+ [label: string]: {extended?: string, short: string}
6
+ }
7
+ </script>
8
+
9
+ <script lang="ts">
10
+ import './Filters.css'
11
+ import '../../../css/main.css'
12
+ import Drawer from '../../simple/navigation/Drawer.svelte';
13
+ import Menu from '../../simple/common/Menu.svelte';
14
+ import MediaQuery from '../../simple/common/MediaQuery.svelte';
15
+ import Button from '../../simple/buttons/Button.svelte';
16
+ import Icon from '../../simple/media/Icon.svelte';
17
+ import { createEventDispatcher, type ComponentProps } from 'svelte';
18
+ import { isDateMode, isSelectMode, isStringMode, type DateMode, type Filter, type NumberMode, type SelectMode, type StringMode } from '../../../utils/filters/filters';
19
+ import SelectableVerticalList from '../../simple/lists/SelectableVerticalList.svelte';
20
+ import Chip from '../../simple/navigation/Chip.svelte';
21
+ import type { Locale } from '../../simple/dates/utils';
22
+ import FilterEditor from './FilterEditor.svelte';
23
+ import MobileFilterEditor from './MobileFilterEditor.svelte';
24
+ import { fly } from 'svelte/transition';
25
+ import Dialog from '../../simple/dialogs/Dialog.svelte';
26
+ import Validator from '../../../utils/filters/validator';
27
+ import ToolTip from '../common/ToolTip.svelte';
28
+ import { DateTime } from 'luxon';
29
+
30
+ export let
31
+ filters: Filter[] = [],
32
+ lang: 'it' | 'en' = 'en',
33
+ addFilterLabel: string = lang == 'en' ? "Filters" : "Filtri",
34
+ cancelFilterLabel : string = lang == 'en' ? "Cancel" : "Annulla",
35
+ applyFilterLabel : string = lang == 'en' ? "Apply filter" : "Applica filtro",
36
+ showActiveFilters: boolean = true,
37
+ filterTitleLabel: string = lang == 'en' ? "Filter by" : "Filtra per",
38
+ dateLocale: Locale = lang == 'en' ? 'en' : 'it',
39
+ betweenSeparator: string = lang == 'en' ? "and" : "e",
40
+ trueString: string = lang == 'en' ? "true" : "vero",
41
+ falseString: string = lang == 'en' ? "false" : "falso",
42
+ editFilterMode: 'one-edit' | 'multi-edit' = 'one-edit',
43
+ // TODO create global translation mechanism
44
+ labelsMapper: LabelMapper = lang == 'en' ? {
45
+ 'equal': {
46
+ extended: 'equal to',
47
+ short: 'equal'
48
+ },
49
+ 'like': {
50
+ short: 'includes'
51
+ },
52
+ 'ilike': {
53
+ short: 'includes'
54
+ },
55
+ 'contains': {
56
+ short: 'contains'
57
+ },
58
+ 'greater': {
59
+ short: 'greater',
60
+ extended: 'greater than'
61
+ },
62
+ 'lower': {
63
+ short: 'lower',
64
+ extended: 'lower than'
65
+ },
66
+ 'between': {
67
+ short: 'between',
68
+ extended: 'is between'
69
+ },
70
+ 'different': {
71
+ short: 'different',
72
+ extended: 'different from'
73
+ }
74
+ } : {
75
+ 'equal': {
76
+ extended: 'uguale a',
77
+ short: 'uguale'
78
+ },
79
+ 'like': {
80
+ short: 'include'
81
+ },
82
+ 'ilike': {
83
+ short: 'include'
84
+ },
85
+ 'contains': {
86
+ short: 'contiene'
87
+ },
88
+ 'greater': {
89
+ short: 'maggiore',
90
+ extended: 'maggiore di'
91
+ },
92
+ 'lower': {
93
+ short: 'minore',
94
+ extended: 'minore di'
95
+ },
96
+ 'between': {
97
+ short: 'compreso',
98
+ extended: 'è compreso tra'
99
+ },
100
+ 'different': {
101
+ short: 'diverso',
102
+ extended: 'diverso da'
103
+ }
104
+ }
105
+
106
+
107
+ let dispatch = createEventDispatcher<{
108
+ 'addFilterClick': undefined,
109
+ 'applyFilter': undefined,
110
+ 'removeFilter': {
111
+ filter: Filter
112
+ },
113
+ 'removeAllFilters': undefined
114
+ }>()
115
+
116
+ let open: boolean = false,
117
+ mobileOpen: boolean = false,
118
+ activator: HTMLElement
119
+
120
+ function handleAddFilterClick() {
121
+ dispatch('addFilterClick')
122
+ open = true
123
+ mobileOpen = true
124
+ }
125
+
126
+ $: filterOptions = filters.map((f) => {
91
127
  return {
92
128
  title: f.label,
93
129
  name: f.name
94
- };
95
- });
96
- $:
97
- deletableFilterOptions = filters.map((f) => {
130
+ }
131
+ })
132
+
133
+ $: deletableFilterOptions = filters.map((f) => {
98
134
  return {
99
135
  title: f.label,
100
136
  name: f.name,
101
- appendIcon: f.active ? "mdi-delete" : void 0
102
- };
103
- });
104
- let selected;
105
- let focused;
106
- $:
107
- if (!!focused && !open)
108
- focused = void 0;
109
- let filterOpened = "new";
110
- let filterOptionsListActivator;
111
- let singleFilterActivator;
112
- let singleFilterMenuAnchor = "right-center";
113
- let singleFilterMenuOpened = false;
114
- let selectedFilter = void 0;
115
- $:
116
- selectedFilterIndex = filters.findIndex((f) => {
117
- return f.name === selected;
118
- });
119
- $:
120
- selectedFilter = selected === void 0 ? void 0 : filters[selectedFilterIndex];
121
- function handleFilterSelection(e, mobile = false) {
122
- if (mobile) {
123
- selected = e.detail.element.name;
124
- singleFilterMenuOpened = true;
125
- } else {
126
- singleFilterActivator = filterOptionsListActivator;
127
- singleFilterMenuAnchor = "right-center";
128
- singleFilterMenuOpened = true;
129
- selected = e.detail.element.name;
130
- filterOpened = "new";
131
- }
132
- let filter = filters.find((f) => f.name === e.detail.element.name);
133
- if (!!filter) {
134
- if (filter.type === "custom") {
135
- customFilterApplyDisabled = filter.active === void 0 || filter.active === false;
137
+ appendIcon: f.active ? 'mdi-delete' : undefined
136
138
  }
137
- }
138
- }
139
- function handleCancelFilterClick() {
140
- open = false;
141
- mobileOpen = false;
142
- singleFilterMenuOpened = false;
143
- }
144
- function handleApplyFilterClick() {
145
- if (!!selectedFilter && !!selectedTmpFilter) {
146
- selectedFilter = { ...selectedTmpFilter };
147
- selectedFilter.active = true;
148
- filters[selectedFilterIndex] = selectedFilter;
149
- open = false;
150
- mobileOpen = false;
151
- singleFilterMenuOpened = false;
152
- dispatch("applyFilter");
153
- }
154
- }
155
- $:
156
- activeFilters = filters.filter((f) => f.active);
157
- function handleRemoveFilter(filter) {
158
- let filterIndex = filters.findIndex((f) => f.name === filter.name);
159
- let filterName = filter.name;
160
- filters[filterIndex].active = false;
161
- tmpFilters[filterName].active = false;
162
- if (Object.keys(filters[filterIndex]).includes("value")) {
163
- filters[filterIndex].value = void 0;
164
- if (!!tmpFilters[filterName] && Object.keys(tmpFilters[filterName]).includes("value")) {
165
- tmpFilters[filterName].value = void 0;
139
+ })
140
+
141
+ let selected: ArrayElement<NonNullable<ComponentProps<SelectableVerticalList>['elements']>>['name'] | undefined
142
+ let focused: ArrayElement<NonNullable<ComponentProps<SelectableVerticalList>['elements']>>['name'] | undefined
143
+ $: if(!!focused && !open) focused = undefined
144
+
145
+ let filterOpened: 'edit' | 'new' = 'new'
146
+
147
+
148
+ let filterOptionsListActivator: HTMLElement | undefined
149
+ let singleFilterActivator: HTMLElement | undefined
150
+ let singleFilterMenuAnchor: 'right-center' | 'bottom-center' = 'right-center'
151
+ let singleFilterMenuOpened: boolean = false
152
+
153
+ let selectedFilter : Filter | undefined = undefined
154
+ $: selectedFilterIndex = filters.findIndex((f) => { return f.name === selected })
155
+ $: selectedFilter = selected === undefined ? undefined : filters[selectedFilterIndex]
156
+
157
+
158
+ function handleFilterSelection(e: CustomEvent, mobile: boolean = false) {
159
+ if(mobile) {
160
+ selected = e.detail.element.name
161
+ singleFilterMenuOpened = true;
162
+ } else {
163
+ singleFilterActivator = filterOptionsListActivator
164
+ singleFilterMenuAnchor = 'right-center'
165
+ singleFilterMenuOpened = true;
166
+ selected = e.detail.element.name
167
+ filterOpened = 'new'
166
168
  }
167
- }
168
- if (Object.keys(filters[filterIndex]).includes("from")) {
169
- filters[filterIndex].from = void 0;
170
- if (!!tmpFilters[filterName] && Object.keys(tmpFilters[filterName]).includes("from")) {
171
- tmpFilters[filterName].from = void 0;
169
+
170
+ let filter = filters.find(f => f.name === e.detail.element.name)
171
+ if(!!filter) {
172
+ if(filter.type === 'custom') {
173
+ customFilterApplyDisabled = filter.active === undefined || filter.active === false
174
+ }
172
175
  }
173
176
  }
174
- if (Object.keys(filters[filterIndex]).includes("to")) {
175
- filters[filterIndex].to = void 0;
176
- if (!!tmpFilters[filterName] && Object.keys(tmpFilters[filterName]).includes("to")) {
177
- tmpFilters[filterName].to = void 0;
178
- }
177
+
178
+ function handleCancelFilterClick() {
179
+ open = false
180
+ mobileOpen = false
181
+ singleFilterMenuOpened = false;
179
182
  }
180
- if (Object.keys(filters[filterIndex]).includes("values")) {
181
- filters[filterIndex].values = void 0;
182
- if (!!tmpFilters[filterName] && Object.keys(tmpFilters[filterName]).includes("values")) {
183
- tmpFilters[filterName].values = void 0;
183
+
184
+ function handleApplyFilterClick() {
185
+ if(!!selectedFilter && !!selectedTmpFilter) {
186
+ selectedFilter = {...selectedTmpFilter}
187
+ selectedFilter.active = true
188
+ filters[selectedFilterIndex] = selectedFilter
189
+ open = false
190
+ mobileOpen = false
191
+ singleFilterMenuOpened = false;
192
+ dispatch('applyFilter')
184
193
  }
185
194
  }
186
- singleFilterMenuOpened = false;
187
- dispatch("removeFilter", { filter: filters[filterIndex] });
188
- }
189
- let activeFiltersActivators = {};
190
- function handleActiveFilterClick(filter) {
191
- singleFilterActivator = activeFiltersActivators[filter.name];
192
- singleFilterMenuAnchor = "bottom-center";
193
- singleFilterMenuOpened = true;
194
- mobileOpen = true;
195
- selected = filter.name;
196
- filterOpened = "edit";
197
- if (filter.type === "custom") {
198
- customFilterApplyDisabled = false;
199
- }
200
- }
201
- function handleMobileBackTap() {
202
- closeFilterMenu(0);
203
- }
204
- function closeFilterMenu(delay) {
205
- setTimeout(() => {
206
- singleFilterMenuOpened = false;
207
- }, delay);
208
- }
209
- function handleDeleteIconClick(e) {
210
- let filterIndex = e.detail.index;
211
- let name = filters[filterIndex].name;
212
- handleRemoveFilter({ name });
213
- }
214
- function handleRemoveAllFilters(e) {
215
- if (!!e)
216
- e.stopPropagation();
217
- for (let i = 0; i < filters.length; i += 1) {
218
- filters[i].active = false;
219
- if (Object.keys(filters[i]).includes("value")) {
220
- filters[i].value = void 0;
195
+
196
+ $: activeFilters = filters.filter((f) => f.active)
197
+
198
+ function handleRemoveFilter(filter: { name: string }) {
199
+ let filterIndex = filters.findIndex((f) => f.name === filter.name)
200
+ let filterName = filter.name
201
+ filters[filterIndex].active = false
202
+ tmpFilters[filterName].active = false
203
+ if(Object.keys(filters[filterIndex]).includes('value')) {
204
+ //@ts-ignore
205
+ filters[filterIndex].value = undefined
206
+ if(!!tmpFilters[filterName] && Object.keys(tmpFilters[filterName]).includes('value')) {
207
+ //@ts-ignore
208
+ tmpFilters[filterName].value = undefined
209
+ }
221
210
  }
222
- if (Object.keys(filters[i]).includes("from")) {
223
- filters[i].from = void 0;
211
+ if(Object.keys(filters[filterIndex]).includes('from')) {
212
+ //@ts-ignore
213
+ filters[filterIndex].from = undefined
214
+ if(!!tmpFilters[filterName] && Object.keys(tmpFilters[filterName]).includes('from')) {
215
+ //@ts-ignore
216
+ tmpFilters[filterName].from = undefined
217
+ }
224
218
  }
225
- if (Object.keys(filters[i]).includes("to")) {
226
- filters[i].to = void 0;
219
+ if(Object.keys(filters[filterIndex]).includes('to')) {
220
+ //@ts-ignore
221
+ filters[filterIndex].to = undefined
222
+ if(!!tmpFilters[filterName] && Object.keys(tmpFilters[filterName]).includes('to')) {
223
+ //@ts-ignore
224
+ tmpFilters[filterName].to = undefined
225
+ }
227
226
  }
228
- if (Object.keys(filters[i]).includes("values")) {
229
- filters[i].values = void 0;
227
+ if(Object.keys(filters[filterIndex]).includes('values')) {
228
+ //@ts-ignore
229
+ filters[filterIndex].values = undefined
230
+ if(!!tmpFilters[filterName] && Object.keys(tmpFilters[filterName]).includes('values')) {
231
+ //@ts-ignore
232
+ tmpFilters[filterName].values = undefined
233
+ }
230
234
  }
231
- singleFilterMenuOpened = false;
235
+ singleFilterMenuOpened = false
236
+ dispatch('removeFilter', { filter: filters[filterIndex] })
232
237
  }
233
- filters = filters;
234
- tmpFilters = {};
235
- customToBeInitialized = false;
236
- dispatch("removeAllFilters");
237
- }
238
- function handleMultiEditApplyClick() {
239
- open = false;
240
- mobileOpen = false;
241
- dispatch("applyFilter");
242
- }
243
- function handleMultiEditRemoveClick() {
244
- handleRemoveAllFilters();
245
- open = false;
246
- mobileOpen = false;
247
- }
248
- let selectedTmpFilter = void 0;
249
- let tmpFilters = {};
250
- function handleApplyMultiFilterClick() {
251
- for (let i = 0; i < filters.length; i += 1) {
252
- if (!!filters[i] && !!tmpFilters[filters[i].name]) {
253
- filters[i] = { ...tmpFilters[filters[i].name] };
254
- filters[i].active = filters[i].type !== "custom" ? Validator.isValid(tmpFilters[filters[i].name]) : tmpFilters[filters[i].name].active;
238
+
239
+ let activeFiltersActivators: Record<string, HTMLElement> = {}
240
+ function handleActiveFilterClick(filter: { name: string, type: 'custom' | string }) {
241
+ singleFilterActivator = activeFiltersActivators[filter.name]
242
+ singleFilterMenuAnchor = 'bottom-center'
243
+ singleFilterMenuOpened = true;
244
+ mobileOpen=true
245
+ selected = filter.name
246
+ filterOpened = 'edit'
247
+
248
+ if(filter.type === 'custom') {
249
+ customFilterApplyDisabled = false
255
250
  }
256
251
  }
257
- filters = filters;
258
- handleMultiEditApplyClick();
259
- }
260
- function updateMultiFilterValues(filterName, newValue, newValid, mode) {
261
- let filter = filters.find((f) => f.name === filterName);
262
- if (!filter)
263
- throw new Error("cannot find filter with name " + filterName);
264
- if (!tmpFilters[filterName])
265
- tmpFilters[filterName] = { ...filter };
266
- let tmpFilter = tmpFilters[filterName];
267
- if ("mode" in tmpFilter && !!mode) {
268
- if (tmpFilter.type == "date" && isDateMode(mode)) {
269
- tmpFilter.mode = mode;
270
- } else if (tmpFilter.type == "number" && isDateMode(mode)) {
271
- tmpFilter.mode = mode;
272
- } else if (tmpFilter.type == "string" && isStringMode(mode)) {
273
- tmpFilter.mode = mode;
274
- } else if (tmpFilter.type == "select" && isSelectMode(mode)) {
275
- tmpFilter.mode = mode;
252
+
253
+ function handleMobileBackTap() {
254
+ closeFilterMenu(0)
255
+ }
256
+
257
+ function closeFilterMenu(delay: number) {
258
+ setTimeout(() => {
259
+ singleFilterMenuOpened = false
260
+ }, delay)
261
+ }
262
+
263
+ function handleDeleteIconClick(e: CustomEvent) {
264
+ let filterIndex = e.detail.index
265
+ let name = filters[filterIndex].name
266
+ handleRemoveFilter({name})
267
+ }
268
+
269
+ function handleRemoveAllFilters(e?: MouseEvent) {
270
+ if(!!e) e.stopPropagation()
271
+ for(let i = 0; i < filters.length; i += 1) {
272
+ filters[i].active = false
273
+ if(Object.keys(filters[i]).includes('value')) {
274
+ //@ts-ignore
275
+ filters[i].value = undefined
276
+ }
277
+ if(Object.keys(filters[i]).includes('from')) {
278
+ //@ts-ignore
279
+ filters[i].from = undefined
280
+ }
281
+ if(Object.keys(filters[i]).includes('to')) {
282
+ //@ts-ignore
283
+ filters[i].to = undefined
284
+ }
285
+ if(Object.keys(filters[i]).includes('values')) {
286
+ //@ts-ignore
287
+ filters[i].values = undefined
288
+ }
289
+ singleFilterMenuOpened = false
276
290
  }
291
+ filters = filters
292
+ tmpFilters = {}
293
+ customToBeInitialized = false
294
+ dispatch('removeAllFilters')
295
+ }
296
+
297
+ function handleMultiEditApplyClick() {
298
+ open = false
299
+ mobileOpen = false
300
+ dispatch('applyFilter')
301
+ }
302
+
303
+ function handleMultiEditRemoveClick() {
304
+ handleRemoveAllFilters()
305
+ open = false
306
+ mobileOpen = false
277
307
  }
278
- if (tmpFilter.type == "select") {
279
- tmpFilter.values = newValue;
280
- } else if ("mode" in tmpFilter && tmpFilter.mode == "between") {
281
- if (tmpFilter.type == "date") {
282
- if (newValue.from) {
283
- tmpFilter.from = DateTime.fromJSDate(newValue.from).setLocale("it-IT").startOf("day").toJSDate();
308
+
309
+ let selectedTmpFilter: Filter | undefined = undefined
310
+
311
+ let tmpFilters: {[filterName: string]: Filter} = {}
312
+
313
+ function handleApplyMultiFilterClick() {
314
+ for(let i = 0; i < filters.length; i += 1) {
315
+ if(!!filters[i] && !!tmpFilters[filters[i].name]) {
316
+ filters[i] = {...tmpFilters[filters[i].name]}
317
+ filters[i].active = filters[i].type !== 'custom' ? Validator.isValid(tmpFilters[filters[i].name]) : tmpFilters[filters[i].name].active
318
+ }
319
+ }
320
+ filters = filters
321
+ handleMultiEditApplyClick()
322
+ }
323
+
324
+ function updateMultiFilterValues(filterName: string, newValue: any, newValid: boolean, mode?: NumberMode | StringMode | SelectMode | DateMode) {
325
+ let filter = filters.find(f => f.name === filterName)
326
+ if(!filter) throw new Error('cannot find filter with name ' + filterName)
327
+ if(!tmpFilters[filterName]) tmpFilters[filterName] = {...filter}
328
+ let tmpFilter = tmpFilters[filterName]
329
+ if('mode' in tmpFilter && !!mode) {
330
+ if(tmpFilter.type == 'date' && isDateMode(mode)){
331
+ tmpFilter.mode = mode
332
+ }
333
+ else if(tmpFilter.type == 'number' && isDateMode(mode)){
334
+ tmpFilter.mode = mode
335
+ }
336
+ else if(tmpFilter.type == 'string' && isStringMode(mode)){
337
+ tmpFilter.mode = mode
338
+ }
339
+ else if(tmpFilter.type == 'select' && isSelectMode(mode)){
340
+ tmpFilter.mode = mode
341
+ }
342
+ }
343
+ if(tmpFilter.type == 'select') {
344
+ tmpFilter.values = newValue
345
+ } else if('mode' in tmpFilter && tmpFilter.mode == 'between') {
346
+ if(tmpFilter.type == 'date'){
347
+ if(newValue.from){
348
+ tmpFilter.from = DateTime.fromJSDate(newValue.from).setLocale('it-IT').startOf('day').toJSDate()
349
+ }
350
+ if(newValue.to){
351
+ tmpFilter.to = DateTime.fromJSDate(newValue.to).setLocale('it-IT').endOf('day').toJSDate()
352
+ }
284
353
  }
285
- if (newValue.to) {
286
- tmpFilter.to = DateTime.fromJSDate(newValue.to).setLocale("it-IT").endOf("day").toJSDate();
354
+ else {
355
+ tmpFilter.from = newValue.from
356
+ tmpFilter.to = newValue.to
287
357
  }
288
358
  } else {
289
- tmpFilter.from = newValue.from;
290
- tmpFilter.to = newValue.to;
359
+ tmpFilter.value = newValue
360
+ }
361
+ tmpFilter.active = newValid
362
+ }
363
+
364
+ let customToBeInitialized = true
365
+ $: if(customToBeInitialized && !!tmpFilters) initCustomTmpFilters()
366
+
367
+ function initCustomTmpFilters() {
368
+ let customFilters = filters.filter(f => f.type === 'custom')
369
+ for(const customFilter of customFilters) {
370
+ if(!tmpFilters[customFilter.name]) {
371
+ tmpFilters[customFilter.name] = { ...customFilter }
372
+ }
291
373
  }
292
- } else {
293
- tmpFilter.value = newValue;
294
- }
295
- tmpFilter.active = newValid;
296
- }
297
- let customToBeInitialized = true;
298
- $:
299
- if (customToBeInitialized && !!tmpFilters)
300
- initCustomTmpFilters();
301
- function initCustomTmpFilters() {
302
- let customFilters = filters.filter((f) => f.type === "custom");
303
- for (const customFilter of customFilters) {
304
- if (!tmpFilters[customFilter.name]) {
305
- tmpFilters[customFilter.name] = { ...customFilter };
374
+ customToBeInitialized = false
375
+ }
376
+
377
+ let customFilterApplyDisabled: boolean = true
378
+ function updateFunction(filterName: string, newValue: any, newValid: boolean) {
379
+ let tmpFilter = tmpFilters[filterName]
380
+ if(!!tmpFilter && tmpFilter.type == 'custom') {
381
+ tmpFilter.value = newValue
382
+ tmpFilter.active = newValid
383
+ selectedTmpFilter = {...tmpFilter}
384
+ customFilterApplyDisabled = !newValid
306
385
  }
307
386
  }
308
- customToBeInitialized = false;
309
- }
310
- let customFilterApplyDisabled = true;
311
- function updateFunction(filterName, newValue, newValid) {
312
- let tmpFilter = tmpFilters[filterName];
313
- if (!!tmpFilter && tmpFilter.type == "custom") {
314
- tmpFilter.value = newValue;
315
- tmpFilter.active = newValid;
316
- selectedTmpFilter = { ...tmpFilter };
317
- customFilterApplyDisabled = !newValid;
318
- }
319
- }
320
- let moreItemsActivator;
387
+
388
+ let moreItemsActivator: HTMLElement
389
+
321
390
  </script>
322
391
 
323
392
  <MediaQuery let:mAndDown>