@likable-hair/svelte 3.3.26 → 3.3.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/dist/components/composed/buttons/ActivableButton.svelte +6 -2
  2. package/dist/components/composed/buttons/ActivableButton.svelte.d.ts +36 -32
  3. package/dist/components/composed/common/MenuOrDrawer.svelte +21 -5
  4. package/dist/components/composed/common/MenuOrDrawer.svelte.d.ts +50 -36
  5. package/dist/components/composed/common/MenuOrDrawerOptions.svelte +29 -13
  6. package/dist/components/composed/common/MenuOrDrawerOptions.svelte.d.ts +34 -30
  7. package/dist/components/composed/common/QuickActions.svelte +55 -39
  8. package/dist/components/composed/common/QuickActions.svelte.d.ts +24 -20
  9. package/dist/components/composed/common/ToolTip.svelte +31 -22
  10. package/dist/components/composed/common/ToolTip.svelte.d.ts +32 -43
  11. package/dist/components/composed/forms/AsyncAutocomplete.svelte +44 -23
  12. package/dist/components/composed/forms/AsyncAutocomplete.svelte.d.ts +44 -39
  13. package/dist/components/composed/forms/AvatarDropdown.svelte +57 -27
  14. package/dist/components/composed/forms/AvatarDropdown.svelte.d.ts +45 -41
  15. package/dist/components/composed/forms/ConfirmOrCancelButtons.svelte +35 -17
  16. package/dist/components/composed/forms/ConfirmOrCancelButtons.svelte.d.ts +41 -37
  17. package/dist/components/composed/forms/CountriesAutocomplete.svelte +16 -7
  18. package/dist/components/composed/forms/CountriesAutocomplete.svelte.d.ts +31 -60
  19. package/dist/components/composed/forms/DatePickerTextField.svelte +166 -114
  20. package/dist/components/composed/forms/DatePickerTextField.svelte.d.ts +67 -63
  21. package/dist/components/composed/forms/Dropdown.svelte +51 -21
  22. package/dist/components/composed/forms/Dropdown.svelte.d.ts +48 -43
  23. package/dist/components/composed/forms/IconsDropdown.svelte +61 -33
  24. package/dist/components/composed/forms/IconsDropdown.svelte.d.ts +30 -26
  25. package/dist/components/composed/forms/LabelAndSelect.svelte +32 -7
  26. package/dist/components/composed/forms/LabelAndSelect.svelte.d.ts +35 -31
  27. package/dist/components/composed/forms/LabelAndTextField.svelte +30 -5
  28. package/dist/components/composed/forms/LabelAndTextField.svelte.d.ts +46 -42
  29. package/dist/components/composed/forms/ToggleList.svelte +59 -33
  30. package/dist/components/composed/forms/ToggleList.svelte.d.ts +21 -17
  31. package/dist/components/composed/forms/YearPickerTextField.svelte +114 -74
  32. package/dist/components/composed/forms/YearPickerTextField.svelte.d.ts +53 -49
  33. package/dist/components/composed/list/DynamicTable.svelte +1112 -713
  34. package/dist/components/composed/list/DynamicTable.svelte.d.ts +370 -365
  35. package/dist/components/composed/list/PaginatedTable.svelte +139 -76
  36. package/dist/components/composed/list/PaginatedTable.svelte.d.ts +108 -108
  37. package/dist/components/composed/progress/HorizontalStackedProgress.svelte +58 -30
  38. package/dist/components/composed/progress/HorizontalStackedProgress.svelte.d.ts +25 -21
  39. package/dist/components/composed/search/DynamicFilters.svelte +104 -83
  40. package/dist/components/composed/search/DynamicFilters.svelte.d.ts +31 -27
  41. package/dist/components/composed/search/FilterEditor.svelte +106 -77
  42. package/dist/components/composed/search/FilterEditor.svelte.d.ts +37 -33
  43. package/dist/components/composed/search/Filters.svelte +362 -292
  44. package/dist/components/composed/search/Filters.svelte.d.ts +56 -52
  45. package/dist/components/composed/search/GlobalSearchTextField.svelte +79 -41
  46. package/dist/components/composed/search/GlobalSearchTextField.svelte.d.ts +43 -39
  47. package/dist/components/composed/search/MobileFilterEditor.svelte +135 -93
  48. package/dist/components/composed/search/MobileFilterEditor.svelte.d.ts +39 -35
  49. package/dist/components/composed/search/SearchBar.svelte +28 -5
  50. package/dist/components/composed/search/SearchBar.svelte.d.ts +34 -30
  51. package/dist/components/composed/search/SearchResults.svelte +42 -7
  52. package/dist/components/composed/search/SearchResults.svelte.d.ts +40 -36
  53. package/dist/components/composed/shop/ProductCard.svelte +18 -4
  54. package/dist/components/composed/shop/ProductCard.svelte.d.ts +32 -28
  55. package/dist/components/composed/shop/ProductsGrid.svelte +22 -2
  56. package/dist/components/composed/shop/ProductsGrid.svelte.d.ts +44 -40
  57. package/dist/components/layouts/CollapsibleSideBarLayout.svelte +55 -29
  58. package/dist/components/layouts/CollapsibleSideBarLayout.svelte.d.ts +85 -54
  59. package/dist/components/layouts/StableDividedSideBarLayout.svelte +47 -17
  60. package/dist/components/layouts/StableDividedSideBarLayout.svelte.d.ts +50 -32
  61. package/dist/components/layouts/UnstableDividedSideBarLayout.svelte +53 -30
  62. package/dist/components/layouts/UnstableDividedSideBarLayout.svelte.d.ts +103 -63
  63. package/dist/components/simple/buttons/Button.svelte +78 -32
  64. package/dist/components/simple/buttons/Button.svelte.d.ts +47 -35
  65. package/dist/components/simple/buttons/LinkButton.svelte +54 -22
  66. package/dist/components/simple/buttons/LinkButton.svelte.d.ts +50 -33
  67. package/dist/components/simple/charts/GanymedeBarChart.svelte +172 -134
  68. package/dist/components/simple/charts/GanymedeBarChart.svelte.d.ts +50 -46
  69. package/dist/components/simple/charts/GanymedeLineChart.svelte +157 -115
  70. package/dist/components/simple/charts/GanymedeLineChart.svelte.d.ts +51 -47
  71. package/dist/components/simple/charts/GanymedePieChart.svelte +62 -39
  72. package/dist/components/simple/charts/GanymedePieChart.svelte.d.ts +37 -33
  73. package/dist/components/simple/common/Card.svelte +20 -1
  74. package/dist/components/simple/common/Card.svelte.d.ts +51 -38
  75. package/dist/components/simple/common/CollapsibleDivider.svelte +23 -11
  76. package/dist/components/simple/common/CollapsibleDivider.svelte.d.ts +29 -25
  77. package/dist/components/simple/common/Divider.svelte +8 -2
  78. package/dist/components/simple/common/Divider.svelte.d.ts +23 -19
  79. package/dist/components/simple/common/Gesture.svelte +64 -46
  80. package/dist/components/simple/common/Gesture.svelte.d.ts +21 -17
  81. package/dist/components/simple/common/InfiniteScroll.svelte +52 -29
  82. package/dist/components/simple/common/InfiniteScroll.svelte.d.ts +24 -20
  83. package/dist/components/simple/common/IntersectionObserver.svelte +45 -32
  84. package/dist/components/simple/common/IntersectionObserver.svelte.d.ts +34 -21
  85. package/dist/components/simple/common/MediaQuery.svelte +30 -21
  86. package/dist/components/simple/common/MediaQuery.svelte.d.ts +34 -30
  87. package/dist/components/simple/common/Menu.svelte +290 -201
  88. package/dist/components/simple/common/Menu.svelte.d.ts +51 -40
  89. package/dist/components/simple/common/Playground.svelte +18 -17
  90. package/dist/components/simple/common/Playground.svelte.d.ts +19 -15
  91. package/dist/components/simple/common/VerticalDraggableList.svelte +35 -16
  92. package/dist/components/simple/common/VerticalDraggableList.svelte.d.ts +33 -29
  93. package/dist/components/simple/dashboards/DashboardGridShaper.svelte +32 -26
  94. package/dist/components/simple/dashboards/DashboardGridShaper.svelte.d.ts +16 -12
  95. package/dist/components/simple/dates/Calendar.svelte +52 -28
  96. package/dist/components/simple/dates/Calendar.svelte.d.ts +45 -41
  97. package/dist/components/simple/dates/DatePicker.svelte +90 -60
  98. package/dist/components/simple/dates/DatePicker.svelte.d.ts +44 -40
  99. package/dist/components/simple/dates/MonthSelector.svelte +37 -15
  100. package/dist/components/simple/dates/MonthSelector.svelte.d.ts +35 -31
  101. package/dist/components/simple/dates/TimePicker.svelte +45 -31
  102. package/dist/components/simple/dates/TimePicker.svelte.d.ts +24 -20
  103. package/dist/components/simple/dates/TimePickerTextField.svelte +56 -35
  104. package/dist/components/simple/dates/TimePickerTextField.svelte.d.ts +28 -24
  105. package/dist/components/simple/dates/YearSelector.svelte +54 -29
  106. package/dist/components/simple/dates/YearSelector.svelte.d.ts +35 -31
  107. package/dist/components/simple/dialogs/Dialog.svelte +92 -62
  108. package/dist/components/simple/dialogs/Dialog.svelte.d.ts +42 -28
  109. package/dist/components/simple/forms/Autocomplete.svelte +201 -142
  110. package/dist/components/simple/forms/Autocomplete.svelte.d.ts +83 -79
  111. package/dist/components/simple/forms/Checkbox.svelte +40 -24
  112. package/dist/components/simple/forms/Checkbox.svelte.d.ts +25 -21
  113. package/dist/components/simple/forms/FileInput.svelte +88 -48
  114. package/dist/components/simple/forms/FileInput.svelte.d.ts +37 -33
  115. package/dist/components/simple/forms/FileInputList.css +1 -1
  116. package/dist/components/simple/forms/FileInputList.svelte +65 -41
  117. package/dist/components/simple/forms/FileInputList.svelte.d.ts +39 -35
  118. package/dist/components/simple/forms/RadioButton.svelte +11 -3
  119. package/dist/components/simple/forms/RadioButton.svelte.d.ts +31 -27
  120. package/dist/components/simple/forms/Select.svelte +16 -3
  121. package/dist/components/simple/forms/Select.svelte.d.ts +24 -20
  122. package/dist/components/simple/forms/SimpleTextField.svelte +53 -6
  123. package/dist/components/simple/forms/SimpleTextField.svelte.d.ts +64 -60
  124. package/dist/components/simple/forms/Switch.svelte +30 -16
  125. package/dist/components/simple/forms/Switch.svelte.d.ts +25 -21
  126. package/dist/components/simple/forms/Textarea.svelte +27 -2
  127. package/dist/components/simple/forms/Textarea.svelte.d.ts +41 -37
  128. package/dist/components/simple/forms/Textfield.svelte +56 -18
  129. package/dist/components/simple/forms/Textfield.svelte.d.ts +55 -51
  130. package/dist/components/simple/forms/TreeEditor.svelte +141 -95
  131. package/dist/components/simple/forms/TreeEditor.svelte.d.ts +42 -38
  132. package/dist/components/simple/forms/TreeEditorItem.svelte +77 -42
  133. package/dist/components/simple/forms/TreeEditorItem.svelte.d.ts +54 -50
  134. package/dist/components/simple/forms/VerticalSwitch.svelte +11 -1
  135. package/dist/components/simple/forms/VerticalSwitch.svelte.d.ts +32 -28
  136. package/dist/components/simple/forms/VerticalTextSwitch.svelte +15 -3
  137. package/dist/components/simple/forms/VerticalTextSwitch.svelte.d.ts +30 -26
  138. package/dist/components/simple/lists/ColorInvertedSelector.svelte +53 -23
  139. package/dist/components/simple/lists/ColorInvertedSelector.svelte.d.ts +46 -42
  140. package/dist/components/simple/lists/HierarchyMenu.svelte +38 -19
  141. package/dist/components/simple/lists/HierarchyMenu.svelte.d.ts +34 -30
  142. package/dist/components/simple/lists/Paginator.svelte +50 -41
  143. package/dist/components/simple/lists/Paginator.svelte.d.ts +23 -19
  144. package/dist/components/simple/lists/SelectableMenuList.svelte +43 -15
  145. package/dist/components/simple/lists/SelectableMenuList.svelte.d.ts +24 -20
  146. package/dist/components/simple/lists/SelectableVerticalList.svelte +100 -57
  147. package/dist/components/simple/lists/SelectableVerticalList.svelte.d.ts +51 -47
  148. package/dist/components/simple/lists/SidebarMenuList.svelte +116 -71
  149. package/dist/components/simple/lists/SidebarMenuList.svelte.d.ts +26 -22
  150. package/dist/components/simple/lists/SimpleTable.svelte +264 -154
  151. package/dist/components/simple/lists/SimpleTable.svelte.d.ts +70 -66
  152. package/dist/components/simple/loaders/CircularLoader.svelte +16 -5
  153. package/dist/components/simple/loaders/CircularLoader.svelte.d.ts +19 -15
  154. package/dist/components/simple/loaders/Skeleton.svelte +3 -2
  155. package/dist/components/simple/loaders/Skeleton.svelte.d.ts +16 -12
  156. package/dist/components/simple/media/AttachmentDownloader.svelte +17 -3
  157. package/dist/components/simple/media/AttachmentDownloader.svelte.d.ts +32 -28
  158. package/dist/components/simple/media/Avatar.svelte +18 -12
  159. package/dist/components/simple/media/Avatar.svelte.d.ts +31 -20
  160. package/dist/components/simple/media/Carousel.svelte +29 -11
  161. package/dist/components/simple/media/Carousel.svelte.d.ts +28 -24
  162. package/dist/components/simple/media/DescriptiveAvatar.svelte +12 -4
  163. package/dist/components/simple/media/DescriptiveAvatar.svelte.d.ts +44 -28
  164. package/dist/components/simple/media/FlagIcon.svelte +8 -5
  165. package/dist/components/simple/media/FlagIcon.svelte.d.ts +19 -15
  166. package/dist/components/simple/media/Gallery.svelte +49 -29
  167. package/dist/components/simple/media/Gallery.svelte.d.ts +27 -23
  168. package/dist/components/simple/media/Icon.svelte +9 -4
  169. package/dist/components/simple/media/Icon.svelte.d.ts +24 -20
  170. package/dist/components/simple/media/Image.svelte +42 -20
  171. package/dist/components/simple/media/Image.svelte.d.ts +44 -33
  172. package/dist/components/simple/media/ImageGrid.svelte +37 -12
  173. package/dist/components/simple/media/ImageGrid.svelte.d.ts +32 -28
  174. package/dist/components/simple/navigation/Breadcrumb.svelte +28 -10
  175. package/dist/components/simple/navigation/Breadcrumb.svelte.d.ts +26 -22
  176. package/dist/components/simple/navigation/Chip.svelte +44 -23
  177. package/dist/components/simple/navigation/Chip.svelte.d.ts +42 -31
  178. package/dist/components/simple/navigation/Drawer.svelte +107 -65
  179. package/dist/components/simple/navigation/Drawer.svelte.d.ts +50 -37
  180. package/dist/components/simple/navigation/HeaderMenu.svelte +40 -23
  181. package/dist/components/simple/navigation/HeaderMenu.svelte.d.ts +39 -35
  182. package/dist/components/simple/navigation/Navigator.svelte +30 -8
  183. package/dist/components/simple/navigation/Navigator.svelte.d.ts +28 -24
  184. package/dist/components/simple/navigation/TabSwitcher.svelte +83 -47
  185. package/dist/components/simple/navigation/TabSwitcher.svelte.d.ts +38 -34
  186. package/dist/components/simple/notifiers/AlertBanner.svelte +43 -15
  187. package/dist/components/simple/notifiers/AlertBanner.svelte.d.ts +41 -37
  188. package/dist/components/simple/progress/ProgressBar.svelte +20 -13
  189. package/dist/components/simple/progress/ProgressBar.svelte.d.ts +21 -17
  190. package/dist/components/simple/timeline/SimpleTimeLine.svelte +19 -5
  191. package/dist/components/simple/timeline/SimpleTimeLine.svelte.d.ts +39 -35
  192. package/dist/components/simple/typography/Code.svelte +27 -12
  193. package/dist/components/simple/typography/Code.svelte.d.ts +28 -24
  194. package/dist/css/flag-icons/css/flag-icons.css +6 -0
  195. package/dist/css/flag-icons/css/flag-icons.min.css +1 -1
  196. package/dist/stores/debounce.d.ts +0 -1
  197. package/dist/stores/layouts/unstableSidebarOpened.d.ts +0 -1
  198. package/dist/stores/mediaQuery.d.ts +0 -1
  199. package/dist/stores/theme.d.ts +0 -1
  200. package/package.json +1 -1
@@ -1,798 +1,1194 @@
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);
44
- }
45
- }
46
- tableHTML.classList.add("dynamic-resizable");
47
- resizeObserver = new ResizeObserver(() => {
48
- updateRemainingWidth();
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(() => {
49
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
+ }
50
67
  });
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");
68
+
69
+ function updateHeaderHeight() {
70
+ if (mainHeader) {
71
+ const headerHeight = mainHeader.getBoundingClientRect().height;
72
+ document.documentElement.style.setProperty('--main-header-height', headerHeight + 'px');
73
+ }
62
74
  }
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) {
75
+
76
+ function setReachedBottomOrTop(){
77
+ reachedBottom = tableContainer.scrollHeight - tableContainer.scrollTop === tableContainer.clientHeight
78
+ reachedTop = tableContainer.scrollTop === 0
79
+ hideScrollbar = tableContainer.scrollHeight > tableContainer.clientHeight
80
+ }
81
+
82
+ $: if(reachedBottom && rows.length < totalRows) {
71
83
  setTimeout(() => {
72
- if (reachedBottom) {
73
- handleLoadForward();
84
+ if(reachedBottom) {
85
+ handleLoadForward()
74
86
  }
75
- }, 30);
87
+ }, 30)
76
88
  }
77
- $:
78
- if (reachedTop && currentSectionNumber > 0) {
89
+
90
+ $: if(reachedTop && currentSectionNumber > 0) {
79
91
  setTimeout(() => {
80
- if (reachedTop) {
81
- handleLoadBackward();
92
+ if(reachedTop) {
93
+ handleLoadBackward()
82
94
  }
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) => `
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) => `
94
108
  transform: ${transform} scale(${t});
95
109
  opacity: ${t}
96
- `
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;
97
135
  };
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
120
136
  };
121
- }) : [], headersToShow = headersToShowInTable.map((h) => {
122
- return {
123
- id: h.value,
124
- name: h.label
137
+
138
+ type MenuDateType = {
139
+ key: "date";
125
140
  };
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;
142
- }
143
- } else {
144
- sortedBy = header.value;
145
- sortDirection = "asc";
146
- sortModify = header.sortModify;
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
178
+ };
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
147
217
  }
148
- handleSearchChange(searchText);
149
- dispatch("sort", {
150
- sortedBy,
151
- sortDirection
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
+ selectedAllDisabled = false
274
+
275
+ let openCellEditor: boolean = false,
276
+ cellEditorActivator: HTMLElement | undefined,
277
+ cellEditorContainer: HTMLElement | undefined,
278
+ menuElementCellEditor: HTMLElement,
279
+ menuElementQuickFilters: HTMLElement,
280
+ cellEditorInfoActive: CellEditorInfo & {
281
+ value?: any;
282
+ item?: Item;
283
+ },
284
+ saveEditDisabled: boolean = false,
285
+ searchBarInput: HTMLElement | undefined = undefined,
286
+ openQuickFilter: boolean = false,
287
+ quickFilterActivator: HTMLElement | undefined,
288
+ quickFilterActive: QuickFilter,
289
+ globalBuilder: FilterBuilder = new FilterBuilder(),
290
+ calendarOpened: boolean = false,
291
+ calendarOpened2: boolean = false,
292
+ selectedIndexes: number[] = [],
293
+ cellEditorIndexRow: number | undefined,
294
+ cellEditorIndexHeader: number | undefined,
295
+ cellEditorSubItem: boolean | undefined,
296
+ currentSectionNumber = 0,
297
+ tableBody: HTMLElement,
298
+ tableContainer: HTMLElement,
299
+ tableHTML: HTMLElement,
300
+ headersHTML: { [value: string]: HTMLElement } = {},
301
+ userScrolling = true,
302
+ reachedBottom = false,
303
+ reachedTop = false,
304
+ resizing = false,
305
+ remainingWidth = 0,
306
+ hideScrollbar = false,
307
+ sortModify: Header['sortModify'],
308
+ mainHeader: Element,
309
+ resizeObserver: ResizeObserver,
310
+ ignoreSelectAll = rows.length == totalRows && useSelectedItemsOnly
311
+
312
+ const DEFAULT_MIN_WIDTH_PX = 100,
313
+ DEFAULT_MAX_WIDTH_PX = 400
314
+
315
+ $: totalSections = (totalRows - renderedRowsNumber) / sectionRowsNumber
316
+ $: hasMoreToRender = totalSections > currentSectionNumber
317
+ $: totalCachedSections = (rows.length - renderedRowsNumber) / sectionRowsNumber
318
+ $: renderedRows = rows.slice(currentSectionNumber * sectionRowsNumber, currentSectionNumber * sectionRowsNumber + renderedRowsNumber)
319
+
320
+ let openHeaderDrawer: boolean = false,
321
+ headersToSelect: {
322
+ id: string;
323
+ name: string;
324
+ }[] = !!headers
325
+ ? headers
326
+ .filter((h) => {
327
+ return !headersToShowInTable.find((hst) => hst.value == h.value);
328
+ })
329
+ .map((h) => {
330
+ return {
331
+ id: h.value,
332
+ name: h.label,
333
+ };
334
+ })
335
+ : [],
336
+ headersToShow: {
337
+ id: string;
338
+ name: string;
339
+ }[] = headersToShowInTable.map((h) => {
340
+ return {
341
+ id: h.value,
342
+ name: h.label,
343
+ };
344
+ }),
345
+ infoActivators = Array(headersToShowInTable.length)
346
+
347
+ let totalBatchLength: number = 0,
348
+ expandedRows: Row[] = [];
349
+
350
+ function saveHeadersToShow() {
351
+ dispatch("saveHeadersToShow", {
352
+ headersToShow: headersToShow,
152
353
  });
354
+ openHeaderDrawer = false;
153
355
  }
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);
356
+
357
+ function handleHeaderClick(header: Header) {
358
+ if (header.sortable && !loading && !resizing) {
359
+ if (!!sortedBy && header.value == sortedBy) {
360
+ if (sortDirection == "asc") sortDirection = "desc";
361
+ else if (sortDirection == "desc") {
362
+ sortedBy = undefined;
363
+ sortModify = undefined
364
+ }
365
+ } else {
366
+ sortedBy = header.value;
367
+ sortDirection = "asc";
368
+ sortModify = header.sortModify
192
369
  }
370
+
371
+ handleSearchChange(searchText);
372
+
373
+ dispatch("sort", {
374
+ sortedBy,
375
+ sortDirection,
376
+ });
193
377
  }
194
378
  }
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
- }
379
+
380
+ function handleRowClick(item: { [key: string]: any }) {
381
+ if (disabled || loading) return;
382
+ dispatch("rowClick", {
383
+ item,
384
+ });
385
+ }
386
+
387
+ function handleCellClick(
388
+ mouseEvent: MouseEvent & {
389
+ currentTarget: EventTarget & HTMLTableCellElement;
390
+ },
391
+ item: Item,
392
+ cellEditorInfo?: CellEditorInfo,
393
+ value?: any,
394
+ indexRow?: number,
395
+ indexHeader?: number,
396
+ subItem?: boolean
397
+ ) {
398
+ if (disabled || loading) return;
399
+ if (cellEdit && cellEditorInfo && !item.disableEdit) {
400
+ if (!cellEditorActivator) {
401
+ let target = mouseEvent.target as unknown as HTMLElement;
402
+ cellEditorActivator = target;
403
+
404
+ cellEditorIndexRow = indexRow
405
+ cellEditorIndexHeader = indexHeader
406
+ cellEditorSubItem = subItem
407
+
408
+ cellEditorInfoActive = {
409
+ ...cellEditorInfo,
410
+ value: value,
411
+ item: item,
412
+ };
413
+
414
+ openCellEditor = !openCellEditor;
415
+
416
+ const element = target.getBoundingClientRect();
417
+ const windowHeight = window.innerHeight;
418
+ const windowWidth = window.innerWidth;
419
+
420
+ if (openCellEditor) {
421
+ setTimeout(() => {
422
+ if (windowHeight - element.bottom < 300) {
423
+ cellEditorContainer!.style.bottom = `${
424
+ windowHeight - element.top
425
+ }px`;
243
426
  } else {
244
- if (!selectedItems.find((selectedItem) => selectedItem[uniqueKey] == rows[i].item[uniqueKey])) {
245
- selectedItems = [...selectedItems, rows[i].item];
427
+ cellEditorContainer!.style.top = `${element.bottom}px`;
428
+ }
429
+
430
+ if (windowWidth - element.right < 400) {
431
+ cellEditorContainer!.style.right = `${
432
+ windowWidth - element.left - cellEditorActivator!.clientWidth
433
+ }px`;
434
+ }
435
+ }, 0);
436
+ }
437
+ }
438
+ }
439
+
440
+ dispatch("cellClick", {
441
+ item,
442
+ });
443
+ }
444
+
445
+ function handleSaveClick() {
446
+ cellEditorIndexHeader = undefined
447
+ cellEditorIndexRow = undefined
448
+ cellEditorSubItem = undefined
449
+
450
+ dispatch("saveCellEdit", {
451
+ item: cellEditorInfoActive,
452
+ });
453
+
454
+ cellEditorActivator = undefined;
455
+ openCellEditor = false;
456
+ }
457
+
458
+ function handleCancelClick() {
459
+ cellEditorIndexHeader = undefined
460
+ cellEditorIndexRow = undefined
461
+ cellEditorSubItem = undefined
462
+
463
+ cellEditorActivator = undefined;
464
+ openCellEditor = false;
465
+
466
+ quickFilterActivator = undefined;
467
+ openQuickFilter = false;
468
+ }
469
+
470
+ function handleSelect(item: Item, shiftKeyPressed: boolean) {
471
+ let index = -1
472
+ if(selectedAll && !ignoreSelectAll) {
473
+ index = unselectedItems.findIndex((i) => i[uniqueKey] == item[uniqueKey]);
474
+ } else {
475
+ index = selectedItems.findIndex((i) => i[uniqueKey] == item[uniqueKey]);
476
+ }
477
+ // if item is not in the selected/unselected items array, add it
478
+ if (index == -1) {
479
+ if (selectMode == "single") {
480
+ selectedItems = [item];
481
+ selectedIndexes = [rows.findIndex(r => r.item[uniqueKey] == item[uniqueKey])]
482
+ } else if (selectMode == "multiple") {
483
+ if(shiftKeyPressed && selectedIndexes.length > 0) {
484
+ let lastSelectedIndex = selectedIndexes[selectedIndexes.length - 1],
485
+ selectedIndex = rows.findIndex(r => r.item[uniqueKey] == item[uniqueKey])
486
+ if(selectedIndex != -1) {
487
+ if(selectedIndex < lastSelectedIndex) {
488
+ let x = lastSelectedIndex
489
+ lastSelectedIndex = selectedIndex - 1
490
+ selectedIndex = x
491
+ }
492
+ for (let i = lastSelectedIndex + 1; i <= selectedIndex; i++) {
493
+ if(selectedAll && !ignoreSelectAll) {
494
+ if(!unselectedItems.find((unselectedItem) => unselectedItem[uniqueKey] == rows[i].item[uniqueKey])) {
495
+ unselectedItems = [...unselectedItems, rows[i].item]
496
+ }
497
+ } else {
498
+ if(!selectedItems.find((selectedItem) => selectedItem[uniqueKey] == rows[i].item[uniqueKey])) {
499
+ selectedItems = [...selectedItems, rows[i].item]
500
+ }
246
501
  }
247
502
  }
248
503
  }
249
504
  }
250
- } else {
251
- if (selectedAll && !ignoreSelectAll) {
252
- unselectedItems = [...unselectedItems, item];
253
- } else {
254
- selectedItems = [...selectedItems, item];
505
+ else {
506
+ if(selectedAll && !ignoreSelectAll) {
507
+ unselectedItems = [...unselectedItems, item];
508
+ } else {
509
+ selectedItems = [...selectedItems, item];
510
+ }
511
+ selectedIndexes.push(rows.findIndex(r => r.item[uniqueKey] == item[uniqueKey]))
255
512
  }
256
- selectedIndexes.push(rows.findIndex((r) => r.item[uniqueKey] == item[uniqueKey]));
257
513
  }
258
- }
259
- } else {
260
- if (selectedAll && !ignoreSelectAll) {
261
- unselectedItems = unselectedItems.filter((i) => i[uniqueKey] != item[uniqueKey]);
262
514
  } else {
263
- selectedItems = selectedItems.filter((i) => i[uniqueKey] != item[uniqueKey]);
515
+ if(selectedAll && !ignoreSelectAll) {
516
+ unselectedItems = unselectedItems.filter((i) => i[uniqueKey] != item[uniqueKey]);
517
+ } else {
518
+ selectedItems = selectedItems.filter((i) => i[uniqueKey] != item[uniqueKey]);
519
+ }
520
+ selectedIndexes = selectedIndexes.filter(r => r != rows.findIndex(r => r.item[uniqueKey] == item[uniqueKey]))
264
521
  }
265
- selectedIndexes = selectedIndexes.filter((r) => r != rows.findIndex((r2) => r2.item[uniqueKey] == item[uniqueKey]));
266
522
  }
267
- }
268
- function handleSelectAll() {
269
- if (selectMode == "multiple") {
270
- if (!selectedAll && ignoreSelectAll) {
271
- selectedItems = rows.map((r) => r.item);
272
- } else {
273
- selectedItems = [];
523
+
524
+ function handleSelectAll() {
525
+ if (selectMode == "multiple") {
526
+ if(!selectedAll && ignoreSelectAll) {
527
+ selectedItems = rows.map(r => r.item)
528
+ }
529
+ else {
530
+ selectedItems = []
531
+ }
532
+ selectedIndexes = []
533
+ unselectedItems = []
534
+ selectedAll = !selectedAll
274
535
  }
275
- selectedIndexes = [];
276
- unselectedItems = [];
277
- selectedAll = !selectedAll;
278
- }
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]);
286
536
  }
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;
537
+
538
+ function expandRow(row: Row) {
539
+ let index = expandedRows.findIndex((r) => r.item[uniqueKey] == row.item[uniqueKey]);
540
+ if (index == -1) {
541
+ expandedRows = [...expandedRows, row];
542
+ } else {
543
+ expandedRows = expandedRows.filter((r) => r.item[uniqueKey] != row.item[uniqueKey]);
544
+ }
304
545
  }
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
- });
546
+
547
+ function formatDate(
548
+ dateTime: DateTime,
549
+ dateFormat: Extract<HeaderType, { key: "date" }>["params"]
550
+ ): string {
551
+ return dateTime.setLocale(dateFormat.locale).toFormat(dateFormat.format);
319
552
  }
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]);
553
+
554
+ $: {
555
+ if (!showExpand) {
556
+ totalBatchLength = rows.length;
557
+ } else {
558
+ totalBatchLength = rows.reduce(
559
+ (acc, row) => acc + row.subItems.length,
560
+ rows.length
561
+ );
329
562
  }
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 });
563
+
564
+ if (
565
+ !!cellEditorInfoActive &&
566
+ cellEditorInfoActive.type.key == "number" &&
567
+ ((cellEditorInfoActive.type.params?.min != undefined &&
568
+ cellEditorInfoActive.value < cellEditorInfoActive.type.params.min) ||
569
+ (cellEditorInfoActive.type.params?.max != undefined &&
570
+ cellEditorInfoActive.value > cellEditorInfoActive.type.params.max))
571
+ ) {
572
+ saveEditDisabled = true;
346
573
  } else {
347
- globalBuilder.orderBy(sortedBy, sortDirection || "asc");
574
+ saveEditDisabled = false;
348
575
  }
349
576
  }
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
- );
577
+
578
+ function searchTextBuilder(searchText?: string) {
579
+ let builder: FilterBuilder;
580
+
581
+ let converter = new Converter();
582
+ builder = converter.createBuilder({
583
+ filters: filters || [],
584
+ });
585
+
586
+ if (!!searchText && !!searchBarColumns && searchBarColumns.length > 0) {
587
+ builder.where((b) => {
588
+ b.where(searchBarColumns![0], "ilike", "%" + searchText + "%");
589
+ for (let i = 1; i < searchBarColumns!.length; i += 1) {
590
+ b.orWhere(searchBarColumns![i], "ilike", "%" + searchText + "%");
591
+ }
592
+ });
391
593
  }
594
+
595
+ return builder;
392
596
  }
393
- if (dispatchFiltersChange) {
394
- quickFilters = quickFilters;
395
- handleFiltersChange();
396
- }
397
- return globalBuilder;
398
- }
399
- function handleSearchBoxKeydown(e) {
400
- if (e.key == "Enter") {
401
- handleFiltersChange();
597
+
598
+ let syncTimer: NodeJS.Timeout;
599
+ function handleSearchChange(searchText: string | undefined) {
600
+ clearTimeout(syncTimer);
601
+ syncTimer = setTimeout(async () => {
602
+ globalBuilder = searchTextBuilder(searchText);
603
+ for (let i = 0; i < quickFilters.length; i++) {
604
+ globalBuilder = quickFilterBuilder(globalBuilder, quickFilters[i]);
605
+ }
606
+
607
+ handleFiltersChange();
608
+ }, 800);
402
609
  }
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;
610
+
611
+ $: if (searchText != undefined) handleSearchChange(searchText);
612
+
613
+ function handleFiltersChange() {
614
+ if(!!tableContainer) {
615
+ userScrolling = false
616
+ currentSectionNumber = 0
617
+ tableContainer.scrollTop = 0
618
+ setTimeout(() => userScrolling = true, 20)
619
+ }
620
+
621
+ if (!!sortedBy) {
622
+ if(sortModify){
623
+ globalBuilder = sortModify({ builder: globalBuilder, sortDirection })
624
+ }
625
+ else {
626
+ globalBuilder.orderBy(sortedBy, sortDirection || "asc");
413
627
  }
414
628
  }
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;
441
- }
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;
629
+
630
+ dispatch("filtersChange", {
631
+ builder: globalBuilder,
632
+ });
454
633
  }
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);
634
+
635
+ function handleClearQuickFilter(
636
+ quickFilter: QuickFilter,
637
+ dispatchFiltersChange: boolean = true
638
+ ) {
639
+ if (quickFilter.type.key == 'custom') {
640
+ quickFilter.type.value = undefined;
641
+ quickFilter.type.missingValue = undefined;
642
+ if(dispatchFiltersChange) {
643
+ dispatch('removeCustomQuickFilter', { quickFilter })
644
+ }
461
645
  }
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);
646
+ else if (quickFilter.type.key == "string") {
647
+ quickFilter.type.value = undefined;
648
+ quickFilter.type.missingValue = undefined;
649
+ } else if (quickFilter.type.key == "number") {
650
+ quickFilter.type.value = undefined;
651
+ quickFilter.type.missingValue = undefined;
652
+ } else if (quickFilter.type.key == "boolean") {
653
+ quickFilter.type.value = undefined;
654
+ } else if (quickFilter.type.key == "country") {
655
+ quickFilter.type.selected = undefined;
656
+ quickFilter.type.missingValue = undefined;
657
+ } else if (quickFilter.type.key == "date") {
658
+ quickFilter.type.from = undefined;
659
+ quickFilter.type.to = undefined;
660
+ } else if (quickFilter.type.key == "multi-select") {
661
+ quickFilter.type.values = [];
662
+ quickFilter.type.missingValue = false;
663
+ quickFilter.type.missingValue = undefined;
472
664
  }
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
- });
665
+
666
+ if (dispatchFiltersChange) {
667
+ quickFilter.active = false;
480
668
  }
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
669
+
670
+ globalBuilder = searchTextBuilder(searchText);
671
+
672
+ for (let i = 0; i < quickFilters.length; i++) {
673
+ if (quickFilters[i].active) {
674
+ globalBuilder = quickFilterBuilder(
675
+ globalBuilder,
676
+ quickFilters[i],
677
+ false
489
678
  );
490
679
  }
491
680
  }
492
- } else if (quickFilter.type.key == "boolean") {
493
- let value = quickFilter.type.value;
494
- if (clearPreaviousValue) {
495
- builder = handleClearQuickFilter(quickFilter, false);
496
- }
497
- quickFilter.type.value = value;
498
- if (quickFilter.type.modify) {
499
- builder = quickFilter.type.modify({
500
- builder,
501
- value
502
- });
503
- }
504
- if (!!quickFilter.column && value != void 0) {
505
- builder.where(quickFilter.column, value);
506
- }
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);
681
+
682
+ if (dispatchFiltersChange) {
683
+ quickFilters = quickFilters;
684
+ handleFiltersChange();
511
685
  }
512
- quickFilter.type.selected = value;
513
- quickFilter.type.missingValue = missingValue;
514
- const values = value?.map((item) => item.value);
515
- if (quickFilter.type.modify) {
516
- builder = quickFilter.type.modify({
517
- builder,
518
- value: { values, missingValue }
519
- });
686
+
687
+ return globalBuilder;
688
+ }
689
+
690
+ function handleSearchBoxKeydown(e: KeyboardEvent) {
691
+ if (e.key == "Enter") {
692
+ handleFiltersChange();
520
693
  }
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);
694
+ }
695
+
696
+ function handleQuickFilterClick(
697
+ mouseEvent: MouseEvent & {
698
+ currentTarget: EventTarget & HTMLButtonElement;
699
+ },
700
+ quickFilter?: QuickFilter
701
+ ) {
702
+ handleCancelClick();
703
+ setTimeout(() => {
704
+ if (quickFilter) {
705
+ if (!quickFilterActivator) {
706
+ let target = mouseEvent.target as unknown as HTMLElement;
707
+ quickFilterActivator = target;
708
+ quickFilterActive = quickFilter;
709
+ openQuickFilter = !openQuickFilter;
710
+ }
526
711
  }
712
+ }, 300);
713
+ }
714
+
715
+ function setQuickFilterMissingValue(quickFilter: QuickFilter) {
716
+ if (quickFilter.type.key == 'custom') {
717
+ quickFilter.type.missingValue = true;
718
+ quickFilter.type.value = undefined;
527
719
  }
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);
720
+ else if (quickFilter.type.key == "multi-select") {
721
+ quickFilter.type.missingValue = true;
722
+ quickFilter.type.values = [];
723
+ } else if (quickFilter.type.key == "string") {
724
+ quickFilter.type.missingValue = true;
725
+ quickFilter.type.value = undefined;
726
+ } else if (quickFilter.type.key == "country") {
727
+ quickFilter.type.missingValue = true;
728
+ quickFilter.type.selected = undefined;
729
+ } else if (quickFilter.type.key == "number") {
730
+ quickFilter.type.missingValue = true;
731
+ quickFilter.type.value = undefined;
532
732
  }
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
- );
547
- }
548
- if (!!to) {
549
- builder.where(
550
- quickFilter.column,
551
- "<=",
552
- DateTime.fromJSDate(to).setLocale("it-IT").endOf("day").toString()
553
- );
554
- }
733
+
734
+ handleApplyClick(quickFilter);
735
+ }
736
+
737
+ function setQuickFilterValue(quickFilter: QuickFilter, value?: any) {
738
+ if (quickFilter.type.key == "custom") {
739
+ quickFilter.type.value = value;
740
+ }
741
+ else if (quickFilter.type.key == "boolean") {
742
+ quickFilter.type.value = value;
743
+ }
744
+
745
+ handleApplyClick(quickFilter);
746
+ }
747
+
748
+ function handleApplyClick(quickFilter: QuickFilter, dispatchCustomFilterClick: boolean = false) {
749
+ if(quickFilter.type.key == 'custom' && dispatchCustomFilterClick) {
750
+ dispatch('applyCustomQuickFilter', { quickFilter, setQuickFilterValue})
555
751
  }
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);
752
+ else {
753
+ quickFilter.active = true;
754
+ quickFilters = quickFilters;
755
+ globalBuilder = quickFilterBuilder(globalBuilder, quickFilter);
756
+
757
+ handleFiltersChange();
758
+
759
+ quickFilterActivator = undefined;
760
+ openQuickFilter = false;
560
761
  }
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);
762
+ }
763
+
764
+ function quickFilterBuilder(
765
+ builder: FilterBuilder,
766
+ quickFilter: QuickFilter,
767
+ clearPreaviousValue: boolean = true
768
+ ) {
769
+ if (quickFilter.type.key == 'custom') {
770
+ let value = quickFilter.type.value,
771
+ missingValue = quickFilter.type.missingValue;
772
+ if (clearPreaviousValue) {
773
+ builder = handleClearQuickFilter(quickFilter, false);
574
774
  }
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) {
775
+ quickFilter.type.value = value;
776
+ quickFilter.type.missingValue = missingValue;
777
+
584
778
  builder = quickFilter.type.modify({
585
779
  builder,
586
- value: { value, missingValue }
780
+ value: { value, missingValue },
587
781
  });
588
782
  }
589
- if (quickFilter.column) {
590
- if (missingValue) {
591
- builder.whereNull(quickFilter.column);
592
- } else if (!!value) {
783
+ else if (quickFilter.type.key == "string") {
784
+ let value = quickFilter.type.value,
785
+ missingValue = quickFilter.type.missingValue;
786
+ if (clearPreaviousValue) {
787
+ builder = handleClearQuickFilter(quickFilter, false);
788
+ }
789
+ quickFilter.type.value = value;
790
+ quickFilter.type.missingValue = missingValue;
791
+
792
+ if (quickFilter.type.modify) {
793
+ builder = quickFilter.type.modify({
794
+ builder,
795
+ value: { value, missingValue },
796
+ });
797
+ }
798
+
799
+ if (!!quickFilter.column) {
800
+ if (missingValue) {
801
+ builder.whereNull(quickFilter.column);
802
+ } else if (!!value) {
803
+ builder.where(
804
+ quickFilter.column,
805
+ quickFilter.type.mode ?? "equal",
806
+ value
807
+ );
808
+ }
809
+ }
810
+ } else if (quickFilter.type.key == "boolean") {
811
+ let value = quickFilter.type.value;
812
+ if (clearPreaviousValue) {
813
+ builder = handleClearQuickFilter(quickFilter, false);
814
+ }
815
+ quickFilter.type.value = value;
816
+
817
+ if (quickFilter.type.modify) {
818
+ builder = quickFilter.type.modify({
819
+ builder,
820
+ value,
821
+ });
822
+ }
823
+
824
+ if (!!quickFilter.column && value != undefined) {
593
825
  builder.where(quickFilter.column, value);
594
826
  }
827
+ } else if (quickFilter.type.key == "country") {
828
+ let value = quickFilter.type.selected,
829
+ missingValue = quickFilter.type.missingValue;
830
+ if (clearPreaviousValue) {
831
+ builder = handleClearQuickFilter(quickFilter, false);
832
+ }
833
+ quickFilter.type.selected = value;
834
+ quickFilter.type.missingValue = missingValue;
835
+
836
+ const values = value?.map((item) => item.value);
837
+ if (quickFilter.type.modify) {
838
+ builder = quickFilter.type.modify({
839
+ builder,
840
+ value: { values, missingValue },
841
+ });
842
+ }
843
+
844
+ if (!!quickFilter.column) {
845
+ if (missingValue) {
846
+ builder.whereNull(quickFilter.column);
847
+ } else if (!!values && values.length > 0) {
848
+ builder.whereIn(quickFilter.column, values);
849
+ }
850
+ }
851
+ } else if (quickFilter.type.key == "date") {
852
+ let from = quickFilter.type.from,
853
+ to = quickFilter.type.to;
854
+ if (clearPreaviousValue) {
855
+ builder = handleClearQuickFilter(quickFilter, false);
856
+ }
857
+ quickFilter.type.from = from;
858
+ quickFilter.type.to = to;
859
+
860
+ if (quickFilter.type.modify) {
861
+ builder = quickFilter.type.modify({
862
+ builder,
863
+ value: { from, to },
864
+ });
865
+ } else if (!!quickFilter.column) {
866
+ if (!!from) {
867
+ builder.where(
868
+ quickFilter.column,
869
+ ">=",
870
+ DateTime.fromJSDate(from).setLocale('it-IT').startOf('day').toString()
871
+ );
872
+ }
873
+ if (!!to) {
874
+ builder.where(
875
+ quickFilter.column,
876
+ "<=",
877
+ DateTime.fromJSDate(to).setLocale('it-IT').endOf('day').toString() );
878
+ }
879
+ }
880
+ } else if (quickFilter.type.key == "multi-select") {
881
+ let value = quickFilter.type.values,
882
+ missingValue = quickFilter.type.missingValue;
883
+ if (clearPreaviousValue) {
884
+ builder = handleClearQuickFilter(quickFilter, false);
885
+ }
886
+ quickFilter.type.values = value;
887
+ quickFilter.type.missingValue = missingValue;
888
+
889
+ const values = value.map(item => item.value);
890
+
891
+ if (quickFilter.type.modify) {
892
+ builder = quickFilter.type.modify({
893
+ builder,
894
+ value: { values: values, missingValue },
895
+ });
896
+ } else if (quickFilter.column) {
897
+ if (missingValue) {
898
+ builder.whereNull(quickFilter.column);
899
+ } else if (values.length > 0) {
900
+ builder.whereIn(quickFilter.column, values);
901
+ }
902
+ }
903
+ } else if (quickFilter.type.key == "number") {
904
+ let value = quickFilter.type.value,
905
+ missingValue = quickFilter.type.missingValue;
906
+ if (clearPreaviousValue) {
907
+ builder = handleClearQuickFilter(quickFilter, false);
908
+ }
909
+ quickFilter.type.value = value;
910
+ quickFilter.type.missingValue = missingValue;
911
+
912
+ if (quickFilter.type.modify) {
913
+ builder = quickFilter.type.modify({
914
+ builder,
915
+ value: { value, missingValue },
916
+ });
917
+ }
918
+
919
+ if (quickFilter.column) {
920
+ if (missingValue) {
921
+ builder.whereNull(quickFilter.column);
922
+ } else if (!!value) {
923
+ builder.where(quickFilter.column, value);
924
+ }
925
+ }
595
926
  }
927
+
928
+ return builder;
596
929
  }
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;
605
- }
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;
611
- }
612
- } else {
613
- newValue = filter.value;
614
- if (!!newValue) {
615
- newValid = true;
930
+
931
+ function updateFilterValues(filter: Filter, updateMultiFilterValues: (filterName: string, newValue: any, newValid: boolean, newMode?: NumberMode | StringMode | SelectMode | DateMode) => void) {
932
+ let newValue: any = {},
933
+ newValid: boolean = false,
934
+ newMode = filter.type == 'date' ||
935
+ filter.type == 'number' ||
936
+ filter.type == 'select' ||
937
+ filter.type == 'string' ?
938
+ filter.mode :
939
+ undefined
940
+ if(filter.type == 'select') {
941
+ newValue = filter.values
942
+ if(newValue.length > 0) {
943
+ newValid = true
944
+ }
945
+ } else if('mode' in filter && filter.mode == 'between') {
946
+ newValue.to = filter.to
947
+ newValue.from = filter.from
948
+ if(!!newValue.from || !!newValue.to) {
949
+ newValid = true
950
+ }
951
+ } else {
952
+ newValue = filter.value
953
+ if(!!newValue) {
954
+ newValid = true
955
+ }
616
956
  }
957
+ updateMultiFilterValues(filter.name, newValue, newValid, newMode)
617
958
  }
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++;
959
+
960
+ function handleRemoveAllFilters() {
961
+ dispatch('removeAllFilters', {})
962
+ handleSearchChange(searchText);
963
+ }
964
+
965
+ function handleRemoveFilter(filter: Filter) {
966
+ dispatch('removeFilter', { filter})
967
+ handleSearchChange(searchText);
968
+ }
969
+
970
+ async function handleLoadForward() {
971
+ if(renderedRows.length >= renderedRowsNumber) {
972
+ userScrolling = false
973
+
974
+ const anchorIndex = renderedRowsNumber - 1
975
+ const anchorUniqueKey = renderedRows[anchorIndex].item[uniqueKey]
976
+ const anchorElement = findAnchorElement(anchorUniqueKey)
977
+ const anchorOffsetBefore = anchorElement?.getBoundingClientRect().top || 0
978
+
979
+ let removedRowCount = 0
980
+
981
+ for (let i = 0; removedRowCount < sectionRowsNumber; i++) {
982
+ let row = tableBody.children.item(i)
983
+ removedRowCount++
984
+
985
+ const rowKey = row?.getAttribute("data-key")
986
+ const isExpanded = expandedRows.some(r => r.item[uniqueKey] == rowKey)
987
+
988
+ if (isExpanded) {
989
+ i++
990
+ }
643
991
  }
992
+
993
+ currentSectionNumber = currentSectionNumber + 1
994
+
995
+ await tick()
996
+ const anchorElementAfter = findAnchorElement(anchorUniqueKey)
997
+ const anchorOffsetAfter = anchorElementAfter?.getBoundingClientRect().top || 0
998
+ const offsetDiff = anchorOffsetAfter - anchorOffsetBefore
999
+ tableContainer.scrollTop += offsetDiff
1000
+
1001
+ userScrolling = true
1002
+ }
1003
+
1004
+ if(totalCachedSections - sectionThreshold <= currentSectionNumber
1005
+ && !loading
1006
+ && totalRows > rows.length
1007
+ ) {
1008
+ dispatch("fetchData", {});
644
1009
  }
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;
652
- }
653
- if (totalCachedSections - sectionThreshold <= currentSectionNumber && !loading && totalRows > rows.length) {
654
- dispatch("fetchData", {});
655
1010
  }
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--;
1011
+
1012
+ async function handleLoadBackward() {
1013
+ if(currentSectionNumber > 0) {
1014
+ userScrolling = false
1015
+
1016
+ const anchorIndex = 0
1017
+ const anchorUniqueKey = renderedRows[anchorIndex].item[uniqueKey]
1018
+ const anchorElement = findAnchorElement(anchorUniqueKey)
1019
+ const anchorOffsetBefore = anchorElement?.getBoundingClientRect().top || 0
1020
+
1021
+ let removedRowCount = 0
1022
+
1023
+ for (let i = renderedRows.length - 1; removedRowCount < sectionRowsNumber; i--) {
1024
+ let row = tableBody.children.item(i)
1025
+ removedRowCount++
1026
+
1027
+ const rowKey = row?.getAttribute("data-key")
1028
+ const isExpanded = expandedRows.some(r => r.item[uniqueKey] == rowKey)
1029
+
1030
+ if (isExpanded) {
1031
+ i--
1032
+ }
672
1033
  }
1034
+
1035
+ currentSectionNumber = currentSectionNumber - 1
1036
+
1037
+ await tick()
1038
+ const anchorElementAfter = findAnchorElement(anchorUniqueKey)
1039
+ const anchorOffsetAfter = anchorElementAfter?.getBoundingClientRect().top || 0
1040
+ const offsetDiff = anchorOffsetAfter - anchorOffsetBefore
1041
+ tableContainer.scrollTop += offsetDiff
1042
+
1043
+ userScrolling = true
673
1044
  }
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;
681
1045
  }
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;
1046
+
1047
+ function findAnchorElement(key: keyof Item) {
1048
+ for (let i = 0; i < tableBody.children.length; i++) {
1049
+ const child = tableBody.children.item(i)
1050
+ if (child?.getAttribute("data-key") == key) {
1051
+ return child
1052
+ }
688
1053
  }
1054
+ return undefined
689
1055
  }
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);
704
- }
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);
709
- }
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;
1056
+
1057
+ function resize(node: HTMLElement) {
1058
+ let th: HTMLElement | null = node.parentElement
1059
+ let resizingInner = false
1060
+
1061
+ if(!!th) {
1062
+ let { width } = th.getBoundingClientRect()
1063
+
1064
+ function mouseMoveHandler(e: MouseEvent) {
1065
+ if (resizingInner && !!th && !!tableContainer) {
1066
+ width += e.movementX;
1067
+ const { paddingLeft, paddingRight } = getComputedStyle(th);
1068
+
1069
+ const minWidth: string | undefined = headers.find(h => h.value === th.id)?.minWidth;
1070
+ let minWidthPx: number | undefined;
1071
+ if (!!minWidth && minWidth.endsWith('px')) {
1072
+ minWidthPx = parseInt(minWidth, 10);
1073
+ }
1074
+
1075
+ const maxWidth: string | undefined = headers.find(h => h.value === th.id)?.maxWidth;
1076
+ let maxWidthPx: number | undefined;
1077
+ if (!!maxWidth && maxWidth.endsWith('px')) {
1078
+ maxWidthPx = parseInt(maxWidth, 10);
1079
+ }
1080
+
1081
+ const actualMinWidth = (minWidthPx || DEFAULT_MIN_WIDTH_PX) - parseFloat(paddingLeft) - parseFloat(paddingRight);
1082
+ const actualMaxWidth = (maxWidthPx || DEFAULT_MAX_WIDTH_PX) - parseFloat(paddingLeft) - parseFloat(paddingRight);
1083
+
1084
+ if (width > actualMinWidth && width < actualMaxWidth) {
1085
+ th.style.width = width + 'px';
1086
+ resizedColumnSizeWithPadding[th.id] = th.getBoundingClientRect().width;
1087
+ resizedColumnSizeWithPadding = resizedColumnSizeWithPadding
1088
+ }
716
1089
  }
717
1090
  }
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);
1091
+
1092
+
1093
+ function mouseUpHandler(e: MouseEvent, setResize: boolean = true) {
1094
+ if(!!th) {
1095
+ resizingInner = false
1096
+ let { paddingLeft, paddingRight } = getComputedStyle(th)
1097
+ width = th.getBoundingClientRect().width - parseFloat(paddingLeft) - parseFloat(paddingRight)
1098
+ if(setResize){
1099
+ setTimeout(() => resizing = false, 20)
1100
+ }
1101
+ dispatch('columnResize', {
1102
+ id: th.id,
1103
+ newWidthPx: width
1104
+ })
725
1105
  }
726
- dispatch("columnResize", {
727
- id: th.id,
728
- newWidthPx: width
729
- });
730
1106
  }
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);
1107
+
1108
+ function mouseDownHandler(e: MouseEvent) {
1109
+ if(!!th) {
1110
+ resizing = true
1111
+ resizingInner = true
1112
+ let { paddingLeft, paddingRight } = getComputedStyle(th)
1113
+ width = th.getBoundingClientRect().width - parseFloat(paddingLeft) - parseFloat(paddingRight)
1114
+ }
737
1115
  }
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);
1116
+
1117
+ node.addEventListener('mousedown', mouseDownHandler)
1118
+ document.addEventListener('mouseup', mouseUpHandler)
1119
+ document.addEventListener('mousemove', mouseMoveHandler)
1120
+
1121
+
1122
+ return {
1123
+ destroy() {
1124
+ node.removeEventListener('mousedown', mouseDownHandler)
1125
+ document.removeEventListener('mouseup', mouseUpHandler)
1126
+ document.removeEventListener('mousemove', mouseMoveHandler)
1127
+ }
748
1128
  }
749
- };
1129
+ }
750
1130
  }
751
- }
752
- $:
753
- if (!!tableContainer && headersToShowInTable.length > 0 && resizedColumnSizeWithPadding && headersToShow.length > 0 && mainHeader) {
1131
+
1132
+ $: if (
1133
+ !!tableContainer &&
1134
+ headersToShowInTable.length > 0 &&
1135
+ resizedColumnSizeWithPadding &&
1136
+ headersToShow.length > 0 &&
1137
+ mainHeader
1138
+ ) {
754
1139
  tick().then(updateRemainingWidth);
755
1140
  }
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);
1141
+
1142
+ async function updateRemainingWidth() {
1143
+ if(tableContainer != null && !!tableContainer) {
1144
+ const containerWidth = tableContainer?.getBoundingClientRect().width - 26;
1145
+
1146
+ if(containerWidth){
1147
+ const totalResizableWidth = headersToShowInTable.reduce((sum, head) => {
1148
+ let th = headersHTML[head.value]
1149
+ if(!!th) {
1150
+ resizeHeader(th, head)
1151
+ }
1152
+ const width = th?.getBoundingClientRect().width || 0
1153
+ return sum + width + 1;
1154
+ }, 0);
1155
+
1156
+ const extraStaticWidth = Array.from(mainHeader.querySelectorAll('th.non-resizable, th.customize-headers'))
1157
+ .reduce((sum, th) => sum + th.getBoundingClientRect().width + 1, 0);
1158
+
1159
+ remainingWidth = Math.max(0, containerWidth - totalResizableWidth - extraStaticWidth);
1160
+ }
770
1161
  }
771
1162
  }
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;
782
- }
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;
1163
+
1164
+ function resizeHeader(th: HTMLElement, header: { value: string, minWidth?: string, maxWidth?: string }){
1165
+ if (!resizedColumnSizeWithPadding[header.value]) {
1166
+ let widthWihtPadding = th.getBoundingClientRect().width
1167
+
1168
+ let minWidth = header.minWidth,
1169
+ minWidthPx = DEFAULT_MIN_WIDTH_PX
1170
+ if (!!minWidth && minWidth.endsWith('px')) {
1171
+ minWidthPx = parseInt(minWidth, 10);
1172
+ }
1173
+ if(widthWihtPadding < minWidthPx) {
1174
+ widthWihtPadding = minWidthPx
1175
+ }
1176
+
1177
+ let maxWidth = header.maxWidth,
1178
+ maxWidthPx = DEFAULT_MAX_WIDTH_PX
1179
+ if (!!maxWidth && maxWidth.endsWith('px')) {
1180
+ maxWidthPx = parseInt(maxWidth, 10);
1181
+ }
1182
+ if(widthWihtPadding > maxWidthPx) {
1183
+ widthWihtPadding = maxWidthPx
1184
+ }
1185
+
1186
+ resizedColumnSizeWithPadding[header.value] = widthWihtPadding;
789
1187
  }
790
- resizedColumnSizeWithPadding[header.value] = widthWihtPadding;
1188
+ let { paddingLeft, paddingRight } = getComputedStyle(th);
1189
+ let width = resizedColumnSizeWithPadding[header.value] - parseFloat(paddingLeft) - parseFloat(paddingRight);
1190
+ th.style.width = `${width}px`
791
1191
  }
792
- let { paddingLeft, paddingRight } = getComputedStyle(th);
793
- let width = resizedColumnSizeWithPadding[header.value] - parseFloat(paddingLeft) - parseFloat(paddingRight);
794
- th.style.width = `${width}px`;
795
- }
796
1192
  </script>
797
1193
 
798
1194
  {#if !!rows && Array.isArray(rows) && !!headersToShowInTable && Array.isArray(headersToShowInTable)}
@@ -833,8 +1229,8 @@ function resizeHeader(th, header) {
833
1229
  </slot>
834
1230
 
835
1231
  <div class="filter-container">
836
- {#if filtersVisible}
837
- <div>
1232
+ <div>
1233
+ {#if filtersVisible}
838
1234
  {#if dynamicFilters}
839
1235
  <Filters
840
1236
  bind:filters
@@ -844,6 +1240,7 @@ function resizeHeader(th, header) {
844
1240
  on:removeFilter={e => { handleRemoveFilter(e.detail.filter) }}
845
1241
  on:removeAllFilters={() => handleRemoveAllFilters()}
846
1242
  --filters-default-wrapper-width="100%"
1243
+ --filters-button-height=29px
847
1244
  {lang}
848
1245
  {dateLocale}
849
1246
  {editFilterMode}
@@ -890,6 +1287,7 @@ function resizeHeader(th, header) {
890
1287
  on:removeFilter={e => { handleRemoveFilter(e.detail.filter) }}
891
1288
  on:removeAllFilters={() => handleRemoveAllFilters()}
892
1289
  --filters-default-wrapper-width="100%"
1290
+ --filters-button-height=29px
893
1291
  {lang}
894
1292
  {dateLocale}
895
1293
  {editFilterMode}
@@ -911,8 +1309,8 @@ function resizeHeader(th, header) {
911
1309
  </svelte:fragment>
912
1310
  </Filters>
913
1311
  {/if}
914
- </div>
915
- {/if}
1312
+ {/if}
1313
+ </div>
916
1314
  <div>
917
1315
  <slot name="appendFilterRow"></slot>
918
1316
  </div>
@@ -990,7 +1388,7 @@ function resizeHeader(th, header) {
990
1388
  class="non-resizable"
991
1389
  bind:this={headersHTML['non-resizable']}
992
1390
  >
993
- {#if selectMode === "multiple"}
1391
+ {#if selectMode === "multiple" && !selectedAllDisabled}
994
1392
  <Checkbox
995
1393
  id="select-all"
996
1394
  value={selectedAll}
@@ -1016,6 +1414,7 @@ function resizeHeader(th, header) {
1016
1414
  style:max-width={head.maxWidth}
1017
1415
  class:sortable={head.sortable}
1018
1416
  on:click={() => handleHeaderClick(head)}
1417
+ id={head.value}
1019
1418
  bind:this={headersHTML[head.value]}
1020
1419
  >
1021
1420
  {#if resizableColumns}
@@ -2161,7 +2560,7 @@ function resizeHeader(th, header) {
2161
2560
  .results-number {
2162
2561
  margin: 0px 0px 4px 4px;
2163
2562
  display: flex;
2164
- align-items: center;
2563
+ align-items: top;
2165
2564
  gap: 4px;
2166
2565
  min-width: 90px;
2167
2566
  }