@likable-hair/svelte 3.3.24 → 3.3.26

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 +2 -6
  2. package/dist/components/composed/buttons/ActivableButton.svelte.d.ts +32 -36
  3. package/dist/components/composed/common/MenuOrDrawer.svelte +5 -21
  4. package/dist/components/composed/common/MenuOrDrawer.svelte.d.ts +36 -50
  5. package/dist/components/composed/common/MenuOrDrawerOptions.svelte +13 -29
  6. package/dist/components/composed/common/MenuOrDrawerOptions.svelte.d.ts +30 -34
  7. package/dist/components/composed/common/QuickActions.svelte +20 -52
  8. package/dist/components/composed/common/QuickActions.svelte.d.ts +20 -24
  9. package/dist/components/composed/common/ToolTip.svelte +22 -31
  10. package/dist/components/composed/common/ToolTip.svelte.d.ts +43 -32
  11. package/dist/components/composed/forms/AsyncAutocomplete.svelte +23 -44
  12. package/dist/components/composed/forms/AsyncAutocomplete.svelte.d.ts +39 -44
  13. package/dist/components/composed/forms/AvatarDropdown.svelte +27 -57
  14. package/dist/components/composed/forms/AvatarDropdown.svelte.d.ts +41 -45
  15. package/dist/components/composed/forms/ConfirmOrCancelButtons.svelte +21 -43
  16. package/dist/components/composed/forms/ConfirmOrCancelButtons.svelte.d.ts +37 -41
  17. package/dist/components/composed/forms/CountriesAutocomplete.svelte +7 -16
  18. package/dist/components/composed/forms/CountriesAutocomplete.svelte.d.ts +60 -31
  19. package/dist/components/composed/forms/DatePickerTextField.svelte +114 -166
  20. package/dist/components/composed/forms/DatePickerTextField.svelte.d.ts +63 -67
  21. package/dist/components/composed/forms/Dropdown.svelte +21 -51
  22. package/dist/components/composed/forms/Dropdown.svelte.d.ts +43 -48
  23. package/dist/components/composed/forms/IconsDropdown.svelte +33 -61
  24. package/dist/components/composed/forms/IconsDropdown.svelte.d.ts +26 -30
  25. package/dist/components/composed/forms/LabelAndSelect.svelte +7 -32
  26. package/dist/components/composed/forms/LabelAndSelect.svelte.d.ts +31 -35
  27. package/dist/components/composed/forms/LabelAndTextField.svelte +5 -30
  28. package/dist/components/composed/forms/LabelAndTextField.svelte.d.ts +42 -46
  29. package/dist/components/composed/forms/ToggleList.svelte +33 -59
  30. package/dist/components/composed/forms/ToggleList.svelte.d.ts +17 -21
  31. package/dist/components/composed/forms/YearPickerTextField.svelte +74 -114
  32. package/dist/components/composed/forms/YearPickerTextField.svelte.d.ts +49 -53
  33. package/dist/components/composed/list/DynamicTable.svelte +836 -1227
  34. package/dist/components/composed/list/DynamicTable.svelte.d.ts +365 -369
  35. package/dist/components/composed/list/PaginatedTable.svelte +76 -139
  36. package/dist/components/composed/list/PaginatedTable.svelte.d.ts +108 -108
  37. package/dist/components/composed/progress/HorizontalStackedProgress.svelte +30 -58
  38. package/dist/components/composed/progress/HorizontalStackedProgress.svelte.d.ts +21 -25
  39. package/dist/components/composed/search/DynamicFilters.svelte +149 -159
  40. package/dist/components/composed/search/DynamicFilters.svelte.d.ts +27 -31
  41. package/dist/components/composed/search/FilterEditor.svelte +78 -106
  42. package/dist/components/composed/search/FilterEditor.svelte.d.ts +33 -37
  43. package/dist/components/composed/search/Filters.css +2 -1
  44. package/dist/components/composed/search/Filters.svelte +300 -362
  45. package/dist/components/composed/search/Filters.svelte.d.ts +52 -55
  46. package/dist/components/composed/search/GlobalSearchTextField.svelte +41 -79
  47. package/dist/components/composed/search/GlobalSearchTextField.svelte.d.ts +39 -43
  48. package/dist/components/composed/search/MobileFilterEditor.svelte +93 -135
  49. package/dist/components/composed/search/MobileFilterEditor.svelte.d.ts +35 -39
  50. package/dist/components/composed/search/SearchBar.svelte +5 -28
  51. package/dist/components/composed/search/SearchBar.svelte.d.ts +30 -34
  52. package/dist/components/composed/search/SearchResults.svelte +7 -42
  53. package/dist/components/composed/search/SearchResults.svelte.d.ts +36 -40
  54. package/dist/components/composed/shop/ProductCard.svelte +4 -18
  55. package/dist/components/composed/shop/ProductCard.svelte.d.ts +28 -32
  56. package/dist/components/composed/shop/ProductsGrid.svelte +2 -22
  57. package/dist/components/composed/shop/ProductsGrid.svelte.d.ts +40 -44
  58. package/dist/components/layouts/CollapsibleSideBarLayout.css +6 -9
  59. package/dist/components/layouts/CollapsibleSideBarLayout.svelte +67 -140
  60. package/dist/components/layouts/CollapsibleSideBarLayout.svelte.d.ts +54 -110
  61. package/dist/components/layouts/StableDividedSideBarLayout.svelte +17 -47
  62. package/dist/components/layouts/StableDividedSideBarLayout.svelte.d.ts +32 -50
  63. package/dist/components/layouts/UnstableDividedSideBarLayout.svelte +30 -53
  64. package/dist/components/layouts/UnstableDividedSideBarLayout.svelte.d.ts +63 -103
  65. package/dist/components/simple/buttons/Button.svelte +32 -78
  66. package/dist/components/simple/buttons/Button.svelte.d.ts +35 -47
  67. package/dist/components/simple/buttons/LinkButton.svelte +22 -54
  68. package/dist/components/simple/buttons/LinkButton.svelte.d.ts +33 -50
  69. package/dist/components/simple/charts/GanymedeBarChart.svelte +134 -172
  70. package/dist/components/simple/charts/GanymedeBarChart.svelte.d.ts +46 -50
  71. package/dist/components/simple/charts/GanymedeLineChart.svelte +115 -157
  72. package/dist/components/simple/charts/GanymedeLineChart.svelte.d.ts +47 -51
  73. package/dist/components/simple/charts/GanymedePieChart.svelte +39 -62
  74. package/dist/components/simple/charts/GanymedePieChart.svelte.d.ts +33 -37
  75. package/dist/components/simple/common/Card.svelte +1 -20
  76. package/dist/components/simple/common/Card.svelte.d.ts +38 -51
  77. package/dist/components/simple/common/CollapsibleDivider.svelte +11 -23
  78. package/dist/components/simple/common/CollapsibleDivider.svelte.d.ts +25 -29
  79. package/dist/components/simple/common/Divider.svelte +2 -8
  80. package/dist/components/simple/common/Divider.svelte.d.ts +19 -23
  81. package/dist/components/simple/common/Gesture.svelte +46 -64
  82. package/dist/components/simple/common/Gesture.svelte.d.ts +17 -21
  83. package/dist/components/simple/common/InfiniteScroll.svelte +29 -52
  84. package/dist/components/simple/common/InfiniteScroll.svelte.d.ts +20 -24
  85. package/dist/components/simple/common/IntersectionObserver.svelte +32 -45
  86. package/dist/components/simple/common/IntersectionObserver.svelte.d.ts +21 -34
  87. package/dist/components/simple/common/MediaQuery.svelte +21 -30
  88. package/dist/components/simple/common/MediaQuery.svelte.d.ts +30 -34
  89. package/dist/components/simple/common/Menu.svelte +201 -290
  90. package/dist/components/simple/common/Menu.svelte.d.ts +40 -51
  91. package/dist/components/simple/common/Playground.svelte +17 -18
  92. package/dist/components/simple/common/Playground.svelte.d.ts +15 -19
  93. package/dist/components/simple/common/VerticalDraggableList.svelte +16 -35
  94. package/dist/components/simple/common/VerticalDraggableList.svelte.d.ts +29 -33
  95. package/dist/components/simple/common/materialDesign.css +1 -1
  96. package/dist/components/simple/dashboards/DashboardGridShaper.svelte +26 -32
  97. package/dist/components/simple/dashboards/DashboardGridShaper.svelte.d.ts +12 -16
  98. package/dist/components/simple/dates/Calendar.svelte +28 -52
  99. package/dist/components/simple/dates/Calendar.svelte.d.ts +41 -45
  100. package/dist/components/simple/dates/DatePicker.svelte +60 -90
  101. package/dist/components/simple/dates/DatePicker.svelte.d.ts +40 -44
  102. package/dist/components/simple/dates/MonthSelector.svelte +15 -37
  103. package/dist/components/simple/dates/MonthSelector.svelte.d.ts +31 -35
  104. package/dist/components/simple/dates/TimePicker.svelte +31 -45
  105. package/dist/components/simple/dates/TimePicker.svelte.d.ts +20 -24
  106. package/dist/components/simple/dates/TimePickerTextField.svelte +35 -56
  107. package/dist/components/simple/dates/TimePickerTextField.svelte.d.ts +24 -28
  108. package/dist/components/simple/dates/YearSelector.svelte +29 -54
  109. package/dist/components/simple/dates/YearSelector.svelte.d.ts +31 -35
  110. package/dist/components/simple/dialogs/Dialog.svelte +62 -92
  111. package/dist/components/simple/dialogs/Dialog.svelte.d.ts +28 -42
  112. package/dist/components/simple/forms/Autocomplete.svelte +142 -201
  113. package/dist/components/simple/forms/Autocomplete.svelte.d.ts +79 -83
  114. package/dist/components/simple/forms/Checkbox.svelte +27 -41
  115. package/dist/components/simple/forms/Checkbox.svelte.d.ts +21 -25
  116. package/dist/components/simple/forms/FileInput.svelte +48 -88
  117. package/dist/components/simple/forms/FileInput.svelte.d.ts +33 -37
  118. package/dist/components/simple/forms/FileInputList.svelte +242 -110
  119. package/dist/components/simple/forms/FileInputList.svelte.d.ts +36 -43
  120. package/dist/components/simple/forms/RadioButton.svelte +3 -11
  121. package/dist/components/simple/forms/RadioButton.svelte.d.ts +27 -31
  122. package/dist/components/simple/forms/Select.svelte +3 -16
  123. package/dist/components/simple/forms/Select.svelte.d.ts +20 -24
  124. package/dist/components/simple/forms/SimpleTextField.svelte +6 -53
  125. package/dist/components/simple/forms/SimpleTextField.svelte.d.ts +60 -64
  126. package/dist/components/simple/forms/Switch.svelte +16 -30
  127. package/dist/components/simple/forms/Switch.svelte.d.ts +21 -25
  128. package/dist/components/simple/forms/Textarea.svelte +2 -27
  129. package/dist/components/simple/forms/Textarea.svelte.d.ts +37 -41
  130. package/dist/components/simple/forms/Textfield.svelte +18 -56
  131. package/dist/components/simple/forms/Textfield.svelte.d.ts +51 -55
  132. package/dist/components/simple/forms/TreeEditor.svelte +95 -141
  133. package/dist/components/simple/forms/TreeEditor.svelte.d.ts +38 -42
  134. package/dist/components/simple/forms/TreeEditorItem.svelte +42 -77
  135. package/dist/components/simple/forms/TreeEditorItem.svelte.d.ts +50 -54
  136. package/dist/components/simple/forms/VerticalSwitch.svelte +1 -11
  137. package/dist/components/simple/forms/VerticalSwitch.svelte.d.ts +28 -32
  138. package/dist/components/simple/forms/VerticalTextSwitch.svelte +3 -15
  139. package/dist/components/simple/forms/VerticalTextSwitch.svelte.d.ts +26 -30
  140. package/dist/components/simple/lists/ColorInvertedSelector.svelte +23 -53
  141. package/dist/components/simple/lists/ColorInvertedSelector.svelte.d.ts +42 -46
  142. package/dist/components/simple/lists/HierarchyMenu.svelte +19 -38
  143. package/dist/components/simple/lists/HierarchyMenu.svelte.d.ts +30 -34
  144. package/dist/components/simple/lists/Paginator.svelte +41 -50
  145. package/dist/components/simple/lists/Paginator.svelte.d.ts +19 -23
  146. package/dist/components/simple/lists/SelectableMenuList.svelte +15 -43
  147. package/dist/components/simple/lists/SelectableMenuList.svelte.d.ts +20 -24
  148. package/dist/components/simple/lists/SelectableVerticalList.svelte +57 -99
  149. package/dist/components/simple/lists/SelectableVerticalList.svelte.d.ts +47 -51
  150. package/dist/components/simple/lists/SidebarMenuList.svelte +71 -116
  151. package/dist/components/simple/lists/SidebarMenuList.svelte.d.ts +22 -26
  152. package/dist/components/simple/lists/SimpleTable.svelte +154 -264
  153. package/dist/components/simple/lists/SimpleTable.svelte.d.ts +66 -70
  154. package/dist/components/simple/loaders/CircularLoader.svelte +5 -16
  155. package/dist/components/simple/loaders/CircularLoader.svelte.d.ts +15 -19
  156. package/dist/components/simple/loaders/Skeleton.svelte +2 -3
  157. package/dist/components/simple/loaders/Skeleton.svelte.d.ts +12 -16
  158. package/dist/components/simple/media/AttachmentDownloader.svelte +3 -17
  159. package/dist/components/simple/media/AttachmentDownloader.svelte.d.ts +28 -32
  160. package/dist/components/simple/media/Avatar.svelte +12 -18
  161. package/dist/components/simple/media/Avatar.svelte.d.ts +20 -31
  162. package/dist/components/simple/media/Carousel.svelte +11 -29
  163. package/dist/components/simple/media/Carousel.svelte.d.ts +24 -28
  164. package/dist/components/simple/media/DescriptiveAvatar.svelte +4 -12
  165. package/dist/components/simple/media/DescriptiveAvatar.svelte.d.ts +28 -44
  166. package/dist/components/simple/media/FlagIcon.svelte +5 -8
  167. package/dist/components/simple/media/FlagIcon.svelte.d.ts +15 -19
  168. package/dist/components/simple/media/Gallery.svelte +29 -49
  169. package/dist/components/simple/media/Gallery.svelte.d.ts +23 -27
  170. package/dist/components/simple/media/Icon.svelte +4 -9
  171. package/dist/components/simple/media/Icon.svelte.d.ts +20 -24
  172. package/dist/components/simple/media/Image.svelte +20 -42
  173. package/dist/components/simple/media/Image.svelte.d.ts +33 -44
  174. package/dist/components/simple/media/ImageGrid.svelte +12 -37
  175. package/dist/components/simple/media/ImageGrid.svelte.d.ts +28 -32
  176. package/dist/components/simple/navigation/Breadcrumb.svelte +10 -28
  177. package/dist/components/simple/navigation/Breadcrumb.svelte.d.ts +22 -26
  178. package/dist/components/simple/navigation/Chip.svelte +23 -44
  179. package/dist/components/simple/navigation/Chip.svelte.d.ts +31 -42
  180. package/dist/components/simple/navigation/Drawer.svelte +65 -107
  181. package/dist/components/simple/navigation/Drawer.svelte.d.ts +37 -50
  182. package/dist/components/simple/navigation/HeaderMenu.svelte +23 -40
  183. package/dist/components/simple/navigation/HeaderMenu.svelte.d.ts +35 -39
  184. package/dist/components/simple/navigation/Navigator.svelte +8 -30
  185. package/dist/components/simple/navigation/Navigator.svelte.d.ts +24 -28
  186. package/dist/components/simple/navigation/TabSwitcher.svelte +47 -83
  187. package/dist/components/simple/navigation/TabSwitcher.svelte.d.ts +34 -38
  188. package/dist/components/simple/notifiers/AlertBanner.svelte +15 -43
  189. package/dist/components/simple/notifiers/AlertBanner.svelte.d.ts +37 -41
  190. package/dist/components/simple/progress/ProgressBar.svelte +13 -20
  191. package/dist/components/simple/progress/ProgressBar.svelte.d.ts +17 -21
  192. package/dist/components/simple/timeline/SimpleTimeLine.svelte +5 -19
  193. package/dist/components/simple/timeline/SimpleTimeLine.svelte.d.ts +35 -39
  194. package/dist/components/simple/typography/Code.svelte +12 -27
  195. package/dist/components/simple/typography/Code.svelte.d.ts +24 -28
  196. package/dist/stores/debounce.d.ts +1 -0
  197. package/dist/stores/layouts/unstableSidebarOpened.d.ts +1 -0
  198. package/dist/stores/mediaQuery.d.ts +1 -0
  199. package/dist/stores/theme.d.ts +1 -0
  200. package/package.json +1 -1
@@ -1,1193 +1,798 @@
1
- <script lang="ts">
2
- import {
3
- Checkbox,
4
- Chip,
5
- Converter,
6
- CountriesAutocomplete,
7
- DatePickerTextField,
8
- Drawer,
9
- FilterBuilder,
10
- FlagIcon,
11
- Icon,
12
- MediaQuery,
13
- Menu,
14
- ToolTip,
15
- type PaginatedTable
16
- } from "../../..";
17
- import { DateTime } from "luxon";
18
- import { createEventDispatcher, onMount, tick, type ComponentProps } from "svelte";
19
- import { quintOut } from "svelte/easing";
20
- import { crossfade, fade } from "svelte/transition";
21
- import Filters from "../search/Filters.svelte";
22
- import ConfirmOrCancelButtons from "../forms/ConfirmOrCancelButtons.svelte";
23
- import { flip } from "svelte/animate";
24
- import InfiniteScroll from "../../simple/common/InfiniteScroll.svelte";
25
- import Divider from "../../simple/common/Divider.svelte";
26
- import VerticalDraggableList from "../../simple/common/VerticalDraggableList.svelte";
27
- import Button from "../../simple/buttons/Button.svelte";
28
- import SimpleTextField from "../../simple/forms/SimpleTextField.svelte";
29
- import Autocomplete from "../../simple/forms/Autocomplete.svelte";
30
- import LabelAndSelect from "../forms/LabelAndSelect.svelte";
31
- import LabelAndTextField from "../forms/LabelAndTextField.svelte";
32
- import DynamicFilters from "../search/DynamicFilters.svelte";
33
- import type { DateMode, Filter, NumberMode, SelectMode, StringMode } from "../../../utils/filters/filters";
34
- import QuickActions, { type Action } from "../common/QuickActions.svelte";
35
- import './DynamicTable.css'
36
- import type { QuickFilter } from "../../../utils/filters/quickFilters";
37
- import Switch from "../../simple/forms/Switch.svelte";
38
- import CircularLoader from "../../simple/loaders/CircularLoader.svelte";
39
-
40
- onMount(() => {
41
- updateHeaderHeight();
42
- window.addEventListener('resize', updateHeaderHeight);
43
- tableContainer.addEventListener("scroll", setReachedBottomOrTop);
44
-
45
- hideScrollbar = tableContainer.scrollHeight > tableContainer.clientHeight
46
-
47
- for(const head of [...headers, { value: 'non-resizable', minWidth: DEFAULT_MIN_WIDTH_PX + 'px', maxWidth: DEFAULT_MAX_WIDTH_PX + 'px' }, { value: 'customize-headers', minWidth: DEFAULT_MIN_WIDTH_PX + 'px', maxWidth: DEFAULT_MAX_WIDTH_PX + 'px' }]) {
48
- let th = headersHTML[head.value]
49
- if(!!th) {
50
- resizeHeader(th, head)
51
- }
52
- }
53
-
54
- tableHTML.classList.add('dynamic-resizable')
55
-
56
- resizeObserver = new ResizeObserver(() => {
57
- updateRemainingWidth();
58
- updateHeaderHeight();
59
- });
60
- resizeObserver.observe(tableContainer);
61
-
62
- return () => {
63
- window.removeEventListener('resize', updateHeaderHeight);
64
- tableContainer.removeEventListener("scroll", setReachedBottomOrTop);
65
- resizeObserver?.disconnect();
66
- }
67
- });
68
-
69
- function updateHeaderHeight() {
70
- if (mainHeader) {
71
- const headerHeight = mainHeader.getBoundingClientRect().height;
72
- document.documentElement.style.setProperty('--main-header-height', headerHeight + 'px');
1
+ <script>import {
2
+ Checkbox,
3
+ Chip,
4
+ Converter,
5
+ CountriesAutocomplete,
6
+ DatePickerTextField,
7
+ Drawer,
8
+ FilterBuilder,
9
+ FlagIcon,
10
+ Icon,
11
+ MediaQuery,
12
+ Menu,
13
+ ToolTip
14
+ } from "../../..";
15
+ import { DateTime } from "luxon";
16
+ import { createEventDispatcher, onMount, tick } from "svelte";
17
+ import { quintOut } from "svelte/easing";
18
+ import { crossfade, fade } from "svelte/transition";
19
+ import Filters from "../search/Filters.svelte";
20
+ import ConfirmOrCancelButtons from "../forms/ConfirmOrCancelButtons.svelte";
21
+ import { flip } from "svelte/animate";
22
+ import InfiniteScroll from "../../simple/common/InfiniteScroll.svelte";
23
+ import Divider from "../../simple/common/Divider.svelte";
24
+ import VerticalDraggableList from "../../simple/common/VerticalDraggableList.svelte";
25
+ import Button from "../../simple/buttons/Button.svelte";
26
+ import SimpleTextField from "../../simple/forms/SimpleTextField.svelte";
27
+ import Autocomplete from "../../simple/forms/Autocomplete.svelte";
28
+ import LabelAndSelect from "../forms/LabelAndSelect.svelte";
29
+ import LabelAndTextField from "../forms/LabelAndTextField.svelte";
30
+ import DynamicFilters from "../search/DynamicFilters.svelte";
31
+ import QuickActions, {} from "../common/QuickActions.svelte";
32
+ import "./DynamicTable.css";
33
+ import Switch from "../../simple/forms/Switch.svelte";
34
+ import CircularLoader from "../../simple/loaders/CircularLoader.svelte";
35
+ onMount(() => {
36
+ updateHeaderHeight();
37
+ window.addEventListener("resize", updateHeaderHeight);
38
+ tableContainer.addEventListener("scroll", setReachedBottomOrTop);
39
+ hideScrollbar = tableContainer.scrollHeight > tableContainer.clientHeight;
40
+ for (const head of [...headers, { value: "non-resizable", minWidth: DEFAULT_MIN_WIDTH_PX + "px", maxWidth: DEFAULT_MAX_WIDTH_PX + "px" }, { value: "customize-headers", minWidth: DEFAULT_MIN_WIDTH_PX + "px", maxWidth: DEFAULT_MAX_WIDTH_PX + "px" }]) {
41
+ let th = headersHTML[head.value];
42
+ if (!!th) {
43
+ resizeHeader(th, head);
73
44
  }
74
45
  }
75
-
76
- function setReachedBottomOrTop(){
77
- reachedBottom = tableContainer.scrollHeight - tableContainer.scrollTop === tableContainer.clientHeight
78
- reachedTop = tableContainer.scrollTop === 0
79
- hideScrollbar = tableContainer.scrollHeight > tableContainer.clientHeight
46
+ tableHTML.classList.add("dynamic-resizable");
47
+ resizeObserver = new ResizeObserver(() => {
48
+ updateRemainingWidth();
49
+ updateHeaderHeight();
50
+ });
51
+ resizeObserver.observe(tableContainer);
52
+ return () => {
53
+ window.removeEventListener("resize", updateHeaderHeight);
54
+ tableContainer.removeEventListener("scroll", setReachedBottomOrTop);
55
+ resizeObserver?.disconnect();
56
+ };
57
+ });
58
+ function updateHeaderHeight() {
59
+ if (mainHeader) {
60
+ const headerHeight = mainHeader.getBoundingClientRect().height;
61
+ document.documentElement.style.setProperty("--main-header-height", headerHeight + "px");
80
62
  }
81
-
82
- $: if(reachedBottom && rows.length < totalRows) {
63
+ }
64
+ function setReachedBottomOrTop() {
65
+ reachedBottom = tableContainer.scrollHeight - tableContainer.scrollTop === tableContainer.clientHeight;
66
+ reachedTop = tableContainer.scrollTop === 0;
67
+ hideScrollbar = tableContainer.scrollHeight > tableContainer.clientHeight;
68
+ }
69
+ $:
70
+ if (reachedBottom && rows.length < totalRows) {
83
71
  setTimeout(() => {
84
- if(reachedBottom) {
85
- handleLoadForward()
72
+ if (reachedBottom) {
73
+ handleLoadForward();
86
74
  }
87
- }, 30)
75
+ }, 30);
88
76
  }
89
-
90
- $: if(reachedTop && currentSectionNumber > 0) {
77
+ $:
78
+ if (reachedTop && currentSectionNumber > 0) {
91
79
  setTimeout(() => {
92
- if(reachedTop) {
93
- handleLoadBackward()
80
+ if (reachedTop) {
81
+ handleLoadBackward();
94
82
  }
95
- }, 30)
96
- }
97
-
98
- const [send, receive] = crossfade({
99
- duration: 500,
100
- fallback(node, params) {
101
- const style = getComputedStyle(node);
102
- const transform = style.transform === "none" ? "" : style.transform;
103
-
104
- return {
105
- duration: 500,
106
- easing: quintOut,
107
- css: (t) => `
83
+ }, 30);
84
+ }
85
+ const [send, receive] = crossfade({
86
+ duration: 500,
87
+ fallback(node, params) {
88
+ const style = getComputedStyle(node);
89
+ const transform = style.transform === "none" ? "" : style.transform;
90
+ return {
91
+ duration: 500,
92
+ easing: quintOut,
93
+ css: (t) => `
108
94
  transform: ${transform} scale(${t});
109
95
  opacity: ${t}
110
- `,
111
- };
112
- },
113
- });
114
-
115
- type Item = {
116
- [key: string]: any;
117
- disableEdit?: boolean,
118
- rowDisableBackgroundColor?: string
119
- };
120
-
121
- type Row = {
122
- item: Item;
123
- subItems: Item[];
124
- };
125
-
126
- type MenuStringType = {
127
- key: "string";
128
- };
129
-
130
- type MenuNumberType = {
131
- key: "number";
132
- params?: {
133
- min?: number;
134
- max?: number;
96
+ `
135
97
  };
98
+ }
99
+ });
100
+ let clazz = {};
101
+ export { clazz as class };
102
+ const dispatch = createEventDispatcher();
103
+ export let headers = [], headersToShowInTable = headers, subHeaders = [], customizeHeaders = false, rows = [], sortedBy = void 0, sortDirection = "asc", cellEdit = false, lang = "en", dateLocale = void 0, noItemsText = lang == "en" ? "No items to show" : "Nessun elemento da visualizzare", showSelect = false, showActions = true, selectMode = "single", selectedItems = [], unselectedItems = [], selectedAll = false, showExpand = false, loading = false, disabled = false, filters = [], searchBarColumns = void 0, searchBarVisible = false, searchBarPlaceholder = lang == "en" ? "Type to search..." : "Scrivi per cercare...", filtersVisible = false, quickFiltersVisible = false, editFilterMode = "one-edit", showActiveFilters = true, quickFilters = [], actionsForSelectedItems = [], quickActionsDisabled = false, totalRows = rows.length, searchText = void 0, renderedRowsNumber = 100, sectionRowsNumber = 20, sectionThreshold = 2, backwardThresholdPixel = 100, forwardThresholdPixel = 100, uniqueKey = "id", numberOfResultsVisible = false, endLineVisible = false, resizableColumns = false, resizedColumnSizeWithPadding = {}, dynamicFilters = true, useSelectedItemsOnly = false;
104
+ let openCellEditor = false, cellEditorActivator, cellEditorContainer, menuElementCellEditor, menuElementQuickFilters, cellEditorInfoActive, saveEditDisabled = false, searchBarInput = void 0, openQuickFilter = false, quickFilterActivator, quickFilterActive, globalBuilder = new FilterBuilder(), calendarOpened = false, calendarOpened2 = false, selectedIndexes = [], cellEditorIndexRow, cellEditorIndexHeader, cellEditorSubItem, currentSectionNumber = 0, tableBody, tableContainer, tableHTML, headersHTML = {}, userScrolling = true, reachedBottom = false, reachedTop = false, resizing = false, remainingWidth = 0, hideScrollbar = false, sortModify, mainHeader, resizeObserver, ignoreSelectAll = rows.length == totalRows && useSelectedItemsOnly;
105
+ const DEFAULT_MIN_WIDTH_PX = 100, DEFAULT_MAX_WIDTH_PX = 400;
106
+ $:
107
+ totalSections = (totalRows - renderedRowsNumber) / sectionRowsNumber;
108
+ $:
109
+ hasMoreToRender = totalSections > currentSectionNumber;
110
+ $:
111
+ totalCachedSections = (rows.length - renderedRowsNumber) / sectionRowsNumber;
112
+ $:
113
+ renderedRows = rows.slice(currentSectionNumber * sectionRowsNumber, currentSectionNumber * sectionRowsNumber + renderedRowsNumber);
114
+ let openHeaderDrawer = false, headersToSelect = !!headers ? headers.filter((h) => {
115
+ return !headersToShowInTable.find((hst) => hst.value == h.value);
116
+ }).map((h) => {
117
+ return {
118
+ id: h.value,
119
+ name: h.label
136
120
  };
137
-
138
- type MenuDateType = {
139
- key: "date";
140
- };
141
-
142
- type MenuSelectType = {
143
- key: "select";
144
- params: {
145
- options: {
146
- icon?: string;
147
- value: string | number | undefined;
148
- id?: number | undefined;
149
- text: string;
150
- }[];
151
- };
152
- };
153
-
154
- type MenuBooleanType = {
155
- key: "boolean";
156
- };
157
-
158
- type CellEditorInfoType =
159
- | MenuStringType
160
- | MenuNumberType
161
- | MenuDateType
162
- | MenuSelectType
163
- | MenuBooleanType;
164
-
165
- type CellEditorInfo = {
166
- title: string;
167
- description: string;
168
- type: CellEditorInfoType;
169
- column: string;
170
- info?: string;
171
- };
172
-
173
- type Headers = NonNullable<ComponentProps<PaginatedTable>["headers"]>;
174
- type Header = Headers[number] & {
175
- cellEditorInfo?: CellEditorInfo;
176
- info?: string;
177
- maxWidth?: string
121
+ }) : [], headersToShow = headersToShowInTable.map((h) => {
122
+ return {
123
+ id: h.value,
124
+ name: h.label
178
125
  };
179
- type HeaderType = Header["type"];
180
-
181
- let clazz: {
182
- container?: string;
183
- header?: string;
184
- row?: string;
185
- cell?: string;
186
- } = {};
187
- export { clazz as class };
188
-
189
- const dispatch = createEventDispatcher<{
190
- sort: {
191
- sortedBy: string | undefined;
192
- sortDirection: string;
193
- };
194
- rowClick: {
195
- item: Item;
196
- };
197
- cellClick: {
198
- item: Item;
199
- };
200
- saveCellEdit: {
201
- item: any;
202
- };
203
- saveHeadersToShow: {
204
- headersToShow: {
205
- id: string;
206
- name: string;
207
- }[];
208
- };
209
- filtersChange: {
210
- builder: FilterBuilder;
211
- };
212
- fetchData: {};
213
- removeFilter: {filter: Filter}
214
- removeAllFilters: {}
215
- removeCustomQuickFilter: {
216
- quickFilter: QuickFilter
217
- }
218
- applyCustomQuickFilter: {
219
- quickFilter: QuickFilter
220
- setQuickFilterValue: (quickFilter: QuickFilter, value?: any) => void
221
- }
222
- columnResize: {
223
- id: string,
224
- newWidthPx: number
225
- }
226
- }>();
227
-
228
- export let headers: Header[] = [],
229
- headersToShowInTable: Header[] = headers,
230
- subHeaders: Header[] = [],
231
- customizeHeaders: boolean = false,
232
- rows: Row[] = [],
233
- sortedBy: string | undefined = undefined,
234
- sortDirection: "asc" | "desc" = "asc",
235
- cellEdit: boolean = false,
236
- lang: "it" | "en" = "en",
237
- dateLocale: "it" | "en" | undefined = undefined,
238
- noItemsText: string = lang == 'en' ? "No items to show" : 'Nessun elemento da visualizzare',
239
- showSelect: boolean = false,
240
- showActions: boolean = true,
241
- selectMode: "single" | "multiple" = "single",
242
- selectedItems: Item[] = [],
243
- unselectedItems: Item[] = [],
244
- selectedAll: boolean = false,
245
- showExpand: boolean = false,
246
- loading: boolean = false,
247
- disabled: boolean = false,
248
- filters: ComponentProps<Filters>["filters"] = [],
249
- searchBarColumns: string[] | undefined = undefined,
250
- searchBarVisible: boolean = false,
251
- searchBarPlaceholder: string = lang == 'en' ? "Type to search..." : 'Scrivi per cercare...',
252
- filtersVisible: boolean = false,
253
- quickFiltersVisible: boolean = false,
254
- editFilterMode: "one-edit" | "multi-edit" = "one-edit",
255
- showActiveFilters: boolean = true,
256
- quickFilters: QuickFilter[] = [],
257
- actionsForSelectedItems: Action[] = [],
258
- quickActionsDisabled: boolean = false,
259
- totalRows: number = rows.length,
260
- searchText: string | undefined = undefined,
261
- renderedRowsNumber = 100,
262
- sectionRowsNumber = 20,
263
- sectionThreshold = 2,
264
- backwardThresholdPixel = 100,
265
- forwardThresholdPixel = 100,
266
- uniqueKey: keyof Item = 'id',
267
- numberOfResultsVisible: boolean = false,
268
- endLineVisible: boolean = false,
269
- resizableColumns: boolean= false,
270
- resizedColumnSizeWithPadding: { [value: string]: number } = {},
271
- dynamicFilters: boolean = true,
272
- useSelectedItemsOnly = false
273
-
274
- let openCellEditor: boolean = false,
275
- cellEditorActivator: HTMLElement | undefined,
276
- cellEditorContainer: HTMLElement | undefined,
277
- menuElementCellEditor: HTMLElement,
278
- menuElementQuickFilters: HTMLElement,
279
- cellEditorInfoActive: CellEditorInfo & {
280
- value?: any;
281
- item?: Item;
282
- },
283
- saveEditDisabled: boolean = false,
284
- searchBarInput: HTMLElement | undefined = undefined,
285
- openQuickFilter: boolean = false,
286
- quickFilterActivator: HTMLElement | undefined,
287
- quickFilterActive: QuickFilter,
288
- globalBuilder: FilterBuilder = new FilterBuilder(),
289
- calendarOpened: boolean = false,
290
- calendarOpened2: boolean = false,
291
- selectedIndexes: number[] = [],
292
- cellEditorIndexRow: number | undefined,
293
- cellEditorIndexHeader: number | undefined,
294
- cellEditorSubItem: boolean | undefined,
295
- currentSectionNumber = 0,
296
- tableBody: HTMLElement,
297
- tableContainer: HTMLElement,
298
- tableHTML: HTMLElement,
299
- headersHTML: { [value: string]: HTMLElement } = {},
300
- userScrolling = true,
301
- reachedBottom = false,
302
- reachedTop = false,
303
- resizing = false,
304
- remainingWidth = 0,
305
- hideScrollbar = false,
306
- sortModify: Header['sortModify'],
307
- mainHeader: Element,
308
- resizeObserver: ResizeObserver,
309
- ignoreSelectAll = rows.length == totalRows && useSelectedItemsOnly
310
-
311
- const DEFAULT_MIN_WIDTH_PX = 100,
312
- DEFAULT_MAX_WIDTH_PX = 400
313
-
314
- $: totalSections = (totalRows - renderedRowsNumber) / sectionRowsNumber
315
- $: hasMoreToRender = totalSections > currentSectionNumber
316
- $: totalCachedSections = (rows.length - renderedRowsNumber) / sectionRowsNumber
317
- $: renderedRows = rows.slice(currentSectionNumber * sectionRowsNumber, currentSectionNumber * sectionRowsNumber + renderedRowsNumber)
318
-
319
- let openHeaderDrawer: boolean = false,
320
- headersToSelect: {
321
- id: string;
322
- name: string;
323
- }[] = !!headers
324
- ? headers
325
- .filter((h) => {
326
- return !headersToShowInTable.find((hst) => hst.value == h.value);
327
- })
328
- .map((h) => {
329
- return {
330
- id: h.value,
331
- name: h.label,
332
- };
333
- })
334
- : [],
335
- headersToShow: {
336
- id: string;
337
- name: string;
338
- }[] = headersToShowInTable.map((h) => {
339
- return {
340
- id: h.value,
341
- name: h.label,
342
- };
343
- }),
344
- infoActivators = Array(headersToShowInTable.length)
345
-
346
- let totalBatchLength: number = 0,
347
- expandedRows: Row[] = [];
348
-
349
- function saveHeadersToShow() {
350
- dispatch("saveHeadersToShow", {
351
- headersToShow: headersToShow,
352
- });
353
- openHeaderDrawer = false;
354
- }
355
-
356
- function handleHeaderClick(header: Header) {
357
- if (header.sortable && !loading && !resizing) {
358
- if (!!sortedBy && header.value == sortedBy) {
359
- if (sortDirection == "asc") sortDirection = "desc";
360
- else if (sortDirection == "desc") {
361
- sortedBy = undefined;
362
- sortModify = undefined
363
- }
364
- } else {
365
- sortedBy = header.value;
366
- sortDirection = "asc";
367
- sortModify = header.sortModify
126
+ }), infoActivators = Array(headersToShowInTable.length);
127
+ let totalBatchLength = 0, expandedRows = [];
128
+ function saveHeadersToShow() {
129
+ dispatch("saveHeadersToShow", {
130
+ headersToShow
131
+ });
132
+ openHeaderDrawer = false;
133
+ }
134
+ function handleHeaderClick(header) {
135
+ if (header.sortable && !loading && !resizing) {
136
+ if (!!sortedBy && header.value == sortedBy) {
137
+ if (sortDirection == "asc")
138
+ sortDirection = "desc";
139
+ else if (sortDirection == "desc") {
140
+ sortedBy = void 0;
141
+ sortModify = void 0;
368
142
  }
369
-
370
- handleSearchChange(searchText);
371
-
372
- dispatch("sort", {
373
- sortedBy,
374
- sortDirection,
375
- });
143
+ } else {
144
+ sortedBy = header.value;
145
+ sortDirection = "asc";
146
+ sortModify = header.sortModify;
376
147
  }
377
- }
378
-
379
- function handleRowClick(item: { [key: string]: any }) {
380
- if (disabled || loading) return;
381
- dispatch("rowClick", {
382
- item,
148
+ handleSearchChange(searchText);
149
+ dispatch("sort", {
150
+ sortedBy,
151
+ sortDirection
383
152
  });
384
153
  }
385
-
386
- function handleCellClick(
387
- mouseEvent: MouseEvent & {
388
- currentTarget: EventTarget & HTMLTableCellElement;
389
- },
390
- item: Item,
391
- cellEditorInfo?: CellEditorInfo,
392
- value?: any,
393
- indexRow?: number,
394
- indexHeader?: number,
395
- subItem?: boolean
396
- ) {
397
- if (disabled || loading) return;
398
- if (cellEdit && cellEditorInfo && !item.disableEdit) {
399
- if (!cellEditorActivator) {
400
- let target = mouseEvent.target as unknown as HTMLElement;
401
- cellEditorActivator = target;
402
-
403
- cellEditorIndexRow = indexRow
404
- cellEditorIndexHeader = indexHeader
405
- cellEditorSubItem = subItem
406
-
407
- cellEditorInfoActive = {
408
- ...cellEditorInfo,
409
- value: value,
410
- item: item,
411
- };
412
-
413
- openCellEditor = !openCellEditor;
414
-
415
- const element = target.getBoundingClientRect();
416
- const windowHeight = window.innerHeight;
417
- const windowWidth = window.innerWidth;
418
-
419
- if (openCellEditor) {
420
- setTimeout(() => {
421
- if (windowHeight - element.bottom < 300) {
422
- cellEditorContainer!.style.bottom = `${
423
- windowHeight - element.top
424
- }px`;
425
- } else {
426
- cellEditorContainer!.style.top = `${element.bottom}px`;
427
- }
428
-
429
- if (windowWidth - element.right < 400) {
430
- cellEditorContainer!.style.right = `${
431
- windowWidth - element.left - cellEditorActivator!.clientWidth
432
- }px`;
433
- }
434
- }, 0);
435
- }
154
+ }
155
+ function handleRowClick(item) {
156
+ if (disabled || loading)
157
+ return;
158
+ dispatch("rowClick", {
159
+ item
160
+ });
161
+ }
162
+ function handleCellClick(mouseEvent, item, cellEditorInfo, value, indexRow, indexHeader, subItem) {
163
+ if (disabled || loading)
164
+ return;
165
+ if (cellEdit && cellEditorInfo && !item.disableEdit) {
166
+ if (!cellEditorActivator) {
167
+ let target = mouseEvent.target;
168
+ cellEditorActivator = target;
169
+ cellEditorIndexRow = indexRow;
170
+ cellEditorIndexHeader = indexHeader;
171
+ cellEditorSubItem = subItem;
172
+ cellEditorInfoActive = {
173
+ ...cellEditorInfo,
174
+ value,
175
+ item
176
+ };
177
+ openCellEditor = !openCellEditor;
178
+ const element = target.getBoundingClientRect();
179
+ const windowHeight = window.innerHeight;
180
+ const windowWidth = window.innerWidth;
181
+ if (openCellEditor) {
182
+ setTimeout(() => {
183
+ if (windowHeight - element.bottom < 300) {
184
+ cellEditorContainer.style.bottom = `${windowHeight - element.top}px`;
185
+ } else {
186
+ cellEditorContainer.style.top = `${element.bottom}px`;
187
+ }
188
+ if (windowWidth - element.right < 400) {
189
+ cellEditorContainer.style.right = `${windowWidth - element.left - cellEditorActivator.clientWidth}px`;
190
+ }
191
+ }, 0);
436
192
  }
437
193
  }
438
-
439
- dispatch("cellClick", {
440
- item,
441
- });
442
- }
443
-
444
- function handleSaveClick() {
445
- cellEditorIndexHeader = undefined
446
- cellEditorIndexRow = undefined
447
- cellEditorSubItem = undefined
448
-
449
- dispatch("saveCellEdit", {
450
- item: cellEditorInfoActive,
451
- });
452
-
453
- cellEditorActivator = undefined;
454
- openCellEditor = false;
455
194
  }
456
-
457
- function handleCancelClick() {
458
- cellEditorIndexHeader = undefined
459
- cellEditorIndexRow = undefined
460
- cellEditorSubItem = undefined
461
-
462
- cellEditorActivator = undefined;
463
- openCellEditor = false;
464
-
465
- quickFilterActivator = undefined;
466
- openQuickFilter = false;
467
- }
468
-
469
- function handleSelect(item: Item, shiftKeyPressed: boolean) {
470
- let index = -1
471
- if(selectedAll && !ignoreSelectAll) {
472
- index = unselectedItems.findIndex((i) => i[uniqueKey] == item[uniqueKey]);
473
- } else {
474
- index = selectedItems.findIndex((i) => i[uniqueKey] == item[uniqueKey]);
475
- }
476
- // if item is not in the selected/unselected items array, add it
477
- if (index == -1) {
478
- if (selectMode == "single") {
479
- selectedItems = [item];
480
- selectedIndexes = [rows.findIndex(r => r.item[uniqueKey] == item[uniqueKey])]
481
- } else if (selectMode == "multiple") {
482
- if(shiftKeyPressed && selectedIndexes.length > 0) {
483
- let lastSelectedIndex = selectedIndexes[selectedIndexes.length - 1],
484
- selectedIndex = rows.findIndex(r => r.item[uniqueKey] == item[uniqueKey])
485
- if(selectedIndex != -1) {
486
- if(selectedIndex < lastSelectedIndex) {
487
- let x = lastSelectedIndex
488
- lastSelectedIndex = selectedIndex - 1
489
- selectedIndex = x
490
- }
491
- for (let i = lastSelectedIndex + 1; i <= selectedIndex; i++) {
492
- if(selectedAll && !ignoreSelectAll) {
493
- if(!unselectedItems.find((unselectedItem) => unselectedItem[uniqueKey] == rows[i].item[uniqueKey])) {
494
- unselectedItems = [...unselectedItems, rows[i].item]
495
- }
496
- } else {
497
- if(!selectedItems.find((selectedItem) => selectedItem[uniqueKey] == rows[i].item[uniqueKey])) {
498
- selectedItems = [...selectedItems, rows[i].item]
499
- }
195
+ dispatch("cellClick", {
196
+ item
197
+ });
198
+ }
199
+ function handleSaveClick() {
200
+ cellEditorIndexHeader = void 0;
201
+ cellEditorIndexRow = void 0;
202
+ cellEditorSubItem = void 0;
203
+ dispatch("saveCellEdit", {
204
+ item: cellEditorInfoActive
205
+ });
206
+ cellEditorActivator = void 0;
207
+ openCellEditor = false;
208
+ }
209
+ function handleCancelClick() {
210
+ cellEditorIndexHeader = void 0;
211
+ cellEditorIndexRow = void 0;
212
+ cellEditorSubItem = void 0;
213
+ cellEditorActivator = void 0;
214
+ openCellEditor = false;
215
+ quickFilterActivator = void 0;
216
+ openQuickFilter = false;
217
+ }
218
+ function handleSelect(item, shiftKeyPressed) {
219
+ let index = -1;
220
+ if (selectedAll && !ignoreSelectAll) {
221
+ index = unselectedItems.findIndex((i) => i[uniqueKey] == item[uniqueKey]);
222
+ } else {
223
+ index = selectedItems.findIndex((i) => i[uniqueKey] == item[uniqueKey]);
224
+ }
225
+ if (index == -1) {
226
+ if (selectMode == "single") {
227
+ selectedItems = [item];
228
+ selectedIndexes = [rows.findIndex((r) => r.item[uniqueKey] == item[uniqueKey])];
229
+ } else if (selectMode == "multiple") {
230
+ if (shiftKeyPressed && selectedIndexes.length > 0) {
231
+ let lastSelectedIndex = selectedIndexes[selectedIndexes.length - 1], selectedIndex = rows.findIndex((r) => r.item[uniqueKey] == item[uniqueKey]);
232
+ if (selectedIndex != -1) {
233
+ if (selectedIndex < lastSelectedIndex) {
234
+ let x = lastSelectedIndex;
235
+ lastSelectedIndex = selectedIndex - 1;
236
+ selectedIndex = x;
237
+ }
238
+ for (let i = lastSelectedIndex + 1; i <= selectedIndex; i++) {
239
+ if (selectedAll && !ignoreSelectAll) {
240
+ if (!unselectedItems.find((unselectedItem) => unselectedItem[uniqueKey] == rows[i].item[uniqueKey])) {
241
+ unselectedItems = [...unselectedItems, rows[i].item];
242
+ }
243
+ } else {
244
+ if (!selectedItems.find((selectedItem) => selectedItem[uniqueKey] == rows[i].item[uniqueKey])) {
245
+ selectedItems = [...selectedItems, rows[i].item];
500
246
  }
501
247
  }
502
248
  }
503
249
  }
504
- else {
505
- if(selectedAll && !ignoreSelectAll) {
506
- unselectedItems = [...unselectedItems, item];
507
- } else {
508
- selectedItems = [...selectedItems, item];
509
- }
510
- selectedIndexes.push(rows.findIndex(r => r.item[uniqueKey] == item[uniqueKey]))
511
- }
512
- }
513
- } else {
514
- if(selectedAll && !ignoreSelectAll) {
515
- unselectedItems = unselectedItems.filter((i) => i[uniqueKey] != item[uniqueKey]);
516
250
  } else {
517
- selectedItems = selectedItems.filter((i) => i[uniqueKey] != item[uniqueKey]);
251
+ if (selectedAll && !ignoreSelectAll) {
252
+ unselectedItems = [...unselectedItems, item];
253
+ } else {
254
+ selectedItems = [...selectedItems, item];
255
+ }
256
+ selectedIndexes.push(rows.findIndex((r) => r.item[uniqueKey] == item[uniqueKey]));
518
257
  }
519
- selectedIndexes = selectedIndexes.filter(r => r != rows.findIndex(r => r.item[uniqueKey] == item[uniqueKey]))
520
258
  }
521
- }
522
-
523
- function handleSelectAll() {
524
- if (selectMode == "multiple") {
525
- if(!selectedAll && ignoreSelectAll) {
526
- selectedItems = rows.map(r => r.item)
527
- }
528
- else {
529
- selectedItems = []
530
- }
531
- selectedIndexes = []
532
- unselectedItems = []
533
- selectedAll = !selectedAll
259
+ } else {
260
+ if (selectedAll && !ignoreSelectAll) {
261
+ unselectedItems = unselectedItems.filter((i) => i[uniqueKey] != item[uniqueKey]);
262
+ } else {
263
+ selectedItems = selectedItems.filter((i) => i[uniqueKey] != item[uniqueKey]);
534
264
  }
265
+ selectedIndexes = selectedIndexes.filter((r) => r != rows.findIndex((r2) => r2.item[uniqueKey] == item[uniqueKey]));
535
266
  }
536
-
537
- function expandRow(row: Row) {
538
- let index = expandedRows.findIndex((r) => r.item[uniqueKey] == row.item[uniqueKey]);
539
- if (index == -1) {
540
- expandedRows = [...expandedRows, row];
267
+ }
268
+ function handleSelectAll() {
269
+ if (selectMode == "multiple") {
270
+ if (!selectedAll && ignoreSelectAll) {
271
+ selectedItems = rows.map((r) => r.item);
541
272
  } else {
542
- expandedRows = expandedRows.filter((r) => r.item[uniqueKey] != row.item[uniqueKey]);
273
+ selectedItems = [];
543
274
  }
275
+ selectedIndexes = [];
276
+ unselectedItems = [];
277
+ selectedAll = !selectedAll;
544
278
  }
545
-
546
- function formatDate(
547
- dateTime: DateTime,
548
- dateFormat: Extract<HeaderType, { key: "date" }>["params"]
549
- ): string {
550
- return dateTime.setLocale(dateFormat.locale).toFormat(dateFormat.format);
279
+ }
280
+ function expandRow(row) {
281
+ let index = expandedRows.findIndex((r) => r.item[uniqueKey] == row.item[uniqueKey]);
282
+ if (index == -1) {
283
+ expandedRows = [...expandedRows, row];
284
+ } else {
285
+ expandedRows = expandedRows.filter((r) => r.item[uniqueKey] != row.item[uniqueKey]);
551
286
  }
552
-
553
- $: {
554
- if (!showExpand) {
555
- totalBatchLength = rows.length;
556
- } else {
557
- totalBatchLength = rows.reduce(
558
- (acc, row) => acc + row.subItems.length,
559
- rows.length
560
- );
287
+ }
288
+ function formatDate(dateTime, dateFormat) {
289
+ return dateTime.setLocale(dateFormat.locale).toFormat(dateFormat.format);
290
+ }
291
+ $: {
292
+ if (!showExpand) {
293
+ totalBatchLength = rows.length;
294
+ } else {
295
+ totalBatchLength = rows.reduce(
296
+ (acc, row) => acc + row.subItems.length,
297
+ rows.length
298
+ );
299
+ }
300
+ if (!!cellEditorInfoActive && cellEditorInfoActive.type.key == "number" && (cellEditorInfoActive.type.params?.min != void 0 && cellEditorInfoActive.value < cellEditorInfoActive.type.params.min || cellEditorInfoActive.type.params?.max != void 0 && cellEditorInfoActive.value > cellEditorInfoActive.type.params.max)) {
301
+ saveEditDisabled = true;
302
+ } else {
303
+ saveEditDisabled = false;
304
+ }
305
+ }
306
+ function searchTextBuilder(searchText2) {
307
+ let builder;
308
+ let converter = new Converter();
309
+ builder = converter.createBuilder({
310
+ filters: filters || []
311
+ });
312
+ if (!!searchText2 && !!searchBarColumns && searchBarColumns.length > 0) {
313
+ builder.where((b) => {
314
+ b.where(searchBarColumns[0], "ilike", "%" + searchText2 + "%");
315
+ for (let i = 1; i < searchBarColumns.length; i += 1) {
316
+ b.orWhere(searchBarColumns[i], "ilike", "%" + searchText2 + "%");
317
+ }
318
+ });
319
+ }
320
+ return builder;
321
+ }
322
+ let syncTimer;
323
+ function handleSearchChange(searchText2) {
324
+ clearTimeout(syncTimer);
325
+ syncTimer = setTimeout(async () => {
326
+ globalBuilder = searchTextBuilder(searchText2);
327
+ for (let i = 0; i < quickFilters.length; i++) {
328
+ globalBuilder = quickFilterBuilder(globalBuilder, quickFilters[i]);
561
329
  }
562
-
563
- if (
564
- !!cellEditorInfoActive &&
565
- cellEditorInfoActive.type.key == "number" &&
566
- ((cellEditorInfoActive.type.params?.min != undefined &&
567
- cellEditorInfoActive.value < cellEditorInfoActive.type.params.min) ||
568
- (cellEditorInfoActive.type.params?.max != undefined &&
569
- cellEditorInfoActive.value > cellEditorInfoActive.type.params.max))
570
- ) {
571
- saveEditDisabled = true;
330
+ handleFiltersChange();
331
+ }, 800);
332
+ }
333
+ $:
334
+ if (searchText != void 0)
335
+ handleSearchChange(searchText);
336
+ function handleFiltersChange() {
337
+ if (!!tableContainer) {
338
+ userScrolling = false;
339
+ currentSectionNumber = 0;
340
+ tableContainer.scrollTop = 0;
341
+ setTimeout(() => userScrolling = true, 20);
342
+ }
343
+ if (!!sortedBy) {
344
+ if (sortModify) {
345
+ globalBuilder = sortModify({ builder: globalBuilder, sortDirection });
572
346
  } else {
573
- saveEditDisabled = false;
347
+ globalBuilder.orderBy(sortedBy, sortDirection || "asc");
574
348
  }
575
349
  }
576
-
577
- function searchTextBuilder(searchText?: string) {
578
- let builder: FilterBuilder;
579
-
580
- let converter = new Converter();
581
- builder = converter.createBuilder({
582
- filters: filters || [],
583
- });
584
-
585
- if (!!searchText && !!searchBarColumns && searchBarColumns.length > 0) {
586
- builder.where((b) => {
587
- b.where(searchBarColumns![0], "ilike", "%" + searchText + "%");
588
- for (let i = 1; i < searchBarColumns!.length; i += 1) {
589
- b.orWhere(searchBarColumns![i], "ilike", "%" + searchText + "%");
590
- }
591
- });
350
+ dispatch("filtersChange", {
351
+ builder: globalBuilder
352
+ });
353
+ }
354
+ function handleClearQuickFilter(quickFilter, dispatchFiltersChange = true) {
355
+ if (quickFilter.type.key == "custom") {
356
+ quickFilter.type.value = void 0;
357
+ quickFilter.type.missingValue = void 0;
358
+ if (dispatchFiltersChange) {
359
+ dispatch("removeCustomQuickFilter", { quickFilter });
360
+ }
361
+ } else if (quickFilter.type.key == "string") {
362
+ quickFilter.type.value = void 0;
363
+ quickFilter.type.missingValue = void 0;
364
+ } else if (quickFilter.type.key == "number") {
365
+ quickFilter.type.value = void 0;
366
+ quickFilter.type.missingValue = void 0;
367
+ } else if (quickFilter.type.key == "boolean") {
368
+ quickFilter.type.value = void 0;
369
+ } else if (quickFilter.type.key == "country") {
370
+ quickFilter.type.selected = void 0;
371
+ quickFilter.type.missingValue = void 0;
372
+ } else if (quickFilter.type.key == "date") {
373
+ quickFilter.type.from = void 0;
374
+ quickFilter.type.to = void 0;
375
+ } else if (quickFilter.type.key == "multi-select") {
376
+ quickFilter.type.values = [];
377
+ quickFilter.type.missingValue = false;
378
+ quickFilter.type.missingValue = void 0;
379
+ }
380
+ if (dispatchFiltersChange) {
381
+ quickFilter.active = false;
382
+ }
383
+ globalBuilder = searchTextBuilder(searchText);
384
+ for (let i = 0; i < quickFilters.length; i++) {
385
+ if (quickFilters[i].active) {
386
+ globalBuilder = quickFilterBuilder(
387
+ globalBuilder,
388
+ quickFilters[i],
389
+ false
390
+ );
592
391
  }
593
-
594
- return builder;
595
392
  }
596
-
597
- let syncTimer: NodeJS.Timeout;
598
- function handleSearchChange(searchText: string | undefined) {
599
- clearTimeout(syncTimer);
600
- syncTimer = setTimeout(async () => {
601
- globalBuilder = searchTextBuilder(searchText);
602
- for (let i = 0; i < quickFilters.length; i++) {
603
- globalBuilder = quickFilterBuilder(globalBuilder, quickFilters[i]);
604
- }
605
-
606
- handleFiltersChange();
607
- }, 800);
393
+ if (dispatchFiltersChange) {
394
+ quickFilters = quickFilters;
395
+ handleFiltersChange();
608
396
  }
609
-
610
- $: if (searchText != undefined) handleSearchChange(searchText);
611
-
612
- function handleFiltersChange() {
613
- if(!!tableContainer) {
614
- userScrolling = false
615
- currentSectionNumber = 0
616
- tableContainer.scrollTop = 0
617
- setTimeout(() => userScrolling = true, 20)
618
- }
619
-
620
- if (!!sortedBy) {
621
- if(sortModify){
622
- globalBuilder = sortModify({ builder: globalBuilder, sortDirection })
623
- }
624
- else {
625
- globalBuilder.orderBy(sortedBy, sortDirection || "asc");
397
+ return globalBuilder;
398
+ }
399
+ function handleSearchBoxKeydown(e) {
400
+ if (e.key == "Enter") {
401
+ handleFiltersChange();
402
+ }
403
+ }
404
+ function handleQuickFilterClick(mouseEvent, quickFilter) {
405
+ handleCancelClick();
406
+ setTimeout(() => {
407
+ if (quickFilter) {
408
+ if (!quickFilterActivator) {
409
+ let target = mouseEvent.target;
410
+ quickFilterActivator = target;
411
+ quickFilterActive = quickFilter;
412
+ openQuickFilter = !openQuickFilter;
626
413
  }
627
414
  }
628
-
629
- dispatch("filtersChange", {
630
- builder: globalBuilder,
631
- });
415
+ }, 300);
416
+ }
417
+ function setQuickFilterMissingValue(quickFilter) {
418
+ if (quickFilter.type.key == "custom") {
419
+ quickFilter.type.missingValue = true;
420
+ quickFilter.type.value = void 0;
421
+ } else if (quickFilter.type.key == "multi-select") {
422
+ quickFilter.type.missingValue = true;
423
+ quickFilter.type.values = [];
424
+ } else if (quickFilter.type.key == "string") {
425
+ quickFilter.type.missingValue = true;
426
+ quickFilter.type.value = void 0;
427
+ } else if (quickFilter.type.key == "country") {
428
+ quickFilter.type.missingValue = true;
429
+ quickFilter.type.selected = void 0;
430
+ } else if (quickFilter.type.key == "number") {
431
+ quickFilter.type.missingValue = true;
432
+ quickFilter.type.value = void 0;
433
+ }
434
+ handleApplyClick(quickFilter);
435
+ }
436
+ function setQuickFilterValue(quickFilter, value) {
437
+ if (quickFilter.type.key == "custom") {
438
+ quickFilter.type.value = value;
439
+ } else if (quickFilter.type.key == "boolean") {
440
+ quickFilter.type.value = value;
632
441
  }
633
-
634
- function handleClearQuickFilter(
635
- quickFilter: QuickFilter,
636
- dispatchFiltersChange: boolean = true
637
- ) {
638
- if (quickFilter.type.key == 'custom') {
639
- quickFilter.type.value = undefined;
640
- quickFilter.type.missingValue = undefined;
641
- if(dispatchFiltersChange) {
642
- dispatch('removeCustomQuickFilter', { quickFilter })
643
- }
442
+ handleApplyClick(quickFilter);
443
+ }
444
+ function handleApplyClick(quickFilter, dispatchCustomFilterClick = false) {
445
+ if (quickFilter.type.key == "custom" && dispatchCustomFilterClick) {
446
+ dispatch("applyCustomQuickFilter", { quickFilter, setQuickFilterValue });
447
+ } else {
448
+ quickFilter.active = true;
449
+ quickFilters = quickFilters;
450
+ globalBuilder = quickFilterBuilder(globalBuilder, quickFilter);
451
+ handleFiltersChange();
452
+ quickFilterActivator = void 0;
453
+ openQuickFilter = false;
454
+ }
455
+ }
456
+ function quickFilterBuilder(builder, quickFilter, clearPreaviousValue = true) {
457
+ if (quickFilter.type.key == "custom") {
458
+ let value = quickFilter.type.value, missingValue = quickFilter.type.missingValue;
459
+ if (clearPreaviousValue) {
460
+ builder = handleClearQuickFilter(quickFilter, false);
644
461
  }
645
- else if (quickFilter.type.key == "string") {
646
- quickFilter.type.value = undefined;
647
- quickFilter.type.missingValue = undefined;
648
- } else if (quickFilter.type.key == "number") {
649
- quickFilter.type.value = undefined;
650
- quickFilter.type.missingValue = undefined;
651
- } else if (quickFilter.type.key == "boolean") {
652
- quickFilter.type.value = undefined;
653
- } else if (quickFilter.type.key == "country") {
654
- quickFilter.type.selected = undefined;
655
- quickFilter.type.missingValue = undefined;
656
- } else if (quickFilter.type.key == "date") {
657
- quickFilter.type.from = undefined;
658
- quickFilter.type.to = undefined;
659
- } else if (quickFilter.type.key == "multi-select") {
660
- quickFilter.type.values = [];
661
- quickFilter.type.missingValue = false;
662
- quickFilter.type.missingValue = undefined;
462
+ quickFilter.type.value = value;
463
+ quickFilter.type.missingValue = missingValue;
464
+ builder = quickFilter.type.modify({
465
+ builder,
466
+ value: { value, missingValue }
467
+ });
468
+ } else if (quickFilter.type.key == "string") {
469
+ let value = quickFilter.type.value, missingValue = quickFilter.type.missingValue;
470
+ if (clearPreaviousValue) {
471
+ builder = handleClearQuickFilter(quickFilter, false);
663
472
  }
664
-
665
- if (dispatchFiltersChange) {
666
- quickFilter.active = false;
473
+ quickFilter.type.value = value;
474
+ quickFilter.type.missingValue = missingValue;
475
+ if (quickFilter.type.modify) {
476
+ builder = quickFilter.type.modify({
477
+ builder,
478
+ value: { value, missingValue }
479
+ });
667
480
  }
668
-
669
- globalBuilder = searchTextBuilder(searchText);
670
-
671
- for (let i = 0; i < quickFilters.length; i++) {
672
- if (quickFilters[i].active) {
673
- globalBuilder = quickFilterBuilder(
674
- globalBuilder,
675
- quickFilters[i],
676
- false
481
+ if (!!quickFilter.column) {
482
+ if (missingValue) {
483
+ builder.whereNull(quickFilter.column);
484
+ } else if (!!value) {
485
+ builder.where(
486
+ quickFilter.column,
487
+ quickFilter.type.mode ?? "equal",
488
+ value
677
489
  );
678
490
  }
679
491
  }
680
-
681
- if (dispatchFiltersChange) {
682
- quickFilters = quickFilters;
683
- handleFiltersChange();
684
- }
685
-
686
- return globalBuilder;
687
- }
688
-
689
- function handleSearchBoxKeydown(e: KeyboardEvent) {
690
- if (e.key == "Enter") {
691
- handleFiltersChange();
492
+ } else if (quickFilter.type.key == "boolean") {
493
+ let value = quickFilter.type.value;
494
+ if (clearPreaviousValue) {
495
+ builder = handleClearQuickFilter(quickFilter, false);
692
496
  }
693
- }
694
-
695
- function handleQuickFilterClick(
696
- mouseEvent: MouseEvent & {
697
- currentTarget: EventTarget & HTMLButtonElement;
698
- },
699
- quickFilter?: QuickFilter
700
- ) {
701
- handleCancelClick();
702
- setTimeout(() => {
703
- if (quickFilter) {
704
- if (!quickFilterActivator) {
705
- let target = mouseEvent.target as unknown as HTMLElement;
706
- quickFilterActivator = target;
707
- quickFilterActive = quickFilter;
708
- openQuickFilter = !openQuickFilter;
709
- }
710
- }
711
- }, 300);
712
- }
713
-
714
- function setQuickFilterMissingValue(quickFilter: QuickFilter) {
715
- if (quickFilter.type.key == 'custom') {
716
- quickFilter.type.missingValue = true;
717
- quickFilter.type.value = undefined;
497
+ quickFilter.type.value = value;
498
+ if (quickFilter.type.modify) {
499
+ builder = quickFilter.type.modify({
500
+ builder,
501
+ value
502
+ });
718
503
  }
719
- else if (quickFilter.type.key == "multi-select") {
720
- quickFilter.type.missingValue = true;
721
- quickFilter.type.values = [];
722
- } else if (quickFilter.type.key == "string") {
723
- quickFilter.type.missingValue = true;
724
- quickFilter.type.value = undefined;
725
- } else if (quickFilter.type.key == "country") {
726
- quickFilter.type.missingValue = true;
727
- quickFilter.type.selected = undefined;
728
- } else if (quickFilter.type.key == "number") {
729
- quickFilter.type.missingValue = true;
730
- quickFilter.type.value = undefined;
504
+ if (!!quickFilter.column && value != void 0) {
505
+ builder.where(quickFilter.column, value);
731
506
  }
732
-
733
- handleApplyClick(quickFilter);
734
- }
735
-
736
- function setQuickFilterValue(quickFilter: QuickFilter, value?: any) {
737
- if (quickFilter.type.key == "custom") {
738
- quickFilter.type.value = value;
739
- }
740
- else if (quickFilter.type.key == "boolean") {
741
- quickFilter.type.value = value;
742
- }
743
-
744
- handleApplyClick(quickFilter);
745
- }
746
-
747
- function handleApplyClick(quickFilter: QuickFilter, dispatchCustomFilterClick: boolean = false) {
748
- if(quickFilter.type.key == 'custom' && dispatchCustomFilterClick) {
749
- dispatch('applyCustomQuickFilter', { quickFilter, setQuickFilterValue})
750
- }
751
- else {
752
- quickFilter.active = true;
753
- quickFilters = quickFilters;
754
- globalBuilder = quickFilterBuilder(globalBuilder, quickFilter);
755
-
756
- handleFiltersChange();
757
-
758
- quickFilterActivator = undefined;
759
- openQuickFilter = false;
507
+ } else if (quickFilter.type.key == "country") {
508
+ let value = quickFilter.type.selected, missingValue = quickFilter.type.missingValue;
509
+ if (clearPreaviousValue) {
510
+ builder = handleClearQuickFilter(quickFilter, false);
760
511
  }
761
- }
762
-
763
- function quickFilterBuilder(
764
- builder: FilterBuilder,
765
- quickFilter: QuickFilter,
766
- clearPreaviousValue: boolean = true
767
- ) {
768
- if (quickFilter.type.key == 'custom') {
769
- let value = quickFilter.type.value,
770
- missingValue = quickFilter.type.missingValue;
771
- if (clearPreaviousValue) {
772
- builder = handleClearQuickFilter(quickFilter, false);
773
- }
774
- quickFilter.type.value = value;
775
- quickFilter.type.missingValue = missingValue;
776
-
512
+ quickFilter.type.selected = value;
513
+ quickFilter.type.missingValue = missingValue;
514
+ const values = value?.map((item) => item.value);
515
+ if (quickFilter.type.modify) {
777
516
  builder = quickFilter.type.modify({
778
517
  builder,
779
- value: { value, missingValue },
518
+ value: { values, missingValue }
780
519
  });
781
520
  }
782
- else if (quickFilter.type.key == "string") {
783
- let value = quickFilter.type.value,
784
- missingValue = quickFilter.type.missingValue;
785
- if (clearPreaviousValue) {
786
- builder = handleClearQuickFilter(quickFilter, false);
521
+ if (!!quickFilter.column) {
522
+ if (missingValue) {
523
+ builder.whereNull(quickFilter.column);
524
+ } else if (!!values && values.length > 0) {
525
+ builder.whereIn(quickFilter.column, values);
787
526
  }
788
- quickFilter.type.value = value;
789
- quickFilter.type.missingValue = missingValue;
790
-
791
- if (quickFilter.type.modify) {
792
- builder = quickFilter.type.modify({
793
- builder,
794
- value: { value, missingValue },
795
- });
796
- }
797
-
798
- if (!!quickFilter.column) {
799
- if (missingValue) {
800
- builder.whereNull(quickFilter.column);
801
- } else if (!!value) {
802
- builder.where(
803
- quickFilter.column,
804
- quickFilter.type.mode ?? "equal",
805
- value
806
- );
807
- }
527
+ }
528
+ } else if (quickFilter.type.key == "date") {
529
+ let from = quickFilter.type.from, to = quickFilter.type.to;
530
+ if (clearPreaviousValue) {
531
+ builder = handleClearQuickFilter(quickFilter, false);
532
+ }
533
+ quickFilter.type.from = from;
534
+ quickFilter.type.to = to;
535
+ if (quickFilter.type.modify) {
536
+ builder = quickFilter.type.modify({
537
+ builder,
538
+ value: { from, to }
539
+ });
540
+ } else if (!!quickFilter.column) {
541
+ if (!!from) {
542
+ builder.where(
543
+ quickFilter.column,
544
+ ">=",
545
+ DateTime.fromJSDate(from).setLocale("it-IT").startOf("day").toString()
546
+ );
808
547
  }
809
- } else if (quickFilter.type.key == "boolean") {
810
- let value = quickFilter.type.value;
811
- if (clearPreaviousValue) {
812
- builder = handleClearQuickFilter(quickFilter, false);
548
+ if (!!to) {
549
+ builder.where(
550
+ quickFilter.column,
551
+ "<=",
552
+ DateTime.fromJSDate(to).setLocale("it-IT").endOf("day").toString()
553
+ );
813
554
  }
814
- quickFilter.type.value = value;
815
-
816
- if (quickFilter.type.modify) {
817
- builder = quickFilter.type.modify({
818
- builder,
819
- value,
820
- });
555
+ }
556
+ } else if (quickFilter.type.key == "multi-select") {
557
+ let value = quickFilter.type.values, missingValue = quickFilter.type.missingValue;
558
+ if (clearPreaviousValue) {
559
+ builder = handleClearQuickFilter(quickFilter, false);
560
+ }
561
+ quickFilter.type.values = value;
562
+ quickFilter.type.missingValue = missingValue;
563
+ const values = value.map((item) => item.value);
564
+ if (quickFilter.type.modify) {
565
+ builder = quickFilter.type.modify({
566
+ builder,
567
+ value: { values, missingValue }
568
+ });
569
+ } else if (quickFilter.column) {
570
+ if (missingValue) {
571
+ builder.whereNull(quickFilter.column);
572
+ } else if (values.length > 0) {
573
+ builder.whereIn(quickFilter.column, values);
821
574
  }
822
-
823
- if (!!quickFilter.column && value != undefined) {
575
+ }
576
+ } else if (quickFilter.type.key == "number") {
577
+ let value = quickFilter.type.value, missingValue = quickFilter.type.missingValue;
578
+ if (clearPreaviousValue) {
579
+ builder = handleClearQuickFilter(quickFilter, false);
580
+ }
581
+ quickFilter.type.value = value;
582
+ quickFilter.type.missingValue = missingValue;
583
+ if (quickFilter.type.modify) {
584
+ builder = quickFilter.type.modify({
585
+ builder,
586
+ value: { value, missingValue }
587
+ });
588
+ }
589
+ if (quickFilter.column) {
590
+ if (missingValue) {
591
+ builder.whereNull(quickFilter.column);
592
+ } else if (!!value) {
824
593
  builder.where(quickFilter.column, value);
825
594
  }
826
- } else if (quickFilter.type.key == "country") {
827
- let value = quickFilter.type.selected,
828
- missingValue = quickFilter.type.missingValue;
829
- if (clearPreaviousValue) {
830
- builder = handleClearQuickFilter(quickFilter, false);
831
- }
832
- quickFilter.type.selected = value;
833
- quickFilter.type.missingValue = missingValue;
834
-
835
- const values = value?.map((item) => item.value);
836
- if (quickFilter.type.modify) {
837
- builder = quickFilter.type.modify({
838
- builder,
839
- value: { values, missingValue },
840
- });
841
- }
842
-
843
- if (!!quickFilter.column) {
844
- if (missingValue) {
845
- builder.whereNull(quickFilter.column);
846
- } else if (!!values && values.length > 0) {
847
- builder.whereIn(quickFilter.column, values);
848
- }
849
- }
850
- } else if (quickFilter.type.key == "date") {
851
- let from = quickFilter.type.from,
852
- to = quickFilter.type.to;
853
- if (clearPreaviousValue) {
854
- builder = handleClearQuickFilter(quickFilter, false);
855
- }
856
- quickFilter.type.from = from;
857
- quickFilter.type.to = to;
858
-
859
- if (quickFilter.type.modify) {
860
- builder = quickFilter.type.modify({
861
- builder,
862
- value: { from, to },
863
- });
864
- } else if (!!quickFilter.column) {
865
- if (!!from) {
866
- builder.where(
867
- quickFilter.column,
868
- ">=",
869
- DateTime.fromJSDate(from).setLocale('it-IT').startOf('day').toString()
870
- );
871
- }
872
- if (!!to) {
873
- builder.where(
874
- quickFilter.column,
875
- "<=",
876
- DateTime.fromJSDate(to).setLocale('it-IT').endOf('day').toString() );
877
- }
878
- }
879
- } else if (quickFilter.type.key == "multi-select") {
880
- let value = quickFilter.type.values,
881
- missingValue = quickFilter.type.missingValue;
882
- if (clearPreaviousValue) {
883
- builder = handleClearQuickFilter(quickFilter, false);
884
- }
885
- quickFilter.type.values = value;
886
- quickFilter.type.missingValue = missingValue;
887
-
888
- const values = value.map(item => item.value);
889
-
890
- if (quickFilter.type.modify) {
891
- builder = quickFilter.type.modify({
892
- builder,
893
- value: { values: values, missingValue },
894
- });
895
- } else if (quickFilter.column) {
896
- if (missingValue) {
897
- builder.whereNull(quickFilter.column);
898
- } else if (values.length > 0) {
899
- builder.whereIn(quickFilter.column, values);
900
- }
901
- }
902
- } else if (quickFilter.type.key == "number") {
903
- let value = quickFilter.type.value,
904
- missingValue = quickFilter.type.missingValue;
905
- if (clearPreaviousValue) {
906
- builder = handleClearQuickFilter(quickFilter, false);
907
- }
908
- quickFilter.type.value = value;
909
- quickFilter.type.missingValue = missingValue;
910
-
911
- if (quickFilter.type.modify) {
912
- builder = quickFilter.type.modify({
913
- builder,
914
- value: { value, missingValue },
915
- });
916
- }
917
-
918
- if (quickFilter.column) {
919
- if (missingValue) {
920
- builder.whereNull(quickFilter.column);
921
- } else if (!!value) {
922
- builder.where(quickFilter.column, value);
923
- }
924
- }
925
595
  }
926
-
927
- return builder;
928
596
  }
929
-
930
- function updateFilterValues(filter: Filter, updateMultiFilterValues: (filterName: string, newValue: any, newValid: boolean, newMode?: NumberMode | StringMode | SelectMode | DateMode) => void) {
931
- let newValue: any = {},
932
- newValid: boolean = false,
933
- newMode = filter.type == 'date' ||
934
- filter.type == 'number' ||
935
- filter.type == 'select' ||
936
- filter.type == 'string' ?
937
- filter.mode :
938
- undefined
939
- if(filter.type == 'select') {
940
- newValue = filter.values
941
- if(newValue.length > 0) {
942
- newValid = true
943
- }
944
- } else if('mode' in filter && filter.mode == 'between') {
945
- newValue.to = filter.to
946
- newValue.from = filter.from
947
- if(!!newValue.from || !!newValue.to) {
948
- newValid = true
949
- }
950
- } else {
951
- newValue = filter.value
952
- if(!!newValue) {
953
- newValid = true
954
- }
597
+ return builder;
598
+ }
599
+ function updateFilterValues(filter, updateMultiFilterValues) {
600
+ let newValue = {}, newValid = false, newMode = filter.type == "date" || filter.type == "number" || filter.type == "select" || filter.type == "string" ? filter.mode : void 0;
601
+ if (filter.type == "select") {
602
+ newValue = filter.values;
603
+ if (newValue.length > 0) {
604
+ newValid = true;
955
605
  }
956
- updateMultiFilterValues(filter.name, newValue, newValid, newMode)
957
- }
958
-
959
- function handleRemoveAllFilters() {
960
- dispatch('removeAllFilters', {})
961
- handleSearchChange(searchText);
962
- }
963
-
964
- function handleRemoveFilter(filter: Filter) {
965
- dispatch('removeFilter', { filter})
966
- handleSearchChange(searchText);
967
- }
968
-
969
- async function handleLoadForward() {
970
- if(renderedRows.length >= renderedRowsNumber) {
971
- userScrolling = false
972
-
973
- const anchorIndex = renderedRowsNumber - 1
974
- const anchorUniqueKey = renderedRows[anchorIndex].item[uniqueKey]
975
- const anchorElement = findAnchorElement(anchorUniqueKey)
976
- const anchorOffsetBefore = anchorElement?.getBoundingClientRect().top || 0
977
-
978
- let removedRowCount = 0
979
-
980
- for (let i = 0; removedRowCount < sectionRowsNumber; i++) {
981
- let row = tableBody.children.item(i)
982
- removedRowCount++
983
-
984
- const rowKey = row?.getAttribute("data-key")
985
- const isExpanded = expandedRows.some(r => r.item[uniqueKey] == rowKey)
986
-
987
- if (isExpanded) {
988
- i++
989
- }
990
- }
991
-
992
- currentSectionNumber = currentSectionNumber + 1
993
-
994
- await tick()
995
- const anchorElementAfter = findAnchorElement(anchorUniqueKey)
996
- const anchorOffsetAfter = anchorElementAfter?.getBoundingClientRect().top || 0
997
- const offsetDiff = anchorOffsetAfter - anchorOffsetBefore
998
- tableContainer.scrollTop += offsetDiff
999
-
1000
- userScrolling = true
606
+ } else if ("mode" in filter && filter.mode == "between") {
607
+ newValue.to = filter.to;
608
+ newValue.from = filter.from;
609
+ if (!!newValue.from || !!newValue.to) {
610
+ newValid = true;
1001
611
  }
1002
-
1003
- if(totalCachedSections - sectionThreshold <= currentSectionNumber
1004
- && !loading
1005
- && totalRows > rows.length
1006
- ) {
1007
- dispatch("fetchData", {});
612
+ } else {
613
+ newValue = filter.value;
614
+ if (!!newValue) {
615
+ newValid = true;
1008
616
  }
1009
617
  }
1010
-
1011
- async function handleLoadBackward() {
1012
- if(currentSectionNumber > 0) {
1013
- userScrolling = false
1014
-
1015
- const anchorIndex = 0
1016
- const anchorUniqueKey = renderedRows[anchorIndex].item[uniqueKey]
1017
- const anchorElement = findAnchorElement(anchorUniqueKey)
1018
- const anchorOffsetBefore = anchorElement?.getBoundingClientRect().top || 0
1019
-
1020
- let removedRowCount = 0
1021
-
1022
- for (let i = renderedRows.length - 1; removedRowCount < sectionRowsNumber; i--) {
1023
- let row = tableBody.children.item(i)
1024
- removedRowCount++
1025
-
1026
- const rowKey = row?.getAttribute("data-key")
1027
- const isExpanded = expandedRows.some(r => r.item[uniqueKey] == rowKey)
1028
-
1029
- if (isExpanded) {
1030
- i--
1031
- }
618
+ updateMultiFilterValues(filter.name, newValue, newValid, newMode);
619
+ }
620
+ function handleRemoveAllFilters() {
621
+ dispatch("removeAllFilters", {});
622
+ handleSearchChange(searchText);
623
+ }
624
+ function handleRemoveFilter(filter) {
625
+ dispatch("removeFilter", { filter });
626
+ handleSearchChange(searchText);
627
+ }
628
+ async function handleLoadForward() {
629
+ if (renderedRows.length >= renderedRowsNumber) {
630
+ userScrolling = false;
631
+ const anchorIndex = renderedRowsNumber - 1;
632
+ const anchorUniqueKey = renderedRows[anchorIndex].item[uniqueKey];
633
+ const anchorElement = findAnchorElement(anchorUniqueKey);
634
+ const anchorOffsetBefore = anchorElement?.getBoundingClientRect().top || 0;
635
+ let removedRowCount = 0;
636
+ for (let i = 0; removedRowCount < sectionRowsNumber; i++) {
637
+ let row = tableBody.children.item(i);
638
+ removedRowCount++;
639
+ const rowKey = row?.getAttribute("data-key");
640
+ const isExpanded = expandedRows.some((r) => r.item[uniqueKey] == rowKey);
641
+ if (isExpanded) {
642
+ i++;
1032
643
  }
1033
-
1034
- currentSectionNumber = currentSectionNumber - 1
1035
-
1036
- await tick()
1037
- const anchorElementAfter = findAnchorElement(anchorUniqueKey)
1038
- const anchorOffsetAfter = anchorElementAfter?.getBoundingClientRect().top || 0
1039
- const offsetDiff = anchorOffsetAfter - anchorOffsetBefore
1040
- tableContainer.scrollTop += offsetDiff
1041
-
1042
- userScrolling = true
1043
644
  }
645
+ currentSectionNumber = currentSectionNumber + 1;
646
+ await tick();
647
+ const anchorElementAfter = findAnchorElement(anchorUniqueKey);
648
+ const anchorOffsetAfter = anchorElementAfter?.getBoundingClientRect().top || 0;
649
+ const offsetDiff = anchorOffsetAfter - anchorOffsetBefore;
650
+ tableContainer.scrollTop += offsetDiff;
651
+ userScrolling = true;
1044
652
  }
1045
-
1046
- function findAnchorElement(key: keyof Item) {
1047
- for (let i = 0; i < tableBody.children.length; i++) {
1048
- const child = tableBody.children.item(i)
1049
- if (child?.getAttribute("data-key") == key) {
1050
- return child
653
+ if (totalCachedSections - sectionThreshold <= currentSectionNumber && !loading && totalRows > rows.length) {
654
+ dispatch("fetchData", {});
655
+ }
656
+ }
657
+ async function handleLoadBackward() {
658
+ if (currentSectionNumber > 0) {
659
+ userScrolling = false;
660
+ const anchorIndex = 0;
661
+ const anchorUniqueKey = renderedRows[anchorIndex].item[uniqueKey];
662
+ const anchorElement = findAnchorElement(anchorUniqueKey);
663
+ const anchorOffsetBefore = anchorElement?.getBoundingClientRect().top || 0;
664
+ let removedRowCount = 0;
665
+ for (let i = renderedRows.length - 1; removedRowCount < sectionRowsNumber; i--) {
666
+ let row = tableBody.children.item(i);
667
+ removedRowCount++;
668
+ const rowKey = row?.getAttribute("data-key");
669
+ const isExpanded = expandedRows.some((r) => r.item[uniqueKey] == rowKey);
670
+ if (isExpanded) {
671
+ i--;
1051
672
  }
1052
673
  }
1053
- return undefined
674
+ currentSectionNumber = currentSectionNumber - 1;
675
+ await tick();
676
+ const anchorElementAfter = findAnchorElement(anchorUniqueKey);
677
+ const anchorOffsetAfter = anchorElementAfter?.getBoundingClientRect().top || 0;
678
+ const offsetDiff = anchorOffsetAfter - anchorOffsetBefore;
679
+ tableContainer.scrollTop += offsetDiff;
680
+ userScrolling = true;
1054
681
  }
1055
-
1056
- function resize(node: HTMLElement) {
1057
- let th: HTMLElement | null = node.parentElement
1058
- let resizingInner = false
1059
-
1060
- if(!!th) {
1061
- let { width } = th.getBoundingClientRect()
1062
-
1063
- function mouseMoveHandler(e: MouseEvent) {
1064
- if (resizingInner && !!th && !!tableContainer) {
1065
- width += e.movementX;
1066
- const { paddingLeft, paddingRight } = getComputedStyle(th);
1067
-
1068
- const minWidth: string | undefined = headers.find(h => h.value === th.id)?.minWidth;
1069
- let minWidthPx: number | undefined;
1070
- if (!!minWidth && minWidth.endsWith('px')) {
1071
- minWidthPx = parseInt(minWidth, 10);
1072
- }
1073
-
1074
- const maxWidth: string | undefined = headers.find(h => h.value === th.id)?.maxWidth;
1075
- let maxWidthPx: number | undefined;
1076
- if (!!maxWidth && maxWidth.endsWith('px')) {
1077
- maxWidthPx = parseInt(maxWidth, 10);
1078
- }
1079
-
1080
- const actualMinWidth = (minWidthPx || DEFAULT_MIN_WIDTH_PX) - parseFloat(paddingLeft) - parseFloat(paddingRight);
1081
- const actualMaxWidth = (maxWidthPx || DEFAULT_MAX_WIDTH_PX) - parseFloat(paddingLeft) - parseFloat(paddingRight);
1082
-
1083
- if (width > actualMinWidth && width < actualMaxWidth) {
1084
- th.style.width = width + 'px';
1085
- resizedColumnSizeWithPadding[th.id] = th.getBoundingClientRect().width;
1086
- resizedColumnSizeWithPadding = resizedColumnSizeWithPadding
1087
- }
682
+ }
683
+ function findAnchorElement(key) {
684
+ for (let i = 0; i < tableBody.children.length; i++) {
685
+ const child = tableBody.children.item(i);
686
+ if (child?.getAttribute("data-key") == key) {
687
+ return child;
688
+ }
689
+ }
690
+ return void 0;
691
+ }
692
+ function resize(node) {
693
+ let th = node.parentElement;
694
+ let resizingInner = false;
695
+ if (!!th) {
696
+ let mouseMoveHandler = function(e) {
697
+ if (resizingInner && !!th && !!tableContainer) {
698
+ width += e.movementX;
699
+ const { paddingLeft, paddingRight } = getComputedStyle(th);
700
+ const minWidth = headers.find((h) => h.value === th.id)?.minWidth;
701
+ let minWidthPx;
702
+ if (!!minWidth && minWidth.endsWith("px")) {
703
+ minWidthPx = parseInt(minWidth, 10);
1088
704
  }
1089
- }
1090
-
1091
-
1092
- function mouseUpHandler(e: MouseEvent, setResize: boolean = true) {
1093
- if(!!th) {
1094
- resizingInner = false
1095
- let { paddingLeft, paddingRight } = getComputedStyle(th)
1096
- width = th.getBoundingClientRect().width - parseFloat(paddingLeft) - parseFloat(paddingRight)
1097
- if(setResize){
1098
- setTimeout(() => resizing = false, 20)
1099
- }
1100
- dispatch('columnResize', {
1101
- id: th.id,
1102
- newWidthPx: width
1103
- })
705
+ const maxWidth = headers.find((h) => h.value === th.id)?.maxWidth;
706
+ let maxWidthPx;
707
+ if (!!maxWidth && maxWidth.endsWith("px")) {
708
+ maxWidthPx = parseInt(maxWidth, 10);
1104
709
  }
1105
- }
1106
-
1107
- function mouseDownHandler(e: MouseEvent) {
1108
- if(!!th) {
1109
- resizing = true
1110
- resizingInner = true
1111
- let { paddingLeft, paddingRight } = getComputedStyle(th)
1112
- width = th.getBoundingClientRect().width - parseFloat(paddingLeft) - parseFloat(paddingRight)
710
+ const actualMinWidth = (minWidthPx || DEFAULT_MIN_WIDTH_PX) - parseFloat(paddingLeft) - parseFloat(paddingRight);
711
+ const actualMaxWidth = (maxWidthPx || DEFAULT_MAX_WIDTH_PX) - parseFloat(paddingLeft) - parseFloat(paddingRight);
712
+ if (width > actualMinWidth && width < actualMaxWidth) {
713
+ th.style.width = width + "px";
714
+ resizedColumnSizeWithPadding[th.id] = th.getBoundingClientRect().width;
715
+ resizedColumnSizeWithPadding = resizedColumnSizeWithPadding;
1113
716
  }
1114
717
  }
1115
-
1116
- node.addEventListener('mousedown', mouseDownHandler)
1117
- document.addEventListener('mouseup', mouseUpHandler)
1118
- document.addEventListener('mousemove', mouseMoveHandler)
1119
-
1120
-
1121
- return {
1122
- destroy() {
1123
- node.removeEventListener('mousedown', mouseDownHandler)
1124
- document.removeEventListener('mouseup', mouseUpHandler)
1125
- document.removeEventListener('mousemove', mouseMoveHandler)
718
+ }, mouseUpHandler = function(e, setResize = true) {
719
+ if (!!th) {
720
+ resizingInner = false;
721
+ let { paddingLeft, paddingRight } = getComputedStyle(th);
722
+ width = th.getBoundingClientRect().width - parseFloat(paddingLeft) - parseFloat(paddingRight);
723
+ if (setResize) {
724
+ setTimeout(() => resizing = false, 20);
1126
725
  }
726
+ dispatch("columnResize", {
727
+ id: th.id,
728
+ newWidthPx: width
729
+ });
1127
730
  }
1128
- }
731
+ }, mouseDownHandler = function(e) {
732
+ if (!!th) {
733
+ resizing = true;
734
+ resizingInner = true;
735
+ let { paddingLeft, paddingRight } = getComputedStyle(th);
736
+ width = th.getBoundingClientRect().width - parseFloat(paddingLeft) - parseFloat(paddingRight);
737
+ }
738
+ };
739
+ let { width } = th.getBoundingClientRect();
740
+ node.addEventListener("mousedown", mouseDownHandler);
741
+ document.addEventListener("mouseup", mouseUpHandler);
742
+ document.addEventListener("mousemove", mouseMoveHandler);
743
+ return {
744
+ destroy() {
745
+ node.removeEventListener("mousedown", mouseDownHandler);
746
+ document.removeEventListener("mouseup", mouseUpHandler);
747
+ document.removeEventListener("mousemove", mouseMoveHandler);
748
+ }
749
+ };
1129
750
  }
1130
-
1131
- $: if (
1132
- !!tableContainer &&
1133
- headersToShowInTable.length > 0 &&
1134
- resizedColumnSizeWithPadding &&
1135
- headersToShow.length > 0 &&
1136
- mainHeader
1137
- ) {
751
+ }
752
+ $:
753
+ if (!!tableContainer && headersToShowInTable.length > 0 && resizedColumnSizeWithPadding && headersToShow.length > 0 && mainHeader) {
1138
754
  tick().then(updateRemainingWidth);
1139
755
  }
1140
-
1141
- async function updateRemainingWidth() {
1142
- if(tableContainer != null && !!tableContainer) {
1143
- const containerWidth = tableContainer?.getBoundingClientRect().width - 30;
1144
-
1145
- if(containerWidth){
1146
- const totalResizableWidth = headersToShowInTable.reduce((sum, head) => {
1147
- let th = headersHTML[head.value]
1148
- if(!!th) {
1149
- resizeHeader(th, head)
1150
- }
1151
- const width = th?.getBoundingClientRect().width || 0
1152
- return sum + width + 1;
1153
- }, 0);
1154
-
1155
- const extraStaticWidth = Array.from(mainHeader.querySelectorAll('th.non-resizable, th.customize-headers'))
1156
- .reduce((sum, th) => sum + th.getBoundingClientRect().width + 1, 0);
1157
-
1158
- remainingWidth = Math.max(0, containerWidth - totalResizableWidth - extraStaticWidth);
1159
- }
756
+ async function updateRemainingWidth() {
757
+ if (tableContainer != null && !!tableContainer) {
758
+ const containerWidth = tableContainer?.getBoundingClientRect().width - 26;
759
+ if (containerWidth) {
760
+ const totalResizableWidth = headersToShowInTable.reduce((sum, head) => {
761
+ let th = headersHTML[head.value];
762
+ if (!!th) {
763
+ resizeHeader(th, head);
764
+ }
765
+ const width = th?.getBoundingClientRect().width || 0;
766
+ return sum + width + 1;
767
+ }, 0);
768
+ const extraStaticWidth = Array.from(mainHeader.querySelectorAll("th.non-resizable, th.customize-headers")).reduce((sum, th) => sum + th.getBoundingClientRect().width + 1, 0);
769
+ remainingWidth = Math.max(0, containerWidth - totalResizableWidth - extraStaticWidth);
1160
770
  }
1161
771
  }
1162
-
1163
- function resizeHeader(th: HTMLElement, header: { value: string, minWidth?: string, maxWidth?: string }){
1164
- if (!resizedColumnSizeWithPadding[header.value]) {
1165
- let widthWihtPadding = th.getBoundingClientRect().width
1166
-
1167
- let minWidth = header.minWidth,
1168
- minWidthPx = DEFAULT_MIN_WIDTH_PX
1169
- if (!!minWidth && minWidth.endsWith('px')) {
1170
- minWidthPx = parseInt(minWidth, 10);
1171
- }
1172
- if(widthWihtPadding < minWidthPx) {
1173
- widthWihtPadding = minWidthPx
1174
- }
1175
-
1176
- let maxWidth = header.maxWidth,
1177
- maxWidthPx = DEFAULT_MAX_WIDTH_PX
1178
- if (!!maxWidth && maxWidth.endsWith('px')) {
1179
- maxWidthPx = parseInt(maxWidth, 10);
1180
- }
1181
- if(widthWihtPadding > maxWidthPx) {
1182
- widthWihtPadding = maxWidthPx
1183
- }
1184
-
1185
- resizedColumnSizeWithPadding[header.value] = widthWihtPadding;
772
+ }
773
+ function resizeHeader(th, header) {
774
+ if (!resizedColumnSizeWithPadding[header.value]) {
775
+ let widthWihtPadding = th.getBoundingClientRect().width;
776
+ let minWidth = header.minWidth, minWidthPx = DEFAULT_MIN_WIDTH_PX;
777
+ if (!!minWidth && minWidth.endsWith("px")) {
778
+ minWidthPx = parseInt(minWidth, 10);
779
+ }
780
+ if (widthWihtPadding < minWidthPx) {
781
+ widthWihtPadding = minWidthPx;
1186
782
  }
1187
- let { paddingLeft, paddingRight } = getComputedStyle(th);
1188
- let width = resizedColumnSizeWithPadding[header.value] - parseFloat(paddingLeft) - parseFloat(paddingRight);
1189
- th.style.width = `${width}px`
783
+ let maxWidth = header.maxWidth, maxWidthPx = DEFAULT_MAX_WIDTH_PX;
784
+ if (!!maxWidth && maxWidth.endsWith("px")) {
785
+ maxWidthPx = parseInt(maxWidth, 10);
786
+ }
787
+ if (widthWihtPadding > maxWidthPx) {
788
+ widthWihtPadding = maxWidthPx;
789
+ }
790
+ resizedColumnSizeWithPadding[header.value] = widthWihtPadding;
1190
791
  }
792
+ let { paddingLeft, paddingRight } = getComputedStyle(th);
793
+ let width = resizedColumnSizeWithPadding[header.value] - parseFloat(paddingLeft) - parseFloat(paddingRight);
794
+ th.style.width = `${width}px`;
795
+ }
1191
796
  </script>
1192
797
 
1193
798
  {#if !!rows && Array.isArray(rows) && !!headersToShowInTable && Array.isArray(headersToShowInTable)}
@@ -1206,112 +811,114 @@
1206
811
  {/if}
1207
812
 
1208
813
  {#if searchBarVisible || filtersVisible || $$slots.appendFilterRow}
1209
- <div class="filter-container">
1210
- <div class="search-bar-container">
814
+ <MediaQuery let:mAndDown>
815
+ <div class="searchbar-and-filter-container {mAndDown ? 'mobile' : 'desktop'}">
1211
816
  <slot name="search-bar" {handleSearchChange}>
1212
817
  {#if searchBarVisible}
1213
- <div style="margin-right: 20px;">
1214
- <SimpleTextField
1215
- placeholder={searchBarPlaceholder}
1216
- appendInnerIcon="mdi-magnify"
1217
- bind:value={searchText}
1218
- bind:input={searchBarInput}
1219
- on:keydown={handleSearchBoxKeydown}
1220
- --simple-textfield-default-width="450px"
1221
- --simple-textfield-border-radius= 0.5rem
1222
- --simple-textfield-background-color= transparent
1223
- --simple-textfield-box-shadow= 'inset 0 0 0 1px rgb(var(--global-color-background-500))'
1224
- --simple-textfield-focus-box-shadow='inset 0 0 0 2px rgb(var(--global-color-primary-500))'
1225
- />
1226
- </div>
818
+ <div style="margin-right: {mAndDown ? '0px' : '20px'};">
819
+ <SimpleTextField
820
+ placeholder={searchBarPlaceholder}
821
+ appendInnerIcon="mdi-magnify"
822
+ bind:value={searchText}
823
+ bind:input={searchBarInput}
824
+ on:keydown={handleSearchBoxKeydown}
825
+ --simple-textfield-width={mAndDown ? "100%" : "450px"}
826
+ --simple-textfield-border-radius= 0.5rem
827
+ --simple-textfield-background-color= transparent
828
+ --simple-textfield-box-shadow= 'inset 0 0 0 1px rgb(var(--global-color-background-500))'
829
+ --simple-textfield-focus-box-shadow='inset 0 0 0 2px rgb(var(--global-color-primary-500))'
830
+ />
831
+ </div>
1227
832
  {/if}
1228
833
  </slot>
1229
-
1230
- {#if filtersVisible}
1231
- <div>
1232
- {#if dynamicFilters}
1233
- <Filters
1234
- bind:filters
1235
- on:applyFilter={() => {
1236
- handleSearchChange(searchText);
1237
- }}
1238
- on:removeFilter={e => { handleRemoveFilter(e.detail.filter) }}
1239
- on:removeAllFilters={() => handleRemoveAllFilters()}
1240
- --filters-default-wrapper-width="100%"
1241
- {lang}
1242
- {dateLocale}
1243
- {editFilterMode}
1244
- {showActiveFilters}
1245
- >
1246
- <svelte:fragment slot="append">
1247
- <slot name="filter-append" />
1248
- </svelte:fragment>
1249
- <svelte:fragment slot="custom-chip" let:filter>
1250
- <slot name="custom-filter-chip" {filter} />
1251
- </svelte:fragment>
1252
- <svelte:fragment
1253
- slot="custom"
1254
- let:filter
1255
- let:updateFunction
1256
- let:mAndDown
834
+
835
+ <div class="filter-container">
836
+ {#if filtersVisible}
837
+ <div>
838
+ {#if dynamicFilters}
839
+ <Filters
840
+ bind:filters
841
+ on:applyFilter={() => {
842
+ handleSearchChange(searchText);
843
+ }}
844
+ on:removeFilter={e => { handleRemoveFilter(e.detail.filter) }}
845
+ on:removeAllFilters={() => handleRemoveAllFilters()}
846
+ --filters-default-wrapper-width="100%"
847
+ {lang}
848
+ {dateLocale}
849
+ {editFilterMode}
850
+ {showActiveFilters}
851
+ drawerSpace='40rem'
1257
852
  >
1258
- <slot name="custom-filter" {filter} {updateFunction} {mAndDown} />
1259
- </svelte:fragment>
1260
-
1261
- <svelte:fragment slot="content" let:mAndDown let:filters let:updateMultiFilterValues>
1262
- {#key filters}
1263
- <DynamicFilters
1264
- {lang}
1265
- {filters}
1266
- {mAndDown}
1267
- {updateMultiFilterValues}
1268
- on:change={e => updateFilterValues(e.detail.filter, updateMultiFilterValues)}
1269
- >
1270
- <svelte:fragment slot="custom" let:filter let:mAndDown let:updateCustomFilterValues>
1271
- <slot name="custom-filter" {filter} {updateCustomFilterValues} {mAndDown}></slot>
1272
- </svelte:fragment>
1273
- </DynamicFilters>
1274
- {/key}
1275
- </svelte:fragment>
1276
- </Filters>
1277
- {:else}
1278
- <Filters
1279
- bind:filters
1280
- on:applyFilter={() => {
1281
- handleSearchChange(searchText);
1282
- }}
1283
- on:removeFilter={e => { handleRemoveFilter(e.detail.filter) }}
1284
- on:removeAllFilters={() => handleRemoveAllFilters()}
1285
- --filters-default-wrapper-width="100%"
1286
- {lang}
1287
- {dateLocale}
1288
- {editFilterMode}
1289
- {showActiveFilters}
1290
- >
1291
- <svelte:fragment slot="append">
1292
- <slot name="filter-append" />
1293
- </svelte:fragment>
1294
- <svelte:fragment slot="custom-chip" let:filter>
1295
- <slot name="custom-filter-chip" {filter} />
1296
- </svelte:fragment>
1297
- <svelte:fragment
1298
- slot="custom"
1299
- let:filter
1300
- let:updateFunction
1301
- let:mAndDown
853
+ <svelte:fragment slot="append">
854
+ <slot name="filter-append" />
855
+ </svelte:fragment>
856
+ <svelte:fragment slot="custom-chip" let:filter>
857
+ <slot name="custom-filter-chip" {filter} />
858
+ </svelte:fragment>
859
+ <svelte:fragment
860
+ slot="custom"
861
+ let:filter
862
+ let:updateFunction
863
+ let:mAndDown
864
+ >
865
+ <slot name="custom-filter" {filter} {updateFunction} {mAndDown} />
866
+ </svelte:fragment>
867
+
868
+ <svelte:fragment slot="content" let:mAndDown let:filters let:updateMultiFilterValues>
869
+ {#key filters}
870
+ <DynamicFilters
871
+ {lang}
872
+ {filters}
873
+ {mAndDown}
874
+ {updateMultiFilterValues}
875
+ on:change={e => updateFilterValues(e.detail.filter, updateMultiFilterValues)}
876
+ >
877
+ <svelte:fragment slot="custom" let:filter let:mAndDown let:updateCustomFilterValues>
878
+ <slot name="custom-filter" {filter} {updateCustomFilterValues} {mAndDown}></slot>
879
+ </svelte:fragment>
880
+ </DynamicFilters>
881
+ {/key}
882
+ </svelte:fragment>
883
+ </Filters>
884
+ {:else}
885
+ <Filters
886
+ bind:filters
887
+ on:applyFilter={() => {
888
+ handleSearchChange(searchText);
889
+ }}
890
+ on:removeFilter={e => { handleRemoveFilter(e.detail.filter) }}
891
+ on:removeAllFilters={() => handleRemoveAllFilters()}
892
+ --filters-default-wrapper-width="100%"
893
+ {lang}
894
+ {dateLocale}
895
+ {editFilterMode}
896
+ {showActiveFilters}
1302
897
  >
1303
- <slot name="custom-static-filter" {filter} {updateFunction} {mAndDown}/>
1304
- </svelte:fragment>
1305
- </Filters>
1306
- {/if}
898
+ <svelte:fragment slot="append">
899
+ <slot name="filter-append" />
900
+ </svelte:fragment>
901
+ <svelte:fragment slot="custom-chip" let:filter>
902
+ <slot name="custom-filter-chip" {filter} />
903
+ </svelte:fragment>
904
+ <svelte:fragment
905
+ slot="custom"
906
+ let:filter
907
+ let:updateFunction
908
+ let:mAndDown
909
+ >
910
+ <slot name="custom-static-filter" {filter} {updateFunction} {mAndDown}/>
911
+ </svelte:fragment>
912
+ </Filters>
913
+ {/if}
914
+ </div>
915
+ {/if}
916
+ <div>
917
+ <slot name="appendFilterRow"></slot>
1307
918
  </div>
1308
- {/if}
1309
- </div>
1310
-
1311
- <div>
1312
- <slot name="appendFilterRow"></slot>
919
+ </div>
1313
920
  </div>
1314
- </div>
921
+ </MediaQuery>
1315
922
  {/if}
1316
923
 
1317
924
  {#if quickFiltersVisible || numberOfResultsVisible}
@@ -1683,26 +1290,9 @@
1683
1290
 
1684
1291
  <tbody>
1685
1292
  {#each row.subItems as subItem, indexSubItem}
1686
- <tr
1687
- on:click={() => handleRowClick(subItem)}
1688
- class:row-activator={cellEditorIndexRow == indexSubItem && cellEditorSubItem}
1689
- >
1293
+ <tr>
1690
1294
  {#each subHeaders as subHeader, indexSubHeader}
1691
- <td
1692
- class:cell-edit-activator={cellEditorIndexHeader == indexSubHeader && cellEditorIndexRow == indexSubItem && cellEditorSubItem}
1693
- class:hover-cell={cellEdit && !loading && !!subHeader.cellEditorInfo}
1694
- on:click={(e) => {
1695
- handleCellClick(
1696
- e,
1697
- subItem,
1698
- subHeader.cellEditorInfo,
1699
- subItem[subHeader.value],
1700
- indexSubItem,
1701
- indexSubHeader,
1702
- true
1703
- );
1704
- }}
1705
- >
1295
+ <td>
1706
1296
  {#if subHeader.type.key == "custom"}
1707
1297
  <slot
1708
1298
  name="custom-subheader"
@@ -2034,6 +1624,9 @@
2034
1624
  />
2035
1625
  </div>
2036
1626
  {:else if quickFilterActive.type.key === "date"}
1627
+ <div style="font-weight: 500; margin-bottom: 8px;">
1628
+ {quickFilterActive.title}
1629
+ </div>
2037
1630
  <div on:click|stopPropagation role="presentation" tabindex="-1">
2038
1631
  <div>
2039
1632
  <DatePickerTextField
@@ -2098,10 +1691,7 @@
2098
1691
  </div>
2099
1692
 
2100
1693
  {#if quickFilterActive.type.key != "boolean"}
2101
- <div style:margin-top="10px" style:grid-row="2" style:grid-column="1 / 3">
2102
- <Divider --divider-color=rgb(var(--global-color-contrast-100)) />
2103
- </div>
2104
- <div style:grid-row="3" style:grid-column="2" style:margin-top="-15px">
1694
+ <div style:grid-row="3" style:grid-column="2" style:margin-top="-10px">
2105
1695
  <ConfirmOrCancelButtons
2106
1696
  confirmDisable={saveEditDisabled}
2107
1697
  confirmText={lang == 'en' ? "Apply" : 'Applica'}
@@ -2442,22 +2032,40 @@
2442
2032
  flex-direction: row;
2443
2033
  }
2444
2034
 
2445
- .filter-container {
2035
+ .searchbar-and-filter-container {
2446
2036
  display: flex;
2037
+ margin-bottom: 16px;
2038
+ }
2039
+
2040
+ .searchbar-and-filter-container.desktop {
2447
2041
  flex-direction: row;
2042
+ }
2043
+ .searchbar-and-filter-container.mobile {
2044
+ flex-direction: column;
2045
+ gap: 8px;
2046
+ }
2047
+ .filter-container {
2048
+ display: flex;
2448
2049
  justify-content: space-between;
2449
- margin-bottom: 20px;
2050
+ flex-grow: 1;
2450
2051
  }
2451
-
2452
2052
  .quick-filters {
2453
2053
  display: flex;
2454
2054
  flex-direction: row;
2455
- margin-bottom: 10px;
2055
+ overflow-x: auto;
2056
+ white-space: nowrap;
2057
+ padding-bottom: 4px;
2058
+ gap: 8px;
2059
+ }
2060
+ .quick-filters::-webkit-scrollbar:horizontal {
2061
+ height: 12px;
2456
2062
  }
2457
2063
 
2458
2064
  .quick-filters-results-container {
2459
2065
  display: flex;
2460
2066
  justify-content: space-between;
2067
+ gap: 8px;
2068
+ margin-bottom: 8px;
2461
2069
  }
2462
2070
 
2463
2071
  .vertical-quick-filters {
@@ -2555,6 +2163,7 @@
2555
2163
  display: flex;
2556
2164
  align-items: center;
2557
2165
  gap: 4px;
2166
+ min-width: 90px;
2558
2167
  }
2559
2168
  .resizer {
2560
2169
  position: absolute;