@likable-hair/svelte 3.3.28 → 3.3.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/dist/components/composed/buttons/ActivableButton.svelte +2 -6
  2. package/dist/components/composed/buttons/ActivableButton.svelte.d.ts +32 -36
  3. package/dist/components/composed/common/MenuOrDrawer.svelte +25 -35
  4. package/dist/components/composed/common/MenuOrDrawer.svelte.d.ts +25 -50
  5. package/dist/components/composed/common/MenuOrDrawerOptions.svelte +34 -40
  6. package/dist/components/composed/common/MenuOrDrawerOptions.svelte.d.ts +21 -35
  7. package/dist/components/composed/common/QuickActions.svelte +29 -57
  8. package/dist/components/composed/common/QuickActions.svelte.d.ts +20 -24
  9. package/dist/components/composed/common/ToolTip.svelte +22 -31
  10. package/dist/components/composed/common/ToolTip.svelte.d.ts +43 -32
  11. package/dist/components/composed/forms/AsyncAutocomplete.svelte +23 -44
  12. package/dist/components/composed/forms/AsyncAutocomplete.svelte.d.ts +39 -44
  13. package/dist/components/composed/forms/AvatarDropdown.svelte +27 -57
  14. package/dist/components/composed/forms/AvatarDropdown.svelte.d.ts +41 -45
  15. package/dist/components/composed/forms/ConfirmOrCancelButtons.svelte +17 -35
  16. package/dist/components/composed/forms/ConfirmOrCancelButtons.svelte.d.ts +37 -41
  17. package/dist/components/composed/forms/CountriesAutocomplete.svelte +7 -16
  18. package/dist/components/composed/forms/CountriesAutocomplete.svelte.d.ts +60 -31
  19. package/dist/components/composed/forms/DatePickerTextField.svelte +114 -166
  20. package/dist/components/composed/forms/DatePickerTextField.svelte.d.ts +63 -67
  21. package/dist/components/composed/forms/Dropdown.svelte +21 -51
  22. package/dist/components/composed/forms/Dropdown.svelte.d.ts +43 -48
  23. package/dist/components/composed/forms/IconsDropdown.svelte +33 -61
  24. package/dist/components/composed/forms/IconsDropdown.svelte.d.ts +26 -30
  25. package/dist/components/composed/forms/LabelAndSelect.svelte +7 -32
  26. package/dist/components/composed/forms/LabelAndSelect.svelte.d.ts +31 -35
  27. package/dist/components/composed/forms/LabelAndTextField.svelte +5 -30
  28. package/dist/components/composed/forms/LabelAndTextField.svelte.d.ts +42 -46
  29. package/dist/components/composed/forms/ToggleList.svelte +33 -59
  30. package/dist/components/composed/forms/ToggleList.svelte.d.ts +17 -21
  31. package/dist/components/composed/forms/YearPickerTextField.svelte +74 -114
  32. package/dist/components/composed/forms/YearPickerTextField.svelte.d.ts +49 -53
  33. package/dist/components/composed/list/DynamicTable.css +2 -0
  34. package/dist/components/composed/list/DynamicTable.svelte +1070 -1434
  35. package/dist/components/composed/list/DynamicTable.svelte.d.ts +366 -370
  36. package/dist/components/composed/list/PaginatedTable.svelte +81 -140
  37. package/dist/components/composed/list/PaginatedTable.svelte.d.ts +110 -108
  38. package/dist/components/composed/progress/HorizontalStackedProgress.css +4 -0
  39. package/dist/components/composed/progress/HorizontalStackedProgress.svelte +47 -63
  40. package/dist/components/composed/progress/HorizontalStackedProgress.svelte.d.ts +22 -25
  41. package/dist/components/composed/search/DynamicFilters.svelte +83 -105
  42. package/dist/components/composed/search/DynamicFilters.svelte.d.ts +27 -31
  43. package/dist/components/composed/search/FilterEditor.svelte +80 -106
  44. package/dist/components/composed/search/FilterEditor.svelte.d.ts +33 -37
  45. package/dist/components/composed/search/Filters.svelte +294 -362
  46. package/dist/components/composed/search/Filters.svelte.d.ts +52 -56
  47. package/dist/components/composed/search/GlobalSearchTextField.svelte +41 -79
  48. package/dist/components/composed/search/GlobalSearchTextField.svelte.d.ts +39 -43
  49. package/dist/components/composed/search/MobileFilterEditor.svelte +93 -135
  50. package/dist/components/composed/search/MobileFilterEditor.svelte.d.ts +35 -39
  51. package/dist/components/composed/search/SearchBar.svelte +5 -28
  52. package/dist/components/composed/search/SearchBar.svelte.d.ts +30 -34
  53. package/dist/components/composed/search/SearchResults.svelte +7 -42
  54. package/dist/components/composed/search/SearchResults.svelte.d.ts +36 -40
  55. package/dist/components/composed/shop/ProductCard.svelte +4 -18
  56. package/dist/components/composed/shop/ProductCard.svelte.d.ts +28 -32
  57. package/dist/components/composed/shop/ProductsGrid.svelte +2 -22
  58. package/dist/components/composed/shop/ProductsGrid.svelte.d.ts +40 -44
  59. package/dist/components/layouts/CollapsibleSideBarLayout.svelte +29 -55
  60. package/dist/components/layouts/CollapsibleSideBarLayout.svelte.d.ts +54 -85
  61. package/dist/components/layouts/StableDividedSideBarLayout.svelte +17 -47
  62. package/dist/components/layouts/StableDividedSideBarLayout.svelte.d.ts +32 -50
  63. package/dist/components/layouts/UnstableDividedSideBarLayout.svelte +30 -53
  64. package/dist/components/layouts/UnstableDividedSideBarLayout.svelte.d.ts +63 -103
  65. package/dist/components/simple/buttons/Button.svelte +32 -78
  66. package/dist/components/simple/buttons/Button.svelte.d.ts +35 -47
  67. package/dist/components/simple/buttons/LinkButton.svelte +22 -54
  68. package/dist/components/simple/buttons/LinkButton.svelte.d.ts +33 -50
  69. package/dist/components/simple/charts/GanymedeBarChart.svelte +134 -172
  70. package/dist/components/simple/charts/GanymedeBarChart.svelte.d.ts +46 -50
  71. package/dist/components/simple/charts/GanymedeLineChart.svelte +115 -157
  72. package/dist/components/simple/charts/GanymedeLineChart.svelte.d.ts +47 -51
  73. package/dist/components/simple/charts/GanymedePieChart.svelte +39 -62
  74. package/dist/components/simple/charts/GanymedePieChart.svelte.d.ts +33 -37
  75. package/dist/components/simple/common/Card.svelte +1 -20
  76. package/dist/components/simple/common/Card.svelte.d.ts +38 -51
  77. package/dist/components/simple/common/CollapsibleDivider.svelte +11 -23
  78. package/dist/components/simple/common/CollapsibleDivider.svelte.d.ts +25 -29
  79. package/dist/components/simple/common/Divider.svelte +2 -8
  80. package/dist/components/simple/common/Divider.svelte.d.ts +19 -23
  81. package/dist/components/simple/common/Gesture.svelte +46 -64
  82. package/dist/components/simple/common/Gesture.svelte.d.ts +17 -21
  83. package/dist/components/simple/common/InfiniteScroll.svelte +29 -52
  84. package/dist/components/simple/common/InfiniteScroll.svelte.d.ts +20 -24
  85. package/dist/components/simple/common/IntersectionObserver.svelte +32 -45
  86. package/dist/components/simple/common/IntersectionObserver.svelte.d.ts +21 -34
  87. package/dist/components/simple/common/MediaQuery.svelte +21 -30
  88. package/dist/components/simple/common/MediaQuery.svelte.d.ts +30 -34
  89. package/dist/components/simple/common/Menu.svelte +303 -290
  90. package/dist/components/simple/common/Menu.svelte.d.ts +40 -51
  91. package/dist/components/simple/common/Playground.svelte +17 -18
  92. package/dist/components/simple/common/Playground.svelte.d.ts +15 -19
  93. package/dist/components/simple/common/VerticalDraggableList.svelte +16 -35
  94. package/dist/components/simple/common/VerticalDraggableList.svelte.d.ts +29 -33
  95. package/dist/components/simple/dashboards/DashboardGridShaper.svelte +26 -32
  96. package/dist/components/simple/dashboards/DashboardGridShaper.svelte.d.ts +12 -16
  97. package/dist/components/simple/dates/Calendar.svelte +28 -52
  98. package/dist/components/simple/dates/Calendar.svelte.d.ts +41 -45
  99. package/dist/components/simple/dates/DatePicker.svelte +60 -90
  100. package/dist/components/simple/dates/DatePicker.svelte.d.ts +40 -44
  101. package/dist/components/simple/dates/MonthSelector.svelte +15 -37
  102. package/dist/components/simple/dates/MonthSelector.svelte.d.ts +31 -35
  103. package/dist/components/simple/dates/TimePicker.svelte +31 -45
  104. package/dist/components/simple/dates/TimePicker.svelte.d.ts +20 -24
  105. package/dist/components/simple/dates/TimePickerTextField.svelte +35 -56
  106. package/dist/components/simple/dates/TimePickerTextField.svelte.d.ts +24 -28
  107. package/dist/components/simple/dates/YearSelector.svelte +29 -54
  108. package/dist/components/simple/dates/YearSelector.svelte.d.ts +31 -35
  109. package/dist/components/simple/dialogs/Dialog.svelte +62 -92
  110. package/dist/components/simple/dialogs/Dialog.svelte.d.ts +28 -42
  111. package/dist/components/simple/forms/Autocomplete.svelte +150 -207
  112. package/dist/components/simple/forms/Autocomplete.svelte.d.ts +79 -83
  113. package/dist/components/simple/forms/Checkbox.svelte +25 -40
  114. package/dist/components/simple/forms/Checkbox.svelte.d.ts +22 -25
  115. package/dist/components/simple/forms/FileInput.svelte +48 -88
  116. package/dist/components/simple/forms/FileInput.svelte.d.ts +33 -37
  117. package/dist/components/simple/forms/FileInputList.svelte +37 -62
  118. package/dist/components/simple/forms/FileInputList.svelte.d.ts +35 -39
  119. package/dist/components/simple/forms/RadioButton.svelte +3 -11
  120. package/dist/components/simple/forms/RadioButton.svelte.d.ts +27 -31
  121. package/dist/components/simple/forms/Select.svelte +3 -16
  122. package/dist/components/simple/forms/Select.svelte.d.ts +20 -24
  123. package/dist/components/simple/forms/SimpleTextField.svelte +6 -53
  124. package/dist/components/simple/forms/SimpleTextField.svelte.d.ts +60 -64
  125. package/dist/components/simple/forms/Switch.svelte +16 -30
  126. package/dist/components/simple/forms/Switch.svelte.d.ts +21 -25
  127. package/dist/components/simple/forms/Textarea.svelte +2 -27
  128. package/dist/components/simple/forms/Textarea.svelte.d.ts +37 -41
  129. package/dist/components/simple/forms/Textfield.svelte +18 -56
  130. package/dist/components/simple/forms/Textfield.svelte.d.ts +51 -55
  131. package/dist/components/simple/forms/TreeEditor.svelte +95 -141
  132. package/dist/components/simple/forms/TreeEditor.svelte.d.ts +38 -42
  133. package/dist/components/simple/forms/TreeEditorItem.svelte +42 -77
  134. package/dist/components/simple/forms/TreeEditorItem.svelte.d.ts +50 -54
  135. package/dist/components/simple/forms/VerticalSwitch.svelte +1 -11
  136. package/dist/components/simple/forms/VerticalSwitch.svelte.d.ts +28 -32
  137. package/dist/components/simple/forms/VerticalTextSwitch.svelte +3 -15
  138. package/dist/components/simple/forms/VerticalTextSwitch.svelte.d.ts +26 -30
  139. package/dist/components/simple/lists/ColorInvertedSelector.svelte +23 -53
  140. package/dist/components/simple/lists/ColorInvertedSelector.svelte.d.ts +42 -46
  141. package/dist/components/simple/lists/HierarchyMenu.svelte +19 -38
  142. package/dist/components/simple/lists/HierarchyMenu.svelte.d.ts +30 -34
  143. package/dist/components/simple/lists/Paginator.svelte +41 -50
  144. package/dist/components/simple/lists/Paginator.svelte.d.ts +19 -23
  145. package/dist/components/simple/lists/SelectableMenuList.svelte +15 -43
  146. package/dist/components/simple/lists/SelectableMenuList.svelte.d.ts +20 -24
  147. package/dist/components/simple/lists/SelectableVerticalList.svelte +59 -100
  148. package/dist/components/simple/lists/SelectableVerticalList.svelte.d.ts +47 -51
  149. package/dist/components/simple/lists/SidebarMenuList.svelte +71 -116
  150. package/dist/components/simple/lists/SidebarMenuList.svelte.d.ts +22 -26
  151. package/dist/components/simple/lists/SimpleTable.svelte +154 -264
  152. package/dist/components/simple/lists/SimpleTable.svelte.d.ts +66 -70
  153. package/dist/components/simple/loaders/CircularLoader.svelte +5 -16
  154. package/dist/components/simple/loaders/CircularLoader.svelte.d.ts +15 -19
  155. package/dist/components/simple/loaders/Skeleton.svelte +2 -3
  156. package/dist/components/simple/loaders/Skeleton.svelte.d.ts +12 -16
  157. package/dist/components/simple/media/AttachmentDownloader.svelte +3 -17
  158. package/dist/components/simple/media/AttachmentDownloader.svelte.d.ts +28 -32
  159. package/dist/components/simple/media/Avatar.svelte +12 -18
  160. package/dist/components/simple/media/Avatar.svelte.d.ts +20 -31
  161. package/dist/components/simple/media/Carousel.svelte +11 -29
  162. package/dist/components/simple/media/Carousel.svelte.d.ts +24 -28
  163. package/dist/components/simple/media/DescriptiveAvatar.svelte +4 -12
  164. package/dist/components/simple/media/DescriptiveAvatar.svelte.d.ts +28 -44
  165. package/dist/components/simple/media/FlagIcon.svelte +5 -8
  166. package/dist/components/simple/media/FlagIcon.svelte.d.ts +15 -19
  167. package/dist/components/simple/media/Gallery.svelte +29 -49
  168. package/dist/components/simple/media/Gallery.svelte.d.ts +23 -27
  169. package/dist/components/simple/media/Icon.svelte +4 -9
  170. package/dist/components/simple/media/Icon.svelte.d.ts +20 -24
  171. package/dist/components/simple/media/Image.svelte +20 -42
  172. package/dist/components/simple/media/Image.svelte.d.ts +33 -44
  173. package/dist/components/simple/media/ImageGrid.svelte +12 -37
  174. package/dist/components/simple/media/ImageGrid.svelte.d.ts +28 -32
  175. package/dist/components/simple/navigation/Breadcrumb.svelte +10 -28
  176. package/dist/components/simple/navigation/Breadcrumb.svelte.d.ts +22 -26
  177. package/dist/components/simple/navigation/Chip.svelte +23 -44
  178. package/dist/components/simple/navigation/Chip.svelte.d.ts +31 -42
  179. package/dist/components/simple/navigation/Drawer.svelte +65 -107
  180. package/dist/components/simple/navigation/Drawer.svelte.d.ts +37 -50
  181. package/dist/components/simple/navigation/HeaderMenu.svelte +23 -40
  182. package/dist/components/simple/navigation/HeaderMenu.svelte.d.ts +35 -39
  183. package/dist/components/simple/navigation/Navigator.svelte +8 -30
  184. package/dist/components/simple/navigation/Navigator.svelte.d.ts +24 -28
  185. package/dist/components/simple/navigation/TabSwitcher.svelte +47 -83
  186. package/dist/components/simple/navigation/TabSwitcher.svelte.d.ts +34 -38
  187. package/dist/components/simple/notifiers/AlertBanner.css +1 -0
  188. package/dist/components/simple/notifiers/AlertBanner.svelte +20 -48
  189. package/dist/components/simple/notifiers/AlertBanner.svelte.d.ts +37 -41
  190. package/dist/components/simple/progress/ProgressBar.svelte +13 -20
  191. package/dist/components/simple/progress/ProgressBar.svelte.d.ts +17 -21
  192. package/dist/components/simple/timeline/SimpleTimeLine.svelte +5 -19
  193. package/dist/components/simple/timeline/SimpleTimeLine.svelte.d.ts +35 -39
  194. package/dist/components/simple/typography/Code.svelte +12 -27
  195. package/dist/components/simple/typography/Code.svelte.d.ts +24 -28
  196. package/dist/stores/debounce.d.ts +1 -0
  197. package/dist/stores/layouts/unstableSidebarOpened.d.ts +1 -0
  198. package/dist/stores/mediaQuery.d.ts +1 -0
  199. package/dist/stores/theme.d.ts +1 -0
  200. package/package.json +1 -1
@@ -1,1194 +1,800 @@
1
- <script lang="ts">
2
- import {
3
- Checkbox,
4
- Chip,
5
- Converter,
6
- CountriesAutocomplete,
7
- DatePickerTextField,
8
- Drawer,
9
- FilterBuilder,
10
- FlagIcon,
11
- Icon,
12
- MediaQuery,
13
- Menu,
14
- ToolTip,
15
- type PaginatedTable
16
- } from "../../..";
17
- import { DateTime } from "luxon";
18
- import { createEventDispatcher, onMount, tick, type ComponentProps } from "svelte";
19
- import { quintOut } from "svelte/easing";
20
- import { crossfade, fade } from "svelte/transition";
21
- import Filters from "../search/Filters.svelte";
22
- import ConfirmOrCancelButtons from "../forms/ConfirmOrCancelButtons.svelte";
23
- import { flip } from "svelte/animate";
24
- import InfiniteScroll from "../../simple/common/InfiniteScroll.svelte";
25
- import Divider from "../../simple/common/Divider.svelte";
26
- import VerticalDraggableList from "../../simple/common/VerticalDraggableList.svelte";
27
- import Button from "../../simple/buttons/Button.svelte";
28
- import SimpleTextField from "../../simple/forms/SimpleTextField.svelte";
29
- import Autocomplete from "../../simple/forms/Autocomplete.svelte";
30
- import LabelAndSelect from "../forms/LabelAndSelect.svelte";
31
- import LabelAndTextField from "../forms/LabelAndTextField.svelte";
32
- import DynamicFilters from "../search/DynamicFilters.svelte";
33
- import type { DateMode, Filter, NumberMode, SelectMode, StringMode } from "../../../utils/filters/filters";
34
- import QuickActions, { type Action } from "../common/QuickActions.svelte";
35
- import './DynamicTable.css'
36
- import type { QuickFilter } from "../../../utils/filters/quickFilters";
37
- import Switch from "../../simple/forms/Switch.svelte";
38
- import CircularLoader from "../../simple/loaders/CircularLoader.svelte";
39
-
40
- onMount(() => {
41
- updateHeaderHeight();
42
- window.addEventListener('resize', updateHeaderHeight);
43
- tableContainer.addEventListener("scroll", setReachedBottomOrTop);
44
-
45
- hideScrollbar = tableContainer.scrollHeight > tableContainer.clientHeight
46
-
47
- for(const head of [...headers, { value: 'non-resizable', minWidth: DEFAULT_MIN_WIDTH_PX + 'px', maxWidth: DEFAULT_MAX_WIDTH_PX + 'px' }, { value: 'customize-headers', minWidth: DEFAULT_MIN_WIDTH_PX + 'px', maxWidth: DEFAULT_MAX_WIDTH_PX + 'px' }]) {
48
- let th = headersHTML[head.value]
49
- if(!!th) {
50
- resizeHeader(th, head)
51
- }
52
- }
53
-
54
- tableHTML.classList.add('dynamic-resizable')
55
-
56
- resizeObserver = new ResizeObserver(() => {
57
- updateRemainingWidth();
58
- updateHeaderHeight();
59
- });
60
- resizeObserver.observe(tableContainer);
61
-
62
- return () => {
63
- window.removeEventListener('resize', updateHeaderHeight);
64
- tableContainer.removeEventListener("scroll", setReachedBottomOrTop);
65
- resizeObserver?.disconnect();
66
- }
67
- });
68
-
69
- function updateHeaderHeight() {
70
- if (mainHeader) {
71
- const headerHeight = mainHeader.getBoundingClientRect().height;
72
- document.documentElement.style.setProperty('--main-header-height', headerHeight + 'px');
1
+ <script>import {
2
+ Checkbox,
3
+ Chip,
4
+ Converter,
5
+ CountriesAutocomplete,
6
+ DatePickerTextField,
7
+ Drawer,
8
+ FilterBuilder,
9
+ FlagIcon,
10
+ Icon,
11
+ MediaQuery,
12
+ Menu,
13
+ ToolTip
14
+ } from "../../..";
15
+ import { DateTime } from "luxon";
16
+ import { createEventDispatcher, onMount, tick } from "svelte";
17
+ import { quintOut } from "svelte/easing";
18
+ import { crossfade, fade } from "svelte/transition";
19
+ import Filters from "../search/Filters.svelte";
20
+ import ConfirmOrCancelButtons from "../forms/ConfirmOrCancelButtons.svelte";
21
+ import { flip } from "svelte/animate";
22
+ import InfiniteScroll from "../../simple/common/InfiniteScroll.svelte";
23
+ import Divider from "../../simple/common/Divider.svelte";
24
+ import VerticalDraggableList from "../../simple/common/VerticalDraggableList.svelte";
25
+ import Button from "../../simple/buttons/Button.svelte";
26
+ import SimpleTextField from "../../simple/forms/SimpleTextField.svelte";
27
+ import Autocomplete from "../../simple/forms/Autocomplete.svelte";
28
+ import LabelAndSelect from "../forms/LabelAndSelect.svelte";
29
+ import LabelAndTextField from "../forms/LabelAndTextField.svelte";
30
+ import DynamicFilters from "../search/DynamicFilters.svelte";
31
+ import QuickActions, {} from "../common/QuickActions.svelte";
32
+ import "./DynamicTable.css";
33
+ import Switch from "../../simple/forms/Switch.svelte";
34
+ import CircularLoader from "../../simple/loaders/CircularLoader.svelte";
35
+ 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);
73
45
  }
74
46
  }
75
-
76
- function setReachedBottomOrTop(){
77
- reachedBottom = tableContainer.scrollHeight - tableContainer.scrollTop === tableContainer.clientHeight
78
- reachedTop = tableContainer.scrollTop === 0
79
- hideScrollbar = tableContainer.scrollHeight > tableContainer.clientHeight
47
+ tableHTML.classList.add("dynamic-resizable");
48
+ resizeObserver = new ResizeObserver(() => {
49
+ updateRemainingWidth();
50
+ updateHeaderHeight();
51
+ });
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");
80
63
  }
81
-
82
- $: if(reachedBottom && rows.length < totalRows) {
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) {
83
72
  setTimeout(() => {
84
- if(reachedBottom) {
85
- handleLoadForward()
73
+ if (reachedBottom) {
74
+ handleLoadForward();
86
75
  }
87
- }, 30)
76
+ }, 30);
88
77
  }
89
-
90
- $: if(reachedTop && currentSectionNumber > 0) {
78
+ $:
79
+ if (reachedTop && currentSectionNumber > 0) {
91
80
  setTimeout(() => {
92
- if(reachedTop) {
93
- handleLoadBackward()
81
+ if (reachedTop) {
82
+ handleLoadBackward();
94
83
  }
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) => `
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) => `
108
95
  transform: ${transform} scale(${t});
109
96
  opacity: ${t}
110
- `,
111
- };
112
- },
113
- });
114
-
115
- type Item = {
116
- [key: string]: any;
117
- disableEdit?: boolean,
118
- rowDisableBackgroundColor?: string
119
- };
120
-
121
- type Row = {
122
- item: Item;
123
- subItems: Item[];
124
- };
125
-
126
- type MenuStringType = {
127
- key: "string";
128
- };
129
-
130
- type MenuNumberType = {
131
- key: "number";
132
- params?: {
133
- min?: number;
134
- max?: number;
135
- };
136
- };
137
-
138
- type MenuDateType = {
139
- key: "date";
140
- };
141
-
142
- type MenuSelectType = {
143
- key: "select";
144
- params: {
145
- options: {
146
- icon?: string;
147
- value: string | number | undefined;
148
- id?: number | undefined;
149
- text: string;
150
- }[];
97
+ `
151
98
  };
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
152
121
  };
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
122
+ }) : [], headersToShow = headersToShowInTable.map((h) => {
123
+ return {
124
+ id: h.value,
125
+ name: h.label
178
126
  };
179
- type HeaderType = Header["type"];
180
-
181
- let clazz: {
182
- container?: string;
183
- header?: string;
184
- row?: string;
185
- cell?: string;
186
- } = {};
187
- export { clazz as class };
188
-
189
- const dispatch = createEventDispatcher<{
190
- sort: {
191
- sortedBy: string | undefined;
192
- sortDirection: string;
193
- };
194
- rowClick: {
195
- item: Item;
196
- };
197
- cellClick: {
198
- item: Item;
199
- };
200
- saveCellEdit: {
201
- item: any;
202
- };
203
- saveHeadersToShow: {
204
- headersToShow: {
205
- id: string;
206
- name: string;
207
- }[];
208
- };
209
- filtersChange: {
210
- builder: FilterBuilder;
211
- };
212
- fetchData: {};
213
- removeFilter: {filter: Filter}
214
- removeAllFilters: {}
215
- removeCustomQuickFilter: {
216
- quickFilter: QuickFilter
217
- }
218
- applyCustomQuickFilter: {
219
- quickFilter: QuickFilter
220
- setQuickFilterValue: (quickFilter: QuickFilter, value?: any) => void
221
- }
222
- columnResize: {
223
- id: string,
224
- newWidthPx: number
225
- }
226
- }>();
227
-
228
- export let headers: Header[] = [],
229
- headersToShowInTable: Header[] = headers,
230
- subHeaders: Header[] = [],
231
- customizeHeaders: boolean = false,
232
- rows: Row[] = [],
233
- sortedBy: string | undefined = undefined,
234
- sortDirection: "asc" | "desc" = "asc",
235
- cellEdit: boolean = false,
236
- lang: "it" | "en" = "en",
237
- dateLocale: "it" | "en" | undefined = undefined,
238
- noItemsText: string = lang == 'en' ? "No items to show" : 'Nessun elemento da visualizzare',
239
- showSelect: boolean = false,
240
- showActions: boolean = true,
241
- selectMode: "single" | "multiple" = "single",
242
- selectedItems: Item[] = [],
243
- unselectedItems: Item[] = [],
244
- selectedAll: boolean = false,
245
- showExpand: boolean = false,
246
- loading: boolean = false,
247
- disabled: boolean = false,
248
- filters: ComponentProps<Filters>["filters"] = [],
249
- searchBarColumns: string[] | undefined = undefined,
250
- searchBarVisible: boolean = false,
251
- searchBarPlaceholder: string = lang == 'en' ? "Type to search..." : 'Scrivi per cercare...',
252
- filtersVisible: boolean = false,
253
- quickFiltersVisible: boolean = false,
254
- editFilterMode: "one-edit" | "multi-edit" = "one-edit",
255
- showActiveFilters: boolean = true,
256
- quickFilters: QuickFilter[] = [],
257
- actionsForSelectedItems: Action[] = [],
258
- quickActionsDisabled: boolean = false,
259
- totalRows: number = rows.length,
260
- searchText: string | undefined = undefined,
261
- renderedRowsNumber = 100,
262
- sectionRowsNumber = 20,
263
- sectionThreshold = 2,
264
- backwardThresholdPixel = 100,
265
- forwardThresholdPixel = 100,
266
- uniqueKey: keyof Item = 'id',
267
- numberOfResultsVisible: boolean = false,
268
- endLineVisible: boolean = false,
269
- resizableColumns: boolean= false,
270
- resizedColumnSizeWithPadding: { [value: string]: number } = {},
271
- dynamicFilters: boolean = true,
272
- useSelectedItemsOnly = false,
273
- 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,
353
- });
354
- openHeaderDrawer = false;
355
- }
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
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;
369
143
  }
370
-
371
- handleSearchChange(searchText);
372
-
373
- dispatch("sort", {
374
- sortedBy,
375
- sortDirection,
376
- });
144
+ } else {
145
+ sortedBy = header.value;
146
+ sortDirection = "asc";
147
+ sortModify = header.sortModify;
377
148
  }
378
- }
379
-
380
- function handleRowClick(item: { [key: string]: any }) {
381
- if (disabled || loading) return;
382
- dispatch("rowClick", {
383
- item,
149
+ handleSearchChange(searchText);
150
+ dispatch("sort", {
151
+ sortedBy,
152
+ sortDirection
384
153
  });
385
154
  }
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`;
426
- } else {
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
- }
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);
437
194
  }
438
195
  }
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
196
  }
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
- }
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
+ }
245
+ } else {
246
+ if (!selectedItems.find((selectedItem) => selectedItem[uniqueKey] == rows[i].item[uniqueKey])) {
247
+ selectedItems = [...selectedItems, rows[i].item];
501
248
  }
502
249
  }
503
250
  }
504
251
  }
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]))
512
- }
513
- }
514
- } else {
515
- if(selectedAll && !ignoreSelectAll) {
516
- unselectedItems = unselectedItems.filter((i) => i[uniqueKey] != item[uniqueKey]);
517
252
  } else {
518
- selectedItems = selectedItems.filter((i) => i[uniqueKey] != item[uniqueKey]);
253
+ if (selectedAll && !ignoreSelectAll) {
254
+ unselectedItems = [...unselectedItems, item];
255
+ } else {
256
+ selectedItems = [...selectedItems, item];
257
+ }
258
+ selectedIndexes.push(rows.findIndex((r) => r.item[uniqueKey] == item[uniqueKey]));
519
259
  }
520
- selectedIndexes = selectedIndexes.filter(r => r != rows.findIndex(r => r.item[uniqueKey] == item[uniqueKey]))
521
260
  }
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
261
+ } else {
262
+ if (selectedAll && !ignoreSelectAll) {
263
+ unselectedItems = unselectedItems.filter((i) => i[uniqueKey] != item[uniqueKey]);
264
+ } else {
265
+ selectedItems = selectedItems.filter((i) => i[uniqueKey] != item[uniqueKey]);
535
266
  }
267
+ selectedIndexes = selectedIndexes.filter((r) => r != rows.findIndex((r2) => r2.item[uniqueKey] == item[uniqueKey]));
536
268
  }
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];
269
+ }
270
+ function handleSelectAll() {
271
+ if (selectMode == "multiple") {
272
+ if (!selectedAll && ignoreSelectAll) {
273
+ selectedItems = rows.map((r) => r.item);
542
274
  } else {
543
- expandedRows = expandedRows.filter((r) => r.item[uniqueKey] != row.item[uniqueKey]);
275
+ selectedItems = [];
544
276
  }
277
+ selectedIndexes = [];
278
+ unselectedItems = [];
279
+ selectedAll = !selectedAll;
545
280
  }
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);
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]);
552
288
  }
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
- );
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
+ }
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
+ });
321
+ }
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]);
562
331
  }
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;
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 });
573
348
  } else {
574
- saveEditDisabled = false;
349
+ globalBuilder.orderBy(sortedBy, sortDirection || "asc");
575
350
  }
576
351
  }
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
- });
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
+ );
593
393
  }
594
-
595
- return builder;
596
394
  }
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);
395
+ if (dispatchFiltersChange) {
396
+ quickFilters = quickFilters;
397
+ handleFiltersChange();
609
398
  }
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");
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;
627
415
  }
628
416
  }
629
-
630
- dispatch("filtersChange", {
631
- builder: globalBuilder,
632
- });
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;
633
443
  }
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
- }
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;
456
+ }
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);
645
463
  }
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;
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);
664
474
  }
665
-
666
- if (dispatchFiltersChange) {
667
- quickFilter.active = false;
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
+ });
668
482
  }
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
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
678
491
  );
679
492
  }
680
493
  }
681
-
682
- if (dispatchFiltersChange) {
683
- quickFilters = quickFilters;
684
- handleFiltersChange();
685
- }
686
-
687
- return globalBuilder;
688
- }
689
-
690
- function handleSearchBoxKeydown(e: KeyboardEvent) {
691
- if (e.key == "Enter") {
692
- handleFiltersChange();
693
- }
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
- }
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;
494
+ } else if (quickFilter.type.key == "boolean") {
495
+ let value = quickFilter.type.value;
496
+ if (clearPreaviousValue) {
497
+ builder = handleClearQuickFilter(quickFilter, false);
719
498
  }
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;
499
+ quickFilter.type.value = value;
500
+ if (quickFilter.type.modify) {
501
+ builder = quickFilter.type.modify({
502
+ builder,
503
+ value
504
+ });
732
505
  }
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})
506
+ if (!!quickFilter.column && value != void 0) {
507
+ builder.where(quickFilter.column, value);
751
508
  }
752
- else {
753
- quickFilter.active = true;
754
- quickFilters = quickFilters;
755
- globalBuilder = quickFilterBuilder(globalBuilder, quickFilter);
756
-
757
- handleFiltersChange();
758
-
759
- quickFilterActivator = undefined;
760
- openQuickFilter = false;
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);
761
513
  }
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);
774
- }
775
- quickFilter.type.value = value;
776
- quickFilter.type.missingValue = missingValue;
777
-
514
+ quickFilter.type.selected = value;
515
+ quickFilter.type.missingValue = missingValue;
516
+ const values = value?.map((item) => item.value);
517
+ if (quickFilter.type.modify) {
778
518
  builder = quickFilter.type.modify({
779
519
  builder,
780
- value: { value, missingValue },
520
+ value: { values, missingValue }
781
521
  });
782
522
  }
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
- });
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);
797
528
  }
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
- }
529
+ }
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);
534
+ }
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
+ );
809
549
  }
810
- } else if (quickFilter.type.key == "boolean") {
811
- let value = quickFilter.type.value;
812
- if (clearPreaviousValue) {
813
- builder = handleClearQuickFilter(quickFilter, false);
550
+ if (!!to) {
551
+ builder.where(
552
+ quickFilter.column,
553
+ "<=",
554
+ DateTime.fromJSDate(to).setLocale("it-IT").endOf("day").toString()
555
+ );
814
556
  }
815
- quickFilter.type.value = value;
816
-
817
- if (quickFilter.type.modify) {
818
- builder = quickFilter.type.modify({
819
- builder,
820
- value,
821
- });
557
+ }
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);
562
+ }
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);
822
576
  }
823
-
824
- if (!!quickFilter.column && value != undefined) {
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) {
586
+ builder = quickFilter.type.modify({
587
+ builder,
588
+ value: { value, missingValue }
589
+ });
590
+ }
591
+ if (quickFilter.column) {
592
+ if (missingValue) {
593
+ builder.whereNull(quickFilter.column);
594
+ } else if (!!value) {
825
595
  builder.where(quickFilter.column, value);
826
596
  }
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
- }
926
597
  }
927
-
928
- return builder;
929
598
  }
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
- }
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;
956
607
  }
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
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;
1002
613
  }
1003
-
1004
- if(totalCachedSections - sectionThreshold <= currentSectionNumber
1005
- && !loading
1006
- && totalRows > rows.length
1007
- ) {
1008
- dispatch("fetchData", {});
614
+ } else {
615
+ newValue = filter.value;
616
+ if (!!newValue) {
617
+ newValid = true;
1009
618
  }
1010
619
  }
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
- }
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++;
1033
645
  }
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
1044
646
  }
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;
1045
654
  }
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
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--;
1052
674
  }
1053
675
  }
1054
- return undefined
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;
1055
683
  }
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
- }
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
+ }
691
+ }
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);
1089
706
  }
1090
- }
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
- })
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);
1105
711
  }
1106
- }
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)
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;
1114
718
  }
1115
719
  }
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)
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);
1127
727
  }
728
+ dispatch("columnResize", {
729
+ id: th.id,
730
+ newWidthPx: width
731
+ });
1128
732
  }
1129
- }
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);
739
+ }
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);
750
+ }
751
+ };
1130
752
  }
1131
-
1132
- $: if (
1133
- !!tableContainer &&
1134
- headersToShowInTable.length > 0 &&
1135
- resizedColumnSizeWithPadding &&
1136
- headersToShow.length > 0 &&
1137
- mainHeader
1138
- ) {
753
+ }
754
+ $:
755
+ if (!!tableContainer && headersToShowInTable.length > 0 && resizedColumnSizeWithPadding && headersToShow.length > 0 && mainHeader) {
1139
756
  tick().then(updateRemainingWidth);
1140
757
  }
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
- }
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);
1161
772
  }
1162
773
  }
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;
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);
1187
788
  }
1188
- let { paddingLeft, paddingRight } = getComputedStyle(th);
1189
- let width = resizedColumnSizeWithPadding[header.value] - parseFloat(paddingLeft) - parseFloat(paddingRight);
1190
- th.style.width = `${width}px`
789
+ if (widthWihtPadding > maxWidthPx) {
790
+ widthWihtPadding = maxWidthPx;
791
+ }
792
+ resizedColumnSizeWithPadding[header.value] = widthWihtPadding;
1191
793
  }
794
+ let { paddingLeft, paddingRight } = getComputedStyle(th);
795
+ let width = resizedColumnSizeWithPadding[header.value] - parseFloat(paddingLeft) - parseFloat(paddingRight);
796
+ th.style.width = `${width}px`;
797
+ }
1192
798
  </script>
1193
799
 
1194
800
  {#if !!rows && Array.isArray(rows) && !!headersToShowInTable && Array.isArray(headersToShowInTable)}
@@ -1369,7 +975,7 @@
1369
975
  </div>
1370
976
  {/if}
1371
977
 
1372
- <div class="outer-container">
978
+ <div class="outer-container {clazz.container}">
1373
979
  <div class="inner-container" class:hide-scrollbar={hideScrollbar} bind:this={tableContainer} on:scroll>
1374
980
  <InfiniteScroll
1375
981
  on:loadMore={handleLoadBackward}
@@ -1378,7 +984,7 @@
1378
984
  direction='backward'
1379
985
  />
1380
986
  <table style="display: table;" class="dynamic-table" bind:this={tableHTML}>
1381
- <thead class="table-header" bind:this={mainHeader}>
987
+ <thead class="table-header {clazz.header}" bind:this={mainHeader}>
1382
988
  <tr>
1383
989
  {#if !!showSelect && !showExpand && rows.length > 0}
1384
990
  <th
@@ -1466,7 +1072,7 @@
1466
1072
  style:width={remainingWidth + 'px'}
1467
1073
  class="filler"
1468
1074
  aria-hidden="true"
1469
- />
1075
+ ></th>
1470
1076
  {/if}
1471
1077
  {#if customizeHeaders || $$slots.rowActions || $$slots.append}
1472
1078
  <th
@@ -1499,7 +1105,7 @@
1499
1105
  style:font-size="1.2em"
1500
1106
  style:padding="0px"
1501
1107
  >
1502
- <div class="loader-line" />
1108
+ <div class="loader-line" ></div>
1503
1109
  </th>
1504
1110
  </tr>
1505
1111
  {/if}
@@ -1522,7 +1128,7 @@
1522
1128
  {:else}
1523
1129
  {#each renderedRows as row, indexRow}
1524
1130
  <tr
1525
- class="item-row"
1131
+ class="item-row {clazz.row}"
1526
1132
  data-key={row.item[uniqueKey]}
1527
1133
  style:background-color={
1528
1134
  !!row.item.disableEdit
@@ -1556,6 +1162,7 @@
1556
1162
  ) != -1
1557
1163
  }
1558
1164
  disabled={disabled || loading}
1165
+ on:click={e => e.stopPropagation()}
1559
1166
  on:change={(e) => handleSelect(row.item, e.detail.shiftKeyPressed)}
1560
1167
  />
1561
1168
  </td>
@@ -1570,7 +1177,10 @@
1570
1177
  : "mdi-chevron-up"}
1571
1178
  click
1572
1179
  --icon-size="24px"
1573
- on:click={() => expandRow(row)}
1180
+ on:click={e => {
1181
+ e?.stopPropagation()
1182
+ expandRow(row)
1183
+ }}
1574
1184
  />
1575
1185
  </td>
1576
1186
  {/if}
@@ -1589,6 +1199,7 @@
1589
1199
  false
1590
1200
  );
1591
1201
  }}
1202
+ class={clazz.cell}
1592
1203
  >
1593
1204
  {#if header.type.key == "custom"}
1594
1205
  <slot
@@ -1623,8 +1234,8 @@
1623
1234
  {/if}
1624
1235
  </td>
1625
1236
  {/each}
1626
- {#if remainingWidth}
1627
- <td/>
1237
+ {#if remainingWidth && (customizeHeaders || $$slots.rowActions || $$slots.append || resizableColumns)}
1238
+ <td></td>
1628
1239
  {/if}
1629
1240
  {#if $$slots.rowActions || $$slots.append}
1630
1241
  <td class={clazz.cell || ""}>
@@ -1770,338 +1381,357 @@
1770
1381
  </div>
1771
1382
  {/if}
1772
1383
 
1773
- <Menu
1384
+ <MenuOrDrawer
1774
1385
  bind:open={openCellEditor}
1775
- activator={cellEditorActivator}
1776
- bind:menuElement={menuElementCellEditor}
1777
- _top={undefined}
1778
- openingId="cell-editor"
1386
+ menuProps={{
1387
+ activator: cellEditorActivator,
1388
+ openingId: "cell-editor",
1389
+ }}
1390
+ drawerProps={{
1391
+ _space: '60vh',
1392
+ _borderRadius: '10px',
1393
+ }}
1394
+ let:isMenu
1779
1395
  >
1780
- <div
1781
- class="cell-editor-container"
1782
- bind:this={cellEditorContainer}
1783
- >
1784
- <div style:grid-column="1 / 3">
1785
- {#if cellEditorInfoActive.type.key === "string"}
1786
- <LabelAndTextField
1787
- label={cellEditorInfoActive.title}
1788
- description={cellEditorInfoActive.description}
1789
- name={cellEditorInfoActive.title}
1790
- info={cellEditorInfoActive.info}
1791
- type="text"
1792
- orientation="horizontal"
1793
- bind:value={cellEditorInfoActive.value}
1794
- --simple-textfield-border-radius= 0.5rem
1795
- --simple-textfield-background-color= transparent
1796
- --simple-textfield-box-shadow= 'inset 0 0 0 1px rgb(var(--global-color-background-500))'
1797
- --simple-textfield-focus-box-shadow='inset 0 0 0 2px rgb(var(--global-color-primary-500))'
1798
- />
1799
- {:else if cellEditorInfoActive.type.key === "number"}
1800
- <LabelAndTextField
1801
- label={cellEditorInfoActive.title}
1802
- description={cellEditorInfoActive.description}
1803
- name={cellEditorInfoActive.title}
1804
- info={cellEditorInfoActive.info}
1805
- type="number"
1806
- orientation="horizontal"
1807
- error={saveEditDisabled}
1808
- bind:value={cellEditorInfoActive.value}
1809
- --simple-textfield-border-radius= 0.5rem
1810
- --simple-textfield-background-color= transparent
1811
- --simple-textfield-box-shadow= 'inset 0 0 0 1px rgb(var(--global-color-background-500))'
1812
- --simple-textfield-focus-box-shadow='inset 0 0 0 2px rgb(var(--global-color-primary-500))'
1813
- />
1814
- {:else if cellEditorInfoActive.type.key === "select"}
1815
- <LabelAndSelect
1816
- label={cellEditorInfoActive.title}
1817
- description={cellEditorInfoActive.description}
1818
- name={cellEditorInfoActive.title}
1819
- info={cellEditorInfoActive.info}
1820
- options={cellEditorInfoActive.type.params.options}
1821
- orientation="horizontal"
1822
- bind:value={cellEditorInfoActive.value}
1823
- />
1824
- {:else if cellEditorInfoActive.type.key === "boolean"}
1825
- <div class="container">
1826
- <Checkbox
1827
- id={cellEditorInfoActive.title}
1396
+ {#if cellEditorInfoActive}
1397
+ <div
1398
+ class:cell-editor-container={isMenu}
1399
+ style:padding='10px'
1400
+ bind:this={cellEditorContainer}
1401
+ >
1402
+ <div style:grid-column="1 / 3">
1403
+ {#if cellEditorInfoActive.type.key === "string"}
1404
+ <LabelAndTextField
1405
+ label={cellEditorInfoActive.title}
1406
+ description={cellEditorInfoActive.description}
1407
+ name={cellEditorInfoActive.title}
1408
+ info={cellEditorInfoActive.info}
1409
+ type="text"
1410
+ orientation="horizontal"
1828
1411
  bind:value={cellEditorInfoActive.value}
1412
+ --simple-textfield-border-radius= 0.5rem
1413
+ --simple-textfield-background-color= transparent
1414
+ --simple-textfield-box-shadow= 'inset 0 0 0 1px rgb(var(--global-color-background-500))'
1415
+ --simple-textfield-focus-box-shadow='inset 0 0 0 2px rgb(var(--global-color-primary-500))'
1829
1416
  />
1830
- <label style:margin-left="0.7rem" for={cellEditorInfoActive.title}
1831
- >{cellEditorInfoActive.title}
1832
- </label>
1833
- </div>
1834
- {/if}
1835
- </div>
1417
+ {:else if cellEditorInfoActive.type.key === "number"}
1418
+ <LabelAndTextField
1419
+ label={cellEditorInfoActive.title}
1420
+ description={cellEditorInfoActive.description}
1421
+ name={cellEditorInfoActive.title}
1422
+ info={cellEditorInfoActive.info}
1423
+ type="number"
1424
+ orientation="horizontal"
1425
+ error={saveEditDisabled}
1426
+ bind:value={cellEditorInfoActive.value}
1427
+ --simple-textfield-border-radius= 0.5rem
1428
+ --simple-textfield-background-color= transparent
1429
+ --simple-textfield-box-shadow= 'inset 0 0 0 1px rgb(var(--global-color-background-500))'
1430
+ --simple-textfield-focus-box-shadow='inset 0 0 0 2px rgb(var(--global-color-primary-500))'
1431
+ />
1432
+ {:else if cellEditorInfoActive.type.key === "select"}
1433
+ <LabelAndSelect
1434
+ label={cellEditorInfoActive.title}
1435
+ description={cellEditorInfoActive.description}
1436
+ name={cellEditorInfoActive.title}
1437
+ info={cellEditorInfoActive.info}
1438
+ options={cellEditorInfoActive.type.params.options}
1439
+ orientation="horizontal"
1440
+ bind:value={cellEditorInfoActive.value}
1441
+ />
1442
+ {:else if cellEditorInfoActive.type.key === "boolean"}
1443
+ <div class="container">
1444
+ <Checkbox
1445
+ id={cellEditorInfoActive.title}
1446
+ bind:value={cellEditorInfoActive.value}
1447
+ />
1448
+ <label style:margin-left="0.7rem" for={cellEditorInfoActive.title}
1449
+ >{cellEditorInfoActive.title}
1450
+ </label>
1451
+ </div>
1452
+ {/if}
1453
+ </div>
1836
1454
 
1837
- <div style:margin-top="10px" style:grid-row="2" style:grid-column="1 / 3">
1838
- <Divider --divider-color=rgb(var(--global-color-contrast-100) />
1839
- </div>
1840
- <div style:grid-row="3" style:grid-column="2" style:margin-top="-15px">
1841
- <ConfirmOrCancelButtons
1842
- confirmDisable={saveEditDisabled}
1843
- confirmText="Save"
1844
- cancelText="Cancel"
1845
- on:cancel-click={handleCancelClick}
1846
- on:confirm-click={handleSaveClick}
1847
- />
1455
+ <div style:grid-column="2" style:margin-top="-15px">
1456
+ <ConfirmOrCancelButtons
1457
+ confirmDisable={saveEditDisabled}
1458
+ confirmText="Save"
1459
+ cancelText="Cancel"
1460
+ on:cancel-click={handleCancelClick}
1461
+ on:confirm-click={handleSaveClick}
1462
+ />
1463
+ </div>
1848
1464
  </div>
1849
- </div>
1850
- </Menu>
1465
+ {/if}
1466
+ </MenuOrDrawer>
1851
1467
 
1852
- <Menu
1468
+ <MenuOrDrawer
1853
1469
  bind:open={openQuickFilter}
1854
- activator={quickFilterActivator}
1855
- bind:menuElement={menuElementQuickFilters}
1856
- anchor="bottom"
1857
- openingId="quick-filter"
1858
- closeOnClickOutside
1470
+ menuProps={{
1471
+ activator: quickFilterActivator,
1472
+ anchor: 'bottom',
1473
+ openingId: 'quick-filter',
1474
+ closeOnClickOutside: true
1475
+ }}
1476
+ drawerProps={{
1477
+ _space: '60vh',
1478
+ _borderRadius: '10px',
1479
+ }}
1480
+ let:isMenu
1481
+ let:isDrawer
1859
1482
  >
1860
- <div
1861
- class="quick-filter-container"
1862
- >
1863
- <div style:grid-column="1 / 3">
1864
- {#if quickFilterActive.type.key == 'custom'}
1865
- <slot name="custom-quick-filter" quickFilter={quickFilterActive} {setQuickFilterMissingValue}>
1866
- </slot>
1867
- {:else if quickFilterActive.type.key === "string"}
1868
- <div class="space-between" style="font-weight: 500;">
1869
- {quickFilterActive.title}
1870
- {#if !!quickFilterActive.type.missingLabel}
1871
- <button
1872
- on:click={() =>
1873
- setQuickFilterMissingValue(quickFilterActive)}
1874
- >{quickFilterActive.type.missingLabel}</button
1875
- >
1876
- {/if}
1877
- </div>
1878
- <LabelAndTextField
1879
- description={quickFilterActive.description}
1880
- name={quickFilterActive.title}
1881
- info={quickFilterActive.info}
1882
- type="text"
1883
- bind:value={quickFilterActive.type.value}
1884
- --simple-textfield-border-radius= 0.5rem
1885
- --simple-textfield-background-color= transparent
1886
- --simple-textfield-box-shadow= 'inset 0 0 0 1px rgb(var(--global-color-background-500))'
1887
- --simple-textfield-focus-box-shadow='inset 0 0 0 2px rgb(var(--global-color-primary-500))'
1888
- />
1889
- {:else if quickFilterActive.type.key === "number"}
1890
- <div class="space-between" style="font-weight: 500; margin-bottom: 8px;">
1891
- {quickFilterActive.title}
1892
- {#if !!quickFilterActive.type.missingLabel}
1893
- <button
1894
- on:click={() =>
1895
- setQuickFilterMissingValue(quickFilterActive)}
1896
- >{quickFilterActive.type.missingLabel}</button
1897
- >
1898
- {/if}
1899
- </div>
1900
- <LabelAndTextField
1901
- description={quickFilterActive.description}
1902
- name={quickFilterActive.title}
1903
- info={quickFilterActive.info}
1904
- type="number"
1905
- error={saveEditDisabled}
1906
- bind:value={quickFilterActive.type.value}
1907
- --simple-textfield-border-radius= 0.5rem
1908
- --simple-textfield-background-color= transparent
1909
- --simple-textfield-box-shadow= 'inset 0 0 0 1px rgb(var(--global-color-background-500))'
1910
- --simple-textfield-focus-box-shadow='inset 0 0 0 2px rgb(var(--global-color-primary-500))'
1911
- />
1912
- {:else if quickFilterActive.type.key === "multi-select"}
1913
- <div class="space-between" style="font-weight: 500; margin-bottom: 8px;">
1914
- {quickFilterActive.title}
1915
- {#if !!quickFilterActive.type.missingLabel}
1916
- <button
1917
- on:click={() =>
1918
- setQuickFilterMissingValue(quickFilterActive)}
1919
- >{quickFilterActive.type.missingLabel}</button
1920
- >
1921
- {/if}
1922
- </div>
1923
- <div on:click|stopPropagation role="presentation" tabindex="-1">
1924
- <Autocomplete
1925
- multiple
1926
- items={quickFilterActive.type.items}
1927
- bind:values={quickFilterActive.type.values}
1928
- --autocomplete-border-radius= 0.5rem
1929
- --autocomplete-border="1px solid rgb(var(--global-color-background-500))"
1930
- --autocomplete-focus-box-shadow="0 0 0 2px rgb(var(--global-color-primary-500))"
1931
- >
1932
- <svelte:fragment slot="selection" let:selection let:unselect>
1933
- <slot name="selection" {selection} {unselect}>
1934
- <div tabindex="-1">
1935
- <Chip
1936
- close={true}
1937
- on:close={() => unselect(selection)}
1938
- --chip-default-border-radius="var(--autocomplete-border-radius, var(--autocomplete-default-border-radius))"
1939
- buttonTabIndex={-1}
1940
- truncateText
1941
- >
1942
- <slot name="chip-label" {selection}>
1943
- {#if !!quickFilterActive.type.countriesAlpha2 && quickFilterActive.type.countriesAlpha2.find((c) => c.value == selection.value)}
1944
- <div>
1945
- <FlagIcon
1946
- alpha2={quickFilterActive.type.countriesAlpha2
1947
- .find((c) => c.value == selection.value)
1948
- ?.label?.toString()
1949
- .toLowerCase() ?? ""}
1950
- --flag-icon-size="16px"
1951
- />
1952
- </div>
1953
- {/if}
1954
- {selection.label}
1955
- </slot>
1956
- </Chip>
1957
- </div>
1958
- </slot>
1959
- </svelte:fragment>
1960
- <svelte:fragment slot="item-label" let:item>
1961
- <slot name="item-label" {item}>
1962
- {#if !!quickFilterActive.type.countriesAlpha2 && quickFilterActive.type.countriesAlpha2.find((c) => c.value == item.value)}
1963
- <FlagIcon
1964
- alpha2={quickFilterActive.type.countriesAlpha2
1965
- .find((c) => c.value == item.value)
1966
- ?.label?.toString()
1967
- .toLowerCase() ?? ""}
1968
- />
1969
- {/if}
1970
- {item.label}
1971
- </slot>
1972
- </svelte:fragment>
1973
- </Autocomplete>
1974
- </div>
1975
- {:else if quickFilterActive.type.key === "boolean"}
1976
- {#if quickFilterActive.type.params}
1977
- <div class="vertical-quick-filters">
1978
- <button
1979
- on:click={() => setQuickFilterValue(quickFilterActive, true)}
1980
- >
1981
- {quickFilterActive.type.params.labelTrue}
1982
- </button>
1983
- <button
1984
- on:click={() => setQuickFilterValue(quickFilterActive, false)}
1985
- >
1986
- {quickFilterActive.type.params.labelFalse}
1987
- </button>
1988
- <button
1989
- on:click={() => setQuickFilterValue(quickFilterActive, undefined)}
1990
- >
1991
- {lang == 'en' ? 'All' : 'Tutti'}
1992
- </button>
1483
+ {#if quickFilterActive}
1484
+ <div
1485
+ class:quick-filter-container={isMenu}
1486
+ style:padding='10px'
1487
+ >
1488
+ <div style:grid-column="1 / 3">
1489
+ {#if quickFilterActive.type.key == 'custom'}
1490
+ <slot name="custom-quick-filter" quickFilter={quickFilterActive} {setQuickFilterMissingValue}>
1491
+ </slot>
1492
+ {:else if quickFilterActive.type.key === "string"}
1493
+ <div class="space-between" style="font-weight: 500;">
1494
+ {quickFilterActive.title}
1495
+ {#if !!quickFilterActive.type.missingLabel}
1496
+ <button
1497
+ on:click={() =>
1498
+ setQuickFilterMissingValue(quickFilterActive)}
1499
+ >{quickFilterActive.type.missingLabel}</button
1500
+ >
1501
+ {/if}
1993
1502
  </div>
1994
- {/if}
1995
- {:else if quickFilterActive.type.key === "country"}
1996
- <div class="space-between" style="font-weight: 500; margin-bottom: 8px;">
1997
- {quickFilterActive.title}
1998
- {#if !!quickFilterActive.type.missingLabel}
1999
- <button
2000
- on:click={() =>
2001
- setQuickFilterMissingValue(quickFilterActive)}
2002
- >{quickFilterActive.type.missingLabel}</button
2003
- >
2004
- {/if}
2005
- </div>
2006
- <div on:click|stopPropagation role="presentation" tabindex="-1">
2007
- <CountriesAutocomplete
2008
- bind:selected={quickFilterActive.type.selected}
2009
- {...((!!quickFilterActive.type.countriesOptions && quickFilterActive.type.countriesOptions.length > 0) && {
2010
- items: quickFilterActive.type.countriesOptions,
2011
- })}
2012
- autocompleteProps={{
2013
- placeholder: !!quickFilterActive.type.selected
2014
- ? quickFilterActive.type.selected.length > 0
2015
- ? ""
2016
- : quickFilterActive.description
2017
- : quickFilterActive.description,
2018
- multiple: true,
2019
- }}
2020
- --autocomplete-border-radius= 0.5rem
2021
- --autocomplete-border="1px solid rgb(var(--global-color-background-500))"
2022
- --autocomplete-focus-box-shadow="0 0 0 2px rgb(var(--global-color-primary-500))"
1503
+ <LabelAndTextField
1504
+ description={quickFilterActive.description}
1505
+ name={quickFilterActive.title}
1506
+ info={quickFilterActive.info}
1507
+ type="text"
1508
+ bind:value={quickFilterActive.type.value}
1509
+ --simple-textfield-border-radius= 0.5rem
1510
+ --simple-textfield-background-color= transparent
1511
+ --simple-textfield-box-shadow= 'inset 0 0 0 1px rgb(var(--global-color-background-500))'
1512
+ --simple-textfield-focus-box-shadow='inset 0 0 0 2px rgb(var(--global-color-primary-500))'
2023
1513
  />
2024
- </div>
2025
- {:else if quickFilterActive.type.key === "date"}
2026
- <div style="font-weight: 500; margin-bottom: 8px;">
2027
- {quickFilterActive.title}
2028
- </div>
2029
- <div on:click|stopPropagation role="presentation" tabindex="-1">
2030
- <div>
2031
- <DatePickerTextField
2032
- bind:selectedDate={quickFilterActive.type.from}
2033
- placeholder={lang == 'en' ? "From" : 'Da'}
2034
- --simple-textfield-width="100%"
2035
- --simple-textfield-border-radius= 0.5rem
2036
- --simple-textfield-background-color= transparent
2037
- --simple-textfield-box-shadow= 'inset 0 0 0 1px rgb(var(--global-color-background-500))'
2038
- --simple-textfield-focus-box-shadow='inset 0 0 0 2px rgb(var(--global-color-primary-500))'
2039
- flipOnOverflow
2040
- bind:menuOpened={calendarOpened}
2041
- on:day-click={() => (calendarOpened = false)}
2042
- >
2043
- <svelte:fragment slot="append-inner">
2044
- <Icon
2045
- name="mdi-close-circle"
2046
- click
2047
- on:click={() => {
2048
- if (
2049
- !!quickFilterActive &&
2050
- quickFilterActive.type.key === "date"
2051
- ) {
2052
- quickFilterActive.type.from = undefined;
2053
- }
2054
- }}
2055
- />
2056
- </svelte:fragment>
2057
- </DatePickerTextField>
1514
+ {:else if quickFilterActive.type.key === "number"}
1515
+ <div class="space-between" style="font-weight: 500; margin-bottom: 8px;">
1516
+ {quickFilterActive.title}
1517
+ {#if !!quickFilterActive.type.missingLabel}
1518
+ <button
1519
+ on:click={() =>
1520
+ setQuickFilterMissingValue(quickFilterActive)}
1521
+ >{quickFilterActive.type.missingLabel}</button
1522
+ >
1523
+ {/if}
2058
1524
  </div>
2059
- <div>
2060
- <DatePickerTextField
2061
- bind:selectedDate={quickFilterActive.type.to}
2062
- placeholder={lang == 'en' ? "To" : 'A'}
2063
- --simple-textfield-width="100%"
2064
- --simple-textfield-border-radius= 0.5rem
2065
- --simple-textfield-background-color= transparent
2066
- --simple-textfield-box-shadow= 'inset 0 0 0 1px rgb(var(--global-color-background-500))'
2067
- --simple-textfield-focus-box-shadow='inset 0 0 0 2px rgb(var(--global-color-primary-500))'
2068
- flipOnOverflow
2069
- bind:menuOpened={calendarOpened2}
2070
- on:day-click={() => (calendarOpened2 = false)}
1525
+ <LabelAndTextField
1526
+ description={quickFilterActive.description}
1527
+ name={quickFilterActive.title}
1528
+ info={quickFilterActive.info}
1529
+ type="number"
1530
+ error={saveEditDisabled}
1531
+ bind:value={quickFilterActive.type.value}
1532
+ --simple-textfield-border-radius= 0.5rem
1533
+ --simple-textfield-background-color= transparent
1534
+ --simple-textfield-box-shadow= 'inset 0 0 0 1px rgb(var(--global-color-background-500))'
1535
+ --simple-textfield-focus-box-shadow='inset 0 0 0 2px rgb(var(--global-color-primary-500))'
1536
+ />
1537
+ {:else if quickFilterActive.type.key === "multi-select"}
1538
+ <div class="space-between" style="font-weight: 500; margin-bottom: 8px;">
1539
+ {quickFilterActive.title}
1540
+ {#if !!quickFilterActive.type.missingLabel}
1541
+ <button
1542
+ on:click={() =>
1543
+ setQuickFilterMissingValue(quickFilterActive)}
1544
+ >{quickFilterActive.type.missingLabel}</button
1545
+ >
1546
+ {/if}
1547
+ </div>
1548
+ <div on:click|stopPropagation role="presentation" tabindex="-1">
1549
+ <Autocomplete
1550
+ multiple
1551
+ items={quickFilterActive.type.items}
1552
+ bind:values={quickFilterActive.type.values}
1553
+ mobileDrawer={isDrawer}
1554
+ --autocomplete-border-radius= 0.5rem
1555
+ --autocomplete-border="1px solid rgb(var(--global-color-background-500))"
1556
+ --autocomplete-focus-box-shadow="0 0 0 2px rgb(var(--global-color-primary-500))"
2071
1557
  >
2072
- <svelte:fragment slot="append-inner">
2073
- <Icon
2074
- name="mdi-close-circle"
2075
- click
2076
- on:click={() => {
2077
- if (
2078
- !!quickFilterActive &&
2079
- quickFilterActive.type.key === "date"
2080
- ) {
2081
- quickFilterActive.type.to = undefined;
2082
- }
2083
- }}
2084
- />
1558
+ <svelte:fragment slot="selection" let:selection let:unselect>
1559
+ <slot name="selection" {selection} {unselect}>
1560
+ <div tabindex="-1">
1561
+ <Chip
1562
+ close={true}
1563
+ on:close={() => unselect(selection)}
1564
+ --chip-default-border-radius="var(--autocomplete-border-radius, var(--autocomplete-default-border-radius))"
1565
+ buttonTabIndex={-1}
1566
+ truncateText
1567
+ >
1568
+ <slot name="chip-label" {selection}>
1569
+ {#if !!quickFilterActive.type.countriesAlpha2 && quickFilterActive.type.countriesAlpha2.find((c) => c.value == selection.value)}
1570
+ <div>
1571
+ <FlagIcon
1572
+ alpha2={quickFilterActive.type.countriesAlpha2
1573
+ .find((c) => c.value == selection.value)
1574
+ ?.label?.toString()
1575
+ .toLowerCase() ?? ""}
1576
+ --flag-icon-size="16px"
1577
+ />
1578
+ </div>
1579
+ {/if}
1580
+ {selection.label}
1581
+ </slot>
1582
+ </Chip>
1583
+ </div>
1584
+ </slot>
1585
+ </svelte:fragment>
1586
+ <svelte:fragment slot="item-label" let:item>
1587
+ <slot name="item-label" {item}>
1588
+ {#if !!quickFilterActive.type.countriesAlpha2 && quickFilterActive.type.countriesAlpha2.find((c) => c.value == item.value)}
1589
+ <FlagIcon
1590
+ alpha2={quickFilterActive.type.countriesAlpha2
1591
+ .find((c) => c.value == item.value)
1592
+ ?.label?.toString()
1593
+ .toLowerCase() ?? ""}
1594
+ />
1595
+ {/if}
1596
+ {item.label}
1597
+ </slot>
2085
1598
  </svelte:fragment>
2086
- </DatePickerTextField>
1599
+ </Autocomplete>
1600
+ </div>
1601
+ {:else if quickFilterActive.type.key === "boolean"}
1602
+ {#if quickFilterActive.type.params}
1603
+ <div class="vertical-quick-filters">
1604
+ <button
1605
+ on:click={() => setQuickFilterValue(quickFilterActive, true)}
1606
+ >
1607
+ {quickFilterActive.type.params.labelTrue}
1608
+ </button>
1609
+ <button
1610
+ on:click={() => setQuickFilterValue(quickFilterActive, false)}
1611
+ >
1612
+ {quickFilterActive.type.params.labelFalse}
1613
+ </button>
1614
+ <button
1615
+ on:click={() => setQuickFilterValue(quickFilterActive, undefined)}
1616
+ >
1617
+ {lang == 'en' ? 'All' : 'Tutti'}
1618
+ </button>
1619
+ </div>
1620
+ {/if}
1621
+ {:else if quickFilterActive.type.key === "country"}
1622
+ <div class="space-between" style="font-weight: 500; margin-bottom: 8px;">
1623
+ {quickFilterActive.title}
1624
+ {#if !!quickFilterActive.type.missingLabel}
1625
+ <button
1626
+ on:click={() =>
1627
+ setQuickFilterMissingValue(quickFilterActive)}
1628
+ >{quickFilterActive.type.missingLabel}</button
1629
+ >
1630
+ {/if}
1631
+ </div>
1632
+ <div on:click|stopPropagation role="presentation" tabindex="-1">
1633
+ <CountriesAutocomplete
1634
+ bind:selected={quickFilterActive.type.selected}
1635
+ {...((!!quickFilterActive.type.countriesOptions && quickFilterActive.type.countriesOptions.length > 0) && {
1636
+ items: quickFilterActive.type.countriesOptions,
1637
+ })}
1638
+ autocompleteProps={{
1639
+ placeholder: !!quickFilterActive.type.selected
1640
+ ? quickFilterActive.type.selected.length > 0
1641
+ ? ""
1642
+ : quickFilterActive.description
1643
+ : quickFilterActive.description,
1644
+ multiple: true,
1645
+ mobileDrawer: isDrawer,
1646
+ }}
1647
+ --autocomplete-border-radius= 0.5rem
1648
+ --autocomplete-border="1px solid rgb(var(--global-color-background-500))"
1649
+ --autocomplete-focus-box-shadow="0 0 0 2px rgb(var(--global-color-primary-500))"
1650
+ />
1651
+ </div>
1652
+ {:else if quickFilterActive.type.key === "date"}
1653
+ <div style="font-weight: 500; margin-bottom: 8px;">
1654
+ {quickFilterActive.title}
2087
1655
  </div>
1656
+ <div on:click|stopPropagation role="presentation" tabindex="-1">
1657
+ <div>
1658
+ <DatePickerTextField
1659
+ bind:selectedDate={quickFilterActive.type.from}
1660
+ placeholder={lang == 'en' ? "From" : 'Da'}
1661
+ --simple-textfield-width="100%"
1662
+ --simple-textfield-border-radius= 0.5rem
1663
+ --simple-textfield-background-color= transparent
1664
+ --simple-textfield-box-shadow= 'inset 0 0 0 1px rgb(var(--global-color-background-500))'
1665
+ --simple-textfield-focus-box-shadow='inset 0 0 0 2px rgb(var(--global-color-primary-500))'
1666
+ flipOnOverflow
1667
+ mobileDialog={isDrawer}
1668
+ bind:menuOpened={calendarOpened}
1669
+ on:day-click={() => (calendarOpened = false)}
1670
+ >
1671
+ <svelte:fragment slot="append-inner">
1672
+ <Icon
1673
+ name="mdi-close-circle"
1674
+ click
1675
+ on:click={() => {
1676
+ if (
1677
+ !!quickFilterActive &&
1678
+ quickFilterActive.type.key === "date"
1679
+ ) {
1680
+ quickFilterActive.type.from = undefined;
1681
+ }
1682
+ }}
1683
+ />
1684
+ </svelte:fragment>
1685
+ </DatePickerTextField>
1686
+ </div>
1687
+ <div>
1688
+ <DatePickerTextField
1689
+ bind:selectedDate={quickFilterActive.type.to}
1690
+ placeholder={lang == 'en' ? "To" : 'A'}
1691
+ --simple-textfield-width="100%"
1692
+ --simple-textfield-border-radius= 0.5rem
1693
+ --simple-textfield-background-color= transparent
1694
+ --simple-textfield-box-shadow= 'inset 0 0 0 1px rgb(var(--global-color-background-500))'
1695
+ --simple-textfield-focus-box-shadow='inset 0 0 0 2px rgb(var(--global-color-primary-500))'
1696
+ flipOnOverflow
1697
+ mobileDialog={isDrawer}
1698
+ bind:menuOpened={calendarOpened2}
1699
+ on:day-click={() => (calendarOpened2 = false)}
1700
+ >
1701
+ <svelte:fragment slot="append-inner">
1702
+ <Icon
1703
+ name="mdi-close-circle"
1704
+ click
1705
+ on:click={() => {
1706
+ if (
1707
+ !!quickFilterActive &&
1708
+ quickFilterActive.type.key === "date"
1709
+ ) {
1710
+ quickFilterActive.type.to = undefined;
1711
+ }
1712
+ }}
1713
+ />
1714
+ </svelte:fragment>
1715
+ </DatePickerTextField>
1716
+ </div>
1717
+ </div>
1718
+ {/if}
1719
+ </div>
1720
+
1721
+ {#if quickFilterActive.type.key != "boolean"}
1722
+ <div style:grid-column="2" style:margin-top="-10px">
1723
+ <ConfirmOrCancelButtons
1724
+ confirmDisable={saveEditDisabled}
1725
+ confirmText={lang == 'en' ? "Apply" : 'Applica'}
1726
+ cancelText={lang == 'en' ? "Cancel" : 'Annulla'}
1727
+ on:cancel-click={handleCancelClick}
1728
+ on:confirm-click={() => handleApplyClick(quickFilterActive, quickFilterActive.type.key == 'custom')}
1729
+ />
2088
1730
  </div>
2089
1731
  {/if}
2090
1732
  </div>
2091
-
2092
- {#if quickFilterActive.type.key != "boolean"}
2093
- <div style:grid-row="3" style:grid-column="2" style:margin-top="-10px">
2094
- <ConfirmOrCancelButtons
2095
- confirmDisable={saveEditDisabled}
2096
- confirmText={lang == 'en' ? "Apply" : 'Applica'}
2097
- cancelText={lang == 'en' ? "Cancel" : 'Annulla'}
2098
- on:cancel-click={handleCancelClick}
2099
- on:confirm-click={() => handleApplyClick(quickFilterActive, quickFilterActive.type.key == 'custom')}
2100
- />
2101
- </div>
2102
- {/if}
2103
- </div>
2104
- </Menu>
1733
+ {/if}
1734
+ </MenuOrDrawer>
2105
1735
 
2106
1736
  <MediaQuery let:sAndDown>
2107
1737
  <Drawer
@@ -2212,7 +1842,10 @@
2212
1842
  --dynamic-table-background-color,
2213
1843
  var(--dynamic-table-default-background-color)
2214
1844
  );
2215
- border-collapse: separate;
1845
+ border-collapse: var(
1846
+ --dynamic-table-border-collapse,
1847
+ var(--dynamic-table-default-border-collapse)
1848
+ );
2216
1849
  }
2217
1850
 
2218
1851
  .dynamic-table.dynamic-resizable {
@@ -2304,7 +1937,10 @@
2304
1937
  }
2305
1938
 
2306
1939
  table {
2307
- border-collapse: separate;
1940
+ border-collapse: var(
1941
+ --dynamic-table-border-collapse,
1942
+ var(--dynamic-table-default-border-collapse)
1943
+ );
2308
1944
  width: 100%;
2309
1945
  }
2310
1946
 
@@ -2319,7 +1955,10 @@
2319
1955
 
2320
1956
  td {
2321
1957
  padding-left: 10px;
2322
- border: 1px solid transparent;
1958
+ border: var(
1959
+ --dynamic-table-cell-border,
1960
+ var(--dynamic-table-default-cell-border)
1961
+ );
2323
1962
  }
2324
1963
 
2325
1964
  table.dynamic-table > tbody > tr > td {
@@ -2333,8 +1972,8 @@
2333
1972
  }
2334
1973
 
2335
1974
  table.dynamic-table > tbody > tr > td.expanded-row {
2336
- overflow: visible;
2337
- }
1975
+ overflow: visible;
1976
+ }
2338
1977
 
2339
1978
  .hover-cell:hover, .hover-cell:focus, .cell-edit-activator {
2340
1979
  cursor: pointer;
@@ -2363,14 +2002,12 @@
2363
2002
  align-items: center;
2364
2003
  box-shadow: 2px 2px 2px 2px rgba(0, 0, 0, 0.2);
2365
2004
  position: fixed;
2366
- padding: 10px;
2367
2005
  border-radius: 10px;
2368
2006
  background-color: var(
2369
2007
  --dynamic-table-cell-editor-background-color,
2370
2008
  var(--dynamic-table-default-cell-editor-background-color)
2371
2009
  );
2372
- height: 200px;
2373
- width: 500px;
2010
+ width: 400px;
2374
2011
  }
2375
2012
 
2376
2013
  .row-activator {
@@ -2387,7 +2024,6 @@
2387
2024
  align-items: center;
2388
2025
  box-shadow: 2px 2px 2px 2px rgba(0, 0, 0, 0.2);
2389
2026
  position: fixed;
2390
- padding: 10px;
2391
2027
  border-radius: 10px;
2392
2028
  background-color: var(
2393
2029
  --dynamic-table-quick-filter-background-color,