@dative-gpi/foundation-shared-components 1.0.57 → 1.0.58-groupings

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 (297) hide show
  1. package/assets/images/map/snow.png +0 -0
  2. package/components/FSAccordionPanel.vue +40 -21
  3. package/components/FSBreadcrumbs.vue +21 -12
  4. package/components/FSButton.vue +16 -16
  5. package/components/FSCalendar.vue +50 -12
  6. package/components/FSCalendarTwin.vue +95 -43
  7. package/components/FSCard.vue +61 -9
  8. package/components/FSCardPlaceholder.vue +8 -5
  9. package/components/FSCheckbox.vue +5 -4
  10. package/components/FSChip.vue +73 -45
  11. package/components/FSChipGroup.vue +69 -0
  12. package/components/FSClickable.vue +11 -9
  13. package/components/FSClock.vue +30 -12
  14. package/components/FSCol.vue +11 -5
  15. package/components/FSColorIcon.vue +23 -5
  16. package/components/FSDialog.vue +2 -1
  17. package/components/FSDialogContent.vue +12 -11
  18. package/components/FSDialogForm.vue +22 -2
  19. package/components/FSDialogFormBody.vue +50 -31
  20. package/components/FSDialogMenu.vue +17 -8
  21. package/components/FSDialogMultiFormBody.vue +23 -13
  22. package/components/FSDialogRemove.vue +7 -8
  23. package/components/FSDialogSubmit.vue +20 -11
  24. package/components/FSEditImage.vue +1 -1
  25. package/components/FSEditImageUI.vue +20 -10
  26. package/components/FSFadeOut.vue +53 -21
  27. package/components/FSForm.vue +10 -8
  28. package/components/FSGrid.vue +1 -1
  29. package/components/FSIcon.vue +4 -3
  30. package/components/FSIconCard.vue +68 -12
  31. package/components/FSImage.vue +9 -2
  32. package/components/FSImageUI.vue +8 -15
  33. package/components/FSInformationsMenu.vue +142 -0
  34. package/components/FSInstantPicker.vue +269 -0
  35. package/components/FSLink.vue +25 -9
  36. package/components/FSLoader.vue +28 -10
  37. package/components/FSMenu.vue +47 -0
  38. package/components/FSOptionGroup.vue +57 -9
  39. package/components/FSOptionItem.vue +4 -4
  40. package/components/FSPagination.vue +1 -1
  41. package/components/FSPlayButtons.vue +72 -0
  42. package/components/FSProgressBar.vue +94 -0
  43. package/components/FSRadio.vue +5 -4
  44. package/components/FSRadioGroup.vue +3 -3
  45. package/components/FSRouterLink.vue +42 -0
  46. package/components/FSSlideGroup.vue +19 -5
  47. package/components/FSSlider.vue +6 -5
  48. package/components/FSSpan.vue +12 -7
  49. package/components/FSSwitch.vue +47 -21
  50. package/components/FSTab.vue +15 -13
  51. package/components/FSTabs.vue +32 -7
  52. package/components/FSTag.vue +16 -5
  53. package/components/FSTagGroup.vue +4 -4
  54. package/components/FSText.vue +11 -7
  55. package/components/FSToggleSet.vue +7 -7
  56. package/components/FSWindow.vue +122 -5
  57. package/components/FSWrapGroup.vue +13 -1
  58. package/components/agenda/FSAgenda.vue +26 -7
  59. package/components/agenda/FSAgendaDialogCalendar.vue +2 -2
  60. package/components/agenda/FSAgendaHeader.vue +35 -10
  61. package/components/agenda/FSAgendaHorizontalEvent.vue +18 -6
  62. package/components/agenda/FSAgendaHoursRow.vue +48 -8
  63. package/components/agenda/FSAgendaVerticalEvent.vue +1 -1
  64. package/components/agenda/FSDayAgenda.vue +1 -2
  65. package/components/agenda/FSMonthAgenda.vue +3 -9
  66. package/components/agenda/FSSelectAgendaMode.vue +2 -2
  67. package/components/agenda/FSWeekAgenda.vue +7 -13
  68. package/components/autocompletes/FSAutoCompleteAddress.vue +25 -20
  69. package/components/autocompletes/FSAutocompleteLanguage.vue +7 -1
  70. package/components/autocompletes/FSAutocompleteTimeZone.vue +7 -1
  71. package/components/buttons/FSButtonAdd.vue +1 -1
  72. package/components/buttons/FSButtonAddLabel.vue +1 -1
  73. package/components/buttons/FSButtonCancel.vue +1 -1
  74. package/components/buttons/FSButtonCancelLabel.vue +1 -1
  75. package/components/buttons/FSButtonCheckbox.vue +4 -4
  76. package/components/buttons/FSButtonCopy.vue +1 -1
  77. package/components/buttons/FSButtonCopyLabel.vue +1 -1
  78. package/components/buttons/FSButtonDuplicate.vue +1 -1
  79. package/components/buttons/FSButtonDuplicateLabel.vue +1 -1
  80. package/components/buttons/FSButtonEdit.vue +1 -1
  81. package/components/buttons/FSButtonEditLabel.vue +1 -1
  82. package/components/buttons/FSButtonFile.vue +1 -1
  83. package/components/buttons/FSButtonFileLabel.vue +1 -1
  84. package/components/buttons/FSButtonNext.vue +1 -1
  85. package/components/buttons/FSButtonNextLabel.vue +1 -1
  86. package/components/buttons/FSButtonPrevious.vue +1 -1
  87. package/components/buttons/FSButtonPreviousLabel.vue +1 -1
  88. package/components/buttons/FSButtonRedo.vue +1 -1
  89. package/components/buttons/FSButtonRedoLabel.vue +1 -1
  90. package/components/buttons/FSButtonRemove.vue +1 -1
  91. package/components/buttons/FSButtonRemoveLabel.vue +1 -1
  92. package/components/buttons/FSButtonSave.vue +1 -1
  93. package/components/buttons/FSButtonSaveLabel.vue +1 -1
  94. package/components/buttons/FSButtonSearch.vue +1 -1
  95. package/components/buttons/FSButtonSearchLabel.vue +1 -1
  96. package/components/buttons/FSButtonUndo.vue +1 -1
  97. package/components/buttons/FSButtonUndoLabel.vue +1 -1
  98. package/components/buttons/FSButtonUpdate.vue +1 -1
  99. package/components/buttons/FSButtonUpdateLabel.vue +1 -1
  100. package/components/buttons/FSButtonValidate.vue +1 -1
  101. package/components/buttons/FSButtonValidateLabel.vue +1 -1
  102. package/components/calendar/FSSimpleCalendar.vue +145 -0
  103. package/components/calendar/FSSimpleCalendarHeader.vue +60 -0
  104. package/components/calendar/FSSimpleMonthSelector.vue +138 -0
  105. package/components/deviceOrganisations/FSConnectivity.vue +16 -4
  106. package/components/deviceOrganisations/FSConnectivityCard.vue +17 -45
  107. package/components/deviceOrganisations/FSStatus.vue +16 -4
  108. package/components/deviceOrganisations/FSStatusCard.vue +33 -59
  109. package/components/deviceOrganisations/FSStatusRichCard.vue +171 -0
  110. package/components/deviceOrganisations/FSStatusesCarousel.vue +1 -0
  111. package/components/deviceOrganisations/FSStatusesRow.vue +8 -2
  112. package/components/deviceOrganisations/FSWorstAlert.vue +37 -42
  113. package/components/deviceOrganisations/FSWorstAlertCard.vue +35 -84
  114. package/components/fields/FSAutocompleteField.vue +85 -82
  115. package/components/fields/FSAutocompleteTag.vue +1 -1
  116. package/components/fields/FSBaseField.vue +54 -30
  117. package/components/fields/FSClosableSearchField.vue +83 -0
  118. package/components/fields/FSColorField.vue +48 -44
  119. package/components/fields/FSCommentField.vue +28 -16
  120. package/components/fields/FSDateField.vue +13 -10
  121. package/components/fields/FSDateRangeField.vue +6 -5
  122. package/components/fields/FSDateTimeField.vue +14 -11
  123. package/components/fields/FSDateTimeRangeDialog.vue +160 -0
  124. package/components/fields/FSDateTimeRangeField.vue +23 -115
  125. package/components/fields/FSEntityFieldUI.vue +36 -19
  126. package/components/fields/FSGradientField.vue +5 -5
  127. package/components/fields/FSIconField.vue +16 -9
  128. package/components/fields/FSMagicConfigField.vue +15 -7
  129. package/components/fields/FSMagicField.vue +7 -2
  130. package/components/fields/FSNumberField.vue +9 -4
  131. package/components/fields/FSPasswordField.vue +7 -7
  132. package/components/fields/FSRichTextField.vue +78 -58
  133. package/components/fields/FSSearchField.vue +9 -115
  134. package/components/fields/FSSelectField.vue +69 -71
  135. package/components/fields/FSTagField.vue +10 -10
  136. package/components/fields/FSTermField.vue +72 -47
  137. package/components/fields/FSTextArea.vue +17 -11
  138. package/components/fields/FSTextField.vue +15 -10
  139. package/components/fields/FSTimeField.vue +14 -10
  140. package/components/fields/FSTimeRangeField.vue +310 -0
  141. package/components/fields/FSTimeStepField.vue +5 -5
  142. package/components/fields/FSTranslateField.vue +10 -10
  143. package/components/fields/FSTranslateRichTextField.vue +41 -20
  144. package/components/fields/FSTranslateTextArea.vue +10 -10
  145. package/components/fields/FSTreeViewField.vue +15 -13
  146. package/components/fields/periodicField/FSPeriodicDailyField.vue +7 -7
  147. package/components/fields/periodicField/FSPeriodicField.vue +15 -15
  148. package/components/fields/periodicField/FSPeriodicMonthlyField.vue +16 -16
  149. package/components/fields/periodicField/FSPeriodicWeeklyField.vue +28 -18
  150. package/components/fields/periodicField/FSPeriodicYearlyField.vue +12 -12
  151. package/components/lists/FSDataIteratorItem.vue +23 -67
  152. package/components/lists/FSDataTableUI.vue +220 -137
  153. package/components/lists/FSDraggable.vue +2 -2
  154. package/components/lists/FSFilterButton.vue +14 -16
  155. package/components/lists/FSHeaderButton.vue +11 -9
  156. package/components/lists/FSHiddenButton.vue +9 -9
  157. package/components/lists/FSLoadDataTable.vue +10 -7
  158. package/components/lists/FSSimpleList.vue +95 -82
  159. package/components/lists/FSSimpleListItem.vue +131 -0
  160. package/components/map/FSMap.vue +146 -158
  161. package/components/map/FSMapFeatureGroup.vue +7 -1
  162. package/components/map/FSMapLayerButton.vue +4 -3
  163. package/components/map/FSMapMarker.vue +70 -48
  164. package/components/map/FSMapMarkerClusterGroup.vue +32 -7
  165. package/components/map/FSMapOverlay.vue +44 -24
  166. package/components/map/FSMapPolygon.vue +16 -4
  167. package/components/map/FSMapTileLayer.vue +26 -9
  168. package/components/map/layers.ts +0 -0
  169. package/components/selects/FSSelectAutoRefresh.vue +8 -8
  170. package/components/selects/FSSelectDashboardVariableType.vue +4 -3
  171. package/components/selects/FSSelectDateSetting.vue +2 -2
  172. package/components/selects/FSSelectDays.vue +8 -8
  173. package/components/selects/FSSelectListMode.vue +2 -2
  174. package/components/selects/FSSelectMapLayer.vue +68 -0
  175. package/components/selects/FSSelectMonths.vue +13 -13
  176. package/components/selects/chartSelectors/FSAggregationSelector.vue +52 -0
  177. package/components/selects/chartSelectors/FSAxisTypeSelector.vue +49 -0
  178. package/components/selects/chartSelectors/FSDisplayAsSelector.vue +53 -0
  179. package/components/selects/chartSelectors/FSFilterTypeSelector.vue +54 -0
  180. package/components/selects/chartSelectors/FSHeatmapRuleSelector.vue +54 -0
  181. package/components/selects/chartSelectors/FSOperationOnSelector.vue +53 -0
  182. package/components/selects/chartSelectors/FSPlanningTypeSelector.vue +53 -0
  183. package/components/selects/chartSelectors/FSPlotPerSelector.vue +52 -0
  184. package/components/selects/chartSelectors/FSSelectEntityType.vue +59 -0
  185. package/components/selects/chartSelectors/FSSerieTypeSelector.vue +53 -0
  186. package/components/tiles/FSAlertTileUI.vue +90 -0
  187. package/components/tiles/FSChartTileUI.vue +61 -52
  188. package/components/tiles/FSCommentTileUI.vue +38 -13
  189. package/components/tiles/FSDashboardOrganisationTypeTileUI.vue +14 -2
  190. package/components/tiles/FSDashboardShallowTileUI.vue +14 -2
  191. package/components/tiles/FSDeviceOrganisationTileUI.vue +6 -6
  192. package/components/tiles/FSGroupTileUI.vue +58 -110
  193. package/components/tiles/FSGroupingTileUI.vue +115 -0
  194. package/components/tiles/FSLoadTile.vue +16 -10
  195. package/components/tiles/FSLocationTileUI.vue +63 -55
  196. package/components/tiles/FSModelTileUI.vue +5 -46
  197. package/components/tiles/FSServiceAccountOrganisationTileUI.vue +0 -6
  198. package/components/tiles/FSSimpleTileUI.vue +34 -29
  199. package/components/tiles/FSTile.vue +46 -39
  200. package/components/tiles/FSUserOrganisationTileUI.vue +1 -7
  201. package/components/toggleSets/FSToggleSetPosition.vue +1 -1
  202. package/components/views/FSBaseView.vue +64 -0
  203. package/components/views/FSEntityView.vue +12 -140
  204. package/components/views/FSSimpleView.vue +29 -0
  205. package/components/views/desktop/FSBaseDefaultDesktopView.vue +135 -0
  206. package/components/views/desktop/FSBaseDesktopView.vue +53 -0
  207. package/components/views/desktop/FSBaseEntityDesktopView.vue +211 -0
  208. package/components/views/mobile/FSBaseDefaultMobileView.vue +133 -0
  209. package/components/views/mobile/FSBaseEntityMobileView.vue +206 -0
  210. package/components/views/mobile/FSBaseMobileView.vue +53 -0
  211. package/composables/index.ts +1 -0
  212. package/composables/useAddress.ts +40 -8
  213. package/composables/useBreakpoints.ts +40 -4
  214. package/composables/useColors.ts +16 -7
  215. package/composables/useMagicFieldProvider.ts +1 -0
  216. package/composables/useMapLayers.ts +62 -0
  217. package/composables/useSlots.ts +2 -1
  218. package/models/colors.ts +2 -1
  219. package/models/deviceAlerts.ts +1 -0
  220. package/models/magicFields.ts +1 -0
  221. package/models/map.ts +12 -10
  222. package/models/rules.ts +6 -3
  223. package/models/tables.ts +5 -2
  224. package/models/variableNode.ts +8 -5
  225. package/package.json +5 -5
  226. package/styles/components/fs_agenda.scss +4 -0
  227. package/styles/components/fs_agenda_event.scss +1 -1
  228. package/styles/components/fs_agenda_hours_row.scss +0 -8
  229. package/styles/components/fs_autocomplete_field.scss +0 -13
  230. package/styles/components/fs_breadcrumbs.scss +18 -36
  231. package/styles/components/fs_button.scss +7 -5
  232. package/styles/components/fs_calendar.scss +1 -0
  233. package/styles/components/fs_card.scss +9 -0
  234. package/styles/components/fs_chip.scss +13 -7
  235. package/styles/components/fs_clickable.scss +16 -23
  236. package/styles/components/fs_clock.scss +0 -10
  237. package/styles/components/fs_col.scss +1 -1
  238. package/styles/components/fs_color_field.scss +1 -4
  239. package/styles/components/fs_data_table.scss +6 -9
  240. package/styles/components/fs_dialog.scss +4 -10
  241. package/styles/components/fs_dialog_menu.scss +4 -2
  242. package/styles/components/fs_draggable.scss +0 -5
  243. package/styles/components/fs_edit_image.scss +8 -0
  244. package/styles/components/fs_fade_out.scss +10 -2
  245. package/styles/components/fs_filter_button.scss +1 -6
  246. package/styles/components/fs_hidden_button.scss +2 -7
  247. package/styles/components/fs_image_card.scss +6 -4
  248. package/styles/components/fs_magic_config_field.scss +1 -2
  249. package/styles/components/fs_map.scss +57 -17
  250. package/styles/components/fs_meta_field.scss +3 -5
  251. package/styles/components/fs_option_group.scss +15 -5
  252. package/styles/components/fs_password_field.scss +4 -2
  253. package/styles/components/fs_progress_bar.scss +14 -0
  254. package/styles/components/fs_radio.scss +0 -11
  255. package/styles/components/fs_rich_text_field.scss +1 -10
  256. package/styles/components/fs_select_field.scss +4 -13
  257. package/styles/components/fs_slide_group.scss +7 -0
  258. package/styles/components/fs_span.scss +13 -5
  259. package/styles/components/fs_status_rich_card.scss +6 -0
  260. package/styles/components/fs_switch.scss +1 -0
  261. package/styles/components/fs_tabs.scss +19 -34
  262. package/styles/components/fs_tag.scss +8 -22
  263. package/styles/components/fs_text_area.scss +2 -21
  264. package/styles/components/fs_tile.scss +0 -19
  265. package/styles/components/fs_window.scss +3 -1
  266. package/styles/components/fs_wrap_group.scss +7 -0
  267. package/styles/components/index.scss +2 -6
  268. package/styles/globals/index.scss +1 -5
  269. package/styles/globals/overrides.scss +28 -61
  270. package/styles/globals/scrollbars.scss +8 -0
  271. package/styles/globals/text_fonts.scss +18 -66
  272. package/styles/globals/touchscreen.scss +2 -2
  273. package/tools/alertsTools.ts +87 -12
  274. package/tools/chartsTools.ts +143 -16
  275. package/tools/index.ts +3 -1
  276. package/tools/reportsTools.ts +38 -0
  277. package/tools/timeRangeTools.ts +125 -0
  278. package/utils/badge.ts +9 -5
  279. package/utils/filter.ts +7 -4
  280. package/utils/index.ts +1 -0
  281. package/utils/leafletMarkers.ts +4 -4
  282. package/utils/operations.ts +108 -0
  283. package/utils/sort.ts +2 -2
  284. package/utils/time.ts +16 -16
  285. package/components/fields/FSTimeSlotField.vue +0 -250
  286. package/components/views/FSEntityHeader.vue +0 -350
  287. package/components/views/FSListHeader.vue +0 -83
  288. package/components/views/FSListView.vue +0 -83
  289. package/components/views/FSSkeletonView.vue +0 -100
  290. package/styles/components/fs_data_iterator_item.scss +0 -33
  291. package/styles/components/fs_icon_field.scss +0 -12
  292. package/styles/components/fs_search_field.scss +0 -3
  293. package/styles/components/fs_tag_field.scss +0 -8
  294. package/styles/components/fs_time_field.scss +0 -12
  295. package/styles/components/fs_timeslot_field.scss +0 -12
  296. package/styles/globals/breakpoints.scss +0 -20
  297. package/styles/globals/fixes.scss +0 -5
@@ -1,66 +1,85 @@
1
1
  <template>
2
2
  <FSCol
3
3
  gap="16px"
4
+ style="position: relative;"
4
5
  >
5
6
  <FSRow
6
- align="bottom-center"
7
- :wrap="isExtraSmall ? false : true"
7
+ v-if="$props.showSearch || (!isMobileSized && ($slots['prepend-toolbar'] || $slots['toolbar'] || $slots['append-toolbar'])) || (!$props.disableTable && !$props.disableIterator)"
8
+ align="top-left"
9
+ :wrap="isMobileSized ? false : true"
8
10
  width="fill"
9
11
  >
10
12
  <slot
11
- v-if="!isExtraSmall"
13
+ v-if="!isMobileSized"
12
14
  name="prepend-toolbar"
13
15
  />
14
- <template
15
- v-if="$props.showSearch"
16
+ <FSRow
17
+ align="top-left"
16
18
  >
17
- <FSSearchField
18
- prependInnerIcon="mdi-magnify"
19
- :hideHeader="true"
20
- v-model="innerSearch"
21
- />
22
- <FSButton
23
- v-if="filterableHeaders.length > 0"
24
- prependIcon="mdi-filter-variant"
25
- :variant="showFilters ? 'full' : 'standard'"
26
- @click="showFilters = !showFilters"
19
+ <FSRow
20
+ v-if="$props.showSearch || filterableHeaders.length > 0 || $slots['append-toolbar']"
21
+ align="bottom-left"
22
+ >
23
+ <FSSearchField
24
+ :hideHeader="true"
25
+ v-model="innerSearch"
26
+ />
27
+ <FSButton
28
+ v-if="filterableHeaders.length > 0"
29
+ prependIcon="mdi-filter-variant"
30
+ :variant="innerShowFilters ? 'full' : 'standard'"
31
+ @click="innerShowFilters = !innerShowFilters"
32
+ />
33
+ <slot
34
+ v-if="!isMobileSized"
35
+ name="toolbar"
36
+ />
37
+ </FSRow>
38
+ <slot
39
+ v-if="!isMobileSized"
40
+ name="append-toolbar"
27
41
  />
28
- </template>
29
- <slot
30
- v-if="!isExtraSmall"
31
- name="toolbar"
32
- />
42
+ </FSRow>
33
43
  <template
34
- v-if="!$props.disableTable && !$props.disableIterator"
44
+ v-if="(!$props.disableTable && !$props.disableIterator)"
35
45
  >
36
- <v-spacer />
37
46
  <FSRow
38
- align="center-right"
47
+ align="top-right"
48
+ width="hug"
49
+ :wrap="false"
39
50
  >
40
51
  <FSOptionGroup
52
+ v-if="!$props.disableTable && !$props.disableIterator"
41
53
  :values="modeOptions"
42
54
  :singleColor="true"
43
55
  :required="true"
56
+ variant="slide"
44
57
  v-model="innerMode"
45
58
  />
46
59
  </FSRow>
47
60
  </template>
48
61
  </FSRow>
49
62
  <FSRow
50
- v-if="isExtraSmall && hasToolbar"
63
+ v-if="isMobileSized && ($slots['prepend-toolbar'] || $slots['toolbar'] || $slots['append-toolbar'])"
51
64
  >
52
- <FSWrapGroup>
65
+ <FSSlideGroup>
66
+ <slot
67
+ name="prepend-toolbar"
68
+ />
53
69
  <slot
54
70
  name="toolbar"
55
71
  />
56
- </FSWrapGroup>
72
+ <slot
73
+ name="append-toolbar"
74
+ />
75
+ </FSSlideGroup>
57
76
  </FSRow>
58
77
  <FSRow
59
78
  v-if="showFiltersRow"
60
79
  gap="16px"
61
80
  >
62
81
  <FSCol
63
- v-if="showFilters && hasVisibleFilters"
82
+ v-if="innerShowFilters && hasVisibleFilters"
64
83
  width="hug"
65
84
  >
66
85
  <FSRow
@@ -94,12 +113,12 @@
94
113
  gap="8px"
95
114
  >
96
115
  <FSChip
97
- v-if="showFilters && resetable"
116
+ v-if="innerShowFilters && resetable"
98
117
  variant="standard"
99
- :label="$tr('ui.data-table.reset-filters', 'Reset')"
118
+ :label="$tr('data-table.reset-filters', 'Reset')"
100
119
  :height="['30px', '24px']"
101
120
  :color="ColorEnum.Error"
102
- :editable="true"
121
+ :clickable="true"
103
122
  @click="resetFilter"
104
123
  />
105
124
  <FSHiddenButton
@@ -122,7 +141,7 @@
122
141
  :headers="extraHeaders.concat(innerHeaders)"
123
142
  :sortBy="innerSortBy ? [innerSortBy] : []"
124
143
  :itemsPerPage="innerRowsPerPage"
125
- :showSelect="$props.showSelect"
144
+ :selectable="$props.selectable"
126
145
  :hover="!$props.sortDraggable"
127
146
  :itemValue="$props.itemValue"
128
147
  :loading="$props.loading"
@@ -148,7 +167,7 @@
148
167
  <FSText
149
168
  font="text-overline"
150
169
  >
151
- {{ $tr("ui.data-table.empty", "No data") }}
170
+ {{ $tr("ui.common.no-data", "No data") }}
152
171
  </FSText>
153
172
  </template>
154
173
  <template
@@ -245,7 +264,7 @@
245
264
  width="hug"
246
265
  >
247
266
  <FSCheckbox
248
- v-if="$props.showSelect"
267
+ v-if="$props.selectable"
249
268
  :modelValue="props.item.items.every((item) => $props.modelValue.includes(item.key))"
250
269
  :indeterminate="$props.modelValue.some((id) => props.item.items.some((item) => item.key === id)) && !props.item.items.every((item) => $props.modelValue.includes(item.key))"
251
270
  @update:modelValue="toggleSelectGroup(props.item)"
@@ -290,25 +309,29 @@
290
309
  <slot
291
310
  :name="`${header.slotName}-append`"
292
311
  />
293
- <v-spacer />
294
- <slot
295
- :name="`${header.slotName}-configuration`"
312
+ <FSRow
313
+ align="center-right"
314
+ :wrap="false"
296
315
  >
297
- <FSHeaderButton
298
- :first="index === 0"
299
- :last="index === headersSlots.length - 1"
300
- @update:hide="updateHeader(header, 'hidden', !header.hidden)"
301
- @update:left="updateHeader(header, 'index', -1)"
302
- @update:right="updateHeader(header, 'index', 1)"
303
- />
304
- <FSButton
305
- v-if="header.sortable"
306
- variant="icon"
307
- :color="sortColor(header, props)"
308
- :icon="sortIcon(header, props)"
309
- @click="toggleSort(header)"
310
- />
311
- </slot>
316
+ <slot
317
+ :name="`${header.slotName}-configuration`"
318
+ >
319
+ <FSHeaderButton
320
+ :first="index === 0"
321
+ :last="index === headersSlots.length - 1"
322
+ @update:hide="updateHeader(header, 'hidden', !header.hidden)"
323
+ @update:left="updateHeader(header, 'index', -1)"
324
+ @update:right="updateHeader(header, 'index', 1)"
325
+ />
326
+ <FSButton
327
+ v-if="header.sortable"
328
+ variant="icon"
329
+ :color="sortColor(header, props)"
330
+ :icon="sortIcon(header, props)"
331
+ @click="toggleSort(header)"
332
+ />
333
+ </slot>
334
+ </FSRow>
312
335
  </FSRow>
313
336
  </slot>
314
337
  </template>
@@ -356,22 +379,23 @@
356
379
  <FSText
357
380
  font="text-button"
358
381
  >
359
- {{ $tr("ui.data-table.all-selected-bold", "Warning:") }}
382
+ {{ $tr("data-table.all-selected-bold", "Warning:") }}
360
383
  </FSText>
361
384
  <FSText>
362
- {{ $tr("ui.data-table.all-selected-regular", "All elements selected") }}
385
+ {{ $tr("data-table.all-selected-regular", "All elements selected") }}
363
386
  </FSText>
364
387
  </FSRow>
365
388
  </template>
366
389
  <template
367
390
  v-else
368
391
  >
369
- <FSText>
370
- {{ $tr("ui.data-table.some-selected", "{0} element(s) selected", $props.modelValue.length.toString()) }}
371
- </FSText>
392
+ <FSRow>
393
+ <FSText>
394
+ {{ $tr("data-table.some-selected", "{0} element(s) selected", $props.modelValue.length.toString()) }}
395
+ </FSText>
396
+ </FSRow>
372
397
  </template>
373
398
  </template>
374
- <v-spacer />
375
399
  <FSRow
376
400
  align="center-right"
377
401
  width="hug"
@@ -380,7 +404,7 @@
380
404
  <FSText
381
405
  font="text-overline"
382
406
  >
383
- {{ $tr("ui.data-table.rows-per-page", "Rows per page") }}
407
+ {{ $tr("data-table.rows-per-page", "Rows per page") }}
384
408
  </FSText>
385
409
  <FSSelectField
386
410
  class="fs-data-table-rows-per-page fs-small-input"
@@ -432,7 +456,7 @@
432
456
  <FSText
433
457
  font="text-overline"
434
458
  >
435
- {{ $tr("ui.data-table.empty", "No data") }}
459
+ {{ $tr("ui.common.no-data", "No data") }}
436
460
  </FSText>
437
461
  </template>
438
462
  <template
@@ -446,7 +470,7 @@
446
470
  v-for="(item, index) in items"
447
471
  elementSelector=".fs-draggable-item"
448
472
  :disabled="draggableDisabled"
449
- :item="item"
473
+ :item="{ ...item, index }"
450
474
  :key="index"
451
475
  @update:dragend="(event, dragged) => onDragEnd(event, dragged, '.fs-data-iterator-container')"
452
476
  @dragover="(event) => onDragOver(event, '.fs-draggable-item', '.fs-data-iterator-container')"
@@ -460,18 +484,20 @@
460
484
  >
461
485
  <FSDataIteratorItem
462
486
  v-if="item.type === 'item'"
463
- :itemColor="$props.rowColor ? $props.rowColor(item.raw) : ColorEnum.Background"
487
+ :leftColor="$props.rowColor ? $props.rowColor(item.raw) : null"
464
488
  :headers="innerHeaders.filter(h => !$props.sneakyHeaders.includes(h.value))"
465
- :clickable="onClickLibrary.clickable"
466
- :showSelect="$props.showSelect"
467
- :itemTo="$props.itemTo"
468
- :color="$props.color"
489
+ :selectable="$props.selectable"
490
+ :singleSelect="$props.singleSelect"
491
+ :to="$props.itemTo"
492
+ :bottomColor="$props.color"
469
493
  :item="item.raw"
470
494
  :key="index"
471
- :modelValue="$props.modelValue.includes(item.raw[$props.itemValue])"
472
- @update:modelValue="toggleSelect"
473
- @auxclick="() => onClickLibrary.mobile($event, item)"
474
- @click="() => onClickLibrary.mobile($event, item)"
495
+ :modelValue="$props.modelValue?.includes(item.raw[$props.itemValue])"
496
+ @update:modelValue="toggleSelect(item.raw)"
497
+ v-bind="onClickLibrary.clickable ? {
498
+ onClick: (event) => onClickLibrary.mobile(event, item),
499
+ onAuxclick: (event) => onClickLibrary.mobile(event, item)
500
+ } : {}"
475
501
  >
476
502
  <template
477
503
  #item.top="props"
@@ -530,22 +556,23 @@
530
556
  <FSText
531
557
  font="text-button"
532
558
  >
533
- {{ $tr("ui.data-table.all-selected-bold", "Warning:") }}
559
+ {{ $tr("data-table.all-selected-bold", "Warning:") }}
534
560
  </FSText>
535
561
  <FSText>
536
- {{ $tr("ui.data-table.all-selected-regular", "All elements selected") }}
562
+ {{ $tr("data-table.all-selected-regular", "All elements selected") }}
537
563
  </FSText>
538
564
  </FSRow>
539
565
  </template>
540
566
  <template
541
567
  v-else
542
568
  >
543
- <FSText>
544
- {{ $tr("ui.data-table.some-selected", "{0} element(s) selected", $props.modelValue.length.toString()) }}
545
- </FSText>
569
+ <FSRow>
570
+ <FSText>
571
+ {{ $tr("data-table.some-selected", "{0} element(s) selected", $props.modelValue.length.toString()) }}
572
+ </FSText>
573
+ </FSRow>
546
574
  </template>
547
575
  </template>
548
- <v-spacer />
549
576
  <FSRow
550
577
  align="center-right"
551
578
  :wrap="false"
@@ -553,7 +580,7 @@
553
580
  <FSText
554
581
  font="text-overline"
555
582
  >
556
- {{ $tr("ui.data-table.rows-per-page", "Rows per page") }}
583
+ {{ $tr("data-table.rows-per-page", "Rows per page") }}
557
584
  </FSText>
558
585
  <FSRow
559
586
  width="120px"
@@ -602,7 +629,7 @@
602
629
  <FSText
603
630
  font="text-overline"
604
631
  >
605
- {{ $tr("ui.data-table.empty", "No data") }}
632
+ {{ $tr("ui.common.no-data", "No data") }}
606
633
  </FSText>
607
634
  </template>
608
635
  <template
@@ -617,7 +644,7 @@
617
644
  v-for="(item, index) in items.filter((item) => item.type === 'item')"
618
645
  elementSelector=".fs-draggable-item"
619
646
  :disabled="draggableDisabled"
620
- :item="item"
647
+ :item="{ ...item, index }"
621
648
  :key="index"
622
649
  @update:dragend="(event, dragged) => onDragEnd(event, dragged, '.fs-data-iterator-container')"
623
650
  @dragover="(event) => onDragOver(event, '.fs-draggable-item', '.fs-data-iterator-container')"
@@ -630,18 +657,20 @@
630
657
  v-bind="{ index, item: item.raw, toggleSelect }"
631
658
  >
632
659
  <FSDataIteratorItem
633
- :itemColor="$props.rowColor ? $props.rowColor(item.raw) : ColorEnum.Background"
660
+ :leftColor="$props.rowColor ? $props.rowColor(item.raw) : null"
634
661
  :headers="innerHeaders.filter(h => !$props.sneakyHeaders.includes(h.value))"
635
- :clickable="onClickLibrary.clickable"
636
- :showSelect="$props.showSelect"
637
- :itemTo="$props.itemTo"
638
- :color="$props.color"
662
+ :selectable="$props.selectable"
663
+ :singleSelect="$props.singleSelect"
664
+ :to="$props.itemTo"
665
+ :bottomColor="$props.color"
639
666
  :item="item.raw"
640
667
  :key="index"
641
- :modelValue="$props.modelValue.includes(item.raw[$props.itemValue])"
642
- @update:modelValue="toggleSelect"
643
- @auxclick="() => onClickLibrary.mobile($event, item)"
644
- @click="() => onClickLibrary.mobile($event, item)"
668
+ :modelValue="$props.modelValue?.includes(item.raw[$props.itemValue])"
669
+ @update:modelValue="toggleSelect(item.raw)"
670
+ v-bind="onClickLibrary.clickable ? {
671
+ onClick: (event) => onClickLibrary.mobile(event, item),
672
+ onAuxclick: (event) => onClickLibrary.mobile(event, item)
673
+ } : {}"
645
674
  >
646
675
  <template
647
676
  #item.top="props"
@@ -684,7 +713,7 @@
684
713
  <div
685
714
  class="fs-data-table-intersection"
686
715
  :id="elementId"
687
- />
716
+ />
688
717
  </FSCol>
689
718
  </template>
690
719
 
@@ -695,6 +724,7 @@ import { useRouter } from "vue-router";
695
724
  import { ColorEnum, type FSDataTableColumn, type FSDataTableFilter, type FSDataTableOrder, type FSToggle } from "@dative-gpi/foundation-shared-components/models";
696
725
  import { useBreakpoints, useColors, useSlots } from "@dative-gpi/foundation-shared-components/composables";
697
726
  import { useTranslations as useTranslationsProvider } from "@dative-gpi/bones-ui/composables";
727
+ import { useRouting } from "@dative-gpi/foundation-shared-services/composables";
698
728
  import { uuidv4 } from "@dative-gpi/bones-ui/tools/uuid"
699
729
 
700
730
  import { alphanumericSort, containsSearchTerm, sizeToVar } from "../../utils";
@@ -745,6 +775,11 @@ export default defineComponent({
745
775
  type: Array as PropType<FSDataTableColumn[]>,
746
776
  required: true
747
777
  },
778
+ showFilters: {
779
+ type: Boolean,
780
+ required: false,
781
+ default: false
782
+ },
748
783
  filters: {
749
784
  type: Object as PropType<{ [key: string]: FSDataTableFilter[] }>,
750
785
  required: false,
@@ -804,7 +839,7 @@ export default defineComponent({
804
839
  required: false,
805
840
  default: ColorEnum.Primary
806
841
  },
807
- showSelect: {
842
+ selectable: {
808
843
  type: Boolean,
809
844
  required: false,
810
845
  default: true
@@ -814,6 +849,11 @@ export default defineComponent({
814
849
  required: false,
815
850
  default: true
816
851
  },
852
+ noSearch: {
853
+ type: Boolean,
854
+ required: false,
855
+ default: false
856
+ },
817
857
  singleSelect: {
818
858
  type: Boolean,
819
859
  required: false,
@@ -832,7 +872,7 @@ export default defineComponent({
832
872
  mode: {
833
873
  type: String as PropType<"table" | "iterator">,
834
874
  required: false,
835
- default: "iterator"
875
+ default: "table"
836
876
  },
837
877
  disableTable: {
838
878
  type: Boolean,
@@ -880,9 +920,10 @@ export default defineComponent({
880
920
  default: "12px"
881
921
  },
882
922
  },
883
- emits: ["update:modelValue", "update:headers", "update:filters", "update:mode", "update:sortBy", "update:rowsPerPage", "update:page", "update:include", "update:items", "click:row"],
923
+ emits: ["update:modelValue", "update:headers", "update:search", "update:showFilters", "update:filters", "update:mode", "update:sortBy", "update:rowsPerPage", "update:page", "update:include", "update:items", "click:row"],
884
924
  setup(props, { emit }) {
885
- const { isExtraSmall } = useBreakpoints();
925
+ const { isExtraSmall, isMobileSized } = useBreakpoints();
926
+ const { handleRoutingEvent } = useRouting();
886
927
  const { $tr } = useTranslationsProvider();
887
928
  const { getColors } = useColors();
888
929
  const router = useRouter();
@@ -894,9 +935,9 @@ export default defineComponent({
894
935
  const innerSearch: Ref<string | null> = ref(null);
895
936
  const innerRowsPerPage = ref(props.rowsPerPage);
896
937
  const innerSortBy = ref(props.sortBy);
897
- const innerMode = ref(props.mode);
938
+ const innerMode = ref(props.disableTable ? "iterator" : props.disableIterator ? "table" : props.mode);
898
939
  const innerPage = ref(props.page);
899
- const showFilters = ref(true);
940
+ const innerShowFilters = ref(props.showFilters);
900
941
  const resetable = ref(false);
901
942
 
902
943
  const intersectionObserver = ref<IntersectionObserver | null>(null);
@@ -913,11 +954,18 @@ export default defineComponent({
913
954
  { id: 5, label: "5" },
914
955
  { id: 10, label: "10" },
915
956
  { id: 30, label: "30" },
916
- { id: -1, label: $tr("ui.data-table.all-rows", "All") }
957
+ { id: -1, label: $tr("ui.common.all", "All") }
917
958
  ];
918
959
 
919
960
  const showFiltersRow = computed((): boolean => {
920
- return (props.showSearch && showFilters.value && filterableHeaders.value.length > 0) || hiddenHeaders.value.length > 0;
961
+ switch (innerMode.value) {
962
+ case "iterator": {
963
+ return (props.showSearch && innerShowFilters.value && filterableHeaders.value.length > 0);
964
+ }
965
+ case "table": {
966
+ return (props.showSearch && innerShowFilters.value && filterableHeaders.value.length > 0) || hiddenHeaders.value.length > 0;
967
+ }
968
+ }
921
969
  });
922
970
 
923
971
  const hasVisibleFilters = computed((): boolean => {
@@ -925,11 +973,15 @@ export default defineComponent({
925
973
  });
926
974
 
927
975
  const showFiltersDivider = computed((): boolean => {
928
- return resetable.value || (hiddenHeaders.value.length > 0 && hasVisibleFilters.value);
929
- });
930
-
931
- const hasToolbar = computed((): boolean => {
932
- return !!useSlots().slots["toolbar"];
976
+ switch (innerMode.value) {
977
+ case "iterator": {
978
+ return resetable.value;
979
+ }
980
+ case "table": {
981
+ return resetable.value || (hiddenHeaders.value.length > 0 && hasVisibleFilters.value);
982
+ }
983
+ }
984
+
933
985
  });
934
986
 
935
987
  const innerSlots = computed((): { [label: string]: Slot<any> } => {
@@ -989,7 +1041,7 @@ export default defineComponent({
989
1041
  width: "0%"
990
1042
  });
991
1043
  }
992
- if (props.showSelect) {
1044
+ if (props.selectable) {
993
1045
  extra.push({
994
1046
  key: "data-table-select",
995
1047
  width: "0%"
@@ -1020,20 +1072,27 @@ export default defineComponent({
1020
1072
  });
1021
1073
 
1022
1074
  const innerItems = computed((): any[] => {
1023
- const activeFilters: { key: string, filter: FSDataTableFilter }[] = Object.keys(filters.value).reduce((acc, key) => {
1024
- return acc.concat(filters.value[key].filter((filter) => filter.hidden).map((filter) => ({ key, filter })));
1025
- }, [] as { key: string, filter: FSDataTableFilter }[]);
1075
+ // Select only the filters where a value is hidden, for others, accept all values
1076
+ const activeFilters: { [key: string]: FSDataTableFilter[] } = Object.keys(filters.value).reduce((acc, key) => {
1077
+ if (filters.value[key].some((filter) => filter.hidden)) {
1078
+ acc[key] = filters.value[key].filter((filter) => !filter.hidden);
1079
+ }
1080
+ return acc;
1081
+ }, {} as { [key: string]: FSDataTableFilter[] });
1082
+
1026
1083
  if (props.items && props.items.length) {
1027
1084
  const innerSearchFormatted = innerSearch.value ? innerSearch.value.toLowerCase() : null;
1028
1085
  return props.items.filter((item) => {
1029
1086
  if (props.selectedOnly && !props.modelValue.includes(item[props.itemValue])) {
1030
1087
  return false;
1031
1088
  }
1032
- if (innerSearchFormatted) {
1033
- return containsSearchTerm(item, innerSearchFormatted);
1089
+ for (const property in activeFilters) {
1090
+ if (!activeFilters[property].some((filter) => filter.filter && filter.filter(filter.value, item[property], item))) {
1091
+ return false;
1092
+ }
1034
1093
  }
1035
- if (activeFilters.some(af => af.filter.filter && af.filter.filter(af.filter.value, item[af.key], item))) {
1036
- return false;
1094
+ if (!props.noSearch && innerSearchFormatted) {
1095
+ return containsSearchTerm(item, innerSearchFormatted);
1037
1096
  }
1038
1097
  return true;
1039
1098
  });
@@ -1077,17 +1136,13 @@ export default defineComponent({
1077
1136
  });
1078
1137
 
1079
1138
  const onClickLibrary = computed((): { [key: string]: Function | boolean } => {
1139
+ console.log(props["onClick:row"]);
1080
1140
  if (props["onClick:row"] || props.itemTo) {
1081
1141
  return {
1082
1142
  clickable: true,
1083
1143
  row: (event: PointerEvent, row: any) => {
1084
1144
  if (props.itemTo && router) {
1085
- if (event.metaKey || event.ctrlKey || event.button === 1) {
1086
- window.open(router.resolve(props.itemTo(row.item)).href, "_blank");
1087
- }
1088
- else {
1089
- router.push(props.itemTo(row.item));
1090
- }
1145
+ handleRoutingEvent(event, props.itemTo(row.item), true);
1091
1146
  }
1092
1147
  else {
1093
1148
  emit("click:row", row.item);
@@ -1212,39 +1267,52 @@ export default defineComponent({
1212
1267
  const key = header.value!;
1213
1268
  const currentFilters = filters.value[key];
1214
1269
 
1270
+ const getPath = (object: any, keys: string[]) => keys.reduce((acc, key) => acc[key] ?? null, object);
1271
+
1215
1272
  let value: FSDataTableFilter[] = [];
1216
1273
 
1217
1274
  if (header.fixedFilters) {
1218
1275
  value = header.fixedFilters.map((ff): FSDataTableFilter => ({
1219
1276
  hidden: currentFilters?.find((cf) => cf.value == (ff.value || null))?.hidden ?? false,
1220
1277
  text: ff.text?.toString() ?? "—",
1221
- value: ff.value || null,
1222
- filter: header.methodFilter ?? ((value, property) => {
1223
- property = [property].flat();
1224
- return Array.isArray(property) ? property.includes(value) || (!value && property.length == 0) : (!value && !property) || value == property;
1278
+ value: ff.value ?? null,
1279
+ filter: header.methodFilter ?? ((_, property, item) => {
1280
+ if (header.methodFilterRaw) {
1281
+ return header.methodFilterRaw(ff.value, item);
1282
+ }
1283
+ const flat = property = [property].flat();
1284
+ return (!ff.value && flat.length == 0) || flat.some(f => f == ff.value);
1225
1285
  })
1226
1286
  }));
1287
+ filterDictionary[key] = value;
1227
1288
  }
1228
1289
  else {
1229
1290
  if (props.items && props.items.length) {
1230
1291
  const mapToInnerValue = header.innerValue ? header.innerValue : (i: any) => i;
1231
- const itemValues = props.items.flatMap((item) => Array.isArray(item[key]) && item[key].length == 0 ? undefined : item[key]).map(mapToInnerValue);
1292
+ const itemValues = props.items.flatMap((item) => {
1293
+ return Array.isArray(getPath(item, key.split("."))) && getPath(item, key.split(".")).length == 0 ? undefined : getPath(item, key.split("."))
1294
+ }).map(mapToInnerValue);
1232
1295
  const distinctValues = [...new Set(itemValues)];
1233
1296
 
1234
- value = distinctValues.map((dv): FSDataTableFilter => ({
1235
- hidden: currentFilters?.find((cf) => cf.value == (dv || null))?.hidden ?? false,
1236
- text: dv?.toString() ?? "—",
1237
- value: dv || null,
1238
- filter: header.methodFilter ?? ((_, property) => {
1239
- property = [property].flat().map(mapToInnerValue);
1240
- return Array.isArray(property) ? property.includes(dv) || (!dv && property.length == 0) : (!dv && !property) || dv == property;
1241
- })
1242
- }));
1297
+ value = distinctValues.map((dv): FSDataTableFilter => {
1298
+ return {
1299
+ hidden: currentFilters?.find((cf) => cf.value == (dv || null))?.hidden ?? false,
1300
+ text: dv?.toString() ?? "—",
1301
+ value: dv || null,
1302
+ filter: header.methodFilter ?? ((_, property, item) => {
1303
+ if (header.methodFilterRaw) {
1304
+ return header.methodFilterRaw(dv, item);
1305
+ }
1306
+ const flat = [property].flat().map(mapToInnerValue);
1307
+ return (!dv && flat.length == 0) || flat.some(f => f == dv);
1308
+ })
1309
+ }
1310
+ });
1243
1311
  }
1312
+ filterDictionary[key] = value.sort((v1, v2) => {
1313
+ return v1.text.localeCompare(v2.text, undefined, { numeric: true });
1314
+ });
1244
1315
  }
1245
- filterDictionary[key] = value.sort((v1, v2) => {
1246
- return v1.text.localeCompare(v2.text, undefined, { numeric: true });
1247
- });
1248
1316
  }
1249
1317
  for (const [key, filters] of Object.entries(props.filters)) {
1250
1318
  for (const filter of filters) {
@@ -1311,6 +1379,7 @@ export default defineComponent({
1311
1379
  }, { threshold: [0.9] });
1312
1380
  }
1313
1381
  if (document.querySelector(`#${elementId}`)) {
1382
+ intersectionObserver.value.unobserve(document.querySelector(`#${elementId}`)!);
1314
1383
  intersectionObserver.value.observe(document.querySelector(`#${elementId}`)!);
1315
1384
  }
1316
1385
  return;
@@ -1347,10 +1416,10 @@ export default defineComponent({
1347
1416
  };
1348
1417
 
1349
1418
  const resetRowIndex = (initialIndex: number, currentIndex: number, draggedElement: HTMLElement, tbodyElement: HTMLElement) => {
1350
- if (initialIndex > currentIndex) {
1419
+ if (initialIndex > currentIndex && tbodyElement.children[initialIndex]) {
1351
1420
  tbodyElement.children[initialIndex].insertAdjacentElement("afterend", draggedElement);
1352
1421
  }
1353
- else {
1422
+ else if(tbodyElement.children[initialIndex]) {
1354
1423
  tbodyElement.children[initialIndex].insertAdjacentElement("beforebegin", draggedElement);
1355
1424
  }
1356
1425
  };
@@ -1466,8 +1535,17 @@ export default defineComponent({
1466
1535
  }
1467
1536
  });
1468
1537
 
1538
+ watch(() => props.showFilters, () => {
1539
+ innerShowFilters.value = props.showFilters;
1540
+ });
1541
+
1469
1542
  watch(innerSearch, () => {
1470
1543
  innerPage.value = 1;
1544
+ emit("update:search", innerSearch.value);
1545
+ });
1546
+
1547
+ watch(innerShowFilters, () => {
1548
+ emit("update:showFilters", innerShowFilters.value);
1471
1549
  });
1472
1550
 
1473
1551
  watch(filters, () => {
@@ -1475,6 +1553,10 @@ export default defineComponent({
1475
1553
  .some((key) => filters.value[key].some((filter) => filter.hidden));
1476
1554
  }, { deep: true });
1477
1555
 
1556
+ watch(size, () => {
1557
+ observeIntersection();
1558
+ });
1559
+
1478
1560
  watch(innerMode, () => {
1479
1561
  emit("update:mode", innerMode.value);
1480
1562
  size.value = props.sizeIterator;
@@ -1499,13 +1581,14 @@ export default defineComponent({
1499
1581
 
1500
1582
  watch(() => props.items, async () => {
1501
1583
  computeFilters();
1584
+ observeIntersection();
1502
1585
  if (innerPage.value !== 1) {
1503
1586
  const formerPage = innerPage.value;
1504
1587
  innerPage.value = 1;
1505
1588
  await nextTick();
1506
1589
  innerPage.value = formerPage;
1507
1590
  }
1508
- });
1591
+ }, { deep: true });
1509
1592
 
1510
1593
  return {
1511
1594
  ColorEnum,
@@ -1516,9 +1599,8 @@ export default defineComponent({
1516
1599
  innerMode,
1517
1600
  modeOptions,
1518
1601
  innerPage,
1519
- hasToolbar,
1520
1602
  pageOptions,
1521
- showFilters,
1603
+ innerShowFilters,
1522
1604
  showFiltersRow,
1523
1605
  showFiltersDivider,
1524
1606
  hasVisibleFilters,
@@ -1535,6 +1617,7 @@ export default defineComponent({
1535
1617
  classes,
1536
1618
  style,
1537
1619
  size,
1620
+ isMobileSized,
1538
1621
  isExtraSmall,
1539
1622
  draggableDisabled,
1540
1623
  elementId,