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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (297) hide show
  1. package/assets/images/map/snow.png +0 -0
  2. package/components/FSAccordionPanel.vue +40 -21
  3. package/components/FSBreadcrumbs.vue +21 -12
  4. package/components/FSButton.vue +16 -16
  5. package/components/FSCalendar.vue +50 -12
  6. package/components/FSCalendarTwin.vue +95 -43
  7. package/components/FSCard.vue +61 -9
  8. package/components/FSCardPlaceholder.vue +8 -5
  9. package/components/FSCheckbox.vue +5 -4
  10. package/components/FSChip.vue +73 -45
  11. package/components/FSChipGroup.vue +69 -0
  12. package/components/FSClickable.vue +11 -9
  13. package/components/FSClock.vue +30 -12
  14. package/components/FSCol.vue +11 -5
  15. package/components/FSColorIcon.vue +23 -5
  16. package/components/FSDialog.vue +2 -1
  17. package/components/FSDialogContent.vue +12 -11
  18. package/components/FSDialogForm.vue +22 -2
  19. package/components/FSDialogFormBody.vue +50 -31
  20. package/components/FSDialogMenu.vue +17 -8
  21. package/components/FSDialogMultiFormBody.vue +23 -13
  22. package/components/FSDialogRemove.vue +7 -8
  23. package/components/FSDialogSubmit.vue +20 -11
  24. package/components/FSEditImage.vue +1 -1
  25. package/components/FSEditImageUI.vue +20 -10
  26. package/components/FSFadeOut.vue +53 -21
  27. package/components/FSForm.vue +10 -8
  28. package/components/FSGrid.vue +1 -1
  29. package/components/FSIcon.vue +4 -3
  30. package/components/FSIconCard.vue +68 -12
  31. package/components/FSImage.vue +9 -2
  32. package/components/FSImageUI.vue +8 -15
  33. package/components/FSInformationsMenu.vue +142 -0
  34. package/components/FSInstantPicker.vue +269 -0
  35. package/components/FSLink.vue +25 -9
  36. package/components/FSLoader.vue +28 -10
  37. package/components/FSMenu.vue +47 -0
  38. package/components/FSOptionGroup.vue +57 -9
  39. package/components/FSOptionItem.vue +4 -4
  40. package/components/FSPagination.vue +1 -1
  41. package/components/FSPlayButtons.vue +72 -0
  42. package/components/FSProgressBar.vue +94 -0
  43. package/components/FSRadio.vue +5 -4
  44. package/components/FSRadioGroup.vue +3 -3
  45. package/components/FSRouterLink.vue +42 -0
  46. package/components/FSSlideGroup.vue +19 -5
  47. package/components/FSSlider.vue +6 -5
  48. package/components/FSSpan.vue +12 -7
  49. package/components/FSSwitch.vue +47 -21
  50. package/components/FSTab.vue +15 -13
  51. package/components/FSTabs.vue +32 -7
  52. package/components/FSTag.vue +16 -5
  53. package/components/FSTagGroup.vue +4 -4
  54. package/components/FSText.vue +11 -7
  55. package/components/FSToggleSet.vue +7 -7
  56. package/components/FSWindow.vue +122 -5
  57. package/components/FSWrapGroup.vue +13 -1
  58. package/components/agenda/FSAgenda.vue +26 -7
  59. package/components/agenda/FSAgendaDialogCalendar.vue +2 -2
  60. package/components/agenda/FSAgendaHeader.vue +35 -10
  61. package/components/agenda/FSAgendaHorizontalEvent.vue +18 -6
  62. package/components/agenda/FSAgendaHoursRow.vue +48 -8
  63. package/components/agenda/FSAgendaVerticalEvent.vue +1 -1
  64. package/components/agenda/FSDayAgenda.vue +1 -2
  65. package/components/agenda/FSMonthAgenda.vue +3 -9
  66. package/components/agenda/FSSelectAgendaMode.vue +2 -2
  67. package/components/agenda/FSWeekAgenda.vue +7 -13
  68. package/components/autocompletes/FSAutoCompleteAddress.vue +25 -20
  69. package/components/autocompletes/FSAutocompleteLanguage.vue +7 -1
  70. package/components/autocompletes/FSAutocompleteTimeZone.vue +7 -1
  71. package/components/buttons/FSButtonAdd.vue +1 -1
  72. package/components/buttons/FSButtonAddLabel.vue +1 -1
  73. package/components/buttons/FSButtonCancel.vue +1 -1
  74. package/components/buttons/FSButtonCancelLabel.vue +1 -1
  75. package/components/buttons/FSButtonCheckbox.vue +4 -4
  76. package/components/buttons/FSButtonCopy.vue +1 -1
  77. package/components/buttons/FSButtonCopyLabel.vue +1 -1
  78. package/components/buttons/FSButtonDuplicate.vue +1 -1
  79. package/components/buttons/FSButtonDuplicateLabel.vue +1 -1
  80. package/components/buttons/FSButtonEdit.vue +1 -1
  81. package/components/buttons/FSButtonEditLabel.vue +1 -1
  82. package/components/buttons/FSButtonFile.vue +1 -1
  83. package/components/buttons/FSButtonFileLabel.vue +1 -1
  84. package/components/buttons/FSButtonNext.vue +1 -1
  85. package/components/buttons/FSButtonNextLabel.vue +1 -1
  86. package/components/buttons/FSButtonPrevious.vue +1 -1
  87. package/components/buttons/FSButtonPreviousLabel.vue +1 -1
  88. package/components/buttons/FSButtonRedo.vue +1 -1
  89. package/components/buttons/FSButtonRedoLabel.vue +1 -1
  90. package/components/buttons/FSButtonRemove.vue +1 -1
  91. package/components/buttons/FSButtonRemoveLabel.vue +1 -1
  92. package/components/buttons/FSButtonSave.vue +1 -1
  93. package/components/buttons/FSButtonSaveLabel.vue +1 -1
  94. package/components/buttons/FSButtonSearch.vue +1 -1
  95. package/components/buttons/FSButtonSearchLabel.vue +1 -1
  96. package/components/buttons/FSButtonUndo.vue +1 -1
  97. package/components/buttons/FSButtonUndoLabel.vue +1 -1
  98. package/components/buttons/FSButtonUpdate.vue +1 -1
  99. package/components/buttons/FSButtonUpdateLabel.vue +1 -1
  100. package/components/buttons/FSButtonValidate.vue +1 -1
  101. package/components/buttons/FSButtonValidateLabel.vue +1 -1
  102. package/components/calendar/FSSimpleCalendar.vue +145 -0
  103. package/components/calendar/FSSimpleCalendarHeader.vue +60 -0
  104. package/components/calendar/FSSimpleMonthSelector.vue +138 -0
  105. package/components/deviceOrganisations/FSConnectivity.vue +16 -4
  106. package/components/deviceOrganisations/FSConnectivityCard.vue +17 -45
  107. package/components/deviceOrganisations/FSStatus.vue +16 -4
  108. package/components/deviceOrganisations/FSStatusCard.vue +33 -59
  109. package/components/deviceOrganisations/FSStatusRichCard.vue +171 -0
  110. package/components/deviceOrganisations/FSStatusesCarousel.vue +1 -0
  111. package/components/deviceOrganisations/FSStatusesRow.vue +8 -2
  112. package/components/deviceOrganisations/FSWorstAlert.vue +37 -42
  113. package/components/deviceOrganisations/FSWorstAlertCard.vue +35 -84
  114. package/components/fields/FSAutocompleteField.vue +85 -82
  115. package/components/fields/FSAutocompleteTag.vue +1 -1
  116. package/components/fields/FSBaseField.vue +54 -30
  117. package/components/fields/FSClosableSearchField.vue +83 -0
  118. package/components/fields/FSColorField.vue +48 -44
  119. package/components/fields/FSCommentField.vue +28 -16
  120. package/components/fields/FSDateField.vue +13 -10
  121. package/components/fields/FSDateRangeField.vue +6 -5
  122. package/components/fields/FSDateTimeField.vue +14 -11
  123. package/components/fields/FSDateTimeRangeDialog.vue +160 -0
  124. package/components/fields/FSDateTimeRangeField.vue +23 -115
  125. package/components/fields/FSEntityFieldUI.vue +36 -19
  126. package/components/fields/FSGradientField.vue +5 -5
  127. package/components/fields/FSIconField.vue +16 -9
  128. package/components/fields/FSMagicConfigField.vue +15 -7
  129. package/components/fields/FSMagicField.vue +7 -2
  130. package/components/fields/FSNumberField.vue +9 -4
  131. package/components/fields/FSPasswordField.vue +7 -7
  132. package/components/fields/FSRichTextField.vue +78 -58
  133. package/components/fields/FSSearchField.vue +9 -115
  134. package/components/fields/FSSelectField.vue +69 -71
  135. package/components/fields/FSTagField.vue +10 -10
  136. package/components/fields/FSTermField.vue +72 -47
  137. package/components/fields/FSTextArea.vue +17 -11
  138. package/components/fields/FSTextField.vue +15 -10
  139. package/components/fields/FSTimeField.vue +14 -10
  140. package/components/fields/FSTimeRangeField.vue +310 -0
  141. package/components/fields/FSTimeStepField.vue +5 -5
  142. package/components/fields/FSTranslateField.vue +10 -10
  143. package/components/fields/FSTranslateRichTextField.vue +41 -20
  144. package/components/fields/FSTranslateTextArea.vue +10 -10
  145. package/components/fields/FSTreeViewField.vue +15 -13
  146. package/components/fields/periodicField/FSPeriodicDailyField.vue +7 -7
  147. package/components/fields/periodicField/FSPeriodicField.vue +15 -15
  148. package/components/fields/periodicField/FSPeriodicMonthlyField.vue +16 -16
  149. package/components/fields/periodicField/FSPeriodicWeeklyField.vue +28 -18
  150. package/components/fields/periodicField/FSPeriodicYearlyField.vue +12 -12
  151. package/components/lists/FSDataIteratorItem.vue +23 -67
  152. package/components/lists/FSDataTableUI.vue +220 -137
  153. package/components/lists/FSDraggable.vue +2 -2
  154. package/components/lists/FSFilterButton.vue +14 -16
  155. package/components/lists/FSHeaderButton.vue +11 -9
  156. package/components/lists/FSHiddenButton.vue +9 -9
  157. package/components/lists/FSLoadDataTable.vue +10 -7
  158. package/components/lists/FSSimpleList.vue +95 -82
  159. package/components/lists/FSSimpleListItem.vue +131 -0
  160. package/components/map/FSMap.vue +146 -158
  161. package/components/map/FSMapFeatureGroup.vue +7 -1
  162. package/components/map/FSMapLayerButton.vue +4 -3
  163. package/components/map/FSMapMarker.vue +70 -48
  164. package/components/map/FSMapMarkerClusterGroup.vue +32 -7
  165. package/components/map/FSMapOverlay.vue +44 -24
  166. package/components/map/FSMapPolygon.vue +16 -4
  167. package/components/map/FSMapTileLayer.vue +26 -9
  168. package/components/map/layers.ts +0 -0
  169. package/components/selects/FSSelectAutoRefresh.vue +8 -8
  170. package/components/selects/FSSelectDashboardVariableType.vue +4 -3
  171. package/components/selects/FSSelectDateSetting.vue +2 -2
  172. package/components/selects/FSSelectDays.vue +8 -8
  173. package/components/selects/FSSelectListMode.vue +2 -2
  174. package/components/selects/FSSelectMapLayer.vue +68 -0
  175. package/components/selects/FSSelectMonths.vue +13 -13
  176. package/components/selects/chartSelectors/FSAggregationSelector.vue +52 -0
  177. package/components/selects/chartSelectors/FSAxisTypeSelector.vue +49 -0
  178. package/components/selects/chartSelectors/FSDisplayAsSelector.vue +53 -0
  179. package/components/selects/chartSelectors/FSFilterTypeSelector.vue +54 -0
  180. package/components/selects/chartSelectors/FSHeatmapRuleSelector.vue +54 -0
  181. package/components/selects/chartSelectors/FSOperationOnSelector.vue +53 -0
  182. package/components/selects/chartSelectors/FSPlanningTypeSelector.vue +53 -0
  183. package/components/selects/chartSelectors/FSPlotPerSelector.vue +52 -0
  184. package/components/selects/chartSelectors/FSSelectEntityType.vue +59 -0
  185. package/components/selects/chartSelectors/FSSerieTypeSelector.vue +53 -0
  186. package/components/tiles/FSAlertTileUI.vue +90 -0
  187. package/components/tiles/FSChartTileUI.vue +61 -52
  188. package/components/tiles/FSCommentTileUI.vue +38 -13
  189. package/components/tiles/FSDashboardOrganisationTypeTileUI.vue +14 -2
  190. package/components/tiles/FSDashboardShallowTileUI.vue +14 -2
  191. package/components/tiles/FSDeviceOrganisationTileUI.vue +6 -6
  192. package/components/tiles/FSGroupTileUI.vue +58 -110
  193. package/components/tiles/FSGroupingTileUI.vue +115 -0
  194. package/components/tiles/FSLoadTile.vue +16 -10
  195. package/components/tiles/FSLocationTileUI.vue +63 -55
  196. package/components/tiles/FSModelTileUI.vue +5 -46
  197. package/components/tiles/FSServiceAccountOrganisationTileUI.vue +0 -6
  198. package/components/tiles/FSSimpleTileUI.vue +34 -29
  199. package/components/tiles/FSTile.vue +46 -39
  200. package/components/tiles/FSUserOrganisationTileUI.vue +1 -7
  201. package/components/toggleSets/FSToggleSetPosition.vue +1 -1
  202. package/components/views/FSBaseView.vue +64 -0
  203. package/components/views/FSEntityView.vue +12 -140
  204. package/components/views/FSSimpleView.vue +29 -0
  205. package/components/views/desktop/FSBaseDefaultDesktopView.vue +135 -0
  206. package/components/views/desktop/FSBaseDesktopView.vue +53 -0
  207. package/components/views/desktop/FSBaseEntityDesktopView.vue +211 -0
  208. package/components/views/mobile/FSBaseDefaultMobileView.vue +133 -0
  209. package/components/views/mobile/FSBaseEntityMobileView.vue +206 -0
  210. package/components/views/mobile/FSBaseMobileView.vue +53 -0
  211. package/composables/index.ts +1 -0
  212. package/composables/useAddress.ts +40 -8
  213. package/composables/useBreakpoints.ts +40 -4
  214. package/composables/useColors.ts +16 -7
  215. package/composables/useMagicFieldProvider.ts +1 -0
  216. package/composables/useMapLayers.ts +62 -0
  217. package/composables/useSlots.ts +2 -1
  218. package/models/colors.ts +2 -1
  219. package/models/deviceAlerts.ts +1 -0
  220. package/models/magicFields.ts +1 -0
  221. package/models/map.ts +12 -10
  222. package/models/rules.ts +6 -3
  223. package/models/tables.ts +5 -2
  224. package/models/variableNode.ts +8 -5
  225. package/package.json +5 -5
  226. package/styles/components/fs_agenda.scss +4 -0
  227. package/styles/components/fs_agenda_event.scss +1 -1
  228. package/styles/components/fs_agenda_hours_row.scss +0 -8
  229. package/styles/components/fs_autocomplete_field.scss +0 -13
  230. package/styles/components/fs_breadcrumbs.scss +18 -36
  231. package/styles/components/fs_button.scss +7 -5
  232. package/styles/components/fs_calendar.scss +1 -0
  233. package/styles/components/fs_card.scss +9 -0
  234. package/styles/components/fs_chip.scss +13 -7
  235. package/styles/components/fs_clickable.scss +16 -23
  236. package/styles/components/fs_clock.scss +0 -10
  237. package/styles/components/fs_col.scss +1 -1
  238. package/styles/components/fs_color_field.scss +1 -4
  239. package/styles/components/fs_data_table.scss +6 -9
  240. package/styles/components/fs_dialog.scss +4 -10
  241. package/styles/components/fs_dialog_menu.scss +4 -2
  242. package/styles/components/fs_draggable.scss +0 -5
  243. package/styles/components/fs_edit_image.scss +8 -0
  244. package/styles/components/fs_fade_out.scss +10 -2
  245. package/styles/components/fs_filter_button.scss +1 -6
  246. package/styles/components/fs_hidden_button.scss +2 -7
  247. package/styles/components/fs_image_card.scss +6 -4
  248. package/styles/components/fs_magic_config_field.scss +1 -2
  249. package/styles/components/fs_map.scss +57 -17
  250. package/styles/components/fs_meta_field.scss +3 -5
  251. package/styles/components/fs_option_group.scss +15 -5
  252. package/styles/components/fs_password_field.scss +4 -2
  253. package/styles/components/fs_progress_bar.scss +14 -0
  254. package/styles/components/fs_radio.scss +0 -11
  255. package/styles/components/fs_rich_text_field.scss +1 -10
  256. package/styles/components/fs_select_field.scss +4 -13
  257. package/styles/components/fs_slide_group.scss +7 -0
  258. package/styles/components/fs_span.scss +13 -5
  259. package/styles/components/fs_status_rich_card.scss +6 -0
  260. package/styles/components/fs_switch.scss +1 -0
  261. package/styles/components/fs_tabs.scss +19 -34
  262. package/styles/components/fs_tag.scss +8 -22
  263. package/styles/components/fs_text_area.scss +2 -21
  264. package/styles/components/fs_tile.scss +0 -19
  265. package/styles/components/fs_window.scss +3 -1
  266. package/styles/components/fs_wrap_group.scss +7 -0
  267. package/styles/components/index.scss +2 -6
  268. package/styles/globals/index.scss +1 -5
  269. package/styles/globals/overrides.scss +28 -61
  270. package/styles/globals/scrollbars.scss +8 -0
  271. package/styles/globals/text_fonts.scss +18 -66
  272. package/styles/globals/touchscreen.scss +2 -2
  273. package/tools/alertsTools.ts +87 -12
  274. package/tools/chartsTools.ts +143 -16
  275. package/tools/index.ts +3 -1
  276. package/tools/reportsTools.ts +38 -0
  277. package/tools/timeRangeTools.ts +125 -0
  278. package/utils/badge.ts +9 -5
  279. package/utils/filter.ts +7 -4
  280. package/utils/index.ts +1 -0
  281. package/utils/leafletMarkers.ts +4 -4
  282. package/utils/operations.ts +108 -0
  283. package/utils/sort.ts +2 -2
  284. package/utils/time.ts +16 -16
  285. package/components/fields/FSTimeSlotField.vue +0 -250
  286. package/components/views/FSEntityHeader.vue +0 -350
  287. package/components/views/FSListHeader.vue +0 -83
  288. package/components/views/FSListView.vue +0 -83
  289. package/components/views/FSSkeletonView.vue +0 -100
  290. package/styles/components/fs_data_iterator_item.scss +0 -33
  291. package/styles/components/fs_icon_field.scss +0 -12
  292. package/styles/components/fs_search_field.scss +0 -3
  293. package/styles/components/fs_tag_field.scss +0 -8
  294. package/styles/components/fs_time_field.scss +0 -12
  295. package/styles/components/fs_timeslot_field.scss +0 -12
  296. package/styles/globals/breakpoints.scss +0 -20
  297. package/styles/globals/fixes.scss +0 -5
@@ -1,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 => {
@@ -1,44 +1,50 @@
1
1
  <template>
2
- <FSCol>
2
+ <FSCol
3
+ :maxWidth="$props.maxWidth"
4
+ :style="style"
5
+ >
3
6
  <slot
4
7
  v-if="!$props.hideHeader"
5
8
  name="label"
6
9
  >
7
10
  <FSRow
11
+ gap="40px"
8
12
  :wrap="false"
9
13
  >
10
- <FSSpan
11
- class="fs-base-field-label"
12
- font="text-overline"
13
- :style="style"
14
+ <FSRow
15
+ gap="2px"
16
+ :width="widths.label"
17
+ :wrap="false"
14
18
  >
15
- {{ $props.label }}
16
- </FSSpan>
17
- <FSSpan
18
- v-if="$props.label && $props.required"
19
- class="fs-base-field-label"
20
- style="margin-left: -8px;"
21
- font="text-overline"
22
- :ellipsis="false"
23
- :style="style"
24
- >
25
- *
26
- </FSSpan>
27
- <v-spacer
28
- style="min-width: 40px;"
29
- />
30
- <template
31
- v-if="$props.messages"
19
+ <FSSpan
20
+ class="fs-base-field-label"
21
+ font="text-overline"
22
+ >
23
+ {{ $props.label }}
24
+ </FSSpan>
25
+ <FSSpan
26
+ v-if="$props.label && $props.required"
27
+ class="fs-base-field-label"
28
+ font="text-overline"
29
+ :ellipsis="false"
30
+ :style="style"
31
+ >
32
+ *
33
+ </FSSpan>
34
+ </FSRow>
35
+ <FSRow
36
+ align="center-right"
37
+ :width="widths.messages"
32
38
  >
33
39
  <FSSpan
34
- v-if="$props.messages.length > 0"
40
+ v-if="$props.messages && $props.messages.length > 0"
35
41
  class="fs-base-field-messages"
36
42
  font="text-overline"
37
43
  :style="style"
38
44
  >
39
45
  {{ $props.messages.join(", ") }}
40
46
  </FSSpan>
41
- </template>
47
+ </FSRow>
42
48
  </FSRow>
43
49
  </slot>
44
50
  <slot />
@@ -49,7 +55,7 @@
49
55
  v-if="$props.description"
50
56
  class="fs-base-field-description"
51
57
  font="text-overline"
52
- :style="style"
58
+ :lineClamp="2"
53
59
  >
54
60
  {{ $props.description }}
55
61
  </FSSpan>
@@ -100,10 +106,20 @@ export default defineComponent({
100
106
  required: false,
101
107
  default: () => []
102
108
  },
103
- editable: {
109
+ disabled: {
104
110
  type: Boolean,
105
111
  required: false,
106
- default: true
112
+ default: false
113
+ },
114
+ minWidth: {
115
+ type: String,
116
+ required: false,
117
+ default: "120px"
118
+ },
119
+ maxWidth: {
120
+ type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
121
+ required: false,
122
+ default: "600px"
107
123
  }
108
124
  },
109
125
  setup(props) {
@@ -118,18 +134,26 @@ export default defineComponent({
118
134
  const darks = getColors(ColorEnum.Dark);
119
135
 
120
136
  const style = computed((): StyleValue => {
121
- if (!props.editable) {
137
+ if (props.disabled) {
122
138
  return {
123
- "--fs-base-field-color": lights.dark
139
+ "--fs-base-field-color" : lights.dark,
140
+ "--fs-base-field-min-width": props.minWidth
124
141
  };
125
142
  }
126
143
  return {
127
144
  "--fs-base-field-color" : darks.base,
128
- "--fs-base-field-error-color": errors.base
145
+ "--fs-base-field-error-color": errors.base,
146
+ "--fs-base-field-min-width" : props.minWidth
129
147
  };
130
148
  });
131
149
 
150
+ const widths = computed(() => ({
151
+ label: props.messages && props.messages.length ? "calc(50% - 40px)" : "100%",
152
+ messages: props.messages && props.messages.length ? "50%" : "0"
153
+ }));
154
+
132
155
  return {
156
+ widths,
133
157
  style,
134
158
  slots
135
159
  };