@likable-hair/svelte 3.3.30 → 3.3.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. package/dist/components/composed/buttons/ActivableButton.svelte +6 -2
  2. package/dist/components/composed/buttons/ActivableButton.svelte.d.ts +36 -32
  3. package/dist/components/composed/common/MenuOrDrawer.svelte +30 -23
  4. package/dist/components/composed/common/MenuOrDrawer.svelte.d.ts +39 -25
  5. package/dist/components/composed/common/MenuOrDrawerOptions.svelte +42 -33
  6. package/dist/components/composed/common/MenuOrDrawerOptions.svelte.d.ts +25 -21
  7. package/dist/components/composed/common/QuickActions.svelte +84 -48
  8. package/dist/components/composed/common/QuickActions.svelte.d.ts +24 -20
  9. package/dist/components/composed/common/ToolTip.svelte +31 -22
  10. package/dist/components/composed/common/ToolTip.svelte.d.ts +32 -43
  11. package/dist/components/composed/forms/AsyncAutocomplete.svelte +44 -23
  12. package/dist/components/composed/forms/AsyncAutocomplete.svelte.d.ts +44 -39
  13. package/dist/components/composed/forms/AvatarDropdown.svelte +57 -27
  14. package/dist/components/composed/forms/AvatarDropdown.svelte.d.ts +45 -41
  15. package/dist/components/composed/forms/ConfirmOrCancelButtons.svelte +35 -17
  16. package/dist/components/composed/forms/ConfirmOrCancelButtons.svelte.d.ts +41 -37
  17. package/dist/components/composed/forms/CountriesAutocomplete.svelte +16 -7
  18. package/dist/components/composed/forms/CountriesAutocomplete.svelte.d.ts +31 -60
  19. package/dist/components/composed/forms/DatePickerTextField.svelte +166 -114
  20. package/dist/components/composed/forms/DatePickerTextField.svelte.d.ts +67 -63
  21. package/dist/components/composed/forms/Dropdown.svelte +51 -21
  22. package/dist/components/composed/forms/Dropdown.svelte.d.ts +48 -43
  23. package/dist/components/composed/forms/IconsDropdown.svelte +61 -33
  24. package/dist/components/composed/forms/IconsDropdown.svelte.d.ts +30 -26
  25. package/dist/components/composed/forms/LabelAndSelect.svelte +32 -7
  26. package/dist/components/composed/forms/LabelAndSelect.svelte.d.ts +35 -31
  27. package/dist/components/composed/forms/LabelAndTextField.svelte +30 -5
  28. package/dist/components/composed/forms/LabelAndTextField.svelte.d.ts +46 -42
  29. package/dist/components/composed/forms/ToggleList.svelte +59 -33
  30. package/dist/components/composed/forms/ToggleList.svelte.d.ts +21 -17
  31. package/dist/components/composed/forms/YearPickerTextField.svelte +114 -74
  32. package/dist/components/composed/forms/YearPickerTextField.svelte.d.ts +53 -49
  33. package/dist/components/composed/list/DynamicTable.css +10 -8
  34. package/dist/components/composed/list/DynamicTable.svelte +1138 -733
  35. package/dist/components/composed/list/DynamicTable.svelte.d.ts +370 -366
  36. package/dist/components/composed/list/PaginatedTable.svelte +144 -76
  37. package/dist/components/composed/list/PaginatedTable.svelte.d.ts +111 -110
  38. package/dist/components/composed/progress/HorizontalStackedProgress.svelte +59 -30
  39. package/dist/components/composed/progress/HorizontalStackedProgress.svelte.d.ts +26 -22
  40. package/dist/components/composed/search/DynamicFilters.svelte +104 -83
  41. package/dist/components/composed/search/DynamicFilters.svelte.d.ts +31 -27
  42. package/dist/components/composed/search/FilterEditor.svelte +106 -77
  43. package/dist/components/composed/search/FilterEditor.svelte.d.ts +37 -33
  44. package/dist/components/composed/search/Filters.svelte +363 -293
  45. package/dist/components/composed/search/Filters.svelte.d.ts +56 -52
  46. package/dist/components/composed/search/GlobalSearchTextField.svelte +79 -41
  47. package/dist/components/composed/search/GlobalSearchTextField.svelte.d.ts +43 -39
  48. package/dist/components/composed/search/MobileFilterEditor.svelte +135 -93
  49. package/dist/components/composed/search/MobileFilterEditor.svelte.d.ts +39 -35
  50. package/dist/components/composed/search/SearchBar.svelte +28 -5
  51. package/dist/components/composed/search/SearchBar.svelte.d.ts +34 -30
  52. package/dist/components/composed/search/SearchResults.svelte +42 -7
  53. package/dist/components/composed/search/SearchResults.svelte.d.ts +40 -36
  54. package/dist/components/composed/shop/ProductCard.svelte +18 -4
  55. package/dist/components/composed/shop/ProductCard.svelte.d.ts +32 -28
  56. package/dist/components/composed/shop/ProductsGrid.svelte +22 -2
  57. package/dist/components/composed/shop/ProductsGrid.svelte.d.ts +44 -40
  58. package/dist/components/layouts/CollapsibleSideBarLayout.svelte +55 -29
  59. package/dist/components/layouts/CollapsibleSideBarLayout.svelte.d.ts +85 -54
  60. package/dist/components/layouts/StableDividedSideBarLayout.svelte +47 -17
  61. package/dist/components/layouts/StableDividedSideBarLayout.svelte.d.ts +50 -32
  62. package/dist/components/layouts/UnstableDividedSideBarLayout.svelte +53 -30
  63. package/dist/components/layouts/UnstableDividedSideBarLayout.svelte.d.ts +103 -63
  64. package/dist/components/simple/buttons/Button.svelte +78 -32
  65. package/dist/components/simple/buttons/Button.svelte.d.ts +47 -35
  66. package/dist/components/simple/buttons/LinkButton.svelte +54 -22
  67. package/dist/components/simple/buttons/LinkButton.svelte.d.ts +50 -33
  68. package/dist/components/simple/charts/GanymedeBarChart.svelte +172 -134
  69. package/dist/components/simple/charts/GanymedeBarChart.svelte.d.ts +50 -46
  70. package/dist/components/simple/charts/GanymedeLineChart.svelte +157 -115
  71. package/dist/components/simple/charts/GanymedeLineChart.svelte.d.ts +51 -47
  72. package/dist/components/simple/charts/GanymedePieChart.svelte +62 -39
  73. package/dist/components/simple/charts/GanymedePieChart.svelte.d.ts +37 -33
  74. package/dist/components/simple/common/Card.svelte +20 -1
  75. package/dist/components/simple/common/Card.svelte.d.ts +51 -38
  76. package/dist/components/simple/common/CollapsibleDivider.svelte +23 -11
  77. package/dist/components/simple/common/CollapsibleDivider.svelte.d.ts +29 -25
  78. package/dist/components/simple/common/Divider.svelte +8 -2
  79. package/dist/components/simple/common/Divider.svelte.d.ts +23 -19
  80. package/dist/components/simple/common/Gesture.svelte +64 -46
  81. package/dist/components/simple/common/Gesture.svelte.d.ts +21 -17
  82. package/dist/components/simple/common/InfiniteScroll.svelte +52 -29
  83. package/dist/components/simple/common/InfiniteScroll.svelte.d.ts +24 -20
  84. package/dist/components/simple/common/IntersectionObserver.svelte +45 -32
  85. package/dist/components/simple/common/IntersectionObserver.svelte.d.ts +34 -21
  86. package/dist/components/simple/common/MediaQuery.svelte +30 -21
  87. package/dist/components/simple/common/MediaQuery.svelte.d.ts +34 -30
  88. package/dist/components/simple/common/Menu.svelte +421 -298
  89. package/dist/components/simple/common/Menu.svelte.d.ts +51 -40
  90. package/dist/components/simple/common/Playground.svelte +18 -17
  91. package/dist/components/simple/common/Playground.svelte.d.ts +19 -15
  92. package/dist/components/simple/common/VerticalDraggableList.svelte +35 -16
  93. package/dist/components/simple/common/VerticalDraggableList.svelte.d.ts +33 -29
  94. package/dist/components/simple/dashboards/DashboardGridShaper.svelte +32 -26
  95. package/dist/components/simple/dashboards/DashboardGridShaper.svelte.d.ts +16 -12
  96. package/dist/components/simple/dates/Calendar.svelte +52 -28
  97. package/dist/components/simple/dates/Calendar.svelte.d.ts +45 -41
  98. package/dist/components/simple/dates/DatePicker.svelte +90 -60
  99. package/dist/components/simple/dates/DatePicker.svelte.d.ts +44 -40
  100. package/dist/components/simple/dates/MonthSelector.svelte +37 -15
  101. package/dist/components/simple/dates/MonthSelector.svelte.d.ts +35 -31
  102. package/dist/components/simple/dates/TimePicker.svelte +45 -31
  103. package/dist/components/simple/dates/TimePicker.svelte.d.ts +24 -20
  104. package/dist/components/simple/dates/TimePickerTextField.svelte +56 -35
  105. package/dist/components/simple/dates/TimePickerTextField.svelte.d.ts +28 -24
  106. package/dist/components/simple/dates/YearSelector.svelte +54 -29
  107. package/dist/components/simple/dates/YearSelector.svelte.d.ts +35 -31
  108. package/dist/components/simple/dialogs/Dialog.svelte +95 -62
  109. package/dist/components/simple/dialogs/Dialog.svelte.d.ts +43 -28
  110. package/dist/components/simple/forms/Autocomplete.svelte +201 -142
  111. package/dist/components/simple/forms/Autocomplete.svelte.d.ts +83 -79
  112. package/dist/components/simple/forms/Checkbox.svelte +40 -24
  113. package/dist/components/simple/forms/Checkbox.svelte.d.ts +26 -22
  114. package/dist/components/simple/forms/FileInput.svelte +88 -48
  115. package/dist/components/simple/forms/FileInput.svelte.d.ts +37 -33
  116. package/dist/components/simple/forms/FileInputList.svelte +62 -37
  117. package/dist/components/simple/forms/FileInputList.svelte.d.ts +39 -35
  118. package/dist/components/simple/forms/RadioButton.svelte +11 -3
  119. package/dist/components/simple/forms/RadioButton.svelte.d.ts +31 -27
  120. package/dist/components/simple/forms/Select.svelte +16 -3
  121. package/dist/components/simple/forms/Select.svelte.d.ts +24 -20
  122. package/dist/components/simple/forms/SimpleTextField.svelte +53 -6
  123. package/dist/components/simple/forms/SimpleTextField.svelte.d.ts +64 -60
  124. package/dist/components/simple/forms/Switch.svelte +30 -16
  125. package/dist/components/simple/forms/Switch.svelte.d.ts +25 -21
  126. package/dist/components/simple/forms/Textarea.svelte +27 -2
  127. package/dist/components/simple/forms/Textarea.svelte.d.ts +41 -37
  128. package/dist/components/simple/forms/Textfield.svelte +56 -18
  129. package/dist/components/simple/forms/Textfield.svelte.d.ts +55 -51
  130. package/dist/components/simple/forms/TreeEditor.svelte +141 -95
  131. package/dist/components/simple/forms/TreeEditor.svelte.d.ts +42 -38
  132. package/dist/components/simple/forms/TreeEditorItem.svelte +77 -42
  133. package/dist/components/simple/forms/TreeEditorItem.svelte.d.ts +54 -50
  134. package/dist/components/simple/forms/VerticalSwitch.svelte +11 -1
  135. package/dist/components/simple/forms/VerticalSwitch.svelte.d.ts +32 -28
  136. package/dist/components/simple/forms/VerticalTextSwitch.svelte +15 -3
  137. package/dist/components/simple/forms/VerticalTextSwitch.svelte.d.ts +30 -26
  138. package/dist/components/simple/lists/ColorInvertedSelector.svelte +53 -23
  139. package/dist/components/simple/lists/ColorInvertedSelector.svelte.d.ts +46 -42
  140. package/dist/components/simple/lists/HierarchyMenu.svelte +38 -19
  141. package/dist/components/simple/lists/HierarchyMenu.svelte.d.ts +34 -30
  142. package/dist/components/simple/lists/Paginator.svelte +50 -41
  143. package/dist/components/simple/lists/Paginator.svelte.d.ts +23 -19
  144. package/dist/components/simple/lists/SelectableMenuList.svelte +43 -15
  145. package/dist/components/simple/lists/SelectableMenuList.svelte.d.ts +24 -20
  146. package/dist/components/simple/lists/SelectableVerticalList.svelte +100 -59
  147. package/dist/components/simple/lists/SelectableVerticalList.svelte.d.ts +51 -47
  148. package/dist/components/simple/lists/SidebarMenuList.svelte +116 -71
  149. package/dist/components/simple/lists/SidebarMenuList.svelte.d.ts +26 -22
  150. package/dist/components/simple/lists/SimpleTable.svelte +264 -154
  151. package/dist/components/simple/lists/SimpleTable.svelte.d.ts +70 -66
  152. package/dist/components/simple/loaders/CircularLoader.svelte +16 -5
  153. package/dist/components/simple/loaders/CircularLoader.svelte.d.ts +19 -15
  154. package/dist/components/simple/loaders/Skeleton.svelte +3 -2
  155. package/dist/components/simple/loaders/Skeleton.svelte.d.ts +16 -12
  156. package/dist/components/simple/media/AttachmentDownloader.svelte +17 -3
  157. package/dist/components/simple/media/AttachmentDownloader.svelte.d.ts +32 -28
  158. package/dist/components/simple/media/Avatar.svelte +18 -12
  159. package/dist/components/simple/media/Avatar.svelte.d.ts +31 -20
  160. package/dist/components/simple/media/Carousel.svelte +29 -11
  161. package/dist/components/simple/media/Carousel.svelte.d.ts +28 -24
  162. package/dist/components/simple/media/DescriptiveAvatar.svelte +12 -4
  163. package/dist/components/simple/media/DescriptiveAvatar.svelte.d.ts +44 -28
  164. package/dist/components/simple/media/FlagIcon.svelte +8 -5
  165. package/dist/components/simple/media/FlagIcon.svelte.d.ts +19 -15
  166. package/dist/components/simple/media/Gallery.svelte +49 -29
  167. package/dist/components/simple/media/Gallery.svelte.d.ts +27 -23
  168. package/dist/components/simple/media/Icon.svelte +9 -4
  169. package/dist/components/simple/media/Icon.svelte.d.ts +24 -20
  170. package/dist/components/simple/media/Image.svelte +42 -20
  171. package/dist/components/simple/media/Image.svelte.d.ts +44 -33
  172. package/dist/components/simple/media/ImageGrid.svelte +37 -12
  173. package/dist/components/simple/media/ImageGrid.svelte.d.ts +32 -28
  174. package/dist/components/simple/navigation/Breadcrumb.svelte +28 -10
  175. package/dist/components/simple/navigation/Breadcrumb.svelte.d.ts +26 -22
  176. package/dist/components/simple/navigation/Chip.svelte +44 -23
  177. package/dist/components/simple/navigation/Chip.svelte.d.ts +42 -31
  178. package/dist/components/simple/navigation/Drawer.svelte +107 -65
  179. package/dist/components/simple/navigation/Drawer.svelte.d.ts +50 -37
  180. package/dist/components/simple/navigation/HeaderMenu.svelte +40 -23
  181. package/dist/components/simple/navigation/HeaderMenu.svelte.d.ts +39 -35
  182. package/dist/components/simple/navigation/Navigator.svelte +30 -8
  183. package/dist/components/simple/navigation/Navigator.svelte.d.ts +28 -24
  184. package/dist/components/simple/navigation/TabSwitcher.svelte +83 -47
  185. package/dist/components/simple/navigation/TabSwitcher.svelte.d.ts +38 -34
  186. package/dist/components/simple/notifiers/AlertBanner.svelte +43 -15
  187. package/dist/components/simple/notifiers/AlertBanner.svelte.d.ts +41 -37
  188. package/dist/components/simple/progress/ProgressBar.svelte +20 -13
  189. package/dist/components/simple/progress/ProgressBar.svelte.d.ts +21 -17
  190. package/dist/components/simple/timeline/SimpleTimeLine.svelte +26 -12
  191. package/dist/components/simple/timeline/SimpleTimeLine.svelte.d.ts +39 -35
  192. package/dist/components/simple/typography/Code.svelte +27 -12
  193. package/dist/components/simple/typography/Code.svelte.d.ts +28 -24
  194. package/dist/stores/debounce.d.ts +0 -1
  195. package/dist/stores/layouts/unstableSidebarOpened.d.ts +0 -1
  196. package/dist/stores/mediaQuery.d.ts +0 -1
  197. package/dist/stores/theme.d.ts +0 -1
  198. package/package.json +1 -1
@@ -1,800 +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
- import MenuOrDrawer from "../common/MenuOrDrawer.svelte";
36
- onMount(() => {
37
- updateHeaderHeight();
38
- window.addEventListener("resize", updateHeaderHeight);
39
- tableContainer.addEventListener("scroll", setReachedBottomOrTop);
40
- hideScrollbar = tableContainer.scrollHeight > tableContainer.clientHeight;
41
- 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" }]) {
42
- let th = headersHTML[head.value];
43
- if (!!th) {
44
- resizeHeader(th, head);
45
- }
46
- }
47
- tableHTML.classList.add("dynamic-resizable");
48
- resizeObserver = new ResizeObserver(() => {
49
- 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
+ import MenuOrDrawer from "../common/MenuOrDrawer.svelte";
40
+
41
+ onMount(() => {
50
42
  updateHeaderHeight();
43
+ window.addEventListener('resize', updateHeaderHeight);
44
+ tableContainer.addEventListener("scroll", setReachedBottomOrTop);
45
+
46
+ hideScrollbar = tableContainer.scrollHeight > tableContainer.clientHeight
47
+
48
+ 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' }]) {
49
+ let th = headersHTML[head.value]
50
+ if(!!th) {
51
+ resizeHeader(th, head)
52
+ }
53
+ }
54
+
55
+ tableHTML.classList.add('dynamic-resizable')
56
+
57
+ resizeObserver = new ResizeObserver(() => {
58
+ updateRemainingWidth();
59
+ updateHeaderHeight();
60
+ });
61
+ resizeObserver.observe(tableContainer);
62
+
63
+ return () => {
64
+ window.removeEventListener('resize', updateHeaderHeight);
65
+ tableContainer.removeEventListener("scroll", setReachedBottomOrTop);
66
+ resizeObserver?.disconnect();
67
+ }
51
68
  });
52
- resizeObserver.observe(tableContainer);
53
- return () => {
54
- window.removeEventListener("resize", updateHeaderHeight);
55
- tableContainer.removeEventListener("scroll", setReachedBottomOrTop);
56
- resizeObserver?.disconnect();
57
- };
58
- });
59
- function updateHeaderHeight() {
60
- if (mainHeader) {
61
- const headerHeight = mainHeader.getBoundingClientRect().height;
62
- document.documentElement.style.setProperty("--main-header-height", headerHeight + "px");
63
- }
64
- }
65
- function setReachedBottomOrTop() {
66
- reachedBottom = tableContainer.scrollHeight - tableContainer.scrollTop === tableContainer.clientHeight;
67
- reachedTop = tableContainer.scrollTop === 0;
68
- hideScrollbar = tableContainer.scrollHeight > tableContainer.clientHeight;
69
- }
70
- $:
71
- if (reachedBottom && rows.length < totalRows) {
69
+
70
+ function updateHeaderHeight() {
71
+ if (mainHeader) {
72
+ const headerHeight = mainHeader.getBoundingClientRect().height;
73
+ document.documentElement.style.setProperty('--main-header-height', headerHeight + 'px');
74
+ }
75
+ }
76
+
77
+ function setReachedBottomOrTop(){
78
+ reachedBottom = tableContainer.scrollHeight - tableContainer.scrollTop === tableContainer.clientHeight
79
+ reachedTop = tableContainer.scrollTop === 0
80
+ hideScrollbar = tableContainer.scrollHeight > tableContainer.clientHeight
81
+ }
82
+
83
+ $: if(reachedBottom && rows.length < totalRows) {
72
84
  setTimeout(() => {
73
- if (reachedBottom) {
74
- handleLoadForward();
85
+ if(reachedBottom) {
86
+ handleLoadForward()
75
87
  }
76
- }, 30);
88
+ }, 30)
77
89
  }
78
- $:
79
- if (reachedTop && currentSectionNumber > 0) {
90
+
91
+ $: if(reachedTop && currentSectionNumber > 0) {
80
92
  setTimeout(() => {
81
- if (reachedTop) {
82
- handleLoadBackward();
93
+ if(reachedTop) {
94
+ handleLoadBackward()
83
95
  }
84
- }, 30);
85
- }
86
- const [send, receive] = crossfade({
87
- duration: 500,
88
- fallback(node, params) {
89
- const style = getComputedStyle(node);
90
- const transform = style.transform === "none" ? "" : style.transform;
91
- return {
92
- duration: 500,
93
- easing: quintOut,
94
- css: (t) => `
96
+ }, 30)
97
+ }
98
+
99
+ const [send, receive] = crossfade({
100
+ duration: 500,
101
+ fallback(node, params) {
102
+ const style = getComputedStyle(node);
103
+ const transform = style.transform === "none" ? "" : style.transform;
104
+
105
+ return {
106
+ duration: 500,
107
+ easing: quintOut,
108
+ css: (t) => `
95
109
  transform: ${transform} scale(${t});
96
110
  opacity: ${t}
97
- `
111
+ `,
112
+ };
113
+ },
114
+ });
115
+
116
+ type Item = {
117
+ [key: string]: any;
118
+ disableEdit?: boolean,
119
+ rowDisableBackgroundColor?: string
120
+ };
121
+
122
+ type Row = {
123
+ item: Item;
124
+ subItems: Item[];
125
+ };
126
+
127
+ type MenuStringType = {
128
+ key: "string";
129
+ };
130
+
131
+ type MenuNumberType = {
132
+ key: "number";
133
+ params?: {
134
+ min?: number;
135
+ max?: number;
98
136
  };
99
- }
100
- });
101
- let clazz = {};
102
- export { clazz as class };
103
- const dispatch = createEventDispatcher();
104
- 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, selectedAllDisabled = false;
105
- let openCellEditor = false, cellEditorActivator, cellEditorContainer, 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;
106
- const DEFAULT_MIN_WIDTH_PX = 100, DEFAULT_MAX_WIDTH_PX = 400;
107
- $:
108
- totalSections = (totalRows - renderedRowsNumber) / sectionRowsNumber;
109
- $:
110
- hasMoreToRender = totalSections > currentSectionNumber;
111
- $:
112
- totalCachedSections = (rows.length - renderedRowsNumber) / sectionRowsNumber;
113
- $:
114
- renderedRows = rows.slice(currentSectionNumber * sectionRowsNumber, currentSectionNumber * sectionRowsNumber + renderedRowsNumber);
115
- let openHeaderDrawer = false, headersToSelect = !!headers ? headers.filter((h) => {
116
- return !headersToShowInTable.find((hst) => hst.value == h.value);
117
- }).map((h) => {
118
- return {
119
- id: h.value,
120
- name: h.label
121
137
  };
122
- }) : [], headersToShow = headersToShowInTable.map((h) => {
123
- return {
124
- id: h.value,
125
- name: h.label
138
+
139
+ type MenuDateType = {
140
+ key: "date";
126
141
  };
127
- }), infoActivators = Array(headersToShowInTable.length);
128
- let totalBatchLength = 0, expandedRows = [];
129
- function saveHeadersToShow() {
130
- dispatch("saveHeadersToShow", {
131
- headersToShow
132
- });
133
- openHeaderDrawer = false;
134
- }
135
- function handleHeaderClick(header) {
136
- if (header.sortable && !loading && !resizing) {
137
- if (!!sortedBy && header.value == sortedBy) {
138
- if (sortDirection == "asc")
139
- sortDirection = "desc";
140
- else if (sortDirection == "desc") {
141
- sortedBy = void 0;
142
- sortModify = void 0;
143
- }
144
- } else {
145
- sortedBy = header.value;
146
- sortDirection = "asc";
147
- sortModify = header.sortModify;
142
+
143
+ type MenuSelectType = {
144
+ key: "select";
145
+ params: {
146
+ options: {
147
+ icon?: string;
148
+ value: string | number | undefined;
149
+ id?: number | undefined;
150
+ text: string;
151
+ }[];
152
+ };
153
+ };
154
+
155
+ type MenuBooleanType = {
156
+ key: "boolean";
157
+ };
158
+
159
+ type CellEditorInfoType =
160
+ | MenuStringType
161
+ | MenuNumberType
162
+ | MenuDateType
163
+ | MenuSelectType
164
+ | MenuBooleanType;
165
+
166
+ type CellEditorInfo = {
167
+ title: string;
168
+ description: string;
169
+ type: CellEditorInfoType;
170
+ column: string;
171
+ info?: string;
172
+ };
173
+
174
+ type Headers = NonNullable<ComponentProps<PaginatedTable>["headers"]>;
175
+ type Header = Headers[number] & {
176
+ cellEditorInfo?: CellEditorInfo;
177
+ info?: string;
178
+ maxWidth?: string
179
+ };
180
+ type HeaderType = Header["type"];
181
+
182
+ let clazz: {
183
+ container?: string;
184
+ header?: string;
185
+ row?: string;
186
+ cell?: string;
187
+ } = {};
188
+ export { clazz as class };
189
+
190
+ const dispatch = createEventDispatcher<{
191
+ sort: {
192
+ sortedBy: string | undefined;
193
+ sortDirection: string;
194
+ };
195
+ rowClick: {
196
+ item: Item;
197
+ };
198
+ cellClick: {
199
+ item: Item;
200
+ };
201
+ saveCellEdit: {
202
+ item: any;
203
+ };
204
+ saveHeadersToShow: {
205
+ headersToShow: {
206
+ id: string;
207
+ name: string;
208
+ }[];
209
+ };
210
+ filtersChange: {
211
+ builder: FilterBuilder;
212
+ };
213
+ fetchData: {};
214
+ removeFilter: {filter: Filter}
215
+ removeAllFilters: {}
216
+ removeCustomQuickFilter: {
217
+ quickFilter: QuickFilter
148
218
  }
149
- handleSearchChange(searchText);
150
- dispatch("sort", {
151
- sortedBy,
152
- sortDirection
219
+ applyCustomQuickFilter: {
220
+ quickFilter: QuickFilter
221
+ setQuickFilterValue: (quickFilter: QuickFilter, value?: any) => void
222
+ }
223
+ columnResize: {
224
+ id: string,
225
+ newWidthPx: number
226
+ }
227
+ }>();
228
+
229
+ export let headers: Header[] = [],
230
+ headersToShowInTable: Header[] = headers,
231
+ subHeaders: Header[] = [],
232
+ customizeHeaders: boolean = false,
233
+ rows: Row[] = [],
234
+ sortedBy: string | undefined = undefined,
235
+ sortDirection: "asc" | "desc" = "asc",
236
+ cellEdit: boolean = false,
237
+ lang: "it" | "en" = "en",
238
+ dateLocale: "it" | "en" | undefined = undefined,
239
+ noItemsText: string = lang == 'en' ? "No items to show" : 'Nessun elemento da visualizzare',
240
+ showSelect: boolean = false,
241
+ showActions: boolean = true,
242
+ selectMode: "single" | "multiple" = "single",
243
+ selectedItems: Item[] = [],
244
+ unselectedItems: Item[] = [],
245
+ selectedAll: boolean = false,
246
+ showExpand: boolean = false,
247
+ loading: boolean = false,
248
+ disabled: boolean = false,
249
+ filters: ComponentProps<Filters>["filters"] = [],
250
+ searchBarColumns: string[] | undefined = undefined,
251
+ searchBarVisible: boolean = false,
252
+ searchBarPlaceholder: string = lang == 'en' ? "Type to search..." : 'Scrivi per cercare...',
253
+ filtersVisible: boolean = false,
254
+ quickFiltersVisible: boolean = false,
255
+ editFilterMode: "one-edit" | "multi-edit" = "one-edit",
256
+ showActiveFilters: boolean = true,
257
+ quickFilters: QuickFilter[] = [],
258
+ actionsForSelectedItems: Action[] = [],
259
+ quickActionsDisabled: boolean = false,
260
+ totalRows: number = rows.length,
261
+ searchText: string | undefined = undefined,
262
+ renderedRowsNumber = 100,
263
+ sectionRowsNumber = 20,
264
+ sectionThreshold = 2,
265
+ backwardThresholdPixel = 100,
266
+ forwardThresholdPixel = 100,
267
+ uniqueKey: keyof Item = 'id',
268
+ numberOfResultsVisible: boolean = false,
269
+ endLineVisible: boolean = false,
270
+ resizableColumns: boolean= false,
271
+ resizedColumnSizeWithPadding: { [value: string]: number } = {},
272
+ dynamicFilters: boolean = true,
273
+ useSelectedItemsOnly = false,
274
+ selectedAllDisabled = false
275
+
276
+ let openCellEditor: boolean = false,
277
+ cellEditorActivator: HTMLElement | undefined,
278
+ cellEditorContainer: HTMLElement | undefined,
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,
153
352
  });
353
+ openHeaderDrawer = false;
154
354
  }
155
- }
156
- function handleRowClick(item) {
157
- if (disabled || loading)
158
- return;
159
- dispatch("rowClick", {
160
- item
161
- });
162
- }
163
- function handleCellClick(mouseEvent, item, cellEditorInfo, value, indexRow, indexHeader, subItem) {
164
- if (disabled || loading)
165
- return;
166
- if (cellEdit && cellEditorInfo && !item.disableEdit) {
167
- mouseEvent.stopPropagation();
168
- if (!cellEditorActivator) {
169
- let target = mouseEvent.target;
170
- cellEditorActivator = target;
171
- cellEditorIndexRow = indexRow;
172
- cellEditorIndexHeader = indexHeader;
173
- cellEditorSubItem = subItem;
174
- cellEditorInfoActive = {
175
- ...cellEditorInfo,
176
- value,
177
- item
178
- };
179
- openCellEditor = !openCellEditor;
180
- const element = target.getBoundingClientRect();
181
- const windowHeight = window.innerHeight;
182
- const windowWidth = window.innerWidth;
183
- if (openCellEditor) {
184
- setTimeout(() => {
185
- if (windowHeight - element.bottom < 300) {
186
- cellEditorContainer.style.bottom = `${windowHeight - element.top}px`;
187
- } else {
188
- cellEditorContainer.style.top = `${element.bottom}px`;
189
- }
190
- if (windowWidth - element.right < 400) {
191
- cellEditorContainer.style.right = `${windowWidth - element.left - cellEditorActivator.clientWidth}px`;
192
- }
193
- }, 0);
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
194
368
  }
369
+
370
+ handleSearchChange(searchText);
371
+
372
+ dispatch("sort", {
373
+ sortedBy,
374
+ sortDirection,
375
+ });
195
376
  }
196
377
  }
197
- dispatch("cellClick", {
198
- item
199
- });
200
- }
201
- function handleSaveClick() {
202
- cellEditorIndexHeader = void 0;
203
- cellEditorIndexRow = void 0;
204
- cellEditorSubItem = void 0;
205
- dispatch("saveCellEdit", {
206
- item: cellEditorInfoActive
207
- });
208
- cellEditorActivator = void 0;
209
- openCellEditor = false;
210
- }
211
- function handleCancelClick() {
212
- cellEditorIndexHeader = void 0;
213
- cellEditorIndexRow = void 0;
214
- cellEditorSubItem = void 0;
215
- cellEditorActivator = void 0;
216
- openCellEditor = false;
217
- quickFilterActivator = void 0;
218
- openQuickFilter = false;
219
- }
220
- function handleSelect(item, shiftKeyPressed) {
221
- let index = -1;
222
- if (selectedAll && !ignoreSelectAll) {
223
- index = unselectedItems.findIndex((i) => i[uniqueKey] == item[uniqueKey]);
224
- } else {
225
- index = selectedItems.findIndex((i) => i[uniqueKey] == item[uniqueKey]);
226
- }
227
- if (index == -1) {
228
- if (selectMode == "single") {
229
- selectedItems = [item];
230
- selectedIndexes = [rows.findIndex((r) => r.item[uniqueKey] == item[uniqueKey])];
231
- } else if (selectMode == "multiple") {
232
- if (shiftKeyPressed && selectedIndexes.length > 0) {
233
- let lastSelectedIndex = selectedIndexes[selectedIndexes.length - 1], selectedIndex = rows.findIndex((r) => r.item[uniqueKey] == item[uniqueKey]);
234
- if (selectedIndex != -1) {
235
- if (selectedIndex < lastSelectedIndex) {
236
- let x = lastSelectedIndex;
237
- lastSelectedIndex = selectedIndex - 1;
238
- selectedIndex = x;
239
- }
240
- for (let i = lastSelectedIndex + 1; i <= selectedIndex; i++) {
241
- if (selectedAll && !ignoreSelectAll) {
242
- if (!unselectedItems.find((unselectedItem) => unselectedItem[uniqueKey] == rows[i].item[uniqueKey])) {
243
- unselectedItems = [...unselectedItems, rows[i].item];
244
- }
378
+
379
+ function handleRowClick(item: { [key: string]: any }) {
380
+ if (disabled || loading) return;
381
+ dispatch("rowClick", {
382
+ item,
383
+ });
384
+ }
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
+ mouseEvent.stopPropagation()
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`;
245
426
  } else {
246
- if (!selectedItems.find((selectedItem) => selectedItem[uniqueKey] == rows[i].item[uniqueKey])) {
247
- 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
+ }
248
501
  }
249
502
  }
250
503
  }
251
504
  }
252
- } else {
253
- if (selectedAll && !ignoreSelectAll) {
254
- unselectedItems = [...unselectedItems, item];
255
- } else {
256
- 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]))
257
512
  }
258
- selectedIndexes.push(rows.findIndex((r) => r.item[uniqueKey] == item[uniqueKey]));
259
513
  }
260
- }
261
- } else {
262
- if (selectedAll && !ignoreSelectAll) {
263
- unselectedItems = unselectedItems.filter((i) => i[uniqueKey] != item[uniqueKey]);
264
514
  } else {
265
- 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]))
521
+ }
522
+ }
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
266
535
  }
267
- selectedIndexes = selectedIndexes.filter((r) => r != rows.findIndex((r2) => r2.item[uniqueKey] == item[uniqueKey]));
268
536
  }
269
- }
270
- function handleSelectAll() {
271
- if (selectMode == "multiple") {
272
- if (!selectedAll && ignoreSelectAll) {
273
- selectedItems = rows.map((r) => r.item);
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];
274
542
  } else {
275
- selectedItems = [];
543
+ expandedRows = expandedRows.filter((r) => r.item[uniqueKey] != row.item[uniqueKey]);
276
544
  }
277
- selectedIndexes = [];
278
- unselectedItems = [];
279
- selectedAll = !selectedAll;
280
- }
281
- }
282
- function expandRow(row) {
283
- let index = expandedRows.findIndex((r) => r.item[uniqueKey] == row.item[uniqueKey]);
284
- if (index == -1) {
285
- expandedRows = [...expandedRows, row];
286
- } else {
287
- expandedRows = expandedRows.filter((r) => r.item[uniqueKey] != row.item[uniqueKey]);
288
- }
289
- }
290
- function formatDate(dateTime, dateFormat) {
291
- return dateTime.setLocale(dateFormat.locale).toFormat(dateFormat.format);
292
- }
293
- $: {
294
- if (!showExpand) {
295
- totalBatchLength = rows.length;
296
- } else {
297
- totalBatchLength = rows.reduce(
298
- (acc, row) => acc + row.subItems.length,
299
- rows.length
300
- );
301
545
  }
302
- 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)) {
303
- saveEditDisabled = true;
304
- } else {
305
- saveEditDisabled = false;
306
- }
307
- }
308
- function searchTextBuilder(searchText2) {
309
- let builder;
310
- let converter = new Converter();
311
- builder = converter.createBuilder({
312
- filters: filters || []
313
- });
314
- if (!!searchText2 && !!searchBarColumns && searchBarColumns.length > 0) {
315
- builder.where((b) => {
316
- b.where(searchBarColumns[0], "ilike", "%" + searchText2 + "%");
317
- for (let i = 1; i < searchBarColumns.length; i += 1) {
318
- b.orWhere(searchBarColumns[i], "ilike", "%" + searchText2 + "%");
319
- }
320
- });
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);
321
552
  }
322
- return builder;
323
- }
324
- let syncTimer;
325
- function handleSearchChange(searchText2) {
326
- clearTimeout(syncTimer);
327
- syncTimer = setTimeout(async () => {
328
- globalBuilder = searchTextBuilder(searchText2);
329
- for (let i = 0; i < quickFilters.length; i++) {
330
- 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
+ );
331
562
  }
332
- handleFiltersChange();
333
- }, 800);
334
- }
335
- $:
336
- if (searchText != void 0)
337
- handleSearchChange(searchText);
338
- function handleFiltersChange() {
339
- if (!!tableContainer) {
340
- userScrolling = false;
341
- currentSectionNumber = 0;
342
- tableContainer.scrollTop = 0;
343
- setTimeout(() => userScrolling = true, 20);
344
- }
345
- if (!!sortedBy) {
346
- if (sortModify) {
347
- 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;
348
573
  } else {
349
- globalBuilder.orderBy(sortedBy, sortDirection || "asc");
574
+ saveEditDisabled = false;
350
575
  }
351
576
  }
352
- dispatch("filtersChange", {
353
- builder: globalBuilder
354
- });
355
- }
356
- function handleClearQuickFilter(quickFilter, dispatchFiltersChange = true) {
357
- if (quickFilter.type.key == "custom") {
358
- quickFilter.type.value = void 0;
359
- quickFilter.type.missingValue = void 0;
360
- if (dispatchFiltersChange) {
361
- dispatch("removeCustomQuickFilter", { quickFilter });
362
- }
363
- } else if (quickFilter.type.key == "string") {
364
- quickFilter.type.value = void 0;
365
- quickFilter.type.missingValue = void 0;
366
- } else if (quickFilter.type.key == "number") {
367
- quickFilter.type.value = void 0;
368
- quickFilter.type.missingValue = void 0;
369
- } else if (quickFilter.type.key == "boolean") {
370
- quickFilter.type.value = void 0;
371
- } else if (quickFilter.type.key == "country") {
372
- quickFilter.type.selected = void 0;
373
- quickFilter.type.missingValue = void 0;
374
- } else if (quickFilter.type.key == "date") {
375
- quickFilter.type.from = void 0;
376
- quickFilter.type.to = void 0;
377
- } else if (quickFilter.type.key == "multi-select") {
378
- quickFilter.type.values = [];
379
- quickFilter.type.missingValue = false;
380
- quickFilter.type.missingValue = void 0;
381
- }
382
- if (dispatchFiltersChange) {
383
- quickFilter.active = false;
384
- }
385
- globalBuilder = searchTextBuilder(searchText);
386
- for (let i = 0; i < quickFilters.length; i++) {
387
- if (quickFilters[i].active) {
388
- globalBuilder = quickFilterBuilder(
389
- globalBuilder,
390
- quickFilters[i],
391
- false
392
- );
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
+ });
393
593
  }
594
+
595
+ return builder;
394
596
  }
395
- if (dispatchFiltersChange) {
396
- quickFilters = quickFilters;
397
- handleFiltersChange();
398
- }
399
- return globalBuilder;
400
- }
401
- function handleSearchBoxKeydown(e) {
402
- if (e.key == "Enter") {
403
- handleFiltersChange();
404
- }
405
- }
406
- function handleQuickFilterClick(mouseEvent, quickFilter) {
407
- handleCancelClick();
408
- setTimeout(() => {
409
- if (quickFilter) {
410
- if (!quickFilterActivator) {
411
- let target = mouseEvent.target;
412
- quickFilterActivator = target;
413
- quickFilterActive = quickFilter;
414
- openQuickFilter = !openQuickFilter;
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]);
415
605
  }
416
- }
417
- }, 300);
418
- }
419
- function setQuickFilterMissingValue(quickFilter) {
420
- if (quickFilter.type.key == "custom") {
421
- quickFilter.type.missingValue = true;
422
- quickFilter.type.value = void 0;
423
- } else if (quickFilter.type.key == "multi-select") {
424
- quickFilter.type.missingValue = true;
425
- quickFilter.type.values = [];
426
- } else if (quickFilter.type.key == "string") {
427
- quickFilter.type.missingValue = true;
428
- quickFilter.type.value = void 0;
429
- } else if (quickFilter.type.key == "country") {
430
- quickFilter.type.missingValue = true;
431
- quickFilter.type.selected = void 0;
432
- } else if (quickFilter.type.key == "number") {
433
- quickFilter.type.missingValue = true;
434
- quickFilter.type.value = void 0;
435
- }
436
- handleApplyClick(quickFilter);
437
- }
438
- function setQuickFilterValue(quickFilter, value) {
439
- if (quickFilter.type.key == "custom") {
440
- quickFilter.type.value = value;
441
- } else if (quickFilter.type.key == "boolean") {
442
- quickFilter.type.value = value;
443
- }
444
- handleApplyClick(quickFilter);
445
- }
446
- function handleApplyClick(quickFilter, dispatchCustomFilterClick = false) {
447
- if (quickFilter.type.key == "custom" && dispatchCustomFilterClick) {
448
- dispatch("applyCustomQuickFilter", { quickFilter, setQuickFilterValue });
449
- } else {
450
- quickFilter.active = true;
451
- quickFilters = quickFilters;
452
- globalBuilder = quickFilterBuilder(globalBuilder, quickFilter);
453
- handleFiltersChange();
454
- quickFilterActivator = void 0;
455
- openQuickFilter = false;
606
+
607
+ handleFiltersChange();
608
+ }, 800);
456
609
  }
457
- }
458
- function quickFilterBuilder(builder, quickFilter, clearPreaviousValue = true) {
459
- if (quickFilter.type.key == "custom") {
460
- let value = quickFilter.type.value, missingValue = quickFilter.type.missingValue;
461
- if (clearPreaviousValue) {
462
- builder = handleClearQuickFilter(quickFilter, false);
463
- }
464
- quickFilter.type.value = value;
465
- quickFilter.type.missingValue = missingValue;
466
- builder = quickFilter.type.modify({
467
- builder,
468
- value: { value, missingValue }
469
- });
470
- } else if (quickFilter.type.key == "string") {
471
- let value = quickFilter.type.value, missingValue = quickFilter.type.missingValue;
472
- if (clearPreaviousValue) {
473
- builder = handleClearQuickFilter(quickFilter, false);
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)
474
619
  }
475
- quickFilter.type.value = value;
476
- quickFilter.type.missingValue = missingValue;
477
- if (quickFilter.type.modify) {
478
- builder = quickFilter.type.modify({
479
- builder,
480
- value: { value, missingValue }
481
- });
620
+
621
+ if (!!sortedBy) {
622
+ if(sortModify){
623
+ globalBuilder = sortModify({ builder: globalBuilder, sortDirection })
624
+ }
625
+ else {
626
+ globalBuilder.orderBy(sortedBy, sortDirection || "asc");
627
+ }
482
628
  }
483
- if (!!quickFilter.column) {
484
- if (missingValue) {
485
- builder.whereNull(quickFilter.column);
486
- } else if (!!value) {
487
- builder.where(
488
- quickFilter.column,
489
- quickFilter.type.mode ?? "equal",
490
- value
491
- );
629
+
630
+ dispatch("filtersChange", {
631
+ builder: globalBuilder,
632
+ });
633
+ }
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 })
492
644
  }
493
645
  }
494
- } else if (quickFilter.type.key == "boolean") {
495
- let value = quickFilter.type.value;
496
- if (clearPreaviousValue) {
497
- 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;
498
664
  }
499
- quickFilter.type.value = value;
500
- if (quickFilter.type.modify) {
501
- builder = quickFilter.type.modify({
502
- builder,
503
- value
504
- });
665
+
666
+ if (dispatchFiltersChange) {
667
+ quickFilter.active = false;
505
668
  }
506
- if (!!quickFilter.column && value != void 0) {
507
- builder.where(quickFilter.column, 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
678
+ );
679
+ }
508
680
  }
509
- } else if (quickFilter.type.key == "country") {
510
- let value = quickFilter.type.selected, missingValue = quickFilter.type.missingValue;
511
- if (clearPreaviousValue) {
512
- builder = handleClearQuickFilter(quickFilter, false);
681
+
682
+ if (dispatchFiltersChange) {
683
+ quickFilters = quickFilters;
684
+ handleFiltersChange();
513
685
  }
514
- quickFilter.type.selected = value;
515
- quickFilter.type.missingValue = missingValue;
516
- const values = value?.map((item) => item.value);
517
- if (quickFilter.type.modify) {
518
- builder = quickFilter.type.modify({
519
- builder,
520
- value: { values, missingValue }
521
- });
686
+
687
+ return globalBuilder;
688
+ }
689
+
690
+ function handleSearchBoxKeydown(e: KeyboardEvent) {
691
+ if (e.key == "Enter") {
692
+ handleFiltersChange();
522
693
  }
523
- if (!!quickFilter.column) {
524
- if (missingValue) {
525
- builder.whereNull(quickFilter.column);
526
- } else if (!!values && values.length > 0) {
527
- 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
+ }
528
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;
529
719
  }
530
- } else if (quickFilter.type.key == "date") {
531
- let from = quickFilter.type.from, to = quickFilter.type.to;
532
- if (clearPreaviousValue) {
533
- 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;
534
732
  }
535
- quickFilter.type.from = from;
536
- quickFilter.type.to = to;
537
- if (quickFilter.type.modify) {
538
- builder = quickFilter.type.modify({
539
- builder,
540
- value: { from, to }
541
- });
542
- } else if (!!quickFilter.column) {
543
- if (!!from) {
544
- builder.where(
545
- quickFilter.column,
546
- ">=",
547
- DateTime.fromJSDate(from).setLocale("it-IT").startOf("day").toString()
548
- );
549
- }
550
- if (!!to) {
551
- builder.where(
552
- quickFilter.column,
553
- "<=",
554
- DateTime.fromJSDate(to).setLocale("it-IT").endOf("day").toString()
555
- );
556
- }
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})
557
751
  }
558
- } else if (quickFilter.type.key == "multi-select") {
559
- let value = quickFilter.type.values, missingValue = quickFilter.type.missingValue;
560
- if (clearPreaviousValue) {
561
- 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;
562
761
  }
563
- quickFilter.type.values = value;
564
- quickFilter.type.missingValue = missingValue;
565
- const values = value.map((item) => item.value);
566
- if (quickFilter.type.modify) {
567
- builder = quickFilter.type.modify({
568
- builder,
569
- value: { values, missingValue }
570
- });
571
- } else if (quickFilter.column) {
572
- if (missingValue) {
573
- builder.whereNull(quickFilter.column);
574
- } else if (values.length > 0) {
575
- 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);
576
774
  }
577
- }
578
- } else if (quickFilter.type.key == "number") {
579
- let value = quickFilter.type.value, missingValue = quickFilter.type.missingValue;
580
- if (clearPreaviousValue) {
581
- builder = handleClearQuickFilter(quickFilter, false);
582
- }
583
- quickFilter.type.value = value;
584
- quickFilter.type.missingValue = missingValue;
585
- if (quickFilter.type.modify) {
775
+ quickFilter.type.value = value;
776
+ quickFilter.type.missingValue = missingValue;
777
+
586
778
  builder = quickFilter.type.modify({
587
779
  builder,
588
- value: { value, missingValue }
780
+ value: { value, missingValue },
589
781
  });
590
782
  }
591
- if (quickFilter.column) {
592
- if (missingValue) {
593
- builder.whereNull(quickFilter.column);
594
- } 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) {
595
825
  builder.where(quickFilter.column, value);
596
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
+ }
597
926
  }
927
+
928
+ return builder;
598
929
  }
599
- return builder;
600
- }
601
- function updateFilterValues(filter, updateMultiFilterValues) {
602
- let newValue = {}, newValid = false, newMode = filter.type == "date" || filter.type == "number" || filter.type == "select" || filter.type == "string" ? filter.mode : void 0;
603
- if (filter.type == "select") {
604
- newValue = filter.values;
605
- if (newValue.length > 0) {
606
- 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
+ }
607
956
  }
608
- } else if ("mode" in filter && filter.mode == "between") {
609
- newValue.to = filter.to;
610
- newValue.from = filter.from;
611
- if (!!newValue.from || !!newValue.to) {
612
- newValid = true;
957
+ updateMultiFilterValues(filter.name, newValue, newValid, newMode)
958
+ }
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
+ }
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
613
1002
  }
614
- } else {
615
- newValue = filter.value;
616
- if (!!newValue) {
617
- newValid = true;
1003
+
1004
+ if(totalCachedSections - sectionThreshold <= currentSectionNumber
1005
+ && !loading
1006
+ && totalRows > rows.length
1007
+ ) {
1008
+ dispatch("fetchData", {});
618
1009
  }
619
1010
  }
620
- updateMultiFilterValues(filter.name, newValue, newValid, newMode);
621
- }
622
- function handleRemoveAllFilters() {
623
- dispatch("removeAllFilters", {});
624
- handleSearchChange(searchText);
625
- }
626
- function handleRemoveFilter(filter) {
627
- dispatch("removeFilter", { filter });
628
- handleSearchChange(searchText);
629
- }
630
- async function handleLoadForward() {
631
- if (renderedRows.length >= renderedRowsNumber) {
632
- userScrolling = false;
633
- const anchorIndex = renderedRowsNumber - 1;
634
- const anchorUniqueKey = renderedRows[anchorIndex].item[uniqueKey];
635
- const anchorElement = findAnchorElement(anchorUniqueKey);
636
- const anchorOffsetBefore = anchorElement?.getBoundingClientRect().top || 0;
637
- let removedRowCount = 0;
638
- for (let i = 0; removedRowCount < sectionRowsNumber; i++) {
639
- let row = tableBody.children.item(i);
640
- removedRowCount++;
641
- const rowKey = row?.getAttribute("data-key");
642
- const isExpanded = expandedRows.some((r) => r.item[uniqueKey] == rowKey);
643
- if (isExpanded) {
644
- 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
+ }
645
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
646
1044
  }
647
- currentSectionNumber = currentSectionNumber + 1;
648
- await tick();
649
- const anchorElementAfter = findAnchorElement(anchorUniqueKey);
650
- const anchorOffsetAfter = anchorElementAfter?.getBoundingClientRect().top || 0;
651
- const offsetDiff = anchorOffsetAfter - anchorOffsetBefore;
652
- tableContainer.scrollTop += offsetDiff;
653
- userScrolling = true;
654
- }
655
- if (totalCachedSections - sectionThreshold <= currentSectionNumber && !loading && totalRows > rows.length) {
656
- dispatch("fetchData", {});
657
- }
658
- }
659
- async function handleLoadBackward() {
660
- if (currentSectionNumber > 0) {
661
- userScrolling = false;
662
- const anchorIndex = 0;
663
- const anchorUniqueKey = renderedRows[anchorIndex].item[uniqueKey];
664
- const anchorElement = findAnchorElement(anchorUniqueKey);
665
- const anchorOffsetBefore = anchorElement?.getBoundingClientRect().top || 0;
666
- let removedRowCount = 0;
667
- for (let i = renderedRows.length - 1; removedRowCount < sectionRowsNumber; i--) {
668
- let row = tableBody.children.item(i);
669
- removedRowCount++;
670
- const rowKey = row?.getAttribute("data-key");
671
- const isExpanded = expandedRows.some((r) => r.item[uniqueKey] == rowKey);
672
- if (isExpanded) {
673
- i--;
1045
+ }
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
674
1052
  }
675
1053
  }
676
- currentSectionNumber = currentSectionNumber - 1;
677
- await tick();
678
- const anchorElementAfter = findAnchorElement(anchorUniqueKey);
679
- const anchorOffsetAfter = anchorElementAfter?.getBoundingClientRect().top || 0;
680
- const offsetDiff = anchorOffsetAfter - anchorOffsetBefore;
681
- tableContainer.scrollTop += offsetDiff;
682
- userScrolling = true;
683
- }
684
- }
685
- function findAnchorElement(key) {
686
- for (let i = 0; i < tableBody.children.length; i++) {
687
- const child = tableBody.children.item(i);
688
- if (child?.getAttribute("data-key") == key) {
689
- return child;
690
- }
1054
+ return undefined
691
1055
  }
692
- return void 0;
693
- }
694
- function resize(node) {
695
- let th = node.parentElement;
696
- let resizingInner = false;
697
- if (!!th) {
698
- let mouseMoveHandler = function(e) {
699
- if (resizingInner && !!th && !!tableContainer) {
700
- width += e.movementX;
701
- const { paddingLeft, paddingRight } = getComputedStyle(th);
702
- const minWidth = headers.find((h) => h.value === th.id)?.minWidth;
703
- let minWidthPx;
704
- if (!!minWidth && minWidth.endsWith("px")) {
705
- minWidthPx = parseInt(minWidth, 10);
706
- }
707
- const maxWidth = headers.find((h) => h.value === th.id)?.maxWidth;
708
- let maxWidthPx;
709
- if (!!maxWidth && maxWidth.endsWith("px")) {
710
- maxWidthPx = parseInt(maxWidth, 10);
711
- }
712
- const actualMinWidth = (minWidthPx || DEFAULT_MIN_WIDTH_PX) - parseFloat(paddingLeft) - parseFloat(paddingRight);
713
- const actualMaxWidth = (maxWidthPx || DEFAULT_MAX_WIDTH_PX) - parseFloat(paddingLeft) - parseFloat(paddingRight);
714
- if (width > actualMinWidth && width < actualMaxWidth) {
715
- th.style.width = width + "px";
716
- resizedColumnSizeWithPadding[th.id] = th.getBoundingClientRect().width;
717
- 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
+ }
718
1089
  }
719
1090
  }
720
- }, mouseUpHandler = function(e, setResize = true) {
721
- if (!!th) {
722
- resizingInner = false;
723
- let { paddingLeft, paddingRight } = getComputedStyle(th);
724
- width = th.getBoundingClientRect().width - parseFloat(paddingLeft) - parseFloat(paddingRight);
725
- if (setResize) {
726
- 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
+ })
727
1105
  }
728
- dispatch("columnResize", {
729
- id: th.id,
730
- newWidthPx: width
731
- });
732
1106
  }
733
- }, mouseDownHandler = function(e) {
734
- if (!!th) {
735
- resizing = true;
736
- resizingInner = true;
737
- let { paddingLeft, paddingRight } = getComputedStyle(th);
738
- 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
+ }
739
1115
  }
740
- };
741
- let { width } = th.getBoundingClientRect();
742
- node.addEventListener("mousedown", mouseDownHandler);
743
- document.addEventListener("mouseup", mouseUpHandler);
744
- document.addEventListener("mousemove", mouseMoveHandler);
745
- return {
746
- destroy() {
747
- node.removeEventListener("mousedown", mouseDownHandler);
748
- document.removeEventListener("mouseup", mouseUpHandler);
749
- 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
+ }
750
1128
  }
751
- };
1129
+ }
752
1130
  }
753
- }
754
- $:
755
- 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
+ ) {
756
1139
  tick().then(updateRemainingWidth);
757
1140
  }
758
- async function updateRemainingWidth() {
759
- if (tableContainer != null && !!tableContainer) {
760
- const containerWidth = tableContainer?.getBoundingClientRect().width - 26;
761
- if (containerWidth) {
762
- const totalResizableWidth = headersToShowInTable.reduce((sum, head) => {
763
- let th = headersHTML[head.value];
764
- if (!!th) {
765
- resizeHeader(th, head);
766
- }
767
- const width = th?.getBoundingClientRect().width || 0;
768
- return sum + width + 1;
769
- }, 0);
770
- const extraStaticWidth = Array.from(mainHeader.querySelectorAll("th.non-resizable, th.customize-headers")).reduce((sum, th) => sum + th.getBoundingClientRect().width + 1, 0);
771
- 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
+ }
772
1161
  }
773
1162
  }
774
- }
775
- function resizeHeader(th, header) {
776
- if (!resizedColumnSizeWithPadding[header.value]) {
777
- let widthWihtPadding = th.getBoundingClientRect().width;
778
- let minWidth = header.minWidth, minWidthPx = DEFAULT_MIN_WIDTH_PX;
779
- if (!!minWidth && minWidth.endsWith("px")) {
780
- minWidthPx = parseInt(minWidth, 10);
781
- }
782
- if (widthWihtPadding < minWidthPx) {
783
- widthWihtPadding = minWidthPx;
784
- }
785
- let maxWidth = header.maxWidth, maxWidthPx = DEFAULT_MAX_WIDTH_PX;
786
- if (!!maxWidth && maxWidth.endsWith("px")) {
787
- maxWidthPx = parseInt(maxWidth, 10);
788
- }
789
- if (widthWihtPadding > maxWidthPx) {
790
- 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;
791
1187
  }
792
- 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`
793
1191
  }
794
- let { paddingLeft, paddingRight } = getComputedStyle(th);
795
- let width = resizedColumnSizeWithPadding[header.value] - parseFloat(paddingLeft) - parseFloat(paddingRight);
796
- th.style.width = `${width}px`;
797
- }
798
1192
  </script>
799
1193
 
800
1194
  {#if !!rows && Array.isArray(rows) && !!headersToShowInTable && Array.isArray(headersToShowInTable)}
@@ -965,10 +1359,15 @@ function resizeHeader(th, header) {
965
1359
  {#if !loading}
966
1360
  {totalRows || rows.length}
967
1361
  {:else}
968
- <CircularLoader
969
- {loading}
970
- --circular-loader-height='10px'
971
- ></CircularLoader>
1362
+ <div
1363
+ style:display=flex
1364
+ style:align-items=center
1365
+ >
1366
+ <CircularLoader
1367
+ {loading}
1368
+ --circular-loader-height='10px'
1369
+ ></CircularLoader>
1370
+ </div>
972
1371
  {/if}
973
1372
  </div>
974
1373
  {/if}
@@ -1032,24 +1431,10 @@ function resizeHeader(th, header) {
1032
1431
  {#if !!head.info}
1033
1432
  <Icon
1034
1433
  name="mdi-help-circle-outline"
1035
- --icon-size="16px"
1434
+ --icon-size="14px"
1036
1435
  />
1037
1436
  {/if}
1038
1437
  </span>
1039
- {#if !!head.info}
1040
- <ToolTip
1041
- appearTimeout={1000}
1042
- activator={infoActivators[index]}
1043
- >
1044
- <div
1045
- style:background-color='rgb(var(--global-color-background-300), .95)'
1046
- style:border-radius="5px"
1047
- style:padding="10px"
1048
- >
1049
- {head.info}
1050
- </div>
1051
- </ToolTip>
1052
- {/if}
1053
1438
  {#if head.sortable}
1054
1439
  <span
1055
1440
  class="header-sort-icon"
@@ -1066,6 +1451,20 @@ function resizeHeader(th, header) {
1066
1451
  {/if}
1067
1452
  </slot>
1068
1453
  </th>
1454
+ {#if !!head.info}
1455
+ <ToolTip
1456
+ appearTimeout={1000}
1457
+ activator={infoActivators[index]}
1458
+ >
1459
+ <div
1460
+ style:background-color='rgb(var(--global-color-background-300), .95)'
1461
+ style:border-radius="5px"
1462
+ style:padding="10px"
1463
+ >
1464
+ {head.info}
1465
+ </div>
1466
+ </ToolTip>
1467
+ {/if}
1069
1468
  {/each}
1070
1469
  {#if remainingWidth}
1071
1470
  <th
@@ -1902,8 +2301,14 @@ function resizeHeader(th, header) {
1902
2301
  }
1903
2302
 
1904
2303
  .header-label {
1905
- margin-right: 5px;
1906
- font-size: small;
2304
+ margin-right: var(
2305
+ --dynamic-table-header-label-margin,
2306
+ var(--dynamic-table-default-label-margin)
2307
+ );
2308
+ font-size: var(
2309
+ --dynamic-table-header-label-font-size,
2310
+ var(--dynamic-table-default-label-font-size)
2311
+ );
1907
2312
  }
1908
2313
 
1909
2314
  .header-sort-icon {