@dative-gpi/foundation-shared-components 1.0.27 → 1.0.28-remove-deprecated2

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 (265) hide show
  1. package/components/FSBreadcrumbs.vue +1 -0
  2. package/components/FSButton.vue +10 -10
  3. package/components/FSCalendar.vue +52 -14
  4. package/components/FSCalendarTwin.vue +96 -40
  5. package/components/FSCard.vue +28 -7
  6. package/components/FSCardPlaceholder.vue +8 -5
  7. package/components/FSChip.vue +12 -2
  8. package/components/FSClickable.vue +20 -12
  9. package/components/FSClock.vue +16 -7
  10. package/components/FSColorIcon.vue +23 -5
  11. package/components/FSDialog.vue +2 -1
  12. package/components/FSDialogContent.vue +12 -11
  13. package/components/FSDialogForm.vue +22 -2
  14. package/components/FSDialogFormBody.vue +51 -32
  15. package/components/FSDialogMultiFormBody.vue +79 -56
  16. package/components/FSDialogRemove.vue +7 -7
  17. package/components/FSDialogSubmit.vue +20 -11
  18. package/components/FSEditImage.vue +1 -1
  19. package/components/FSEditImageUI.vue +20 -10
  20. package/components/FSFadeOut.vue +44 -18
  21. package/components/FSForm.vue +10 -8
  22. package/components/FSGrid.vue +1 -1
  23. package/components/FSIcon.vue +2 -1
  24. package/components/FSIconCard.vue +21 -4
  25. package/components/FSImage.vue +12 -4
  26. package/components/FSImageUI.vue +8 -15
  27. package/components/FSLink.vue +25 -9
  28. package/components/FSLoader.vue +28 -11
  29. package/components/FSOptionGroup.vue +51 -3
  30. package/components/FSRouterLink.vue +42 -0
  31. package/components/FSSlideGroup.vue +19 -5
  32. package/components/FSSpan.vue +9 -2
  33. package/components/FSSwitch.vue +57 -27
  34. package/components/FSTab.vue +15 -13
  35. package/components/FSTabs.vue +32 -7
  36. package/components/FSTag.vue +14 -3
  37. package/components/FSTagGroup.vue +1 -1
  38. package/components/FSText.vue +4 -2
  39. package/components/FSWindow.vue +128 -4
  40. package/components/FSWrapGroup.vue +13 -1
  41. package/components/agenda/FSAgenda.vue +223 -0
  42. package/components/agenda/FSAgendaDialogCalendar.vue +76 -0
  43. package/components/agenda/FSAgendaHeader.vue +215 -0
  44. package/components/agenda/FSAgendaHorizontalEvent.vue +174 -0
  45. package/components/agenda/FSAgendaHorizontalTimeLineMarker.vue +46 -0
  46. package/components/agenda/FSAgendaHoursCol.vue +103 -0
  47. package/components/agenda/FSAgendaHoursRow.vue +164 -0
  48. package/components/agenda/FSAgendaVerticalEvent.vue +160 -0
  49. package/components/agenda/FSAgendaVerticalTimeLineMarker.vue +46 -0
  50. package/components/agenda/FSDayAgenda.vue +199 -0
  51. package/components/agenda/FSMonthAgenda.vue +252 -0
  52. package/components/agenda/FSSelectAgendaMode.vue +54 -0
  53. package/components/agenda/FSWeekAgenda.vue +323 -0
  54. package/components/autocompletes/FSAutoCompleteAddress.vue +22 -20
  55. package/components/autocompletes/FSAutocompleteLanguage.vue +24 -39
  56. package/components/autocompletes/FSAutocompleteTimeZone.vue +26 -38
  57. package/components/buttons/FSButtonAdd.vue +1 -1
  58. package/components/buttons/FSButtonAddLabel.vue +1 -1
  59. package/components/buttons/FSButtonCancel.vue +1 -1
  60. package/components/buttons/FSButtonCancelLabel.vue +1 -1
  61. package/components/buttons/FSButtonCopy.vue +28 -0
  62. package/components/buttons/FSButtonCopyIcon.vue +28 -0
  63. package/components/buttons/FSButtonCopyLabel.vue +27 -0
  64. package/components/buttons/FSButtonCopyMini.vue +28 -0
  65. package/components/buttons/FSButtonDragIcon.vue +27 -0
  66. package/components/buttons/FSButtonDuplicate.vue +1 -1
  67. package/components/buttons/FSButtonDuplicateLabel.vue +1 -1
  68. package/components/buttons/FSButtonEdit.vue +1 -1
  69. package/components/buttons/FSButtonEditLabel.vue +1 -1
  70. package/components/buttons/FSButtonFile.vue +1 -1
  71. package/components/buttons/FSButtonFileLabel.vue +1 -1
  72. package/components/buttons/FSButtonNext.vue +1 -1
  73. package/components/buttons/FSButtonNextLabel.vue +1 -1
  74. package/components/buttons/FSButtonPrevious.vue +1 -1
  75. package/components/buttons/FSButtonPreviousLabel.vue +1 -1
  76. package/components/buttons/FSButtonRedo.vue +1 -1
  77. package/components/buttons/FSButtonRedoLabel.vue +1 -1
  78. package/components/buttons/FSButtonRemove.vue +1 -1
  79. package/components/buttons/FSButtonRemoveLabel.vue +1 -1
  80. package/components/buttons/FSButtonSave.vue +1 -1
  81. package/components/buttons/FSButtonSaveLabel.vue +1 -1
  82. package/components/buttons/FSButtonSearch.vue +1 -1
  83. package/components/buttons/FSButtonSearchLabel.vue +1 -1
  84. package/components/buttons/FSButtonUndo.vue +1 -1
  85. package/components/buttons/FSButtonUndoLabel.vue +1 -1
  86. package/components/buttons/FSButtonUpdate.vue +1 -1
  87. package/components/buttons/FSButtonUpdateLabel.vue +1 -1
  88. package/components/buttons/FSButtonValidate.vue +1 -1
  89. package/components/buttons/FSButtonValidateLabel.vue +1 -1
  90. package/components/calendar/FSSimpleCalendar.vue +145 -0
  91. package/components/calendar/FSSimpleCalendarHeader.vue +60 -0
  92. package/components/calendar/FSSimpleMonthSelector.vue +138 -0
  93. package/components/deviceOrganisations/FSConnectivity.vue +11 -1
  94. package/components/deviceOrganisations/FSConnectivityCard.vue +19 -47
  95. package/components/deviceOrganisations/FSStatus.vue +11 -1
  96. package/components/deviceOrganisations/FSStatusCard.vue +35 -61
  97. package/components/deviceOrganisations/FSStatusesCarousel.vue +1 -0
  98. package/components/deviceOrganisations/FSStatusesRow.vue +9 -3
  99. package/components/deviceOrganisations/FSWorstAlert.vue +30 -37
  100. package/components/deviceOrganisations/FSWorstAlertCard.vue +36 -85
  101. package/components/fields/FSAutocompleteField.vue +516 -341
  102. package/components/fields/FSAutocompleteTag.vue +100 -0
  103. package/components/fields/FSBaseField.vue +44 -27
  104. package/components/fields/FSColorField.vue +42 -39
  105. package/components/fields/FSCommentField.vue +105 -0
  106. package/components/fields/FSDateField.vue +2 -2
  107. package/components/fields/FSDateRangeField.vue +3 -2
  108. package/components/fields/FSDateTimeField.vue +4 -3
  109. package/components/fields/FSDateTimeRangeField.vue +8 -6
  110. package/components/fields/FSEntityFieldUI.vue +271 -0
  111. package/components/fields/FSGradientField.vue +27 -33
  112. package/components/fields/FSIconField.vue +0 -1
  113. package/components/fields/FSMagicConfigField.vue +15 -7
  114. package/components/fields/FSMagicField.vue +9 -4
  115. package/components/fields/FSNumberField.vue +13 -6
  116. package/components/fields/FSRichTextField.vue +102 -52
  117. package/components/fields/FSSearchField.vue +9 -115
  118. package/components/fields/FSSelectField.vue +489 -252
  119. package/components/fields/FSTagField.vue +1 -1
  120. package/components/fields/FSTermField.vue +33 -11
  121. package/components/fields/FSTextArea.vue +26 -7
  122. package/components/fields/FSTextField.vue +19 -10
  123. package/components/fields/FSTimeRangeField.vue +304 -0
  124. package/components/fields/FSTimeStepField.vue +3 -3
  125. package/components/fields/FSTranslateField.vue +4 -3
  126. package/components/fields/FSTranslateRichTextField.vue +15 -10
  127. package/components/fields/FSTranslateTextArea.vue +233 -0
  128. package/components/fields/FSTreeViewField.vue +3 -3
  129. package/components/fields/periodicField/FSPeriodicDailyField.vue +120 -0
  130. package/components/fields/periodicField/FSPeriodicField.vue +131 -0
  131. package/components/fields/periodicField/FSPeriodicMonthlyField.vue +222 -0
  132. package/components/fields/periodicField/FSPeriodicWeeklyField.vue +120 -0
  133. package/components/fields/periodicField/FSPeriodicYearlyField.vue +144 -0
  134. package/components/lists/FSDataTableUI.vue +148 -89
  135. package/components/lists/FSDraggable.vue +2 -2
  136. package/components/lists/FSFilterButton.vue +23 -28
  137. package/components/lists/FSHeaderButton.vue +4 -4
  138. package/components/lists/FSHiddenButton.vue +11 -15
  139. package/components/lists/FSLoadDataTable.vue +10 -7
  140. package/components/lists/FSSimpleList.vue +234 -0
  141. package/components/lists/FSSimpleListItem.vue +132 -0
  142. package/components/map/FSMap.vue +280 -399
  143. package/components/map/FSMapFeatureGroup.vue +51 -0
  144. package/components/map/FSMapLayerButton.vue +5 -5
  145. package/components/map/FSMapMarker.vue +120 -0
  146. package/components/map/FSMapMarkerClusterGroup.vue +72 -0
  147. package/components/map/FSMapOverlay.vue +70 -82
  148. package/components/map/FSMapPolygon.vue +81 -0
  149. package/components/map/FSMapTileLayer.vue +50 -0
  150. package/components/map/keys.ts +4 -0
  151. package/components/selects/FSSelectAutoRefresh.vue +9 -9
  152. package/components/selects/FSSelectDashboardVariableType.vue +5 -4
  153. package/components/selects/FSSelectDateSetting.vue +3 -2
  154. package/components/selects/FSSelectDays.vue +9 -9
  155. package/components/selects/FSSelectListMode.vue +51 -0
  156. package/components/selects/FSSelectMonths.vue +67 -0
  157. package/components/selects/chartSelectors/FSAggregationSelector.vue +52 -0
  158. package/components/selects/chartSelectors/FSAxisTypeSelector.vue +49 -0
  159. package/components/selects/chartSelectors/FSDisplayAsSelector.vue +53 -0
  160. package/components/selects/chartSelectors/FSFilterTypeSelector.vue +54 -0
  161. package/components/selects/chartSelectors/FSHeatmapRuleSelector.vue +54 -0
  162. package/components/selects/chartSelectors/FSOperationOnSelector.vue +53 -0
  163. package/components/selects/chartSelectors/FSPlanningTypeSelector.vue +53 -0
  164. package/components/selects/chartSelectors/FSPlotPerSelector.vue +52 -0
  165. package/components/selects/chartSelectors/FSSelectEntityType.vue +59 -0
  166. package/components/selects/chartSelectors/FSSerieTypeSelector.vue +53 -0
  167. package/components/tiles/FSAlertTileUI.vue +90 -0
  168. package/components/tiles/FSChartTile.vue +73 -0
  169. package/components/tiles/FSChartTileUI.vue +111 -0
  170. package/components/tiles/FSCommentTileUI.vue +174 -0
  171. package/components/tiles/FSDeviceOrganisationTileUI.vue +6 -0
  172. package/components/tiles/FSGroupTileUI.vue +2 -2
  173. package/components/tiles/FSLoadTile.vue +2 -0
  174. package/components/tiles/FSLocationTileUI.vue +192 -0
  175. package/components/tiles/FSModelTileUI.vue +18 -0
  176. package/components/tiles/FSSimpleTileUI.vue +9 -4
  177. package/components/tiles/FSTile.vue +93 -74
  178. package/components/tiles/FSUserOrganisationTileUI.vue +1 -1
  179. package/components/toggleSets/FSToggleSetPosition.vue +2 -2
  180. package/components/views/FSBaseView.vue +64 -0
  181. package/components/views/FSEntityView.vue +12 -140
  182. package/components/views/FSSimpleView.vue +29 -0
  183. package/components/views/desktop/FSBaseDefaultDesktopView.vue +134 -0
  184. package/components/views/desktop/FSBaseDesktopView.vue +53 -0
  185. package/components/views/desktop/FSBaseEntityDesktopView.vue +208 -0
  186. package/components/views/mobile/FSBaseDefaultMobileView.vue +132 -0
  187. package/components/views/mobile/FSBaseEntityMobileView.vue +198 -0
  188. package/components/views/mobile/FSBaseMobileView.vue +53 -0
  189. package/composables/useAddress.ts +2 -2
  190. package/composables/useBreakpoints.ts +39 -3
  191. package/composables/useColors.ts +3 -2
  192. package/composables/useMagicFieldProvider.ts +1 -0
  193. package/models/agenda.ts +9 -0
  194. package/models/deviceAlerts.ts +1 -1
  195. package/models/deviceConnectivities.ts +1 -1
  196. package/models/index.ts +1 -0
  197. package/models/magicFields.ts +1 -0
  198. package/models/map.ts +2 -2
  199. package/models/rules.ts +5 -5
  200. package/models/tables.ts +5 -2
  201. package/models/variableNode.ts +8 -5
  202. package/package.json +5 -5
  203. package/styles/components/fs_agenda.scss +36 -0
  204. package/styles/components/fs_agenda_event.scss +41 -0
  205. package/styles/components/fs_agenda_hours_col.scss +4 -0
  206. package/styles/components/fs_agenda_hours_row.scss +5 -0
  207. package/styles/components/fs_agenda_time_line_marker.scss +19 -0
  208. package/styles/components/fs_autocomplete_field.scss +0 -13
  209. package/styles/components/fs_breadcrumbs.scss +6 -12
  210. package/styles/components/fs_card.scss +0 -1
  211. package/styles/components/fs_clickable.scss +7 -14
  212. package/styles/components/fs_clock.scss +0 -10
  213. package/styles/components/fs_color_field.scss +1 -4
  214. package/styles/components/fs_data_table.scss +6 -9
  215. package/styles/components/fs_dialog.scss +7 -17
  216. package/styles/components/fs_edit_image.scss +8 -0
  217. package/styles/components/fs_fade_out.scss +11 -2
  218. package/styles/components/fs_filter_button.scss +1 -6
  219. package/styles/components/fs_gradient_field.scss +11 -11
  220. package/styles/components/fs_hidden_button.scss +2 -7
  221. package/styles/components/fs_image_card.scss +1 -1
  222. package/styles/components/fs_magic_config_field.scss +1 -2
  223. package/styles/components/fs_map.scss +36 -30
  224. package/styles/components/fs_meta_field.scss +3 -5
  225. package/styles/components/fs_option_group.scss +15 -5
  226. package/styles/components/fs_rich_text_field.scss +1 -9
  227. package/styles/components/fs_select_date_settings.scss +3 -0
  228. package/styles/components/fs_select_field.scss +0 -13
  229. package/styles/components/fs_slide_group.scss +7 -0
  230. package/styles/components/fs_span.scss +2 -1
  231. package/styles/components/fs_switch.scss +1 -0
  232. package/styles/components/fs_tabs.scss +10 -24
  233. package/styles/components/fs_tag.scss +3 -19
  234. package/styles/components/fs_text_area.scss +13 -17
  235. package/styles/components/fs_tile.scss +21 -15
  236. package/styles/components/fs_window.scss +7 -0
  237. package/styles/components/fs_wrap_group.scss +7 -0
  238. package/styles/components/index.scss +5 -5
  239. package/styles/globals/index.scss +1 -5
  240. package/styles/globals/overrides.scss +17 -57
  241. package/styles/globals/text_fonts.scss +18 -66
  242. package/tools/alertsTools.ts +69 -0
  243. package/tools/chartsTools.ts +427 -0
  244. package/tools/index.ts +3 -0
  245. package/tools/timeRangeTools.ts +125 -0
  246. package/utils/filter.ts +18 -0
  247. package/utils/index.ts +1 -0
  248. package/utils/leafletMarkers.ts +9 -3
  249. package/utils/sort.ts +2 -2
  250. package/utils/statuses.ts +1 -1
  251. package/utils/time.ts +17 -17
  252. package/components/autocompletes/FSAutocompleteTag.vue +0 -138
  253. package/components/fields/FSTimeSlotField.vue +0 -250
  254. package/components/map/FSMapEditPointAddressOverlay.vue +0 -164
  255. package/components/views/FSEntityHeader.vue +0 -350
  256. package/components/views/FSListHeader.vue +0 -83
  257. package/components/views/FSListView.vue +0 -83
  258. package/components/views/FSSkeletonView.vue +0 -100
  259. package/styles/components/fs_icon_field.scss +0 -12
  260. package/styles/components/fs_map_overlay.scss +0 -38
  261. package/styles/components/fs_tag_field.scss +0 -8
  262. package/styles/components/fs_time_field.scss +0 -12
  263. package/styles/components/fs_timeslot_field.scss +0 -12
  264. package/styles/globals/breakpoints.scss +0 -20
  265. package/styles/globals/fixes.scss +0 -5
@@ -0,0 +1,323 @@
1
+ <template>
2
+ <FSCol
3
+ class="fs-agenda-month-container"
4
+ height="100%"
5
+ width="100%"
6
+ gap="0"
7
+ >
8
+ <FSRow
9
+ gap="0"
10
+ :wrap="false"
11
+ >
12
+ <FSAgendaHoursRow
13
+ :firstColumnWidth="$props.firstColumnWidth"
14
+ :displayNow="$props.nowIsInSelectedRange"
15
+ :modelValue="nowHour"
16
+ />
17
+ </FSRow>
18
+ <FSRow
19
+ class="fs-agenda-month"
20
+ height="100%"
21
+ :style="style"
22
+ :wrap="false"
23
+ gap="0px"
24
+ >
25
+ <FSCol
26
+ class="fs-agenda-label-day-container"
27
+ height="100%"
28
+ gap="0"
29
+ :width="$props.firstColumnWidth"
30
+ >
31
+ <FSCol
32
+ class="fs-agenda-label-day"
33
+ v-for="day in weekDays"
34
+ :style="getDayLabelStyle(day.isNowDay)"
35
+ :key="day.dayNumber"
36
+ height="100%"
37
+ width="100%"
38
+ >
39
+ <FSCard
40
+ height="100%"
41
+ width="100%"
42
+ :borderRadius="0"
43
+ :border="false"
44
+ variant="standard"
45
+ :color="day.isNowDay ? 'primary' : 'background'"
46
+ >
47
+ <FSCol
48
+ padding="6px"
49
+ height="100%"
50
+ width="100%"
51
+ gap="2px"
52
+ align="center-left"
53
+ >
54
+ <FSCol
55
+ gap="0px"
56
+ >
57
+ <FSSpan
58
+ font="text-overline"
59
+ >
60
+ {{ day.dayName }}
61
+ </FSSpan>
62
+ <FSSpan
63
+ font="text-h3"
64
+ >
65
+ {{ to2Digits(day.dayNumber) }}
66
+ </FSSpan>
67
+ </FSCol>
68
+ <FSText
69
+ font="text-overline"
70
+ class="fs-agenda-week-number-label"
71
+ :color="weekTextColor"
72
+ >
73
+ {{ $tr('ui.common.week-short', 'W{0}',day.weekNumber) }}
74
+ </FSText>
75
+ </FSCol>
76
+ </FSCard>
77
+ </FSCol>
78
+
79
+ </FSCol>
80
+ <FSCol
81
+ class="fs-agenda-body"
82
+ gap="0"
83
+ height="100%"
84
+ width="100%"
85
+ >
86
+ <slot />
87
+ <template
88
+ v-if="loading"
89
+ >
90
+ <FSLoader
91
+ height="100%"
92
+ width="100%"
93
+ padding="2px"
94
+ />
95
+ </template>
96
+ <template
97
+ v-else
98
+ >
99
+ <FSRow
100
+ v-for="day in weekDays"
101
+ :key="day.dayNumber"
102
+ class="fs-agenda-row-day"
103
+ height="100%"
104
+ width="fill"
105
+ align="center-left"
106
+ >
107
+ <FSAgendaHorizontalEvent
108
+ v-for="event in getDayEvents(day.dayStartEpoch)"
109
+ :key="event.id"
110
+ :variant="event.end < now ? 'past' : event.start > now ? 'future' : 'current'"
111
+ :now="now"
112
+ :dayStart="day.dayStartEpoch"
113
+ :label="event.label"
114
+ :start="event.start"
115
+ :end="event.end"
116
+ :icon="event.icon"
117
+ :iconBis="event.iconBis"
118
+ :id="event.id"
119
+ :color="event.color"
120
+ @click="() => $emit('click:eventId', event.id)"
121
+ >
122
+ <template
123
+ #default="{ label, icon, timeStart, timeEnd, iconBis, variant, width }"
124
+ >
125
+ <FSRow
126
+ align="center-left"
127
+ gap="4px"
128
+ :wrap="false"
129
+ >
130
+ <FSCol
131
+ height="100%"
132
+ width="fill"
133
+ align="center-left"
134
+ padding="8px 0 8px 8px"
135
+ >
136
+ <FSSpan>
137
+ {{ `${timeStart} - ${timeEnd}` }}
138
+ </FSSpan>
139
+ <FSRow
140
+ align="center-left"
141
+ :wrap="false"
142
+ >
143
+ <FSIcon
144
+ v-if="icon"
145
+ :icon="icon"
146
+ size="24px"
147
+ />
148
+ <FSSpan
149
+ font="text-button"
150
+ >
151
+ {{ label }}
152
+ </FSSpan>
153
+ </FSRow>
154
+ </FSCol>
155
+ <FSCol
156
+ v-if="iconBis && variant !== 'current' && width > 13"
157
+ align="center-right"
158
+ padding="8px 8px 8px 0"
159
+ width="hug"
160
+ >
161
+ <FSIcon
162
+ :icon="iconBis"
163
+ size="20px"
164
+ />
165
+ </FSCol>
166
+ </FSRow>
167
+ </template>
168
+ </FSAgendaHorizontalEvent>
169
+ </FSRow>
170
+ </template>
171
+ </FSCol>
172
+ </FSRow>
173
+ </FSCol>
174
+ </template>
175
+
176
+ <script lang="ts">
177
+ import { defineComponent, computed, type PropType, type StyleValue } from 'vue';
178
+
179
+ import { useTranslations as useTranslationsProvider } from "@dative-gpi/bones-ui";
180
+ import { useDateFormat } from "@dative-gpi/foundation-shared-services/composables";
181
+
182
+ import { useColors } from "@dative-gpi/foundation-shared-components/composables";
183
+ import { ColorEnum, type FSAgendaEvent } from "@dative-gpi/foundation-shared-components/models";
184
+
185
+ import FSAgendaHorizontalEvent from './FSAgendaHorizontalEvent.vue';
186
+ import FSAgendaHoursRow from './FSAgendaHoursRow.vue';
187
+ import FSCard from '../FSCard.vue';
188
+ import FSCol from '../FSCol.vue';
189
+ import FSRow from '../FSRow.vue';
190
+ import FSLoader from '../FSLoader.vue';
191
+ import FSSpan from '../FSSpan.vue';
192
+ import FSIcon from '../FSIcon.vue';
193
+ import FSText from '../FSText.vue';
194
+
195
+ export default defineComponent({
196
+ name: 'FSWeekAgenda',
197
+ components: {
198
+ FSAgendaHorizontalEvent,
199
+ FSAgendaHoursRow,
200
+ FSCard,
201
+ FSCol,
202
+ FSIcon,
203
+ FSLoader,
204
+ FSRow,
205
+ FSSpan,
206
+ FSText
207
+ },
208
+ props: {
209
+ now: {
210
+ type: Number,
211
+ required: true
212
+ },
213
+ start: {
214
+ type: Number,
215
+ required: true
216
+ },
217
+ end: {
218
+ type: Number,
219
+ required: true
220
+ },
221
+ nowIsInSelectedRange: {
222
+ type: Boolean,
223
+ required: true
224
+ },
225
+ firstColumnWidth: {
226
+ type: String,
227
+ required: true
228
+ },
229
+ loading: {
230
+ type: Boolean,
231
+ default: false
232
+ },
233
+ events: {
234
+ type: Array as PropType<FSAgendaEvent[]>,
235
+ default: () => []
236
+ }
237
+ },
238
+ emits: ['click:eventId'],
239
+ setup(props) {
240
+ const { $tr } = useTranslationsProvider();
241
+ const { getColors } = useColors();
242
+ const { epochToWeekNumber } = useDateFormat();
243
+
244
+ const primaryColors = getColors(ColorEnum.Primary);
245
+ const lightColors = getColors(ColorEnum.Light);
246
+
247
+ const weekTextColor = lightColors.dark;
248
+
249
+ const nowHour = computed(() => new Date(props.now).getHours());
250
+
251
+ const weekDays = computed(() => {
252
+ const daysOfWeek = [
253
+ $tr('ui.common.sunday-short', 'SUN'),
254
+ $tr('ui.common.monday-short', 'MON'),
255
+ $tr('ui.common.tuesday-short', 'TUE'),
256
+ $tr('ui.common.wednesday-short', 'WED'),
257
+ $tr('ui.common.thursday-short', 'THU'),
258
+ $tr('ui.common.friday-short', 'FRI'),
259
+ $tr('ui.common.saturday-short', 'SAT')
260
+ ];
261
+ const weekDaysArray = [];
262
+ const nowDate = new Date(props.now);
263
+
264
+ let currentDay = new Date(props.start);
265
+ const endDate = new Date(props.end);
266
+
267
+ while (currentDay <= endDate) {
268
+ weekDaysArray.push({
269
+ dayNumber: currentDay.getDate(),
270
+ dayName: daysOfWeek[currentDay.getDay()],
271
+ dayStartEpoch: currentDay.getTime(),
272
+ weekNumber: epochToWeekNumber(currentDay.getTime()),
273
+ isNowDay: currentDay.toDateString() === nowDate.toDateString(),
274
+ });
275
+
276
+ currentDay.setDate(currentDay.getDate() + 1);
277
+ }
278
+
279
+ return weekDaysArray;
280
+ });
281
+
282
+ const style = computed((): StyleValue => {
283
+ return {
284
+ '--fs-agenda-row-day-border-bottom-color': lightColors.base,
285
+ };
286
+ });
287
+
288
+ const to2Digits = (value: number | string) => {
289
+ return value.toString().padStart(2, '0');
290
+ };
291
+
292
+ const getDayLabelStyle = (isNowDay: boolean = false) => {
293
+ if (isNowDay) {
294
+ return {
295
+ '--fs-agenda-label-day-border-bottom-color': primaryColors.base,
296
+ '--fs-agenda-label-day-border-right-color': lightColors.base,
297
+ };
298
+ }
299
+ return {
300
+ '--fs-agenda-label-day-border-bottom-color': lightColors.base,
301
+ '--fs-agenda-label-day-border-right-color': lightColors.base,
302
+ };
303
+ };
304
+
305
+ const getDayEvents = (dayStartEpoch: number) => {
306
+ return props.events.filter((event) => {
307
+ const dayEndEpoch = dayStartEpoch + 1000 * 60 * 60 * 24;
308
+ return event.start < dayEndEpoch && event.end > dayStartEpoch;
309
+ });
310
+ };
311
+
312
+ return {
313
+ style,
314
+ nowHour,
315
+ weekDays,
316
+ weekTextColor,
317
+ getDayEvents,
318
+ getDayLabelStyle,
319
+ to2Digits
320
+ };
321
+ },
322
+ });
323
+ </script>
@@ -1,10 +1,11 @@
1
1
  <template>
2
2
  <FSAutocompleteField
3
+ :label="$props.label ?? $tr('ui.common.address', 'Address')"
3
4
  :clearable="false"
4
5
  :toggleSet="false"
5
6
  :multiple="false"
6
- :items="places"
7
- :modelValue="modelValuePlace"
7
+ :items="items"
8
+ :modelValue="$props.modelValue?.placeId"
8
9
  @update:modelValue="onUpdate"
9
10
  v-model:search="search"
10
11
  v-bind="$attrs"
@@ -12,7 +13,7 @@
12
13
  </template>
13
14
 
14
15
  <script lang="ts">
15
- import { defineComponent, onMounted, ref, watch } from "vue";
16
+ import { computed, defineComponent, ref } from "vue";
16
17
 
17
18
  import { type Address, type Place } from "@dative-gpi/foundation-shared-domain/models";
18
19
  import { useAutocomplete } from "@dative-gpi/foundation-shared-components/composables";
@@ -32,13 +33,26 @@ export default defineComponent({
32
33
  required: false,
33
34
  default: null
34
35
  },
36
+ label: {
37
+ type: String,
38
+ required: false,
39
+ default: null
40
+ }
35
41
  },
36
42
  emits: ["update:modelValue"],
37
43
  setup(props, { emit }) {
38
44
  const { search: searchAddress, get: getAddress } = useAddress();
39
45
 
40
46
  const places = ref<Place[]>([]);
41
- const modelValuePlace = ref<Place | null>(null);
47
+
48
+ const items = computed(() => {
49
+ if(props.modelValue) {
50
+ const currentPlace = addressToPlace(props.modelValue);
51
+ const searchedPlaces = places.value.filter((place) => place.id !== currentPlace.id);
52
+ return [currentPlace, ...searchedPlaces];
53
+ }
54
+ return places.value;
55
+ });
42
56
 
43
57
  const fetch = async (search: string | null) => {
44
58
  if (search === null) {
@@ -69,7 +83,9 @@ export default defineComponent({
69
83
  (item) => (item).id,
70
84
  (item) => (item).label,
71
85
  true,
72
- false
86
+ false,
87
+ 0,
88
+ 500
73
89
  );
74
90
 
75
91
  const addressToPlace = (address: Address): Place => {
@@ -79,23 +95,9 @@ export default defineComponent({
79
95
  };
80
96
  };
81
97
 
82
- onMounted(() => {
83
- if(!props.modelValue) {
84
- return;
85
- }
86
- modelValuePlace.value = addressToPlace(props.modelValue);
87
- });
88
-
89
- watch(() => props.modelValue, (newValue) => {
90
- if(!newValue) {
91
- return;
92
- }
93
- modelValuePlace.value = addressToPlace(newValue);
94
- });
95
-
96
98
  return {
97
- modelValuePlace,
98
99
  places,
100
+ items,
99
101
  search,
100
102
  onUpdate
101
103
  };
@@ -1,7 +1,9 @@
1
1
  <template>
2
2
  <FSAutocompleteField
3
+ :label="$tr('ui.common.language', 'Language')"
3
4
  :toggleSet="!$props.toggleSetDisabled && toggleSet"
4
5
  :multiple="$props.multiple"
6
+ :placeholder="placeholder"
5
7
  :loading="loading"
6
8
  :items="languages"
7
9
  :modelValue="$props.modelValue"
@@ -9,64 +11,33 @@
9
11
  v-bind="$attrs"
10
12
  >
11
13
  <template
12
- #autocomplete-selection="{ item }"
14
+ #item-prepend="{ item }"
13
15
  >
14
- <FSRow
15
- v-if="$props.modelValue"
16
- align="center-center"
17
- :wrap="false"
16
+ <FSIcon
17
+ v-if="item.icon"
18
18
  >
19
- <FSIcon
20
- v-if="item.raw.icon"
21
- >
22
- {{ item.raw.icon }}
23
- </FSIcon>
24
- <FSSpan>
25
- {{ item.raw.label }}
26
- </FSSpan>
27
- </FSRow>
28
- </template>
29
- <template
30
- #item-label="{ item, font }"
31
- >
32
- <FSRow
33
- align="center-left"
34
- :wrap="false"
35
- >
36
- <FSIcon
37
- v-if="item.raw.icon"
38
- >
39
- {{ item.raw.icon }}
40
- </FSIcon>
41
- <FSSpan
42
- :font="font"
43
- >
44
- {{ item.raw.label }}
45
- </FSSpan>
46
- </FSRow>
19
+ {{ item.icon }}
20
+ </FSIcon>
47
21
  </template>
48
22
  </FSAutocompleteField>
49
23
  </template>
50
24
 
51
25
  <script lang="ts">
52
- import { computed, defineComponent, type PropType } from "vue"
26
+ import { computed, defineComponent, type PropType } from "vue";
53
27
 
54
28
  import { useAutocomplete } from "@dative-gpi/foundation-shared-components/composables";
55
29
  import { type LanguageFilters } from "@dative-gpi/foundation-shared-domain/models";
30
+ import { useTranslations as useTranslationsProvider } from "@dative-gpi/bones-ui";
56
31
  import { useLanguages } from "@dative-gpi/foundation-shared-services/composables";
57
32
 
58
33
  import FSAutocompleteField from "../fields/FSAutocompleteField.vue";
59
34
  import FSIcon from "../FSIcon.vue";
60
- import FSSpan from "../FSSpan.vue";
61
- import FSRow from "../FSRow.vue";
62
35
 
63
36
  export default defineComponent({
64
37
  name: "FSAutocompleteLanguage",
65
38
  components: {
66
39
  FSAutocompleteField,
67
- FSIcon,
68
- FSSpan,
69
- FSRow
40
+ FSIcon
70
41
  },
71
42
  props: {
72
43
  languageFilters: {
@@ -88,16 +59,29 @@ export default defineComponent({
88
59
  type: Boolean,
89
60
  required: false,
90
61
  default: false
62
+ },
63
+ label: {
64
+ type: String as PropType<string | null>,
65
+ required: false,
66
+ default: null
91
67
  }
92
68
  },
93
69
  emits: ["update:modelValue"],
94
70
  setup(props, { emit }) {
95
71
  const { getMany: getManyLanguages, fetching: fetchingLanguages, entities: languages } = useLanguages();
72
+ const { $tr } = useTranslationsProvider();
96
73
 
97
74
  const loading = computed((): boolean => {
98
75
  return init.value && fetchingLanguages.value;
99
76
  });
100
77
 
78
+ const placeholder = computed((): string | null => {
79
+ if (props.multiple && props.modelValue) {
80
+ return $tr("autocomplete.language.placeholder", "{0} language(s) selected", props.modelValue.length);
81
+ }
82
+ return null;
83
+ });
84
+
101
85
  const fetch = (search: string | null) => {
102
86
  return getManyLanguages({ ...props.languageFilters, search: search ?? undefined });
103
87
  };
@@ -110,6 +94,7 @@ export default defineComponent({
110
94
  );
111
95
 
112
96
  return {
97
+ placeholder,
113
98
  languages,
114
99
  toggleSet,
115
100
  loading,
@@ -1,8 +1,10 @@
1
1
  <template>
2
2
  <FSAutocompleteField
3
3
  itemTitle="id"
4
+ :label="$tr('ui.common.time-zone', 'Time zone')"
4
5
  :toggleSet="!$props.toggleSetDisabled && toggleSet"
5
6
  :multiple="$props.multiple"
7
+ :placeholder="placeholder"
6
8
  :loading="loading"
7
9
  :items="timeZones"
8
10
  :modelValue="$props.modelValue"
@@ -10,37 +12,12 @@
10
12
  v-bind="$attrs"
11
13
  >
12
14
  <template
13
- #autocomplete-selection="{ item }"
15
+ #item-append="{ item }"
14
16
  >
15
- <FSRow
16
- v-if="$props.modelValue"
17
- align="center-center"
18
- :wrap="false"
19
- >
20
- <FSChip
21
- :label="item.raw.offset"
22
- />
23
- <FSSpan>
24
- {{ item.raw.id }}
25
- </FSSpan>
26
- </FSRow>
27
- </template>
28
- <template
29
- #item-label="{ item, font }"
30
- >
31
- <FSRow
32
- align="center-left"
33
- :wrap="false"
34
- >
35
- <FSChip
36
- :label="item.raw.offset"
37
- />
38
- <FSSpan
39
- :font="font"
40
- >
41
- {{ item.raw.id }}
42
- </FSSpan>
43
- </FSRow>
17
+ <FSChip
18
+ v-if="item.offset"
19
+ :label="item.offset.split(':')[0]"
20
+ />
44
21
  </template>
45
22
  <template
46
23
  #toggle-set-item="props"
@@ -53,9 +30,10 @@
53
30
  @click="props.toggle(props.item)"
54
31
  >
55
32
  <template
56
- #prepend
33
+ #append
57
34
  >
58
35
  <FSChip
36
+ v-if="props.item.offset"
59
37
  :label="props.item.offset.split(':')[0]"
60
38
  />
61
39
  </template>
@@ -69,23 +47,20 @@ import { computed, defineComponent, type PropType } from "vue";
69
47
 
70
48
  import { type TimeZoneFilters, type TimeZoneInfos } from "@dative-gpi/foundation-shared-domain/models";
71
49
  import { useAutocomplete } from "@dative-gpi/foundation-shared-components/composables";
50
+ import { useTranslations as useTranslationsProvider } from "@dative-gpi/bones-ui";
72
51
  import { useTimeZones } from "@dative-gpi/foundation-shared-services/composables";
73
52
  import { ColorEnum } from "@dative-gpi/foundation-shared-components/models";
74
53
 
75
54
  import FSAutocompleteField from "../fields/FSAutocompleteField.vue";
76
55
  import FSButton from "../FSButton.vue";
77
56
  import FSChip from "../FSChip.vue";
78
- import FSSpan from "../FSSpan.vue";
79
- import FSRow from "../FSRow.vue";
80
57
 
81
58
  export default defineComponent({
82
59
  name: "FSAutocompleteTimeZone",
83
60
  components: {
84
61
  FSAutocompleteField,
85
62
  FSButton,
86
- FSChip,
87
- FSSpan,
88
- FSRow
63
+ FSChip
89
64
  },
90
65
  props: {
91
66
  timeZoneFilters: {
@@ -107,21 +82,34 @@ export default defineComponent({
107
82
  type: Boolean,
108
83
  required: false,
109
84
  default: false
85
+ },
86
+ label: {
87
+ type: String as PropType<string | null>,
88
+ required: false,
89
+ default: null
110
90
  }
111
91
  },
112
92
  emits: ["update:modelValue"],
113
93
  setup(props, { emit }) {
114
94
  const { getMany: getManyTimeZones, fetching: fetchingTimeZones, entities: timeZones } = useTimeZones();
95
+ const { $tr } = useTranslationsProvider();
115
96
 
116
97
  const loading = computed((): boolean => {
117
98
  return init.value && fetchingTimeZones.value;
118
99
  });
119
100
 
101
+ const placeholder = computed((): string | null => {
102
+ if (props.multiple && props.modelValue) {
103
+ return $tr("autocomplete.time-zone.placeholder", "{0} time zone(s) selected", props.modelValue.length);
104
+ }
105
+ return null;
106
+ });
107
+
120
108
  const fetch = (search: string | null) => {
121
109
  return getManyTimeZones({ ...props.timeZoneFilters, search: search ?? undefined });
122
110
  };
123
111
 
124
- const { toggleSet, search, init, onUpdate } = useAutocomplete(
112
+ const { toggleSet, init, onUpdate } = useAutocomplete(
125
113
  timeZones,
126
114
  [() => props.timeZoneFilters],
127
115
  emit,
@@ -132,11 +120,11 @@ export default defineComponent({
132
120
  );
133
121
 
134
122
  return {
123
+ placeholder,
135
124
  ColorEnum,
136
125
  timeZones,
137
126
  toggleSet,
138
127
  loading,
139
- search,
140
128
  onUpdate
141
129
  };
142
130
  }
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <FSButton
3
3
  prependIcon="mdi-plus-circle-outline"
4
- :label="$tr('ui.button.add', 'Add')"
4
+ :label="$tr('ui.common.add', 'Add')"
5
5
  :color="ColorEnum.Primary"
6
6
  v-bind="$attrs"
7
7
  />
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <FSButton
3
- :label="$tr('ui.button.add', 'Add')"
3
+ :label="$tr('ui.common.add', 'Add')"
4
4
  :color="ColorEnum.Primary"
5
5
  v-bind="$attrs"
6
6
  />
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <FSButton
3
3
  prependIcon="mdi-cancel"
4
- :label="$tr('ui.button.cancel', 'Cancel')"
4
+ :label="$tr('ui.common.cancel', 'Cancel')"
5
5
  :color="ColorEnum.Light"
6
6
  v-bind="$attrs"
7
7
  />
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <FSButton
3
- :label="$tr('ui.button.cancel', 'Cancel')"
3
+ :label="$tr('ui.common.cancel', 'Cancel')"
4
4
  :color="ColorEnum.Light"
5
5
  v-bind="$attrs"
6
6
  />