@dative-gpi/foundation-shared-components 0.0.229 → 0.1.68

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 (228) hide show
  1. package/components/FSAccordionPanel.vue +8 -10
  2. package/components/FSBadge.vue +2 -4
  3. package/components/FSBreadcrumbs.vue +9 -10
  4. package/components/FSButton.vue +81 -31
  5. package/components/FSCalendar.vue +35 -33
  6. package/components/FSCalendarTwin.vue +77 -84
  7. package/components/FSCard.vue +29 -16
  8. package/components/FSCardPlaceholder.vue +1 -2
  9. package/components/FSCheckbox.vue +5 -7
  10. package/components/FSChip.vue +9 -11
  11. package/components/FSClickable.vue +67 -57
  12. package/components/FSClock.vue +4 -4
  13. package/components/FSCol.vue +2 -3
  14. package/components/FSColor.vue +13 -31
  15. package/components/FSColorIcon.vue +25 -9
  16. package/components/FSDialog.vue +1 -2
  17. package/components/FSDialogFormBody.vue +4 -4
  18. package/components/FSDialogMenu.vue +2 -4
  19. package/components/FSDialogMultiFormBody.vue +63 -50
  20. package/components/FSDialogRemove.vue +1 -0
  21. package/components/FSDialogSubmit.vue +5 -7
  22. package/components/FSDivider.vue +7 -9
  23. package/components/FSEditImage.vue +27 -274
  24. package/components/FSEditImageUI.vue +303 -0
  25. package/components/FSErrorToast.vue +3 -4
  26. package/components/FSFadeOut.vue +18 -13
  27. package/components/FSGrid.vue +6 -9
  28. package/components/FSGridMosaic.vue +1 -2
  29. package/components/FSIcon.vue +7 -8
  30. package/components/FSIconCard.vue +23 -30
  31. package/components/FSIconCheck.vue +1 -2
  32. package/components/FSImage.vue +21 -193
  33. package/components/FSImageCard.vue +2 -2
  34. package/components/FSImageUI.vue +212 -0
  35. package/components/FSLabel.vue +18 -20
  36. package/components/FSLink.vue +19 -21
  37. package/components/FSLoader.vue +10 -14
  38. package/components/FSOptionGroup.vue +58 -12
  39. package/components/FSPagination.vue +3 -5
  40. package/components/FSRadio.vue +5 -7
  41. package/components/FSRadioGroup.vue +2 -4
  42. package/components/FSRow.vue +3 -4
  43. package/components/FSSlideGroup.vue +15 -4
  44. package/components/FSSlider.vue +9 -11
  45. package/components/FSSpan.vue +11 -9
  46. package/components/FSSwitch.vue +65 -37
  47. package/components/FSTab.vue +2 -4
  48. package/components/FSTabs.vue +36 -16
  49. package/components/FSTag.vue +23 -14
  50. package/components/FSTagGroup.vue +3 -5
  51. package/components/FSText.vue +8 -12
  52. package/components/FSWindow.vue +11 -5
  53. package/components/FSWrapGroup.vue +15 -4
  54. package/components/agenda/FSAgenda.vue +204 -0
  55. package/components/agenda/FSAgendaDialogCalendar.vue +76 -0
  56. package/components/agenda/FSAgendaHeader.vue +190 -0
  57. package/components/agenda/FSAgendaHorizontalEvent.vue +162 -0
  58. package/components/agenda/FSAgendaHorizontalTimeLineMarker.vue +46 -0
  59. package/components/agenda/FSAgendaHoursCol.vue +103 -0
  60. package/components/agenda/FSAgendaHoursRow.vue +124 -0
  61. package/components/agenda/FSAgendaVerticalEvent.vue +160 -0
  62. package/components/agenda/FSAgendaVerticalTimeLineMarker.vue +46 -0
  63. package/components/agenda/FSDayAgenda.vue +200 -0
  64. package/components/agenda/FSMonthAgenda.vue +257 -0
  65. package/components/agenda/FSSelectAgendaMode.vue +54 -0
  66. package/components/agenda/FSWeekAgenda.vue +328 -0
  67. package/components/autocompletes/FSAutocompleteLanguage.vue +18 -39
  68. package/components/autocompletes/FSAutocompleteTimeZone.vue +20 -38
  69. package/components/buttons/FSButtonCancelMini.vue +1 -0
  70. package/components/buttons/FSButtonCopy.vue +28 -0
  71. package/components/buttons/FSButtonCopyIcon.vue +28 -0
  72. package/components/buttons/FSButtonCopyLabel.vue +27 -0
  73. package/components/buttons/FSButtonCopyMini.vue +28 -0
  74. package/components/buttons/FSButtonDragIcon.vue +27 -0
  75. package/components/buttons/FSButtonDuplicateMini.vue +1 -0
  76. package/components/buttons/FSButtonEditMini.vue +1 -0
  77. package/components/buttons/FSButtonFileMini.vue +1 -0
  78. package/components/buttons/FSButtonNextMini.vue +1 -0
  79. package/components/buttons/FSButtonPreviousMini.vue +1 -0
  80. package/components/buttons/FSButtonRedoMini.vue +1 -0
  81. package/components/buttons/FSButtonRemoveMini.vue +1 -0
  82. package/components/buttons/FSButtonSaveMini.vue +1 -0
  83. package/components/buttons/FSButtonSearchMini.vue +1 -0
  84. package/components/buttons/FSButtonUndoMini.vue +1 -0
  85. package/components/buttons/FSButtonUpdateMini.vue +1 -0
  86. package/components/buttons/FSButtonValidateMini.vue +1 -0
  87. package/components/deviceOrganisations/FSConnectivity.vue +11 -1
  88. package/components/deviceOrganisations/FSConnectivityCard.vue +20 -49
  89. package/components/deviceOrganisations/FSStatus.vue +11 -1
  90. package/components/deviceOrganisations/FSStatusCard.vue +40 -60
  91. package/components/deviceOrganisations/FSStatusesCarousel.vue +1 -0
  92. package/components/deviceOrganisations/FSStatusesRow.vue +10 -5
  93. package/components/deviceOrganisations/FSWorstAlert.vue +19 -13
  94. package/components/deviceOrganisations/FSWorstAlertCard.vue +36 -47
  95. package/components/fields/FSAutocompleteField.vue +501 -323
  96. package/components/fields/FSAutocompleteTag.vue +100 -0
  97. package/components/fields/FSBaseField.vue +26 -16
  98. package/components/fields/FSColorField.vue +63 -55
  99. package/components/fields/FSCommentField.vue +93 -0
  100. package/components/fields/FSDateField.vue +2 -2
  101. package/components/fields/FSDateRangeField.vue +2 -2
  102. package/components/fields/FSDateTimeField.vue +4 -3
  103. package/components/fields/FSDateTimeRangeField.vue +7 -6
  104. package/components/fields/FSEntityFieldUI.vue +271 -0
  105. package/components/fields/FSGradientField.vue +27 -33
  106. package/components/fields/FSIconField.vue +2 -3
  107. package/components/fields/FSMagicConfigField.vue +28 -19
  108. package/components/fields/FSMagicField.vue +25 -17
  109. package/components/fields/FSNumberField.vue +9 -7
  110. package/components/fields/FSPasswordField.vue +2 -3
  111. package/components/fields/FSRichTextField.vue +32 -5
  112. package/components/fields/FSSearchField.vue +2 -2
  113. package/components/fields/FSSelectField.vue +483 -251
  114. package/components/fields/FSTagField.vue +4 -6
  115. package/components/fields/FSTermField.vue +25 -13
  116. package/components/fields/FSTextArea.vue +18 -6
  117. package/components/fields/FSTextField.vue +13 -10
  118. package/components/fields/FSTimeField.vue +1 -1
  119. package/components/fields/FSTimeSlotField.vue +3 -4
  120. package/components/fields/FSTimeStepField.vue +157 -0
  121. package/components/fields/FSTranslateField.vue +3 -2
  122. package/components/fields/FSTranslateRichTextField.vue +4 -3
  123. package/components/fields/FSTranslateTextArea.vue +233 -0
  124. package/components/fields/FSTreeViewField.vue +7 -9
  125. package/components/fields/periodicField/FSPeriodicDailyField.vue +120 -0
  126. package/components/fields/periodicField/FSPeriodicField.vue +131 -0
  127. package/components/fields/periodicField/FSPeriodicMonthlyField.vue +222 -0
  128. package/components/fields/periodicField/FSPeriodicWeeklyField.vue +120 -0
  129. package/components/fields/periodicField/FSPeriodicYearlyField.vue +144 -0
  130. package/components/lists/FSDataIteratorItem.vue +8 -10
  131. package/components/lists/FSDataTableUI.vue +47 -39
  132. package/components/lists/FSFilterButton.vue +20 -22
  133. package/components/lists/FSHiddenButton.vue +10 -12
  134. package/components/lists/FSLoadDataTable.vue +4 -6
  135. package/components/lists/FSSimpleList.vue +229 -0
  136. package/components/map/FSMap.vue +256 -405
  137. package/components/map/FSMapFeatureGroup.vue +51 -0
  138. package/components/map/FSMapLayerButton.vue +6 -3
  139. package/components/map/FSMapMarker.vue +116 -0
  140. package/components/map/FSMapMarkerClusterGroup.vue +72 -0
  141. package/components/map/FSMapOverlay.vue +69 -83
  142. package/components/map/FSMapPolygon.vue +81 -0
  143. package/components/map/FSMapTileLayer.vue +50 -0
  144. package/components/map/keys.ts +4 -0
  145. package/components/selects/FSSelectAutoRefresh.vue +1 -1
  146. package/components/selects/FSSelectDashboardVariableType.vue +1 -1
  147. package/components/selects/FSSelectDateSetting.vue +3 -3
  148. package/components/selects/FSSelectDays.vue +1 -1
  149. package/components/selects/FSSelectListMode.vue +51 -0
  150. package/components/selects/FSSelectMonths.vue +67 -0
  151. package/components/tiles/FSChartTileUI.vue +116 -0
  152. package/components/tiles/FSCommentTileUI.vue +149 -0
  153. package/components/tiles/FSDashboardOrganisationTileUI.vue +6 -8
  154. package/components/tiles/FSDashboardOrganisationTypeTileUI.vue +6 -8
  155. package/components/tiles/FSDashboardShallowTileUI.vue +6 -8
  156. package/components/tiles/FSDeviceOrganisationTileUI.vue +30 -18
  157. package/components/tiles/FSFolderTileUI.vue +6 -6
  158. package/components/tiles/FSGroupTileUI.vue +31 -22
  159. package/components/tiles/FSLoadTile.vue +5 -7
  160. package/components/tiles/FSLocationTileUI.vue +157 -0
  161. package/components/tiles/FSModelTileUI.vue +18 -0
  162. package/components/tiles/FSServiceAccountOrganisationTileUI.vue +142 -0
  163. package/components/tiles/FSSimpleTileUI.vue +57 -36
  164. package/components/tiles/FSTile.vue +115 -55
  165. package/components/tiles/FSUserOrganisationTileUI.vue +25 -35
  166. package/components/toggleSets/FSToggleSetPosition.vue +1 -1
  167. package/components/views/FSEntityHeader.vue +343 -0
  168. package/components/views/FSEntityView.vue +163 -0
  169. package/components/views/FSListHeader.vue +83 -0
  170. package/components/views/FSListView.vue +83 -0
  171. package/components/views/FSSkeletonView.vue +100 -0
  172. package/composables/useAddress.ts +2 -2
  173. package/composables/useColors.ts +15 -5
  174. package/composables/useMagicFieldProvider.ts +7 -6
  175. package/composables/useSlots.ts +51 -28
  176. package/models/agenda.ts +9 -0
  177. package/models/deviceAlerts.ts +1 -1
  178. package/models/deviceConnectivities.ts +1 -1
  179. package/models/index.ts +1 -0
  180. package/models/magicFields.ts +1 -0
  181. package/models/map.ts +2 -2
  182. package/models/rules.ts +10 -5
  183. package/models/tables.ts +3 -1
  184. package/package.json +4 -4
  185. package/styles/components/fs_agenda.scss +32 -0
  186. package/styles/components/fs_agenda_event.scss +41 -0
  187. package/styles/components/fs_agenda_hours_col.scss +4 -0
  188. package/styles/components/fs_agenda_hours_row.scss +13 -0
  189. package/styles/components/fs_agenda_time_line_marker.scss +19 -0
  190. package/styles/components/fs_card.scss +0 -1
  191. package/styles/components/fs_clickable.scss +5 -3
  192. package/styles/components/fs_color_field.scss +1 -0
  193. package/styles/components/fs_data_table.scss +2 -0
  194. package/styles/components/fs_dialog.scss +11 -15
  195. package/styles/components/fs_edit_image.scss +8 -0
  196. package/styles/components/fs_fade_out.scss +2 -1
  197. package/styles/components/fs_filter_button.scss +1 -6
  198. package/styles/components/fs_gradient_field.scss +11 -11
  199. package/styles/components/fs_magic_config_field.scss +2 -2
  200. package/styles/components/fs_map.scss +36 -30
  201. package/styles/components/fs_option_group.scss +15 -5
  202. package/styles/components/fs_radio.scss +11 -0
  203. package/styles/components/fs_rich_text_field.scss +2 -1
  204. package/styles/components/fs_search_field.scss +3 -0
  205. package/styles/components/fs_select_date_settings.scss +3 -0
  206. package/styles/components/fs_slide_group.scss +5 -0
  207. package/styles/components/fs_span.scss +2 -1
  208. package/styles/components/fs_switch.scss +1 -0
  209. package/styles/components/fs_tabs.scss +9 -0
  210. package/styles/components/fs_text_area.scss +15 -1
  211. package/styles/components/fs_tile.scss +22 -6
  212. package/styles/components/fs_window.scss +5 -0
  213. package/styles/components/fs_wrap_group.scss +4 -0
  214. package/styles/components/index.scss +6 -1
  215. package/styles/globals/overrides.scss +22 -19
  216. package/styles/globals/text_fonts.scss +17 -55
  217. package/tools/alertsTools.ts +54 -0
  218. package/tools/chartsTools.ts +300 -0
  219. package/tools/index.ts +2 -0
  220. package/utils/badge.ts +9 -0
  221. package/utils/filter.ts +18 -0
  222. package/utils/index.ts +2 -0
  223. package/utils/leafletMarkers.ts +8 -2
  224. package/utils/statuses.ts +1 -1
  225. package/utils/time.ts +27 -1
  226. package/components/autocompletes/FSAutocompleteTag.vue +0 -138
  227. package/components/map/FSMapEditPointAddressOverlay.vue +0 -164
  228. package/styles/components/fs_map_overlay.scss +0 -38
@@ -0,0 +1,343 @@
1
+ <template>
2
+ <template
3
+ v-if="isExtraSmall"
4
+ >
5
+ <FSCol
6
+ class="f-entity-header"
7
+ padding="0 10px 0 0"
8
+ align="center-left"
9
+ gap="12px"
10
+ >
11
+ <FSRow
12
+ align="center-left"
13
+ gap="12px"
14
+ :height="imageSize"
15
+ :wrap="false"
16
+ >
17
+ <template
18
+ v-if="$props.imageId"
19
+ >
20
+ <slot
21
+ name="image"
22
+ v-bind="{ imageSize }"
23
+ >
24
+ <FSImage
25
+ :imageId="$props.imageId"
26
+ :cover="imageCover"
27
+ :height="imageSize"
28
+ :width="imageSize"
29
+ />
30
+ </slot>
31
+ </template>
32
+ <FSIconCard
33
+ v-else-if="$props.icon"
34
+ :backgroundVariant="$props.iconBackgroundVariant"
35
+ :backgroundColor="$props.iconBackgroundColors"
36
+ :border="$props.iconBorder"
37
+ :icon="$props.icon"
38
+ :iconColor="$props.color"
39
+ :size="imageSize"
40
+ />
41
+ <FSCol
42
+ align="center-left"
43
+ :width="`calc(100% - ${rightOverflow})`"
44
+ >
45
+ <template
46
+ v-if="$props.subtitle && $props.description"
47
+ >
48
+ <FSText
49
+ font="text-h3"
50
+ >
51
+ {{ $props.title }}
52
+ </FSText>
53
+ <FSCol
54
+ align="center-left"
55
+ gap="4px"
56
+ >
57
+ <FSText
58
+ font="text-button"
59
+ >
60
+ {{ $props.subtitle }}
61
+ </FSText>
62
+ <FSText
63
+ font="text-body"
64
+ >
65
+ {{ $props.description }}
66
+ </FSText>
67
+ </FSCol>
68
+ </template>
69
+ <template
70
+ v-else-if="$props.subtitle && !$props.description"
71
+ >
72
+ <FSText
73
+ font="text-h3"
74
+ :lineClamp="2"
75
+ >
76
+ {{ $props.title }}
77
+ </FSText>
78
+ <FSText
79
+ font="text-button"
80
+ >
81
+ {{ $props.subtitle }}
82
+ </FSText>
83
+ </template>
84
+ <template
85
+ v-else-if="!$props.subtitle && $props.description"
86
+ >
87
+ <FSText
88
+ font="text-h3"
89
+ :lineClamp="2"
90
+ >
91
+ {{ $props.title }}
92
+ </FSText>
93
+ <FSText
94
+ font="text-body"
95
+ :lineClamp="2"
96
+ >
97
+ {{ $props.description }}
98
+ </FSText>
99
+ </template>
100
+ <template
101
+ v-else
102
+ >
103
+ <FSText
104
+ font="text-h3"
105
+ :lineClamp="2"
106
+ >
107
+ {{ $props.title }}
108
+ </FSText>
109
+ </template>
110
+ </FSCol>
111
+ </FSRow>
112
+ <template
113
+ v-if="!$props.light"
114
+ >
115
+ <FSBreadcrumbs
116
+ :items="$props.breadcrumbs"
117
+ />
118
+ <FSSlideGroup
119
+ v-if="slots['toolbar']"
120
+ >
121
+ <slot
122
+ name="toolbar"
123
+ />
124
+ </FSSlideGroup>
125
+ <slot
126
+ name="title-append"
127
+ />
128
+ </template>
129
+ </FSCol>
130
+ </template>
131
+ <template
132
+ v-else
133
+ >
134
+ <FSCol
135
+ class="f-entity-header"
136
+ padding="0 14px 0 0"
137
+ align="center-left"
138
+ gap="16px"
139
+ >
140
+ <FSRow
141
+ align="center-left"
142
+ gap="16px"
143
+ :height="imageSize"
144
+ :wrap="false"
145
+ >
146
+
147
+ <template
148
+ v-if="$props.imageId"
149
+ >
150
+ <slot
151
+ name="image"
152
+ v-bind="{ imageSize }"
153
+ >
154
+ <FSImage
155
+ :imageId="$props.imageId"
156
+ :cover="imageCover"
157
+ :height="imageSize"
158
+ :width="imageSize"
159
+ />
160
+ </slot>
161
+ </template>
162
+ <FSIconCard
163
+ v-else-if="$props.icon"
164
+ iconSize="70px"
165
+ :backgroundVariant="$props.iconBackgroundVariant"
166
+ :backgroundColor="$props.iconBackgroundColors"
167
+ :border="$props.iconBorder"
168
+ :iconColor="$props.color"
169
+ :icon="$props.icon"
170
+ :size="imageSize"
171
+ />
172
+ <FSCol
173
+ align="center-left"
174
+ >
175
+ <FSText
176
+ :font="$props.light ? 'text-h3' : 'text-h2'"
177
+ >
178
+ {{ $props.title }}
179
+ </FSText>
180
+ <FSCol
181
+ v-if="!$props.light && ($props.subtitle || $props.description)"
182
+ gap="4px"
183
+ >
184
+ <FSText
185
+ v-if="$props.subtitle"
186
+ font="text-button"
187
+ >
188
+ {{ $props.subtitle }}
189
+ </FSText>
190
+ <FSText
191
+ v-if="$props.description"
192
+ font="text-body"
193
+ :lineClamp="2"
194
+ >
195
+ {{ $props.description }}
196
+ </FSText>
197
+ </FSCol>
198
+ </FSCol>
199
+ <FSRow
200
+ v-if="!$props.light"
201
+ align="center-right"
202
+ >
203
+ <slot
204
+ name="title-append"
205
+ />
206
+ </FSRow>
207
+ </FSRow>
208
+ <template
209
+ v-if="!$props.light"
210
+ >
211
+ <FSBreadcrumbs
212
+ :items="$props.breadcrumbs"
213
+ />
214
+ <FSSlideGroup
215
+ v-if="slots['toolbar']"
216
+ >
217
+ <slot
218
+ name="toolbar"
219
+ />
220
+ </FSSlideGroup>
221
+ </template>
222
+ </FSCol>
223
+ </template>
224
+ </template>
225
+
226
+ <script lang="ts">
227
+ import { computed, defineComponent, type PropType } from "vue";
228
+
229
+ import { type ColorBase, type FSBreadcrumbItem } from "@dative-gpi/foundation-shared-components/models";
230
+ import { useBreakpoints, useSlots } from "@dative-gpi/foundation-shared-components/composables";
231
+
232
+ import FSBreadcrumbs from "../FSBreadcrumbs.vue";
233
+ import FSSlideGroup from "../FSSlideGroup.vue";
234
+ import FSIconCard from "../FSIconCard.vue";
235
+ import FSImage from "../FSImage.vue";
236
+ import FSText from "../FSText.vue";
237
+ import FSCol from "../FSCol.vue";
238
+ import FSRow from "../FSRow.vue";
239
+
240
+ export default defineComponent({
241
+ name: "FSEntityHeader",
242
+ components: {
243
+ FSBreadcrumbs,
244
+ FSSlideGroup,
245
+ FSIconCard,
246
+ FSImage,
247
+ FSText,
248
+ FSCol,
249
+ FSRow
250
+ },
251
+ props: {
252
+ imageId: {
253
+ type: String as PropType<string | null>,
254
+ required: false,
255
+ default: null
256
+ },
257
+ color: {
258
+ type: String as PropType<ColorBase>,
259
+ required: false,
260
+ default: null
261
+ },
262
+ icon: {
263
+ type: String as PropType<string>,
264
+ required: false,
265
+ default: "mdi-ab-testing"
266
+ },
267
+ iconBackgroundVariant: {
268
+ type: String as PropType<"background" | "standard" | "full" | "gradient">,
269
+ required: false,
270
+ default: "background"
271
+ },
272
+ iconBackgroundColors: {
273
+ type: Array as PropType<string[]>,
274
+ required: false,
275
+ default: () => []
276
+ },
277
+ iconBorder: {
278
+ type: Boolean as PropType<boolean>,
279
+ required: false,
280
+ default: true
281
+ },
282
+ title: {
283
+ type: String as PropType<string | null>,
284
+ required: false,
285
+ default: null
286
+ },
287
+ subtitle: {
288
+ type: String as PropType<string | null>,
289
+ required: false,
290
+ default: null
291
+ },
292
+ description: {
293
+ type: String as PropType<string | null>,
294
+ required: false,
295
+ default: null
296
+ },
297
+ breadcrumbs: {
298
+ type: Array as PropType<Array<FSBreadcrumbItem>>,
299
+ required: false,
300
+ default: () => []
301
+ },
302
+ light: {
303
+ type: Boolean,
304
+ required: false,
305
+ default: false
306
+ },
307
+ imageCover: {
308
+ type: Boolean,
309
+ required: false,
310
+ default: true
311
+ }
312
+ },
313
+ setup(props) {
314
+ const { isExtraSmall, isMobileSized } = useBreakpoints();
315
+ const { slots } = useSlots();
316
+
317
+ const imageSize = computed((): string[] | string => {
318
+ if (props.light) {
319
+ return ["40px", "36px"];
320
+ }
321
+ return ["124px", "96px", "80px"];
322
+ });
323
+
324
+ const rightOverflow = computed(() => {
325
+ let result = imageSize.value[0];
326
+ if (isExtraSmall.value && imageSize.value[2]) {
327
+ result = imageSize.value[2];
328
+ }
329
+ if ((isExtraSmall.value || isMobileSized.value) && imageSize.value[1]) {
330
+ result = imageSize.value[1];
331
+ }
332
+ return result;
333
+ });
334
+
335
+ return {
336
+ rightOverflow,
337
+ isExtraSmall,
338
+ imageSize,
339
+ slots
340
+ };
341
+ }
342
+ });
343
+ </script>
@@ -0,0 +1,163 @@
1
+ <template>
2
+ <FSSkeletonView>
3
+ <template
4
+ #header
5
+ >
6
+ <FSEntityHeader
7
+ ref="headerRef"
8
+ :breadcrumbs="$props.breadcrumbs"
9
+ :description="$props.description"
10
+ :subtitle="$props.subtitle"
11
+ :title="$props.title"
12
+ :light="lightHeader"
13
+ :imageId="imageId"
14
+ :iconBackgroundVariant="$props.iconBackgroundVariant"
15
+ :icon="$props.icon"
16
+ :color="$props.color"
17
+ :iconBackgroundColors="$props.iconBackgroundColors"
18
+ :imageCover="$props.imageCover"
19
+ >
20
+ <template
21
+ v-if="$slots.image"
22
+ #image="props"
23
+ >
24
+ <slot
25
+ name="image"
26
+ v-bind="props"
27
+ />
28
+ </template>
29
+ <template
30
+ #title-append
31
+ >
32
+ <slot
33
+ name="title-append"
34
+ />
35
+ </template>
36
+ <template
37
+ #toolbar
38
+ v-if="slots['toolbar']"
39
+ >
40
+ <slot
41
+ name="toolbar"
42
+ />
43
+ </template>
44
+ </FSEntityHeader>
45
+ </template>
46
+ <template
47
+ #default
48
+ >
49
+ <!-- <FSFadeOut
50
+ padding="0 8px 0 0"
51
+ :height="height"
52
+ @scroll="onScroll"
53
+ > -->
54
+ <slot
55
+ name="default"
56
+ />
57
+ <!-- </FSFadeOut> -->
58
+ </template>
59
+ </FSSkeletonView>
60
+ </template>
61
+
62
+ <script lang="ts">
63
+ import { computed, defineComponent, type PropType, ref } from "vue";
64
+
65
+ import { type ColorEnum, type FSBreadcrumbItem } from "@dative-gpi/foundation-shared-components/models";
66
+ import { useBreakpoints, useSlots } from "@dative-gpi/foundation-shared-components/composables";
67
+
68
+ import FSEntityHeader from "./FSEntityHeader.vue";
69
+ import FSSkeletonView from "./FSSkeletonView.vue";
70
+ // import FSFadeOut from "../FSFadeOut.vue";
71
+
72
+ export default defineComponent({
73
+ name: "FSEntityView",
74
+ components: {
75
+ FSEntityHeader,
76
+ FSSkeletonView
77
+ // FSFadeOut
78
+ },
79
+ props: {
80
+ imageId: {
81
+ type: String as PropType<string | null>,
82
+ required: false,
83
+ default: null
84
+ },
85
+ imageCover: {
86
+ type: Boolean,
87
+ required: false,
88
+ default: true
89
+ },
90
+ icon: {
91
+ type: String as PropType<string | null>,
92
+ required: false,
93
+ default: null
94
+ },
95
+ color : {
96
+ type: Object as PropType<ColorEnum | null>,
97
+ required: false,
98
+ default: null
99
+ },
100
+ iconBackgroundColors: {
101
+ type: Array as PropType<string[]>,
102
+ required: false,
103
+ default: () => []
104
+ },
105
+ title: {
106
+ type: String as PropType<string | null>,
107
+ required: false,
108
+ default: null
109
+ },
110
+ subtitle: {
111
+ type: String as PropType<string | null>,
112
+ required: false,
113
+ default: null
114
+ },
115
+ description: {
116
+ type: String as PropType<string | null>,
117
+ required: false,
118
+ default: null
119
+ },
120
+ breadcrumbs: {
121
+ type: Array as PropType<FSBreadcrumbItem[]>,
122
+ required: false,
123
+ default: () => []
124
+ },
125
+ iconBackgroundVariant: {
126
+ type: String as PropType<"background" | "standard" | "full" | "gradient">,
127
+ required: false,
128
+ default: "background"
129
+ }
130
+ },
131
+ setup() {
132
+ const { isExtraSmall, windowHeight } = useBreakpoints();
133
+ const { slots } = useSlots();
134
+
135
+ const headerRef = ref<HTMLElement | null>(null);
136
+
137
+ const lightHeader = ref(false);
138
+
139
+ const height = computed((): string => {
140
+ let other = isExtraSmall.value ? 16 + 16 : 24 + 24; // Paddings
141
+
142
+ return `${windowHeight.value - other}px`;
143
+ });
144
+
145
+ // const onScroll = (event: any): void => {
146
+ // if (event.onTop) {
147
+ // lightHeader.value = false;
148
+ // }
149
+ // else if (event.target.scrollTop > (headerRef.value as any)?.$el.clientHeight) {
150
+ // lightHeader.value = true;
151
+ // }
152
+ // };
153
+
154
+ return {
155
+ lightHeader,
156
+ headerRef,
157
+ height,
158
+ slots
159
+ // onScroll
160
+ };
161
+ }
162
+ });
163
+ </script>
@@ -0,0 +1,83 @@
1
+ <template>
2
+ <template
3
+ v-if="isExtraSmall"
4
+ >
5
+ <FSCol
6
+ gap="12px"
7
+ >
8
+ <FSText
9
+ font="text-h3"
10
+ >
11
+ {{ $props.title }}
12
+ </FSText>
13
+ <FSBreadcrumbs
14
+ :items="$props.breadcrumbs"
15
+ />
16
+ </FSCol>
17
+ </template>
18
+ <template
19
+ v-else
20
+ >
21
+ <FSCol
22
+ gap="16px"
23
+ >
24
+ <FSText
25
+ font="text-h2"
26
+ >
27
+ {{ $props.title }}
28
+ </FSText>
29
+ <FSBreadcrumbs
30
+ :items="$props.breadcrumbs"
31
+ />
32
+ <FSSlideGroup
33
+ v-if="$slots['toolbar']"
34
+ style="min-width: 100%;"
35
+ >
36
+ <slot
37
+ name="toolbar"
38
+ />
39
+ </FSSlideGroup>
40
+ </FSCol>
41
+ </template>
42
+ </template>
43
+
44
+ <script lang="ts">
45
+ import { defineComponent, type PropType } from "vue";
46
+
47
+ import { type FSBreadcrumbItem } from "@dative-gpi/foundation-shared-components/models";
48
+ import { useBreakpoints } from "@dative-gpi/foundation-shared-components/composables";
49
+
50
+ import FSBreadcrumbs from "../FSBreadcrumbs.vue";
51
+ import FSSlideGroup from "../FSSlideGroup.vue";
52
+ import FSText from "../FSText.vue";
53
+ import FSCol from "../FSCol.vue";
54
+
55
+ export default defineComponent({
56
+ name: "FSListHeader",
57
+ components: {
58
+ FSBreadcrumbs,
59
+ FSSlideGroup,
60
+ FSText,
61
+ FSCol
62
+ },
63
+ props: {
64
+ title: {
65
+ type: String as PropType<string | null>,
66
+ required: false,
67
+ default: null
68
+ },
69
+ breadcrumbs: {
70
+ type: Array as PropType<Array<FSBreadcrumbItem>>,
71
+ required: false,
72
+ default: () => []
73
+ },
74
+ },
75
+ setup() {
76
+ const { isExtraSmall } = useBreakpoints();
77
+
78
+ return {
79
+ isExtraSmall
80
+ };
81
+ }
82
+ });
83
+ </script>
@@ -0,0 +1,83 @@
1
+ <template>
2
+ <FSSkeletonView>
3
+ <template
4
+ #header
5
+ >
6
+ <FSListHeader
7
+ ref="headerRef"
8
+ :breadcrumbs="$props.breadcrumbs"
9
+ :title="$props.title"
10
+ padding="0 14px 0 0"
11
+ >
12
+ <template
13
+ #toolbar
14
+ >
15
+ <slot
16
+ name="toolbar"
17
+ />
18
+ </template>
19
+ </FSListHeader>
20
+ </template>
21
+ <template
22
+ #default
23
+ >
24
+ <FSFadeOut
25
+ padding="0 8px 0 0"
26
+ :height="height"
27
+ >
28
+ <slot
29
+ name="default"
30
+ />
31
+ </FSFadeOut>
32
+ </template>
33
+ </FSSkeletonView>
34
+ </template>
35
+
36
+ <script lang="ts">
37
+ import { computed, defineComponent, type PropType, ref } from "vue";
38
+
39
+ import { type FSBreadcrumbItem } from "@dative-gpi/foundation-shared-components/models";
40
+ import { useBreakpoints } from "@dative-gpi/foundation-shared-components/composables";
41
+
42
+ import FSSkeletonView from "./FSSkeletonView.vue";
43
+ import FSListHeader from "./FSListHeader.vue";
44
+ import FSFadeOut from "../FSFadeOut.vue";
45
+
46
+ export default defineComponent({
47
+ name: "FSListView",
48
+ components: {
49
+ FSSkeletonView,
50
+ FSListHeader,
51
+ FSFadeOut
52
+ },
53
+ props: {
54
+ title: {
55
+ type: String as PropType<string | null>,
56
+ required: false,
57
+ default: null
58
+ },
59
+ breadcrumbs: {
60
+ type: Array as PropType<FSBreadcrumbItem[]>,
61
+ required: false,
62
+ default: () => []
63
+ }
64
+ },
65
+ setup() {
66
+ const { isExtraSmall, windowHeight } = useBreakpoints();
67
+
68
+ const headerRef = ref<HTMLElement | null>(null);
69
+
70
+ const height = computed((): string => {
71
+ let other = isExtraSmall.value ? 16 + 16 : 24 + 24 // Paddings
72
+ + (headerRef.value?.clientHeight ?? 0); // Header
73
+
74
+ return `${windowHeight.value - other}px`;
75
+ });
76
+
77
+ return {
78
+ headerRef,
79
+ height
80
+ };
81
+ }
82
+ });
83
+ </script>