@likable-hair/svelte 3.3.30 → 3.3.32

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 (198) 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 +30 -23
  4. package/dist/components/composed/common/MenuOrDrawer.svelte.d.ts +39 -25
  5. package/dist/components/composed/common/MenuOrDrawerOptions.svelte +42 -33
  6. package/dist/components/composed/common/MenuOrDrawerOptions.svelte.d.ts +25 -21
  7. package/dist/components/composed/common/QuickActions.svelte +84 -48
  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.css +10 -8
  34. package/dist/components/composed/list/DynamicTable.svelte +1138 -733
  35. package/dist/components/composed/list/DynamicTable.svelte.d.ts +370 -366
  36. package/dist/components/composed/list/PaginatedTable.svelte +144 -76
  37. package/dist/components/composed/list/PaginatedTable.svelte.d.ts +111 -110
  38. package/dist/components/composed/progress/HorizontalStackedProgress.svelte +59 -30
  39. package/dist/components/composed/progress/HorizontalStackedProgress.svelte.d.ts +26 -22
  40. package/dist/components/composed/search/DynamicFilters.svelte +104 -83
  41. package/dist/components/composed/search/DynamicFilters.svelte.d.ts +31 -27
  42. package/dist/components/composed/search/FilterEditor.svelte +106 -77
  43. package/dist/components/composed/search/FilterEditor.svelte.d.ts +37 -33
  44. package/dist/components/composed/search/Filters.svelte +363 -293
  45. package/dist/components/composed/search/Filters.svelte.d.ts +56 -52
  46. package/dist/components/composed/search/GlobalSearchTextField.svelte +79 -41
  47. package/dist/components/composed/search/GlobalSearchTextField.svelte.d.ts +43 -39
  48. package/dist/components/composed/search/MobileFilterEditor.svelte +135 -93
  49. package/dist/components/composed/search/MobileFilterEditor.svelte.d.ts +39 -35
  50. package/dist/components/composed/search/SearchBar.svelte +28 -5
  51. package/dist/components/composed/search/SearchBar.svelte.d.ts +34 -30
  52. package/dist/components/composed/search/SearchResults.svelte +42 -7
  53. package/dist/components/composed/search/SearchResults.svelte.d.ts +40 -36
  54. package/dist/components/composed/shop/ProductCard.svelte +18 -4
  55. package/dist/components/composed/shop/ProductCard.svelte.d.ts +32 -28
  56. package/dist/components/composed/shop/ProductsGrid.svelte +22 -2
  57. package/dist/components/composed/shop/ProductsGrid.svelte.d.ts +44 -40
  58. package/dist/components/layouts/CollapsibleSideBarLayout.svelte +55 -29
  59. package/dist/components/layouts/CollapsibleSideBarLayout.svelte.d.ts +85 -54
  60. package/dist/components/layouts/StableDividedSideBarLayout.svelte +47 -17
  61. package/dist/components/layouts/StableDividedSideBarLayout.svelte.d.ts +50 -32
  62. package/dist/components/layouts/UnstableDividedSideBarLayout.svelte +53 -30
  63. package/dist/components/layouts/UnstableDividedSideBarLayout.svelte.d.ts +103 -63
  64. package/dist/components/simple/buttons/Button.svelte +78 -32
  65. package/dist/components/simple/buttons/Button.svelte.d.ts +47 -35
  66. package/dist/components/simple/buttons/LinkButton.svelte +54 -22
  67. package/dist/components/simple/buttons/LinkButton.svelte.d.ts +50 -33
  68. package/dist/components/simple/charts/GanymedeBarChart.svelte +172 -134
  69. package/dist/components/simple/charts/GanymedeBarChart.svelte.d.ts +50 -46
  70. package/dist/components/simple/charts/GanymedeLineChart.svelte +157 -115
  71. package/dist/components/simple/charts/GanymedeLineChart.svelte.d.ts +51 -47
  72. package/dist/components/simple/charts/GanymedePieChart.svelte +62 -39
  73. package/dist/components/simple/charts/GanymedePieChart.svelte.d.ts +37 -33
  74. package/dist/components/simple/common/Card.svelte +20 -1
  75. package/dist/components/simple/common/Card.svelte.d.ts +51 -38
  76. package/dist/components/simple/common/CollapsibleDivider.svelte +23 -11
  77. package/dist/components/simple/common/CollapsibleDivider.svelte.d.ts +29 -25
  78. package/dist/components/simple/common/Divider.svelte +8 -2
  79. package/dist/components/simple/common/Divider.svelte.d.ts +23 -19
  80. package/dist/components/simple/common/Gesture.svelte +64 -46
  81. package/dist/components/simple/common/Gesture.svelte.d.ts +21 -17
  82. package/dist/components/simple/common/InfiniteScroll.svelte +52 -29
  83. package/dist/components/simple/common/InfiniteScroll.svelte.d.ts +24 -20
  84. package/dist/components/simple/common/IntersectionObserver.svelte +45 -32
  85. package/dist/components/simple/common/IntersectionObserver.svelte.d.ts +34 -21
  86. package/dist/components/simple/common/MediaQuery.svelte +30 -21
  87. package/dist/components/simple/common/MediaQuery.svelte.d.ts +34 -30
  88. package/dist/components/simple/common/Menu.svelte +421 -298
  89. package/dist/components/simple/common/Menu.svelte.d.ts +51 -40
  90. package/dist/components/simple/common/Playground.svelte +18 -17
  91. package/dist/components/simple/common/Playground.svelte.d.ts +19 -15
  92. package/dist/components/simple/common/VerticalDraggableList.svelte +35 -16
  93. package/dist/components/simple/common/VerticalDraggableList.svelte.d.ts +33 -29
  94. package/dist/components/simple/dashboards/DashboardGridShaper.svelte +32 -26
  95. package/dist/components/simple/dashboards/DashboardGridShaper.svelte.d.ts +16 -12
  96. package/dist/components/simple/dates/Calendar.svelte +52 -28
  97. package/dist/components/simple/dates/Calendar.svelte.d.ts +45 -41
  98. package/dist/components/simple/dates/DatePicker.svelte +90 -60
  99. package/dist/components/simple/dates/DatePicker.svelte.d.ts +44 -40
  100. package/dist/components/simple/dates/MonthSelector.svelte +37 -15
  101. package/dist/components/simple/dates/MonthSelector.svelte.d.ts +35 -31
  102. package/dist/components/simple/dates/TimePicker.svelte +45 -31
  103. package/dist/components/simple/dates/TimePicker.svelte.d.ts +24 -20
  104. package/dist/components/simple/dates/TimePickerTextField.svelte +56 -35
  105. package/dist/components/simple/dates/TimePickerTextField.svelte.d.ts +28 -24
  106. package/dist/components/simple/dates/YearSelector.svelte +54 -29
  107. package/dist/components/simple/dates/YearSelector.svelte.d.ts +35 -31
  108. package/dist/components/simple/dialogs/Dialog.svelte +95 -62
  109. package/dist/components/simple/dialogs/Dialog.svelte.d.ts +43 -28
  110. package/dist/components/simple/forms/Autocomplete.svelte +201 -142
  111. package/dist/components/simple/forms/Autocomplete.svelte.d.ts +83 -79
  112. package/dist/components/simple/forms/Checkbox.svelte +40 -24
  113. package/dist/components/simple/forms/Checkbox.svelte.d.ts +26 -22
  114. package/dist/components/simple/forms/FileInput.svelte +88 -48
  115. package/dist/components/simple/forms/FileInput.svelte.d.ts +37 -33
  116. package/dist/components/simple/forms/FileInputList.svelte +62 -37
  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 -59
  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 +26 -12
  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/stores/debounce.d.ts +0 -1
  195. package/dist/stores/layouts/unstableSidebarOpened.d.ts +0 -1
  196. package/dist/stores/mediaQuery.d.ts +0 -1
  197. package/dist/stores/theme.d.ts +0 -1
  198. package/package.json +1 -1
@@ -1,325 +1,395 @@
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
139
+ }
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'
169
+ }
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
+ }
136
176
  }
137
177
  }
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;
178
+
179
+ function handleCancelFilterClick() {
180
+ open = false
181
+ mobileOpen = false
151
182
  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
- if (tmpFilters[filterName]) {
162
- tmpFilters[filterName].active = false;
163
- }
164
- if (Object.keys(filters[filterIndex]).includes("value")) {
165
- filters[filterIndex].value = void 0;
166
- if (!!tmpFilters[filterName] && Object.keys(tmpFilters[filterName]).includes("value")) {
167
- tmpFilters[filterName].value = void 0;
168
- }
169
183
  }
170
- if (Object.keys(filters[filterIndex]).includes("from")) {
171
- filters[filterIndex].from = void 0;
172
- if (!!tmpFilters[filterName] && Object.keys(tmpFilters[filterName]).includes("from")) {
173
- tmpFilters[filterName].from = 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')
174
194
  }
175
195
  }
176
- if (Object.keys(filters[filterIndex]).includes("to")) {
177
- filters[filterIndex].to = void 0;
178
- if (!!tmpFilters[filterName] && Object.keys(tmpFilters[filterName]).includes("to")) {
179
- tmpFilters[filterName].to = 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
+ if (tmpFilters[filterName]) {
204
+ tmpFilters[filterName].active = false
180
205
  }
181
- }
182
- if (Object.keys(filters[filterIndex]).includes("values")) {
183
- filters[filterIndex].values = void 0;
184
- if (!!tmpFilters[filterName] && Object.keys(tmpFilters[filterName]).includes("values")) {
185
- tmpFilters[filterName].values = void 0;
206
+ if(Object.keys(filters[filterIndex]).includes('value')) {
207
+ //@ts-ignore
208
+ filters[filterIndex].value = undefined
209
+ if(!!tmpFilters[filterName] && Object.keys(tmpFilters[filterName]).includes('value')) {
210
+ //@ts-ignore
211
+ tmpFilters[filterName].value = undefined
212
+ }
186
213
  }
187
- }
188
- singleFilterMenuOpened = false;
189
- dispatch("removeFilter", { filter: filters[filterIndex] });
190
- }
191
- let activeFiltersActivators = {};
192
- function handleActiveFilterClick(filter) {
193
- singleFilterActivator = activeFiltersActivators[filter.name];
194
- singleFilterMenuAnchor = "bottom-center";
195
- singleFilterMenuOpened = true;
196
- mobileOpen = true;
197
- selected = filter.name;
198
- filterOpened = "edit";
199
- if (filter.type === "custom") {
200
- customFilterApplyDisabled = false;
201
- }
202
- }
203
- function handleMobileBackTap() {
204
- closeFilterMenu(0);
205
- }
206
- function closeFilterMenu(delay) {
207
- setTimeout(() => {
208
- singleFilterMenuOpened = false;
209
- }, delay);
210
- }
211
- function handleDeleteIconClick(e) {
212
- let filterIndex = e.detail.index;
213
- let name = filters[filterIndex].name;
214
- handleRemoveFilter({ name });
215
- }
216
- function handleRemoveAllFilters(e) {
217
- if (!!e)
218
- e.stopPropagation();
219
- for (let i = 0; i < filters.length; i += 1) {
220
- filters[i].active = false;
221
- if (Object.keys(filters[i]).includes("value")) {
222
- filters[i].value = void 0;
214
+ if(Object.keys(filters[filterIndex]).includes('from')) {
215
+ //@ts-ignore
216
+ filters[filterIndex].from = undefined
217
+ if(!!tmpFilters[filterName] && Object.keys(tmpFilters[filterName]).includes('from')) {
218
+ //@ts-ignore
219
+ tmpFilters[filterName].from = undefined
220
+ }
223
221
  }
224
- if (Object.keys(filters[i]).includes("from")) {
225
- filters[i].from = void 0;
222
+ if(Object.keys(filters[filterIndex]).includes('to')) {
223
+ //@ts-ignore
224
+ filters[filterIndex].to = undefined
225
+ if(!!tmpFilters[filterName] && Object.keys(tmpFilters[filterName]).includes('to')) {
226
+ //@ts-ignore
227
+ tmpFilters[filterName].to = undefined
228
+ }
226
229
  }
227
- if (Object.keys(filters[i]).includes("to")) {
228
- filters[i].to = void 0;
230
+ if(Object.keys(filters[filterIndex]).includes('values')) {
231
+ //@ts-ignore
232
+ filters[filterIndex].values = undefined
233
+ if(!!tmpFilters[filterName] && Object.keys(tmpFilters[filterName]).includes('values')) {
234
+ //@ts-ignore
235
+ tmpFilters[filterName].values = undefined
236
+ }
229
237
  }
230
- if (Object.keys(filters[i]).includes("values")) {
231
- filters[i].values = void 0;
238
+ singleFilterMenuOpened = false
239
+ dispatch('removeFilter', { filter: filters[filterIndex] })
240
+ }
241
+
242
+ let activeFiltersActivators: Record<string, HTMLElement> = {}
243
+ function handleActiveFilterClick(filter: { name: string, type: 'custom' | string }) {
244
+ singleFilterActivator = activeFiltersActivators[filter.name]
245
+ singleFilterMenuAnchor = 'bottom-center'
246
+ singleFilterMenuOpened = true;
247
+ mobileOpen=true
248
+ selected = filter.name
249
+ filterOpened = 'edit'
250
+
251
+ if(filter.type === 'custom') {
252
+ customFilterApplyDisabled = false
232
253
  }
233
- singleFilterMenuOpened = false;
234
254
  }
235
- filters = filters;
236
- tmpFilters = {};
237
- customToBeInitialized = true;
238
- dispatch("removeAllFilters");
239
- }
240
- function handleMultiEditApplyClick() {
241
- open = false;
242
- mobileOpen = false;
243
- dispatch("applyFilter");
244
- }
245
- function handleMultiEditRemoveClick() {
246
- handleRemoveAllFilters();
247
- open = false;
248
- mobileOpen = false;
249
- }
250
- let selectedTmpFilter = void 0;
251
- let tmpFilters = {};
252
- function handleApplyMultiFilterClick() {
253
- for (let i = 0; i < filters.length; i += 1) {
254
- if (!!filters[i] && !!tmpFilters[filters[i].name]) {
255
- filters[i] = { ...tmpFilters[filters[i].name] };
256
- filters[i].active = filters[i].type !== "custom" ? Validator.isValid(tmpFilters[filters[i].name]) : tmpFilters[filters[i].name].active;
255
+
256
+ function handleMobileBackTap() {
257
+ closeFilterMenu(0)
258
+ }
259
+
260
+ function closeFilterMenu(delay: number) {
261
+ setTimeout(() => {
262
+ singleFilterMenuOpened = false
263
+ }, delay)
264
+ }
265
+
266
+ function handleDeleteIconClick(e: CustomEvent) {
267
+ let filterIndex = e.detail.index
268
+ let name = filters[filterIndex].name
269
+ handleRemoveFilter({name})
270
+ }
271
+
272
+ function handleRemoveAllFilters(e?: MouseEvent) {
273
+ if(!!e) e.stopPropagation()
274
+ for(let i = 0; i < filters.length; i += 1) {
275
+ filters[i].active = false
276
+ if(Object.keys(filters[i]).includes('value')) {
277
+ //@ts-ignore
278
+ filters[i].value = undefined
279
+ }
280
+ if(Object.keys(filters[i]).includes('from')) {
281
+ //@ts-ignore
282
+ filters[i].from = undefined
283
+ }
284
+ if(Object.keys(filters[i]).includes('to')) {
285
+ //@ts-ignore
286
+ filters[i].to = undefined
287
+ }
288
+ if(Object.keys(filters[i]).includes('values')) {
289
+ //@ts-ignore
290
+ filters[i].values = undefined
291
+ }
292
+ singleFilterMenuOpened = false
257
293
  }
294
+ filters = filters
295
+ tmpFilters = {}
296
+ customToBeInitialized = true
297
+ dispatch('removeAllFilters')
258
298
  }
259
- filters = filters;
260
- handleMultiEditApplyClick();
261
- }
262
- function updateMultiFilterValues(filterName, newValue, newValid, mode) {
263
- let filter = filters.find((f) => f.name === filterName);
264
- if (!filter)
265
- throw new Error("cannot find filter with name " + filterName);
266
- if (!tmpFilters[filterName])
267
- tmpFilters[filterName] = { ...filter };
268
- let tmpFilter = tmpFilters[filterName];
269
- if ("mode" in tmpFilter && !!mode) {
270
- if (tmpFilter.type == "date" && isDateMode(mode)) {
271
- tmpFilter.mode = mode;
272
- } else if (tmpFilter.type == "number" && isDateMode(mode)) {
273
- tmpFilter.mode = mode;
274
- } else if (tmpFilter.type == "string" && isStringMode(mode)) {
275
- tmpFilter.mode = mode;
276
- } else if (tmpFilter.type == "select" && isSelectMode(mode)) {
277
- tmpFilter.mode = mode;
299
+
300
+ function handleMultiEditApplyClick() {
301
+ open = false
302
+ mobileOpen = false
303
+ dispatch('applyFilter')
304
+ }
305
+
306
+ function handleMultiEditRemoveClick() {
307
+ handleRemoveAllFilters()
308
+ open = false
309
+ mobileOpen = false
310
+ }
311
+
312
+ let selectedTmpFilter: Filter | undefined = undefined
313
+
314
+ let tmpFilters: {[filterName: string]: Filter} = {}
315
+
316
+ function handleApplyMultiFilterClick() {
317
+ for(let i = 0; i < filters.length; i += 1) {
318
+ if(!!filters[i] && !!tmpFilters[filters[i].name]) {
319
+ filters[i] = {...tmpFilters[filters[i].name]}
320
+ filters[i].active = filters[i].type !== 'custom' ? Validator.isValid(tmpFilters[filters[i].name]) : tmpFilters[filters[i].name].active
321
+ }
278
322
  }
323
+ filters = filters
324
+ handleMultiEditApplyClick()
279
325
  }
280
- if (tmpFilter.type == "select") {
281
- tmpFilter.values = newValue;
282
- } else if ("mode" in tmpFilter && tmpFilter.mode == "between") {
283
- if (tmpFilter.type == "date") {
284
- if (newValue.from) {
285
- tmpFilter.from = DateTime.fromJSDate(newValue.from).setLocale("it-IT").startOf("day").toJSDate();
326
+
327
+ function updateMultiFilterValues(filterName: string, newValue: any, newValid: boolean, mode?: NumberMode | StringMode | SelectMode | DateMode) {
328
+ let filter = filters.find(f => f.name === filterName)
329
+ if(!filter) throw new Error('cannot find filter with name ' + filterName)
330
+ if(!tmpFilters[filterName]) tmpFilters[filterName] = {...filter}
331
+ let tmpFilter = tmpFilters[filterName]
332
+ if('mode' in tmpFilter && !!mode) {
333
+ if(tmpFilter.type == 'date' && isDateMode(mode)){
334
+ tmpFilter.mode = mode
335
+ }
336
+ else if(tmpFilter.type == 'number' && isDateMode(mode)){
337
+ tmpFilter.mode = mode
338
+ }
339
+ else if(tmpFilter.type == 'string' && isStringMode(mode)){
340
+ tmpFilter.mode = mode
341
+ }
342
+ else if(tmpFilter.type == 'select' && isSelectMode(mode)){
343
+ tmpFilter.mode = mode
344
+ }
345
+ }
346
+ if(tmpFilter.type == 'select') {
347
+ tmpFilter.values = newValue
348
+ } else if('mode' in tmpFilter && tmpFilter.mode == 'between') {
349
+ if(tmpFilter.type == 'date'){
350
+ if(newValue.from){
351
+ tmpFilter.from = DateTime.fromJSDate(newValue.from).setLocale('it-IT').startOf('day').toJSDate()
352
+ }
353
+ if(newValue.to){
354
+ tmpFilter.to = DateTime.fromJSDate(newValue.to).setLocale('it-IT').endOf('day').toJSDate()
355
+ }
286
356
  }
287
- if (newValue.to) {
288
- tmpFilter.to = DateTime.fromJSDate(newValue.to).setLocale("it-IT").endOf("day").toJSDate();
357
+ else {
358
+ tmpFilter.from = newValue.from
359
+ tmpFilter.to = newValue.to
289
360
  }
290
361
  } else {
291
- tmpFilter.from = newValue.from;
292
- tmpFilter.to = newValue.to;
362
+ tmpFilter.value = newValue
363
+ }
364
+ tmpFilter.active = newValid
365
+ }
366
+
367
+ let customToBeInitialized = true
368
+ $: if(customToBeInitialized && !!tmpFilters) initCustomTmpFilters()
369
+
370
+ function initCustomTmpFilters() {
371
+ let customFilters = filters.filter(f => f.type === 'custom')
372
+ for(const customFilter of customFilters) {
373
+ if(!tmpFilters[customFilter.name]) {
374
+ tmpFilters[customFilter.name] = { ...customFilter }
375
+ }
293
376
  }
294
- } else {
295
- tmpFilter.value = newValue;
296
- }
297
- tmpFilter.active = newValid;
298
- }
299
- let customToBeInitialized = true;
300
- $:
301
- if (customToBeInitialized && !!tmpFilters)
302
- initCustomTmpFilters();
303
- function initCustomTmpFilters() {
304
- let customFilters = filters.filter((f) => f.type === "custom");
305
- for (const customFilter of customFilters) {
306
- if (!tmpFilters[customFilter.name]) {
307
- tmpFilters[customFilter.name] = { ...customFilter };
377
+ customToBeInitialized = false
378
+ }
379
+
380
+ let customFilterApplyDisabled: boolean = true
381
+ function updateFunction(filterName: string, newValue: any, newValid: boolean) {
382
+ let tmpFilter = tmpFilters[filterName]
383
+ if(!!tmpFilter && tmpFilter.type == 'custom') {
384
+ tmpFilter.value = newValue
385
+ tmpFilter.active = newValid
386
+ selectedTmpFilter = {...tmpFilter}
387
+ customFilterApplyDisabled = !newValid
308
388
  }
309
389
  }
310
- customToBeInitialized = false;
311
- }
312
- let customFilterApplyDisabled = true;
313
- function updateFunction(filterName, newValue, newValid) {
314
- let tmpFilter = tmpFilters[filterName];
315
- if (!!tmpFilter && tmpFilter.type == "custom") {
316
- tmpFilter.value = newValue;
317
- tmpFilter.active = newValid;
318
- selectedTmpFilter = { ...tmpFilter };
319
- customFilterApplyDisabled = !newValid;
320
- }
321
- }
322
- let moreItemsActivator;
390
+
391
+ let moreItemsActivator: HTMLElement
392
+
323
393
  </script>
324
394
 
325
395
  <MediaQuery let:mAndDown>