@dative-gpi/foundation-shared-components 1.0.66 → 1.0.67-map-carousel

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 +11 -9
  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/FSDialog.vue +2 -1
  16. package/components/FSDialogContent.vue +12 -11
  17. package/components/FSDialogForm.vue +22 -2
  18. package/components/FSDialogFormBody.vue +50 -31
  19. package/components/FSDialogMenu.vue +17 -8
  20. package/components/FSDialogMultiFormBody.vue +23 -13
  21. package/components/FSDialogRemove.vue +7 -8
  22. package/components/FSDialogSubmit.vue +20 -11
  23. package/components/FSEditImageUI.vue +13 -5
  24. package/components/FSFadeOut.vue +53 -21
  25. package/components/FSForm.vue +10 -8
  26. package/components/FSGrid.vue +0 -1
  27. package/components/FSIcon.vue +2 -2
  28. package/components/FSIconCard.vue +68 -12
  29. package/components/FSInformationsMenu.vue +142 -0
  30. package/components/FSInstantPicker.vue +268 -0
  31. package/components/FSLink.vue +25 -9
  32. package/components/FSLoader.vue +28 -10
  33. package/components/FSMenu.vue +47 -0
  34. package/components/FSOptionGroup.vue +8 -8
  35. package/components/FSOptionItem.vue +4 -4
  36. package/components/FSOptionsMenu.vue +165 -0
  37. package/components/FSPagination.vue +1 -1
  38. package/components/FSPlayButtons.vue +72 -0
  39. package/components/FSProgressBar.vue +94 -0
  40. package/components/FSRadio.vue +5 -4
  41. package/components/FSRadioGroup.vue +3 -3
  42. package/components/FSRangePicker.vue +275 -0
  43. package/components/FSRangeSlider.vue +84 -0
  44. package/components/FSRouterLink.vue +42 -0
  45. package/components/FSSlideGroup.vue +19 -5
  46. package/components/FSSlider.vue +44 -79
  47. package/components/FSSpan.vue +12 -7
  48. package/components/FSSwitch.vue +44 -48
  49. package/components/FSTab.vue +15 -13
  50. package/components/FSTabs.vue +32 -7
  51. package/components/FSTag.vue +3 -3
  52. package/components/FSTagGroup.vue +6 -4
  53. package/components/FSText.vue +11 -7
  54. package/components/FSToggleSet.vue +7 -7
  55. package/components/FSTreeView.vue +107 -0
  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 +0 -1
  65. package/components/agenda/FSMonthAgenda.vue +1 -6
  66. package/components/agenda/FSSelectAgendaMode.vue +2 -2
  67. package/components/agenda/FSWeekAgenda.vue +5 -10
  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/carousels/FSCarousel.vue +23 -0
  106. package/components/carousels/FSCarouselItem.vue +14 -0
  107. package/components/deviceOrganisations/FSConnectivity.vue +5 -3
  108. package/components/deviceOrganisations/FSStatus.vue +5 -3
  109. package/components/deviceOrganisations/FSStatusCard.vue +7 -9
  110. package/components/deviceOrganisations/FSStatusRichCard.vue +171 -0
  111. package/components/deviceOrganisations/FSWorstAlert.vue +24 -36
  112. package/components/deviceOrganisations/FSWorstAlertCard.vue +8 -47
  113. package/components/fields/FSAutocompleteField.vue +85 -82
  114. package/components/fields/FSAutocompleteTag.vue +1 -1
  115. package/components/fields/FSBaseField.vue +42 -25
  116. package/components/fields/FSClosableSearchField.vue +83 -0
  117. package/components/fields/FSColorField.vue +12 -10
  118. package/components/fields/FSCommentField.vue +28 -16
  119. package/components/fields/FSDateField.vue +13 -10
  120. package/components/fields/FSDateRangeField.vue +6 -5
  121. package/components/fields/FSDateTimeField.vue +14 -11
  122. package/components/fields/FSDateTimeRangeDialog.vue +160 -0
  123. package/components/fields/FSDateTimeRangeField.vue +23 -115
  124. package/components/fields/FSEntityFieldUI.vue +19 -16
  125. package/components/fields/FSGradientField.vue +5 -5
  126. package/components/fields/FSIconField.vue +16 -9
  127. package/components/fields/FSMagicConfigField.vue +15 -7
  128. package/components/fields/FSMagicField.vue +7 -2
  129. package/components/fields/FSMapAddressField.vue +187 -0
  130. package/components/fields/FSNumberField.vue +8 -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 +9 -9
  136. package/components/fields/FSTermField.vue +69 -46
  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 +21 -19
  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 +198 -123
  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 -88
  159. package/components/lists/FSSimpleListItem.vue +131 -0
  160. package/components/map/FSMap.vue +144 -158
  161. package/components/map/FSMapFeatureGroup.vue +7 -1
  162. package/components/map/FSMapLayerButton.vue +4 -3
  163. package/components/map/FSMapMarker.vue +103 -42
  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 +0 -6
  192. package/components/tiles/FSEntityCountBadge.vue +72 -0
  193. package/components/tiles/FSFolderTileUI.vue +38 -4
  194. package/components/tiles/FSGroupTileUI.vue +32 -136
  195. package/components/tiles/FSLoadTile.vue +16 -10
  196. package/components/tiles/FSLocationTileUI.vue +45 -63
  197. package/components/tiles/FSServiceAccountOrganisationTileUI.vue +0 -6
  198. package/components/tiles/FSSimpleTileUI.vue +30 -24
  199. package/components/tiles/FSTile.vue +46 -39
  200. package/components/tiles/FSUserOrganisationTileUI.vue +1 -7
  201. package/components/tiles/FSUserTileUI.vue +119 -0
  202. package/components/toggleSets/FSToggleSetPosition.vue +1 -1
  203. package/components/views/FSBaseView.vue +64 -0
  204. package/components/views/FSEntityView.vue +12 -146
  205. package/components/views/FSSimpleView.vue +29 -0
  206. package/components/views/desktop/FSBaseDefaultDesktopView.vue +135 -0
  207. package/components/views/desktop/FSBaseDesktopView.vue +53 -0
  208. package/components/views/desktop/FSBaseEntityDesktopView.vue +211 -0
  209. package/components/views/mobile/FSBaseDefaultMobileView.vue +133 -0
  210. package/components/views/mobile/FSBaseEntityMobileView.vue +206 -0
  211. package/components/views/mobile/FSBaseMobileView.vue +53 -0
  212. package/composables/index.ts +1 -0
  213. package/composables/useAddress.ts +40 -8
  214. package/composables/useBreakpoints.ts +40 -4
  215. package/composables/useColors.ts +16 -7
  216. package/composables/useMagicFieldProvider.ts +1 -0
  217. package/composables/useMapLayers.ts +69 -0
  218. package/composables/useSlots.ts +2 -1
  219. package/models/colors.ts +2 -1
  220. package/models/deviceAlerts.ts +1 -0
  221. package/models/magicFields.ts +1 -0
  222. package/models/map.ts +12 -10
  223. package/models/rules.ts +5 -2
  224. package/models/tables.ts +2 -1
  225. package/models/variableNode.ts +8 -5
  226. package/package.json +5 -5
  227. package/styles/components/fs_agenda.scss +4 -0
  228. package/styles/components/fs_agenda_event.scss +1 -1
  229. package/styles/components/fs_agenda_hours_row.scss +0 -8
  230. package/styles/components/fs_autocomplete_field.scss +0 -13
  231. package/styles/components/fs_breadcrumbs.scss +18 -36
  232. package/styles/components/fs_button.scss +7 -5
  233. package/styles/components/fs_calendar.scss +1 -0
  234. package/styles/components/fs_card.scss +9 -0
  235. package/styles/components/fs_chip.scss +13 -7
  236. package/styles/components/fs_clickable.scss +16 -23
  237. package/styles/components/fs_clock.scss +0 -10
  238. package/styles/components/fs_col.scss +1 -1
  239. package/styles/components/fs_color_field.scss +0 -4
  240. package/styles/components/fs_data_table.scss +6 -9
  241. package/styles/components/fs_dialog.scss +4 -10
  242. package/styles/components/fs_dialog_menu.scss +4 -2
  243. package/styles/components/fs_draggable.scss +0 -5
  244. package/styles/components/fs_fade_out.scss +10 -2
  245. package/styles/components/fs_filter_button.scss +1 -1
  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_password_field.scss +4 -2
  252. package/styles/components/fs_progress_bar.scss +14 -0
  253. package/styles/components/fs_radio.scss +0 -11
  254. package/styles/components/fs_rich_text_field.scss +1 -10
  255. package/styles/components/fs_select_field.scss +4 -13
  256. package/styles/components/fs_slide_group.scss +7 -0
  257. package/styles/components/fs_slider.scss +0 -40
  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_tabs.scss +18 -37
  261. package/styles/components/fs_tag.scss +8 -22
  262. package/styles/components/fs_text_area.scss +2 -21
  263. package/styles/components/fs_tile.scss +0 -19
  264. package/styles/components/fs_window.scss +3 -1
  265. package/styles/components/fs_wrap_group.scss +7 -0
  266. package/styles/components/index.scss +2 -6
  267. package/styles/globals/index.scss +1 -5
  268. package/styles/globals/overrides.scss +26 -54
  269. package/styles/globals/scrollbars.scss +8 -0
  270. package/styles/globals/text_fonts.scss +18 -66
  271. package/styles/globals/touchscreen.scss +2 -2
  272. package/tools/alertsTools.ts +94 -18
  273. package/tools/chartsTools.ts +155 -16
  274. package/tools/index.ts +3 -1
  275. package/tools/reportsTools.ts +38 -0
  276. package/tools/timeRangeTools.ts +125 -0
  277. package/utils/badge.ts +9 -5
  278. package/utils/filter.ts +4 -1
  279. package/utils/index.ts +2 -0
  280. package/utils/leafletMarkers.ts +4 -4
  281. package/utils/operations.ts +108 -0
  282. package/utils/picker.ts +40 -0
  283. package/utils/sort.ts +2 -2
  284. package/utils/time.ts +13 -13
  285. package/components/fields/FSTimeSlotField.vue +0 -250
  286. package/components/views/FSEntityHeader.vue +0 -343
  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
@@ -3,7 +3,7 @@
3
3
  :description="$props.description"
4
4
  :hideHeader="$props.hideHeader"
5
5
  :required="$props.required"
6
- :editable="$props.editable"
6
+ :disabled="$props.disabled"
7
7
  :label="$props.label"
8
8
  :messages="messages"
9
9
  >
@@ -14,18 +14,20 @@
14
14
  :wrap="false"
15
15
  >
16
16
  <FSSelectField
17
+ :disabled="$props.disabled"
18
+ :items="actualEntityTypes"
17
19
  :hideHeader="true"
20
+ :clearable="false"
18
21
  :modelValue="$props.entityType"
19
22
  @update:modelValue="$emit('update:entityType', $event)"
20
- :items="actualEntityTypes"
21
- :clearable="false"
22
23
  />
23
24
  <template
24
25
  v-if="itemsCount > 0"
25
26
  >
26
27
  <FSButton
27
- :label="$tr('ui.entity-field.edit', 'Edit')"
28
28
  icon="mdi-pencil"
29
+ :label="$tr('ui.common.edit', 'Edit')"
30
+ :disabled="$props.disabled"
29
31
  @click="$emit('click:select')"
30
32
  />
31
33
  </template>
@@ -33,8 +35,9 @@
33
35
  v-else
34
36
  >
35
37
  <FSButton
36
- :label="$tr('ui.entity-field.select', 'Select')"
37
38
  icon="mdi-plus-circle-multiple-outline"
39
+ :label="$tr('ui.common.select', 'Select')"
40
+ :disabled="$props.disabled"
38
41
  @click="$emit('click:select')"
39
42
  />
40
43
  </template>
@@ -60,7 +63,7 @@
60
63
  <FSSpan
61
64
  font="text-overline"
62
65
  >
63
- {{ $tr('ui.entity-field.selected', '{0} selected(s)', itemsCount) }}
66
+ {{ $tr('entity-field.selected', '{0} selected(s)', itemsCount) }}
64
67
  </FSSpan>
65
68
  </FSRow>
66
69
  </FSColor>
@@ -84,7 +87,7 @@
84
87
  <FSSpan
85
88
  font="text-overline"
86
89
  >
87
- {{ $tr('ui.entity-field.no-entity-selected', 'No entity selected') }}
90
+ {{ $tr('entity-field.no-entity-selected', 'No entity selected') }}
88
91
  </FSSpan>
89
92
  </FSRow>
90
93
  </FSColor>
@@ -167,10 +170,10 @@ export default defineComponent({
167
170
  required: false,
168
171
  default: null
169
172
  },
170
- editable: {
173
+ disabled: {
171
174
  type: Boolean,
172
175
  required: false,
173
- default: true
176
+ default: false
174
177
  },
175
178
  entityType: {
176
179
  type: Number as PropType<EntityType>,
@@ -205,31 +208,31 @@ export default defineComponent({
205
208
  const items = [
206
209
  {
207
210
  id: EntityType.Model,
208
- label: $tr("ui.entity-type.models", "Models")
211
+ label: $tr("ui.common.models", "Model(s)")
209
212
  },
210
213
  {
211
214
  id: EntityType.Group,
212
- label: $tr("ui.entity-type.groups", "Groups")
215
+ label: $tr("ui.common.groups", "Groups")
213
216
  },
214
217
  {
215
218
  id: EntityType.Location,
216
- label: $tr("ui.entity-type.locations", "Locations")
219
+ label: $tr("ui.common.locations", "Locations")
217
220
  },
218
221
  {
219
222
  id: EntityType.Device,
220
- label: $tr("ui.entity-type.devices", "Devices")
223
+ label: $tr("ui.common.devices", "Devices")
221
224
  },
222
225
  {
223
226
  id: EntityType.User,
224
- label: $tr("ui.entity-type.users", "Users")
227
+ label: $tr("ui.common.users", "Users")
225
228
  },
226
229
  {
227
230
  id: EntityType.Dashboard,
228
- label: $tr("ui.entity-type.dashboards", "Dashboards")
231
+ label: $tr("ui.common.dashboards", "Dashboards")
229
232
  },
230
233
  {
231
234
  id: EntityType.Folder,
232
- label: $tr("ui.entity-type.folders", "Folders")
235
+ label: $tr("ui.common.folders", "Folders")
233
236
  }
234
237
  ];
235
238
 
@@ -6,7 +6,7 @@
6
6
  :label="$props.label"
7
7
  :description="$props.description"
8
8
  :required="$props.required"
9
- :editable="$props.editable"
9
+ :disabled="$props.disabled"
10
10
  v-bind="$attrs"
11
11
  >
12
12
  <FSRow>
@@ -15,14 +15,14 @@
15
15
  :allowOpacity="$props.allowOpacity"
16
16
  :modelValue="$props.modelValue[colorIndex - 1]"
17
17
  :required="$props.required"
18
- :editable="$props.editable"
18
+ :disabled="$props.disabled"
19
19
  :key="colorIndex"
20
20
  @update:modelValue="$emit('update:modelValue', $props.modelValue.map((color, i) => colorIndex === i + 1 ? $event : color))"
21
21
  />
22
22
  </FSRow>
23
23
  <FSSelectField
24
24
  class="fs-gradient-field-select"
25
- :editable="$props.editable"
25
+ :disabled="$props.disabled"
26
26
  :clearable="false"
27
27
  :items="items"
28
28
  modelValue="custom"
@@ -92,10 +92,10 @@ export default defineComponent({
92
92
  required: false,
93
93
  default: false
94
94
  },
95
- editable: {
95
+ disabled: {
96
96
  type: Boolean,
97
97
  required: false,
98
- default: true
98
+ default: false
99
99
  },
100
100
  allowOpacity: {
101
101
  type: Boolean,
@@ -1,15 +1,18 @@
1
1
  <template>
2
- <FSCol>
2
+ <FSCol
3
+ :maxWidth="$props.maxWidth"
4
+ >
3
5
  <FSTextField
4
6
  :label="$props.label"
5
7
  :description="$props.description"
6
8
  :hideHeader="$props.hideHeader"
7
9
  :required="$props.required"
8
- :editable="$props.editable"
10
+ :disabled="$props.disabled"
9
11
  :rules="$props.rules"
10
12
  :messages="messages"
11
13
  :validateOn="validateOn"
12
14
  :validationValue="$props.modelValue"
15
+ :maxWidth="null"
13
16
  v-model="innerValue"
14
17
  v-bind="$attrs"
15
18
  >
@@ -28,14 +31,13 @@
28
31
  </template>
29
32
  </FSTextField>
30
33
  <FSToggleSet
31
- class="fs-icon-field-set"
32
34
  ref="toggleSetRef"
33
35
  variant="slide"
34
36
  :buttonColor="$props.buttonColor"
35
37
  :activeColor="$props.activeColor"
36
38
  :modelValue="$props.modelValue"
37
39
  :required="$props.required"
38
- :editable="$props.editable"
40
+ :disabled="$props.disabled"
39
41
  :values="icons"
40
42
  @update:modelValue="$emit('update:modelValue', $event)"
41
43
  />
@@ -43,7 +45,7 @@
43
45
  </template>
44
46
 
45
47
  <script lang="ts">
46
- import type { PropType} from "vue";
48
+ import type { PropType, StyleValue } from "vue";
47
49
  import { computed, defineComponent, ref, watch } from "vue";
48
50
 
49
51
  import { Icons, sortByLevenshteinDistance } from "@dative-gpi/foundation-shared-components/utils";
@@ -120,11 +122,16 @@ export default defineComponent({
120
122
  required: false,
121
123
  default: () => []
122
124
  },
123
- editable: {
125
+ disabled: {
124
126
  type: Boolean,
125
127
  required: false,
126
- default: true
127
- }
128
+ default: false
129
+ },
130
+ maxWidth: {
131
+ type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
132
+ required: false,
133
+ default: "600px"
134
+ },
128
135
  },
129
136
  emits: ["update:modelValue"],
130
137
  setup(props) {
@@ -139,7 +146,7 @@ export default defineComponent({
139
146
  const innerValue = ref<string | null>(null);
140
147
 
141
148
  const style = computed((): StyleValue => {
142
- if (!props.editable) {
149
+ if (props.disabled) {
143
150
  return {
144
151
  "--fs-icon-field-color": lights.dark
145
152
  };
@@ -3,10 +3,11 @@
3
3
  class="fs-magic-config-field"
4
4
  >
5
5
  <component
6
+ v-if="$props.type"
6
7
  class="fs-magic-config-field-value"
7
8
  :is="get($props.type)"
8
- :label="$tr('ui.magic-config-field.value', 'Value')"
9
- :editable="$props.editable"
9
+ :label="$tr('ui.common.value', 'Value')"
10
+ :disabled="$props.disabled"
10
11
  :required="true"
11
12
  :rules="rules"
12
13
  :modelValue="valueToInput"
@@ -16,8 +17,8 @@
16
17
  gap="24px"
17
18
  >
18
19
  <FSTranslateField
19
- :label="$tr('ui.magic-config-field.label', 'Label')"
20
- :editable="$props.editable"
20
+ :label="$tr('entity.common.label', 'Label')"
21
+ :disabled="$props.disabled"
21
22
  :modelValue="$props.labelDefault"
22
23
  :translations="$props.translations"
23
24
  @update:modelValue="$emit('update:labelDefault', $event)"
@@ -42,7 +43,7 @@
42
43
  <script lang="ts">
43
44
  import { computed, defineComponent, type PropType } from "vue";
44
45
 
45
- import { DateRules, IconRules, NumberRules, TextRules, TimeRules, TimeStepRules } from "../../models";
46
+ import { DateRules, IconRules, NumberRules, TextRules, TimeRules, TimeStepRules, AutocompleteRules } from "../../models";
46
47
  import { useMagicFieldProvider } from "../../composables";
47
48
  import { MagicFieldType } from "../../models/magicFields";
48
49
 
@@ -80,10 +81,10 @@ export default defineComponent({
80
81
  required: false,
81
82
  default: () => []
82
83
  },
83
- editable: {
84
+ disabled: {
84
85
  type: Boolean,
85
86
  required: false,
86
- default: true
87
+ default: false
87
88
  }
88
89
  },
89
90
  emits: ["click:remove", "click:add", "update:modelValue", "update:labelDefault", "update:translations"],
@@ -104,6 +105,8 @@ export default defineComponent({
104
105
  return [TimeRules.required()];
105
106
  case MagicFieldType.TimeStepField:
106
107
  return [TimeStepRules.required()];
108
+ case MagicFieldType.PlotPerField:
109
+ return [AutocompleteRules.required()];
107
110
  }
108
111
  return [];
109
112
  });
@@ -125,6 +128,8 @@ export default defineComponent({
125
128
  return props.modelValue === "true";
126
129
  case MagicFieldType.TimeStepField:
127
130
  return JSON.parse(props.modelValue);
131
+ case MagicFieldType.PlotPerField:
132
+ return parseInt(props.modelValue);
128
133
  default:
129
134
  return props.modelValue;
130
135
  }
@@ -145,6 +150,9 @@ export default defineComponent({
145
150
  case MagicFieldType.TimeStepField:
146
151
  emit("update:modelValue", JSON.stringify(value));
147
152
  break;
153
+ case MagicFieldType.PlotPerField:
154
+ emit("update:modelValue", value.toString());
155
+ break;
148
156
  default:
149
157
  emit("update:modelValue", value);
150
158
  break;
@@ -131,6 +131,8 @@ export default defineComponent({
131
131
  return props.modelValue === "true";
132
132
  case MagicFieldType.TimeStepField:
133
133
  return JSON.parse(props.modelValue);
134
+ case MagicFieldType.PlotPerField:
135
+ return parseInt(props.modelValue);
134
136
  default:
135
137
  return props.modelValue;
136
138
  }
@@ -146,9 +148,9 @@ export default defineComponent({
146
148
  return value.toString();
147
149
  case MagicFieldType.Switch:
148
150
  if (value) {
149
- return $tr("ui.magic-field.true", "True");
151
+ return $tr("magic-field.true", "True");
150
152
  }
151
- return $tr("ui.magic-field.false", "False");
153
+ return $tr("magic-field.false", "False");
152
154
  case MagicFieldType.DateTimeField:
153
155
  return epochToShortTimeFormat(parseFloat(value));
154
156
  case MagicFieldType.TimeField:
@@ -175,6 +177,9 @@ export default defineComponent({
175
177
  case MagicFieldType.TimeStepField:
176
178
  emit("update:modelValue", JSON.stringify(value));
177
179
  break;
180
+ case MagicFieldType.PlotPerField:
181
+ emit("update:modelValue", value.toString());
182
+ break;
178
183
  default:
179
184
  emit("update:modelValue", value);
180
185
  break;
@@ -0,0 +1,187 @@
1
+ <template>
2
+ <FSCol>
3
+ <FSMap
4
+ :lockZoomOnFlyTo="true"
5
+ v-model:center="center"
6
+ :enableScrollWheelZoom="true"
7
+ :showMyLocation="true"
8
+ :zoom="5"
9
+ v-model:currentLayer="mapLayer"
10
+ @click:latlng="(latlng: any) => onNewLatLng(latlng.lat, latlng.lng, false)"
11
+ v-bind="$attrs"
12
+ >
13
+ <FSMapMarker
14
+ v-if="actualLatitude && actualLongitude"
15
+ :label="$props.label"
16
+ :icon="$props.icon"
17
+ :latlng="{ lat: actualLatitude, lng: actualLongitude }"
18
+ :selected="true"
19
+ />
20
+ </FSMap>
21
+ <FSCol>
22
+ <FSAutoCompleteAddress
23
+ :maxWidth="null"
24
+ :modelValue="$props.modelValue"
25
+ @update:modelValue="$emit('update:modelValue', $event)"
26
+ />
27
+ <FSRow>
28
+ <FSNumberField
29
+ :label="$tr('ui.location.latitude', 'Latitude')"
30
+ :modelValue="actualLatitude"
31
+ :clearable="false"
32
+ :rules="[NumberRules.max(90), NumberRules.min(-90), NumberRules.required()]"
33
+ @update:modelValue="onNewLatLng($event, actualLongitude ?? 0, true)"
34
+ />
35
+ <FSNumberField
36
+ :label="$tr('ui.location.longitude', 'Longitude')"
37
+ :modelValue="actualLongitude"
38
+ :clearable="false"
39
+ :rules="[NumberRules.max(180), NumberRules.min(-180), NumberRules.required()]"
40
+ @update:modelValue="onNewLatLng(actualLatitude ?? 0, $event, true)"
41
+ />
42
+ </FSRow>
43
+ </FSCol>
44
+ </FSCol>
45
+ </template>
46
+
47
+ <script lang="ts">
48
+ import { computed, defineComponent, ref, watch, type PropType } from "vue";
49
+
50
+ import type { Address } from "@dative-gpi/foundation-shared-domain";
51
+ import { useAddress } from "@dative-gpi/foundation-shared-components/composables";
52
+ import { MapLayers, NumberRules } from '@dative-gpi/foundation-shared-components/models';
53
+
54
+ import FSAutoCompleteAddress from '@dative-gpi/foundation-shared-components/components/autocompletes/FSAutoCompleteAddress.vue';
55
+ import FSNumberField from "@dative-gpi/foundation-shared-components/components/fields/FSNumberField.vue"
56
+ import FSMapMarker from '@dative-gpi/foundation-shared-components/components/map/FSMapMarker.vue';
57
+ import FSMap from "@dative-gpi/foundation-shared-components/components/map/FSMap.vue";
58
+ import FSRow from '@dative-gpi/foundation-shared-components/components/FSRow.vue';
59
+ import FSCol from '@dative-gpi/foundation-shared-components/components/FSCol.vue';
60
+
61
+
62
+ export function debounceAsync<T, U extends any[]>(
63
+ callback: (...args: U) => Promise<T>,
64
+ wait: number,
65
+ ): (...args: U) => Promise<T> {
66
+ let timeoutId: number | null = null;
67
+ let rejectPromise: (((reason?: any) => void) | null) = null;
68
+
69
+ return (...args: U) => {
70
+ if (timeoutId) {
71
+ clearTimeout(timeoutId);
72
+ timeoutId = null;
73
+ }
74
+ if (rejectPromise) {
75
+ rejectPromise("debounced");
76
+ rejectPromise = null;
77
+ }
78
+
79
+ return new Promise<T>((resolve) => {
80
+ const timeoutPromise = new Promise<void>((resolve, reject) => {
81
+ timeoutId = setTimeout(resolve, wait);
82
+ rejectPromise = reject;
83
+ });
84
+ timeoutPromise.then(async () => {
85
+ resolve(await callback(...args));
86
+ });
87
+ });
88
+ };
89
+ }
90
+
91
+ export default defineComponent({
92
+ name: "FSMapAddressField",
93
+ components: {
94
+ FSAutoCompleteAddress,
95
+ FSNumberField,
96
+ FSMapMarker,
97
+ FSMap,
98
+ FSRow,
99
+ FSCol
100
+ },
101
+ emits: ["update:modelValue"],
102
+ props: {
103
+ label: {
104
+ type: String,
105
+ required: true,
106
+ },
107
+ icon: {
108
+ type: String,
109
+ required: true,
110
+ },
111
+ modelValue: {
112
+ type: Object as PropType<Address | null>,
113
+ required: false,
114
+ }
115
+ },
116
+ setup(props, { emit }) {
117
+ const { reverseSearch } = useAddress();
118
+
119
+ const loading = ref(false);
120
+ const actualLatitude = ref<number | null>(null);
121
+ const actualLongitude = ref<number | null>(null);
122
+ const mapLayer = ref(MapLayers.Map);
123
+
124
+ const center = computed(() => {
125
+ return props.modelValue ? [props.modelValue.latitude, props.modelValue.longitude] : null;
126
+ });
127
+
128
+ const reverseSearchDebounced = debounceAsync(reverseSearch, 500);
129
+
130
+ const onNewLatLng = async (lat: number|string, lng: number|string, debounced: boolean) => {
131
+ if(typeof lat === 'string') {
132
+ lat = parseFloat(lat);
133
+ if(isNaN(lat)) {
134
+ return;
135
+ }
136
+ }
137
+
138
+ if(typeof lng === 'string') {
139
+ lng = parseFloat(lng);
140
+ if(isNaN(lng)) {
141
+ return;
142
+ }
143
+ }
144
+
145
+ actualLatitude.value = lat;
146
+ actualLongitude.value = lng;
147
+
148
+ let fullAddress;
149
+ loading.value = true;
150
+ if(debounced) {
151
+ try {
152
+ fullAddress = await reverseSearchDebounced(lat, lng);
153
+ } catch {
154
+ return;
155
+ }
156
+ } else {
157
+ fullAddress = await reverseSearch(lat, lng);
158
+ }
159
+
160
+ emit("update:modelValue", {
161
+ ...fullAddress,
162
+ latitude: actualLatitude.value,
163
+ longitude: actualLongitude.value,
164
+ });
165
+ loading.value = false;
166
+ }
167
+
168
+ watch(() => props.modelValue, (newValue) => {
169
+ if(newValue) {
170
+ actualLatitude.value = newValue.latitude;
171
+ actualLongitude.value = newValue.longitude;
172
+ }
173
+ }, { immediate: true });
174
+
175
+ return {
176
+ center,
177
+ mapLayer,
178
+ NumberRules,
179
+ actualLatitude,
180
+ actualLongitude,
181
+ onNewLatLng
182
+ };
183
+ }
184
+ });
185
+
186
+
187
+ </script>
@@ -2,7 +2,7 @@
2
2
  <FSTextField
3
3
  class="fs-number-field"
4
4
  minWidth="80px"
5
- :editable="$props.editable"
5
+ :disabled="$props.disabled"
6
6
  :modelValue="$props.modelValue?.toString()"
7
7
  @update:modelValue="onUpdate"
8
8
  v-bind="$attrs"
@@ -35,18 +35,22 @@ export default defineComponent({
35
35
  required: false,
36
36
  default: null
37
37
  },
38
- editable: {
38
+ disabled: {
39
39
  type: Boolean,
40
40
  required: false,
41
- default: true
41
+ default: false
42
42
  }
43
43
  },
44
44
  emits: ["update:modelValue"],
45
45
  setup(_, { emit }) {
46
- const onUpdate = (value: string) => {
46
+ const onUpdate = (value: string | null | undefined) => {
47
47
  if (value === "-") {
48
48
  return;
49
49
  }
50
+ if(value === null || value === undefined) {
51
+ emit("update:modelValue", null);
52
+ return;
53
+ }
50
54
  const match = /[-]?([0-9 ]*[,.]?)?[0-9]*/.exec(value);
51
55
  if (match != null && !isNaN(parseFloat(match[0].replace(",", ".").replace(" ", "")))) {
52
56
  emit("update:modelValue", parseFloat(match[0].replace(",", ".").replace(" ", "")));
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <FSTextField
3
3
  :type="type"
4
- :editable="$props.editable"
4
+ :disabled="$props.disabled"
5
5
  :modelValue="$props.modelValue"
6
6
  @update:modelValue="$emit('update:modelValue', $event)"
7
7
  v-bind="$attrs"
@@ -20,7 +20,7 @@
20
20
  >
21
21
  <FSButton
22
22
  variant="icon"
23
- :editable="$props.editable"
23
+ :disabled="$props.disabled"
24
24
  :color="ColorEnum.Dark"
25
25
  :icon="icon"
26
26
  @click="onToggle"
@@ -33,7 +33,7 @@
33
33
  </template>
34
34
 
35
35
  <script lang="ts">
36
- import { computed, defineComponent, type PropType, ref } from "vue";
36
+ import { computed, defineComponent, ref, type PropType, type StyleValue } from "vue";
37
37
 
38
38
  import { useColors } from "@dative-gpi/foundation-shared-components/composables";
39
39
  import { ColorEnum } from "@dative-gpi/foundation-shared-components/models";
@@ -53,10 +53,10 @@ export default defineComponent({
53
53
  required: false,
54
54
  default: null
55
55
  },
56
- editable: {
56
+ disabled: {
57
57
  type: Boolean,
58
58
  required: false,
59
- default: true
59
+ default: false
60
60
  }
61
61
  },
62
62
  emits: ["update:modelValue"],
@@ -69,7 +69,7 @@ export default defineComponent({
69
69
  const stars = ref(true);
70
70
 
71
71
  const style = computed((): StyleValue => {
72
- if (!props.editable) {
72
+ if (props.disabled) {
73
73
  return {
74
74
  "--fs-password-field-cursor" : "default",
75
75
  "--fs-password-field-color": lights.dark,
@@ -88,7 +88,7 @@ export default defineComponent({
88
88
  const icon = computed((): string => stars.value ? "mdi-eye-off-outline" : "mdi-eye-outline");
89
89
 
90
90
  const onToggle = (): void => {
91
- if (!props.editable) {
91
+ if (props.disabled) {
92
92
  return;
93
93
  }
94
94
  stars.value = !stars.value;