@likable-hair/svelte 3.3.26 → 3.3.28

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