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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (297) hide show
  1. package/assets/images/map/snow.png +0 -0
  2. package/components/FSAccordionPanel.vue +40 -21
  3. package/components/FSBreadcrumbs.vue +21 -12
  4. package/components/FSButton.vue +16 -16
  5. package/components/FSCalendar.vue +50 -12
  6. package/components/FSCalendarTwin.vue +95 -43
  7. package/components/FSCard.vue +61 -9
  8. package/components/FSCardPlaceholder.vue +8 -5
  9. package/components/FSCheckbox.vue +5 -4
  10. package/components/FSChip.vue +73 -45
  11. package/components/FSChipGroup.vue +69 -0
  12. package/components/FSClickable.vue +11 -9
  13. package/components/FSClock.vue +30 -12
  14. package/components/FSCol.vue +11 -5
  15. package/components/FSColorIcon.vue +23 -5
  16. package/components/FSDialog.vue +2 -1
  17. package/components/FSDialogContent.vue +12 -11
  18. package/components/FSDialogForm.vue +22 -2
  19. package/components/FSDialogFormBody.vue +50 -31
  20. package/components/FSDialogMenu.vue +17 -8
  21. package/components/FSDialogMultiFormBody.vue +79 -56
  22. package/components/FSDialogRemove.vue +7 -8
  23. package/components/FSDialogSubmit.vue +20 -11
  24. package/components/FSEditImage.vue +1 -1
  25. package/components/FSEditImageUI.vue +20 -10
  26. package/components/FSFadeOut.vue +53 -21
  27. package/components/FSForm.vue +10 -8
  28. package/components/FSGrid.vue +1 -1
  29. package/components/FSIcon.vue +4 -3
  30. package/components/FSIconCard.vue +68 -12
  31. package/components/FSImage.vue +9 -2
  32. package/components/FSImageUI.vue +8 -15
  33. package/components/FSInformationsMenu.vue +142 -0
  34. package/components/FSInstantPicker.vue +269 -0
  35. package/components/FSLink.vue +25 -9
  36. package/components/FSLoader.vue +28 -10
  37. package/components/FSMenu.vue +47 -0
  38. package/components/FSOptionGroup.vue +57 -9
  39. package/components/FSOptionItem.vue +4 -4
  40. package/components/FSPagination.vue +1 -1
  41. package/components/FSPlayButtons.vue +72 -0
  42. package/components/FSProgressBar.vue +94 -0
  43. package/components/FSRadio.vue +5 -4
  44. package/components/FSRadioGroup.vue +3 -3
  45. package/components/FSRouterLink.vue +42 -0
  46. package/components/FSSlideGroup.vue +19 -5
  47. package/components/FSSlider.vue +6 -5
  48. package/components/FSSpan.vue +12 -7
  49. package/components/FSSwitch.vue +47 -21
  50. package/components/FSTab.vue +15 -13
  51. package/components/FSTabs.vue +32 -7
  52. package/components/FSTag.vue +16 -5
  53. package/components/FSTagGroup.vue +4 -4
  54. package/components/FSText.vue +11 -7
  55. package/components/FSToggleSet.vue +7 -7
  56. package/components/FSWindow.vue +122 -5
  57. package/components/FSWrapGroup.vue +13 -1
  58. package/components/agenda/FSAgenda.vue +50 -37
  59. package/components/agenda/FSAgendaDialogCalendar.vue +2 -2
  60. package/components/agenda/FSAgendaHeader.vue +35 -10
  61. package/components/agenda/FSAgendaHorizontalEvent.vue +18 -6
  62. package/components/agenda/FSAgendaHoursRow.vue +48 -8
  63. package/components/agenda/FSAgendaVerticalEvent.vue +1 -1
  64. package/components/agenda/FSDayAgenda.vue +1 -2
  65. package/components/agenda/FSMonthAgenda.vue +3 -9
  66. package/components/agenda/FSSelectAgendaMode.vue +2 -2
  67. package/components/agenda/FSWeekAgenda.vue +7 -13
  68. package/components/autocompletes/FSAutoCompleteAddress.vue +25 -20
  69. package/components/autocompletes/FSAutocompleteLanguage.vue +7 -1
  70. package/components/autocompletes/FSAutocompleteTimeZone.vue +7 -1
  71. package/components/buttons/FSButtonAdd.vue +1 -1
  72. package/components/buttons/FSButtonAddLabel.vue +1 -1
  73. package/components/buttons/FSButtonCancel.vue +1 -1
  74. package/components/buttons/FSButtonCancelLabel.vue +1 -1
  75. package/components/buttons/FSButtonCheckbox.vue +4 -4
  76. package/components/buttons/FSButtonCopy.vue +1 -1
  77. package/components/buttons/FSButtonCopyLabel.vue +1 -1
  78. package/components/buttons/FSButtonDuplicate.vue +1 -1
  79. package/components/buttons/FSButtonDuplicateLabel.vue +1 -1
  80. package/components/buttons/FSButtonEdit.vue +1 -1
  81. package/components/buttons/FSButtonEditLabel.vue +1 -1
  82. package/components/buttons/FSButtonFile.vue +1 -1
  83. package/components/buttons/FSButtonFileLabel.vue +1 -1
  84. package/components/buttons/FSButtonNext.vue +1 -1
  85. package/components/buttons/FSButtonNextLabel.vue +1 -1
  86. package/components/buttons/FSButtonPrevious.vue +1 -1
  87. package/components/buttons/FSButtonPreviousLabel.vue +1 -1
  88. package/components/buttons/FSButtonRedo.vue +1 -1
  89. package/components/buttons/FSButtonRedoLabel.vue +1 -1
  90. package/components/buttons/FSButtonRemove.vue +1 -1
  91. package/components/buttons/FSButtonRemoveLabel.vue +1 -1
  92. package/components/buttons/FSButtonSave.vue +1 -1
  93. package/components/buttons/FSButtonSaveLabel.vue +1 -1
  94. package/components/buttons/FSButtonSearch.vue +1 -1
  95. package/components/buttons/FSButtonSearchLabel.vue +1 -1
  96. package/components/buttons/FSButtonUndo.vue +1 -1
  97. package/components/buttons/FSButtonUndoLabel.vue +1 -1
  98. package/components/buttons/FSButtonUpdate.vue +1 -1
  99. package/components/buttons/FSButtonUpdateLabel.vue +1 -1
  100. package/components/buttons/FSButtonValidate.vue +1 -1
  101. package/components/buttons/FSButtonValidateLabel.vue +1 -1
  102. package/components/calendar/FSSimpleCalendar.vue +145 -0
  103. package/components/calendar/FSSimpleCalendarHeader.vue +60 -0
  104. package/components/calendar/FSSimpleMonthSelector.vue +138 -0
  105. package/components/deviceOrganisations/FSConnectivity.vue +16 -4
  106. package/components/deviceOrganisations/FSConnectivityCard.vue +17 -45
  107. package/components/deviceOrganisations/FSStatus.vue +16 -4
  108. package/components/deviceOrganisations/FSStatusCard.vue +33 -59
  109. package/components/deviceOrganisations/FSStatusRichCard.vue +171 -0
  110. package/components/deviceOrganisations/FSStatusesCarousel.vue +1 -0
  111. package/components/deviceOrganisations/FSStatusesRow.vue +8 -2
  112. package/components/deviceOrganisations/FSWorstAlert.vue +37 -42
  113. package/components/deviceOrganisations/FSWorstAlertCard.vue +35 -84
  114. package/components/fields/FSAutocompleteField.vue +85 -82
  115. package/components/fields/FSAutocompleteTag.vue +1 -1
  116. package/components/fields/FSBaseField.vue +54 -30
  117. package/components/fields/FSClosableSearchField.vue +83 -0
  118. package/components/fields/FSColorField.vue +48 -44
  119. package/components/fields/FSCommentField.vue +28 -16
  120. package/components/fields/FSDateField.vue +13 -10
  121. package/components/fields/FSDateRangeField.vue +6 -5
  122. package/components/fields/FSDateTimeField.vue +14 -11
  123. package/components/fields/FSDateTimeRangeDialog.vue +160 -0
  124. package/components/fields/FSDateTimeRangeField.vue +23 -115
  125. package/components/fields/FSEntityFieldUI.vue +36 -19
  126. package/components/fields/FSGradientField.vue +5 -5
  127. package/components/fields/FSIconField.vue +16 -9
  128. package/components/fields/FSMagicConfigField.vue +15 -7
  129. package/components/fields/FSMagicField.vue +7 -2
  130. package/components/fields/FSNumberField.vue +9 -4
  131. package/components/fields/FSPasswordField.vue +7 -7
  132. package/components/fields/FSRichTextField.vue +78 -58
  133. package/components/fields/FSSearchField.vue +9 -115
  134. package/components/fields/FSSelectField.vue +69 -71
  135. package/components/fields/FSTagField.vue +10 -10
  136. package/components/fields/FSTermField.vue +72 -47
  137. package/components/fields/FSTextArea.vue +17 -11
  138. package/components/fields/FSTextField.vue +15 -10
  139. package/components/fields/FSTimeField.vue +14 -10
  140. package/components/fields/FSTimeRangeField.vue +310 -0
  141. package/components/fields/FSTimeStepField.vue +5 -5
  142. package/components/fields/FSTranslateField.vue +10 -10
  143. package/components/fields/FSTranslateRichTextField.vue +41 -20
  144. package/components/fields/FSTranslateTextArea.vue +10 -10
  145. package/components/fields/FSTreeViewField.vue +15 -13
  146. package/components/fields/periodicField/FSPeriodicDailyField.vue +7 -7
  147. package/components/fields/periodicField/FSPeriodicField.vue +15 -15
  148. package/components/fields/periodicField/FSPeriodicMonthlyField.vue +16 -16
  149. package/components/fields/periodicField/FSPeriodicWeeklyField.vue +28 -18
  150. package/components/fields/periodicField/FSPeriodicYearlyField.vue +12 -12
  151. package/components/lists/FSDataIteratorItem.vue +23 -67
  152. package/components/lists/FSDataTableUI.vue +220 -137
  153. package/components/lists/FSDraggable.vue +2 -2
  154. package/components/lists/FSFilterButton.vue +14 -16
  155. package/components/lists/FSHeaderButton.vue +11 -9
  156. package/components/lists/FSHiddenButton.vue +9 -9
  157. package/components/lists/FSLoadDataTable.vue +10 -7
  158. package/components/lists/FSSimpleList.vue +96 -102
  159. package/components/lists/FSSimpleListItem.vue +131 -0
  160. package/components/map/FSMap.vue +146 -158
  161. package/components/map/FSMapFeatureGroup.vue +7 -1
  162. package/components/map/FSMapLayerButton.vue +4 -3
  163. package/components/map/FSMapMarker.vue +70 -48
  164. package/components/map/FSMapMarkerClusterGroup.vue +32 -7
  165. package/components/map/FSMapOverlay.vue +44 -24
  166. package/components/map/FSMapPolygon.vue +16 -4
  167. package/components/map/FSMapTileLayer.vue +26 -9
  168. package/components/map/layers.ts +0 -0
  169. package/components/selects/FSSelectAutoRefresh.vue +8 -8
  170. package/components/selects/FSSelectDashboardVariableType.vue +4 -3
  171. package/components/selects/FSSelectDateSetting.vue +2 -2
  172. package/components/selects/FSSelectDays.vue +8 -8
  173. package/components/selects/FSSelectListMode.vue +2 -2
  174. package/components/selects/FSSelectMapLayer.vue +68 -0
  175. package/components/selects/FSSelectMonths.vue +13 -13
  176. package/components/selects/chartSelectors/FSAggregationSelector.vue +52 -0
  177. package/components/selects/chartSelectors/FSAxisTypeSelector.vue +49 -0
  178. package/components/selects/chartSelectors/FSDisplayAsSelector.vue +53 -0
  179. package/components/selects/chartSelectors/FSFilterTypeSelector.vue +54 -0
  180. package/components/selects/chartSelectors/FSHeatmapRuleSelector.vue +54 -0
  181. package/components/selects/chartSelectors/FSOperationOnSelector.vue +53 -0
  182. package/components/selects/chartSelectors/FSPlanningTypeSelector.vue +53 -0
  183. package/components/selects/chartSelectors/FSPlotPerSelector.vue +52 -0
  184. package/components/selects/chartSelectors/FSSelectEntityType.vue +59 -0
  185. package/components/selects/chartSelectors/FSSerieTypeSelector.vue +53 -0
  186. package/components/tiles/FSAlertTileUI.vue +90 -0
  187. package/components/tiles/FSChartTileUI.vue +61 -52
  188. package/components/tiles/FSCommentTileUI.vue +38 -13
  189. package/components/tiles/FSDashboardOrganisationTypeTileUI.vue +14 -2
  190. package/components/tiles/FSDashboardShallowTileUI.vue +14 -2
  191. package/components/tiles/FSDeviceOrganisationTileUI.vue +6 -6
  192. package/components/tiles/FSGroupTileUI.vue +58 -110
  193. package/components/tiles/FSGroupingTileUI.vue +115 -0
  194. package/components/tiles/FSLoadTile.vue +16 -10
  195. package/components/tiles/FSLocationTileUI.vue +63 -55
  196. package/components/tiles/FSModelTileUI.vue +5 -46
  197. package/components/tiles/FSServiceAccountOrganisationTileUI.vue +0 -6
  198. package/components/tiles/FSSimpleTileUI.vue +34 -29
  199. package/components/tiles/FSTile.vue +46 -39
  200. package/components/tiles/FSUserOrganisationTileUI.vue +1 -7
  201. package/components/toggleSets/FSToggleSetPosition.vue +1 -1
  202. package/components/views/FSBaseView.vue +64 -0
  203. package/components/views/FSEntityView.vue +12 -140
  204. package/components/views/FSSimpleView.vue +29 -0
  205. package/components/views/desktop/FSBaseDefaultDesktopView.vue +135 -0
  206. package/components/views/desktop/FSBaseDesktopView.vue +53 -0
  207. package/components/views/desktop/FSBaseEntityDesktopView.vue +211 -0
  208. package/components/views/mobile/FSBaseDefaultMobileView.vue +133 -0
  209. package/components/views/mobile/FSBaseEntityMobileView.vue +206 -0
  210. package/components/views/mobile/FSBaseMobileView.vue +53 -0
  211. package/composables/index.ts +1 -0
  212. package/composables/useAddress.ts +40 -8
  213. package/composables/useBreakpoints.ts +40 -4
  214. package/composables/useColors.ts +16 -7
  215. package/composables/useMagicFieldProvider.ts +1 -0
  216. package/composables/useMapLayers.ts +62 -0
  217. package/composables/useSlots.ts +2 -1
  218. package/models/colors.ts +2 -1
  219. package/models/deviceAlerts.ts +1 -0
  220. package/models/magicFields.ts +1 -0
  221. package/models/map.ts +12 -10
  222. package/models/rules.ts +6 -3
  223. package/models/tables.ts +5 -2
  224. package/models/variableNode.ts +8 -5
  225. package/package.json +5 -5
  226. package/styles/components/fs_agenda.scss +4 -0
  227. package/styles/components/fs_agenda_event.scss +1 -1
  228. package/styles/components/fs_agenda_hours_row.scss +0 -8
  229. package/styles/components/fs_autocomplete_field.scss +0 -13
  230. package/styles/components/fs_breadcrumbs.scss +18 -36
  231. package/styles/components/fs_button.scss +7 -5
  232. package/styles/components/fs_calendar.scss +1 -0
  233. package/styles/components/fs_card.scss +9 -0
  234. package/styles/components/fs_chip.scss +13 -7
  235. package/styles/components/fs_clickable.scss +16 -23
  236. package/styles/components/fs_clock.scss +0 -10
  237. package/styles/components/fs_col.scss +1 -1
  238. package/styles/components/fs_color_field.scss +1 -4
  239. package/styles/components/fs_data_table.scss +6 -9
  240. package/styles/components/fs_dialog.scss +4 -10
  241. package/styles/components/fs_dialog_menu.scss +4 -2
  242. package/styles/components/fs_draggable.scss +0 -5
  243. package/styles/components/fs_edit_image.scss +8 -0
  244. package/styles/components/fs_fade_out.scss +10 -2
  245. package/styles/components/fs_filter_button.scss +1 -6
  246. package/styles/components/fs_hidden_button.scss +2 -7
  247. package/styles/components/fs_image_card.scss +6 -4
  248. package/styles/components/fs_magic_config_field.scss +1 -2
  249. package/styles/components/fs_map.scss +57 -17
  250. package/styles/components/fs_meta_field.scss +3 -5
  251. package/styles/components/fs_option_group.scss +15 -5
  252. package/styles/components/fs_password_field.scss +4 -2
  253. package/styles/components/fs_progress_bar.scss +14 -0
  254. package/styles/components/fs_radio.scss +0 -11
  255. package/styles/components/fs_rich_text_field.scss +1 -10
  256. package/styles/components/fs_select_field.scss +4 -13
  257. package/styles/components/fs_slide_group.scss +7 -0
  258. package/styles/components/fs_span.scss +13 -5
  259. package/styles/components/fs_status_rich_card.scss +6 -0
  260. package/styles/components/fs_switch.scss +1 -0
  261. package/styles/components/fs_tabs.scss +19 -33
  262. package/styles/components/fs_tag.scss +8 -22
  263. package/styles/components/fs_text_area.scss +2 -21
  264. package/styles/components/fs_tile.scss +0 -19
  265. package/styles/components/fs_window.scss +3 -1
  266. package/styles/components/fs_wrap_group.scss +7 -0
  267. package/styles/components/index.scss +2 -6
  268. package/styles/globals/index.scss +1 -5
  269. package/styles/globals/overrides.scss +28 -61
  270. package/styles/globals/scrollbars.scss +8 -0
  271. package/styles/globals/text_fonts.scss +18 -66
  272. package/styles/globals/touchscreen.scss +2 -2
  273. package/tools/alertsTools.ts +87 -12
  274. package/tools/chartsTools.ts +143 -16
  275. package/tools/index.ts +3 -1
  276. package/tools/reportsTools.ts +38 -0
  277. package/tools/timeRangeTools.ts +125 -0
  278. package/utils/badge.ts +9 -5
  279. package/utils/filter.ts +7 -4
  280. package/utils/index.ts +1 -0
  281. package/utils/leafletMarkers.ts +4 -4
  282. package/utils/operations.ts +108 -0
  283. package/utils/sort.ts +2 -2
  284. package/utils/time.ts +16 -16
  285. package/components/fields/FSTimeSlotField.vue +0 -250
  286. package/components/views/FSEntityHeader.vue +0 -350
  287. package/components/views/FSListHeader.vue +0 -83
  288. package/components/views/FSListView.vue +0 -83
  289. package/components/views/FSSkeletonView.vue +0 -100
  290. package/styles/components/fs_data_iterator_item.scss +0 -33
  291. package/styles/components/fs_icon_field.scss +0 -12
  292. package/styles/components/fs_search_field.scss +0 -3
  293. package/styles/components/fs_tag_field.scss +0 -8
  294. package/styles/components/fs_time_field.scss +0 -12
  295. package/styles/components/fs_timeslot_field.scss +0 -12
  296. package/styles/globals/breakpoints.scss +0 -20
  297. package/styles/globals/fixes.scss +0 -5
@@ -1,99 +1,94 @@
1
1
  <template>
2
- <v-menu
2
+ <FSMenu
3
3
  :closeOnContentClick="false"
4
4
  v-model="menu"
5
+ location="bottom center"
5
6
  >
6
7
  <template
7
8
  #activator="{ props }"
8
9
  >
9
10
  <FSBadge
10
11
  :content="badgeLabel"
11
- :color="criticityColor"
12
+ :color="AlertTools.criticityColor($props.deviceWorstAlert?.criticity)"
12
13
  >
13
14
  <FSColorIcon
14
15
  class="fs-stopclick"
15
- size="m"
16
- :color="criticityColor"
16
+ :padding="$props.padding"
17
+ :color="AlertTools.criticityColor($props.deviceWorstAlert?.criticity)"
18
+ :size="$props.size"
17
19
  @click.prevent.stop
18
20
  v-bind="props"
19
21
  >
20
- {{ statusIcon }}
22
+ {{ AlertTools.statusIcon($props.deviceWorstAlert?.status) }}
21
23
  </FSColorIcon>
22
24
  </FSBadge>
23
25
  </template>
24
26
  <FSWorstAlertCard
25
- :deviceAlert="deviceAlert"
27
+ :deviceAlert="deviceWorstAlert"
28
+ :alertTo="$props.alertTo"
26
29
  @close="menu = false"
27
30
  />
28
- </v-menu>
31
+ </FSMenu>
29
32
  </template>
30
33
 
31
34
  <script lang="ts">
32
35
  import { computed, defineComponent, type PropType, ref } from "vue";
33
36
 
34
- import { AlertStatus, Criticity } from "@dative-gpi/foundation-shared-domain/enums";
35
- import type { FSDeviceAlert } from "@dative-gpi/foundation-shared-components/models";
36
- import { ColorEnum } from "@dative-gpi/foundation-shared-components/models";
37
+ import { capNumberToString } from '@dative-gpi/foundation-shared-components/utils';
38
+ import { AlertTools } from "@dative-gpi/foundation-shared-components/tools";
39
+
40
+ import { type FSDeviceAlert } from "@dative-gpi/foundation-shared-components/models";
37
41
 
38
42
  import FSWorstAlertCard from "./FSWorstAlertCard.vue";
39
43
  import FSColorIcon from "../FSColorIcon.vue";
40
44
  import FSBadge from "../FSBadge.vue";
45
+ import FSMenu from '../FSMenu.vue';
41
46
 
42
47
  export default defineComponent({
43
48
  name: "FSWorstAlert",
44
49
  components: {
45
50
  FSWorstAlertCard,
46
51
  FSColorIcon,
47
- FSBadge
52
+ FSBadge,
53
+ FSMenu
48
54
  },
49
55
  props: {
50
- deviceAlert: {
56
+ deviceWorstAlert: {
51
57
  type: Object as PropType<FSDeviceAlert>,
52
58
  required: true
53
59
  },
54
60
  deviceAlerts: {
55
- type: Number,
61
+ type: Array as PropType<FSDeviceAlert[]>,
62
+ required: false,
63
+ default: () => []
64
+ },
65
+ alertTo: {
66
+ type: Function,
56
67
  required: false,
57
- default: 0
68
+ default: null
69
+ },
70
+ size: {
71
+ type: [Array, String, Number] as PropType<"s" | "m" | "l" | string[] | number[] | string | number | null>,
72
+ default: "m"
73
+ },
74
+ padding: {
75
+ type: [String, Number] as PropType<string | number>,
76
+ default: "8px"
58
77
  }
59
78
  },
60
79
  setup(props) {
61
80
  const menu = ref(false);
62
81
 
63
- const criticityColor = computed(() => {
64
- switch (props.deviceAlert?.criticity) {
65
- case Criticity.Error: return ColorEnum.Error;
66
- case Criticity.Warning: return ColorEnum.Warning;
67
- default: return ColorEnum.Primary;
68
- }
69
- });
70
-
71
- const statusIcon = computed(() => {
72
- switch (props.deviceAlert?.status) {
73
- case AlertStatus.Pending: return "mdi-timer-outline";
74
- case AlertStatus.Untriggered: return "mdi-timer-off-outline";
75
- case AlertStatus.Unresolved: return "mdi-alert-circle-outline";
76
- case AlertStatus.Resolved: return "mdi-check-circle-outline";
77
- case AlertStatus.Expired: return "mdi-clock-outline";
78
- case AlertStatus.Triggered: return "mdi-alert-circle-outline";
79
- case AlertStatus.Abandoned: return "mdi-cancel"
80
- default: return "";
81
- }
82
- });
83
-
84
82
  const badgeLabel = computed((): string | null => {
85
- if (props.deviceAlerts < 1) {
83
+ if (!props.deviceAlerts || props.deviceAlerts.length < 1) {
86
84
  return null;
87
85
  }
88
- if (props.deviceAlerts > 9) {
89
- return "9+";
90
- }
91
- return (props.deviceAlerts).toString();
86
+
87
+ return capNumberToString(props.deviceAlerts.length, 9);
92
88
  });
93
89
 
94
90
  return {
95
- criticityColor,
96
- statusIcon,
91
+ AlertTools,
97
92
  badgeLabel,
98
93
  menu
99
94
  };
@@ -1,55 +1,44 @@
1
1
  <template>
2
2
  <FSCard
3
- padding="2px 2px 8px 2px"
3
+ padding="12px 24px"
4
4
  :elevation="true"
5
- :border="false"
6
5
  >
7
6
  <FSCol
8
7
  align="center-center"
8
+ gap="12px"
9
9
  >
10
+ <FSChip
11
+ :label="$tr('ui.common.alert', 'Alert')"
12
+ :prependIcon="AlertTools.statusIcon($props.deviceAlert?.status)"
13
+ :color="AlertTools.criticityColor($props.deviceAlert?.criticity)"
14
+ />
10
15
  <FSCol
11
16
  align="center-center"
12
17
  gap="0px"
13
18
  >
14
- <FSRow
15
- align="center-right"
19
+ <FSText>
20
+ {{ $tr('entity.alert.current-status', 'Status') }} : {{ AlertTools.statusLabel($props.deviceAlert?.status) }}
21
+ </FSText>
22
+ <FSText
23
+ font="text-button"
24
+ :color="AlertTools.criticityColor($props.deviceAlert?.criticity)"
16
25
  >
17
- <FSButton
18
- icon="mdi-close"
19
- variant="icon"
20
- @click="$emit('close')"
21
- />
22
- </FSRow>
23
- <FSCol
24
- align="center-center"
25
- padding="0px 24px"
26
- gap="12px"
27
- >
28
- <FSChip
29
- :label="$props.deviceAlert.label"
30
- :prependIcon="statusIcon"
31
- :color="criticityColor"
32
- />
33
- <FSRow
34
- width="hug"
35
- >
36
- <FSText>
37
- {{ statusLabel }}
38
- </FSText>
39
- </FSRow>
40
- </FSCol>
26
+ {{ $props.deviceAlert.label }}
27
+ </FSText>
41
28
  </FSCol>
42
- <FSRow
29
+ <FSText
43
30
  v-if="deviceTimestamp"
44
- padding="0px 24px"
45
- width="hug"
31
+ font="text-overline"
32
+ variant="dark"
46
33
  >
47
- <FSSpan
48
- font="text-overline"
49
- >
50
- {{ deviceTimestamp }}
51
- </FSSpan>
52
- </FSRow>
34
+ {{ deviceTimestamp }}
35
+ </FSText>
36
+ <FSButton
37
+ v-if="$props.alertTo"
38
+ icon="mdi-information-outline"
39
+ :label="$tr('ui.alert.details', 'Alert details')"
40
+ :to="$props.alertTo($props.deviceAlert.id)"
41
+ />
53
42
  </FSCol>
54
43
  </FSCard>
55
44
  </template>
@@ -57,19 +46,15 @@
57
46
  <script lang="ts">
58
47
  import { computed, defineComponent, type PropType } from "vue";
59
48
 
60
- import { useTranslations as useTranslationsProvider } from "@dative-gpi/bones-ui/composables";
61
- import type { FSDeviceAlert} from "@dative-gpi/foundation-shared-components/models";
62
- import { ColorEnum } from "@dative-gpi/foundation-shared-components/models";
63
- import { AlertStatus, Criticity } from "@dative-gpi/foundation-shared-domain/enums";
49
+ import { type FSDeviceAlert } from "@dative-gpi/foundation-shared-components/models";
64
50
  import { useDateFormat } from "@dative-gpi/foundation-shared-services/composables";
51
+ import { AlertTools } from "@dative-gpi/foundation-shared-components/tools";
65
52
 
66
53
  import FSButton from "../FSButton.vue";
67
54
  import FSCard from "../FSCard.vue";
68
55
  import FSChip from "../FSChip.vue";
69
56
  import FSText from "../FSText.vue";
70
- import FSSpan from "../FSSpan.vue";
71
57
  import FSCol from "../FSCol.vue";
72
- import FSRow from "../FSRow.vue";
73
58
 
74
59
  export default defineComponent({
75
60
  name: "FSWorstAlertCard",
@@ -78,67 +63,33 @@ export default defineComponent({
78
63
  FSCard,
79
64
  FSChip,
80
65
  FSText,
81
- FSSpan,
82
66
  FSCol,
83
- FSRow
84
67
  },
85
68
  props: {
86
69
  deviceAlert: {
87
70
  type: Object as PropType<FSDeviceAlert>,
88
71
  required: true
72
+ },
73
+ alertTo: {
74
+ type: Function,
75
+ required: false,
76
+ default: null
89
77
  }
90
78
  },
91
79
  emits: ["close"],
92
80
  setup(props) {
93
81
  const { epochToLongTimeFormat } = useDateFormat();
94
- const { $tr } = useTranslationsProvider();
95
-
96
- const criticityColor = computed(() => {
97
- switch (props.deviceAlert?.criticity) {
98
- case Criticity.Error: return ColorEnum.Error;
99
- case Criticity.Warning: return ColorEnum.Warning;
100
- default: return ColorEnum.Primary;
101
- }
102
- });
103
-
104
- const statusIcon = computed(() => {
105
- switch (props.deviceAlert?.status) {
106
- case AlertStatus.Pending: return "mdi-timer-outline";
107
- case AlertStatus.Untriggered: return "mdi-timer-off-outline";
108
- case AlertStatus.Unresolved: return "mdi-alert-circle-outline";
109
- case AlertStatus.Resolved: return "mdi-check-circle-outline";
110
- case AlertStatus.Expired: return "mdi-clock-outline";
111
- case AlertStatus.Triggered: return "mdi-alert-circle-outline";
112
- case AlertStatus.Abandoned: return "mdi-cancel"
113
- default: return "";
114
- }
115
- });
116
-
117
- const statusLabel = computed(() => {
118
- switch (props.deviceAlert?.status) {
119
- case AlertStatus.Pending: return $tr("ui.alert-status.pending", "Pending");
120
- case AlertStatus.Untriggered: return $tr("ui.alert-status.untriggered", "Untriggered");
121
- case AlertStatus.Unresolved: return $tr("ui.alert-status.unresolved", "Unresolved");
122
- case AlertStatus.Resolved: return $tr("ui.alert-status.resolved", "Resolved");
123
- case AlertStatus.Expired: return $tr("ui.alert-status.expired", "Expired");
124
- case AlertStatus.Triggered: return $tr("ui.alert-status.triggered", "Triggered");
125
- case AlertStatus.Abandoned: return $tr("ui.alert-status.abandoned", "Abandoned");
126
- default: return "";
127
- }
128
- });
129
82
 
130
83
  const deviceTimestamp = computed((): string => {
131
84
  if (props.deviceAlert.sourceTimestamp) {
132
- return epochToLongTimeFormat(props.deviceAlert.sourceTimestamp);
85
+ return epochToLongTimeFormat(props.deviceAlert.actualTimestamp);
133
86
  }
134
87
  return "";
135
88
  });
136
89
 
137
90
  return {
138
91
  deviceTimestamp,
139
- criticityColor,
140
- statusLabel,
141
- statusIcon
92
+ AlertTools
142
93
  };
143
94
  }
144
95
  });
@@ -1,6 +1,7 @@
1
1
  <template>
2
2
  <FSCol
3
3
  v-if="$props.loading"
4
+ :maxWidth="$props.maxWidth"
4
5
  >
5
6
  <FSLoader
6
7
  v-if="!$props.hideHeader"
@@ -14,13 +15,14 @@
14
15
  </FSCol>
15
16
  <FSCol
16
17
  v-else-if="isExtraSmall"
18
+ :maxWidth="$props.maxWidth"
17
19
  >
18
20
  <FSTextField
19
21
  :validationValue="$props.modelValue"
20
22
  :description="$props.description"
21
23
  :hideHeader="$props.hideHeader"
22
24
  :clearable="$props.clearable"
23
- :editable="$props.editable"
25
+ :disabled="$props.disabled"
24
26
  :required="$props.required"
25
27
  :label="$props.label"
26
28
  :rules="$props.rules"
@@ -63,7 +65,7 @@
63
65
  name="clear"
64
66
  >
65
67
  <FSButton
66
- v-if="$props.clearable && $props.editable && !!$props.modelValue"
68
+ v-if="$props.clearable && !$props.disabled && !!$props.modelValue"
67
69
  icon="mdi-close"
68
70
  variant="icon"
69
71
  :color="ColorEnum.Dark"
@@ -78,7 +80,7 @@
78
80
  <FSButton
79
81
  icon="mdi-chevron-down"
80
82
  variant="icon"
81
- :editable="$props.editable"
83
+ :disabled="$props.disabled"
82
84
  :color="ColorEnum.Dark"
83
85
  @click="openMobileOverlay"
84
86
  />
@@ -121,12 +123,14 @@
121
123
  </FSCard>
122
124
  </FSSlideGroup>
123
125
  <FSDialogMenu
126
+ padding="16px"
124
127
  v-model="dialog"
125
128
  >
126
129
  <template
127
130
  #body
128
131
  >
129
132
  <FSSearchField
133
+ :clearable="$props.clearable"
130
134
  :hideHeader="true"
131
135
  v-model="search"
132
136
  />
@@ -138,69 +142,52 @@
138
142
  >
139
143
  <FSRow
140
144
  v-for="(item, index) in searchItems"
145
+ align="center-left"
146
+ height="36px"
147
+ :wrap="false"
141
148
  :key="index"
149
+ @click="$props.multiple ?
150
+ onCheckboxChange(item[$props.itemValue!]) :
151
+ onRadioChange(item[$props.itemValue!])
152
+ "
142
153
  >
143
- <FSCheckbox
144
- v-if="$props.multiple"
145
- :label="item[$props.itemTitle!]"
146
- :editable="$props.editable"
147
- :modelValue="$props.modelValue?.includes(item[$props.itemValue!])"
148
- @update:modelValue="() => onCheckboxChange(item[$props.itemValue!])"
149
- >
150
- <template
151
- #label="{ font }"
152
- >
153
- <FSRow
154
- align="center-left"
155
- :wrap="false"
156
- >
157
- <slot
158
- name="item-prepend"
159
- v-bind="{ item }"
160
- />
161
- <FSSpan
162
- :font="font"
163
- >
164
- {{ item[$props.itemTitle!] }}
165
- </FSSpan>
166
- </FSRow>
167
- </template>
168
- </FSCheckbox>
169
- <FSRadio
170
- v-else
171
- :selected="$props.modelValue === item[$props.itemValue!]"
172
- :label="item[$props.itemTitle!]"
173
- :editable="$props.editable"
174
- :item="item"
175
- :modelValue="item[$props.itemValue!]"
176
- @update:modelValue="() => onRadioChange(item[$props.itemValue!])"
154
+ <FSRow
155
+ style="min-width: 0;"
156
+ :wrap="false"
177
157
  >
178
- <template
179
- #label="{ font }"
158
+ <slot
159
+ name="item-prepend"
160
+ v-bind="{ item }"
161
+ />
162
+ <FSSpan
163
+ :font="selectedItems.includes(item) ? 'text-button' : 'text-body'"
180
164
  >
181
- <FSRow
182
- align="center-left"
183
- :wrap="false"
184
- >
185
- <slot
186
- name="item-prepend"
187
- v-bind="{ item }"
188
- />
189
- <FSSpan
190
- :font="font"
191
- >
192
- {{ item[$props.itemTitle!] }}
193
- </FSSpan>
194
- </FSRow>
195
- </template>
196
- </FSRadio>
165
+ {{ item[$props.itemTitle!] }}
166
+ </FSSpan>
167
+ </FSRow>
197
168
  <FSRow
198
169
  align="center-right"
170
+ width="hug"
171
+ :wrap="false"
199
172
  >
200
173
  <slot
201
174
  name="item-append"
202
175
  v-bind="{ item }"
203
176
  />
177
+ <FSCheckbox
178
+ v-if="$props.multiple"
179
+ :disabled="$props.disabled"
180
+ :modelValue="$props.modelValue?.includes(item[$props.itemValue!])"
181
+ @update:modelValue="onCheckboxChange(item[$props.itemValue!])"
182
+ />
183
+ <FSRadio
184
+ v-else
185
+ :selected="$props.modelValue === item[$props.itemValue!]"
186
+ :disabled="$props.disabled"
187
+ :item="item"
188
+ :modelValue="item[$props.itemValue!]"
189
+ @update:modelValue="onRadioChange(item[$props.itemValue!])"
190
+ />
204
191
  </FSRow>
205
192
  </FSRow>
206
193
  </FSCol>
@@ -211,7 +198,7 @@
211
198
  >
212
199
  <FSButton
213
200
  variant="icon"
214
- :label="$tr('ui.autocomplete-field.add-item', 'Add new item')"
201
+ :label="$tr('autocomplete-field.add-item', 'Add new item')"
215
202
  :color="ColorEnum.Primary"
216
203
  @click="$emit('add:item', search)"
217
204
  />
@@ -221,7 +208,7 @@
221
208
  padding="4px 3px"
222
209
  >
223
210
  <FSSpan>
224
- {{ $tr("ui.autocomplete-field.no-data", "No data") }}
211
+ {{ $tr("ui.common.no-data", "No data") }}
225
212
  </FSSpan>
226
213
  </FSRow>
227
214
  </template>
@@ -232,13 +219,14 @@
232
219
  :description="$props.description"
233
220
  :hideHeader="$props.hideHeader"
234
221
  :required="$props.required"
235
- :editable="$props.editable"
222
+ :disabled="$props.disabled"
236
223
  :label="$props.label"
237
224
  :messages="messages"
225
+ :maxWidth="$props.maxWidth"
238
226
  >
239
227
  <FSToggleSet
240
228
  v-if="$props.toggleSet"
241
- :editable="$props.editable"
229
+ :disabled="$props.disabled"
242
230
  :multiple="$props.multiple"
243
231
  :required="$props.required"
244
232
  :values="$props.items"
@@ -263,10 +251,11 @@
263
251
  <v-autocomplete
264
252
  class="fs-autocomplete-field"
265
253
  variant="outlined"
266
- :clearable="$props.clearable && $props.editable && !!$props.modelValue"
254
+ :clearable="$props.clearable && !$props.disabled && !!$props.modelValue"
267
255
  :itemTitle="$props.itemTitle"
268
256
  :itemValue="$props.itemValue"
269
- :readonly="!$props.editable"
257
+ :disabled="$props.disabled"
258
+ :readonly="$props.readonly"
270
259
  :multiple="$props.multiple"
271
260
  :validateOn="validateOn"
272
261
  :autoSelectFirst="true"
@@ -381,7 +370,7 @@
381
370
  name="clear"
382
371
  >
383
372
  <FSButton
384
- v-if="$props.clearable && $props.editable && !!$props.modelValue"
373
+ v-if="$props.clearable && !$props.disabled && !!$props.modelValue"
385
374
  icon="mdi-close"
386
375
  variant="icon"
387
376
  :color="ColorEnum.Dark"
@@ -399,7 +388,7 @@
399
388
  <FSButton
400
389
  icon="mdi-chevron-down"
401
390
  variant="icon"
402
- :editable="$props.editable"
391
+ :disabled="$props.disabled"
403
392
  :color="ColorEnum.Dark"
404
393
  />
405
394
  </slot>
@@ -413,7 +402,7 @@
413
402
  >
414
403
  <FSButton
415
404
  variant="icon"
416
- :label="$tr('ui.autocomplete.add-item', 'Add new item')"
405
+ :label="$tr('autocomplete-field.add-item', 'Add new item')"
417
406
  :color="ColorEnum.Primary"
418
407
  @click="$emit('add:item', search)"
419
408
  />
@@ -578,10 +567,15 @@ export default defineComponent({
578
567
  required: false,
579
568
  default: true
580
569
  },
581
- editable: {
570
+ disabled: {
582
571
  type: Boolean,
583
572
  required: false,
584
- default: true
573
+ default: false
574
+ },
575
+ readonly: {
576
+ type: Boolean,
577
+ required: false,
578
+ default: false
585
579
  },
586
580
  loading: {
587
581
  type: Boolean,
@@ -597,11 +591,16 @@ export default defineComponent({
597
591
  type: Boolean,
598
592
  required: false,
599
593
  default: false
594
+ },
595
+ maxWidth: {
596
+ type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
597
+ required: false,
598
+ default: "600px"
600
599
  }
601
600
  },
602
601
  emits: ["update:modelValue", "update:search", "add:item"],
603
602
  setup: (props, { emit }) => {
604
- const { isExtraSmall, isMobileSized } = useBreakpoints();
603
+ const { fontStyles, isExtraSmall, isMobileSized } = useBreakpoints();
605
604
  const { validateOn, getMessages } = useRules();
606
605
  const { getColors } = useColors();
607
606
  const { slots } = useSlots();
@@ -619,23 +618,27 @@ export default defineComponent({
619
618
  const showExtra = ref(true);
620
619
 
621
620
  const style = computed((): StyleValue => {
622
- if (!props.editable) {
621
+ if (props.disabled) {
623
622
  return {
624
- "--fs-autocomplete-field-cursor": "default",
625
- "--fs-autocomplete-field-border-color": lights.base,
626
- "--fs-autocomplete-field-color": lights.dark,
627
- "--fs-autocomplete-field-active-border-color": lights.base
623
+ "--fs-autocomplete-field-cursor" : "default",
624
+ "--fs-autocomplete-field-border-color" : lights.base,
625
+ "--fs-autocomplete-field-color" : lights.dark,
626
+ "--fs-autocomplete-field-active-border-color": lights.base,
627
+ "--fs-base-field-input-height" : isMobileSized.value ? "34px" : "38px",
628
+ ...fontStyles.value
628
629
  };
629
630
  }
630
631
  return {
631
- "--fs-autocomplete-field-cursor": "text",
632
- "--fs-autocomplete-field-background-color": backgrounds.base,
632
+ "--fs-autocomplete-field-cursor" : "text",
633
+ "--fs-autocomplete-field-background-color" : backgrounds.base,
633
634
  "--fs-autocomplete-field-no-data-background-color": lights.light,
634
- "--fs-autocomplete-field-border-color": lights.dark,
635
- "--fs-autocomplete-field-color": darks.base,
636
- "--fs-autocomplete-field-active-border-color": darks.dark,
637
- "--fs-autocomplete-field-error-color": errors.base,
638
- "--fs-autocomplete-field-error-border-color": errors.base
635
+ "--fs-autocomplete-field-border-color" : lights.dark,
636
+ "--fs-autocomplete-field-color" : darks.base,
637
+ "--fs-autocomplete-field-active-border-color" : darks.dark,
638
+ "--fs-autocomplete-field-error-color" : errors.base,
639
+ "--fs-autocomplete-field-error-border-color" : errors.base,
640
+ "--fs-base-field-input-height" : isMobileSized.value ? "34px" : "38px",
641
+ ...fontStyles.value
639
642
  };
640
643
  });
641
644
 
@@ -698,8 +701,8 @@ export default defineComponent({
698
701
  });
699
702
 
700
703
  const maxHeight = computed(() => {
701
- const other = 8 + 8 // Paddings
702
- + (isMobileSized ? 36 : 40) + 8; // Header
704
+ const other = 8 + 8 // Paddings
705
+ + (isMobileSized.value ? 36 : 40) + 8; // Header
703
706
  return `calc(100vh - 40px - ${other}px)`;
704
707
  });
705
708
 
@@ -714,7 +717,7 @@ export default defineComponent({
714
717
  });
715
718
 
716
719
  const openMobileOverlay = () => {
717
- if (!props.editable) {
720
+ if (props.disabled) {
718
721
  return;
719
722
  }
720
723
  dialog.value = true;
@@ -62,7 +62,7 @@ export default defineComponent({
62
62
  if (!props.modelValue || props.modelValue.length === 0) {
63
63
  return null;
64
64
  }
65
- return props.placeholder ?? $tr("ui.autocomplete-tag.items-selected", "{0} item(s) selected", props.modelValue?.length ?? 0);
65
+ return props.placeholder ?? $tr("autocomplete.tag.selecteds", "{0} item(s) selected", props.modelValue?.length ?? 0);
66
66
  });
67
67
 
68
68
  const onUpdateModelValue = (value: string[] | null): void => {