@dative-gpi/foundation-shared-components 1.0.36 → 1.0.37-report-v1

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 (271) hide show
  1. package/components/FSBreadcrumbs.vue +21 -12
  2. package/components/FSButton.vue +10 -10
  3. package/components/FSCalendar.vue +52 -14
  4. package/components/FSCalendarTwin.vue +96 -40
  5. package/components/FSCard.vue +28 -7
  6. package/components/FSCardPlaceholder.vue +8 -5
  7. package/components/FSChip.vue +12 -2
  8. package/components/FSClickable.vue +12 -13
  9. package/components/FSClock.vue +16 -7
  10. package/components/FSColorIcon.vue +23 -5
  11. package/components/FSDialog.vue +2 -1
  12. package/components/FSDialogContent.vue +12 -11
  13. package/components/FSDialogForm.vue +22 -2
  14. package/components/FSDialogFormBody.vue +47 -28
  15. package/components/FSDialogMenu.vue +17 -8
  16. package/components/FSDialogMultiFormBody.vue +77 -54
  17. package/components/FSDialogRemove.vue +8 -8
  18. package/components/FSDialogSubmit.vue +17 -8
  19. package/components/FSEditImage.vue +1 -1
  20. package/components/FSEditImageUI.vue +20 -10
  21. package/components/FSFadeOut.vue +53 -21
  22. package/components/FSForm.vue +10 -8
  23. package/components/FSGrid.vue +1 -1
  24. package/components/FSIcon.vue +2 -1
  25. package/components/FSIconCard.vue +47 -7
  26. package/components/FSImage.vue +12 -4
  27. package/components/FSImageUI.vue +8 -15
  28. package/components/FSInstantPicker.vue +266 -0
  29. package/components/FSLink.vue +25 -9
  30. package/components/FSLoader.vue +28 -11
  31. package/components/FSOptionGroup.vue +51 -3
  32. package/components/FSPlayButtons.vue +72 -0
  33. package/components/FSProgressBar.vue +94 -0
  34. package/components/FSRouterLink.vue +42 -0
  35. package/components/FSSlideGroup.vue +19 -5
  36. package/components/FSSpan.vue +17 -7
  37. package/components/FSSwitch.vue +57 -27
  38. package/components/FSTab.vue +15 -13
  39. package/components/FSTabs.vue +32 -7
  40. package/components/FSTag.vue +14 -3
  41. package/components/FSTagGroup.vue +1 -1
  42. package/components/FSText.vue +11 -7
  43. package/components/FSWindow.vue +128 -4
  44. package/components/FSWrapGroup.vue +13 -1
  45. package/components/agenda/FSAgenda.vue +223 -0
  46. package/components/agenda/FSAgendaDialogCalendar.vue +76 -0
  47. package/components/agenda/FSAgendaHeader.vue +215 -0
  48. package/components/agenda/FSAgendaHorizontalEvent.vue +174 -0
  49. package/components/agenda/FSAgendaHorizontalTimeLineMarker.vue +46 -0
  50. package/components/agenda/FSAgendaHoursCol.vue +103 -0
  51. package/components/agenda/FSAgendaHoursRow.vue +164 -0
  52. package/components/agenda/FSAgendaVerticalEvent.vue +160 -0
  53. package/components/agenda/FSAgendaVerticalTimeLineMarker.vue +46 -0
  54. package/components/agenda/FSDayAgenda.vue +199 -0
  55. package/components/agenda/FSMonthAgenda.vue +252 -0
  56. package/components/agenda/FSSelectAgendaMode.vue +54 -0
  57. package/components/agenda/FSWeekAgenda.vue +323 -0
  58. package/components/autocompletes/FSAutoCompleteAddress.vue +22 -20
  59. package/components/autocompletes/FSAutocompleteLanguage.vue +7 -1
  60. package/components/autocompletes/FSAutocompleteTimeZone.vue +7 -1
  61. package/components/buttons/FSButtonAdd.vue +1 -1
  62. package/components/buttons/FSButtonAddLabel.vue +1 -1
  63. package/components/buttons/FSButtonCancel.vue +1 -1
  64. package/components/buttons/FSButtonCancelLabel.vue +1 -1
  65. package/components/buttons/FSButtonCopy.vue +1 -1
  66. package/components/buttons/FSButtonCopyLabel.vue +1 -1
  67. package/components/buttons/FSButtonDragIcon.vue +27 -0
  68. package/components/buttons/FSButtonDuplicate.vue +1 -1
  69. package/components/buttons/FSButtonDuplicateLabel.vue +1 -1
  70. package/components/buttons/FSButtonEdit.vue +1 -1
  71. package/components/buttons/FSButtonEditLabel.vue +1 -1
  72. package/components/buttons/FSButtonFile.vue +1 -1
  73. package/components/buttons/FSButtonFileLabel.vue +1 -1
  74. package/components/buttons/FSButtonNext.vue +1 -1
  75. package/components/buttons/FSButtonNextLabel.vue +1 -1
  76. package/components/buttons/FSButtonPrevious.vue +1 -1
  77. package/components/buttons/FSButtonPreviousLabel.vue +1 -1
  78. package/components/buttons/FSButtonRedo.vue +1 -1
  79. package/components/buttons/FSButtonRedoLabel.vue +1 -1
  80. package/components/buttons/FSButtonRemove.vue +1 -1
  81. package/components/buttons/FSButtonRemoveLabel.vue +1 -1
  82. package/components/buttons/FSButtonSave.vue +1 -1
  83. package/components/buttons/FSButtonSaveLabel.vue +1 -1
  84. package/components/buttons/FSButtonSearch.vue +1 -1
  85. package/components/buttons/FSButtonSearchLabel.vue +1 -1
  86. package/components/buttons/FSButtonUndo.vue +1 -1
  87. package/components/buttons/FSButtonUndoLabel.vue +1 -1
  88. package/components/buttons/FSButtonUpdate.vue +1 -1
  89. package/components/buttons/FSButtonUpdateLabel.vue +1 -1
  90. package/components/buttons/FSButtonValidate.vue +1 -1
  91. package/components/buttons/FSButtonValidateLabel.vue +1 -1
  92. package/components/calendar/FSSimpleCalendar.vue +145 -0
  93. package/components/calendar/FSSimpleCalendarHeader.vue +60 -0
  94. package/components/calendar/FSSimpleMonthSelector.vue +138 -0
  95. package/components/deviceOrganisations/FSConnectivity.vue +11 -1
  96. package/components/deviceOrganisations/FSConnectivityCard.vue +19 -47
  97. package/components/deviceOrganisations/FSStatus.vue +11 -1
  98. package/components/deviceOrganisations/FSStatusCard.vue +35 -61
  99. package/components/deviceOrganisations/FSStatusesCarousel.vue +1 -0
  100. package/components/deviceOrganisations/FSStatusesRow.vue +9 -3
  101. package/components/deviceOrganisations/FSWorstAlert.vue +30 -37
  102. package/components/deviceOrganisations/FSWorstAlertCard.vue +36 -85
  103. package/components/fields/FSAutocompleteField.vue +445 -463
  104. package/components/fields/FSAutocompleteTag.vue +1 -1
  105. package/components/fields/FSBaseField.vue +44 -27
  106. package/components/fields/FSColorField.vue +42 -39
  107. package/components/fields/FSCommentField.vue +105 -0
  108. package/components/fields/FSDateField.vue +3 -2
  109. package/components/fields/FSDateRangeField.vue +3 -2
  110. package/components/fields/FSDateTimeField.vue +4 -3
  111. package/components/fields/FSDateTimeRangeField.vue +8 -6
  112. package/components/fields/FSEntityFieldUI.vue +271 -0
  113. package/components/fields/FSGradientField.vue +27 -33
  114. package/components/fields/FSIconField.vue +0 -1
  115. package/components/fields/FSMagicConfigField.vue +10 -3
  116. package/components/fields/FSMagicField.vue +9 -4
  117. package/components/fields/FSNumberField.vue +6 -1
  118. package/components/fields/FSRichTextField.vue +102 -52
  119. package/components/fields/FSSearchField.vue +9 -115
  120. package/components/fields/FSSelectField.vue +477 -252
  121. package/components/fields/FSTagField.vue +1 -1
  122. package/components/fields/FSTermField.vue +42 -17
  123. package/components/fields/FSTextArea.vue +26 -7
  124. package/components/fields/FSTextField.vue +8 -3
  125. package/components/fields/FSTimeRangeField.vue +304 -0
  126. package/components/fields/FSTimeStepField.vue +3 -3
  127. package/components/fields/FSTranslateField.vue +4 -3
  128. package/components/fields/FSTranslateRichTextField.vue +32 -12
  129. package/components/fields/FSTranslateTextArea.vue +233 -0
  130. package/components/fields/periodicField/FSPeriodicDailyField.vue +2 -2
  131. package/components/fields/periodicField/FSPeriodicField.vue +8 -8
  132. package/components/fields/periodicField/FSPeriodicMonthlyField.vue +8 -8
  133. package/components/fields/periodicField/FSPeriodicWeeklyField.vue +23 -13
  134. package/components/fields/periodicField/FSPeriodicYearlyField.vue +6 -6
  135. package/components/lists/FSDataTableUI.vue +173 -103
  136. package/components/lists/FSDraggable.vue +2 -2
  137. package/components/lists/FSFilterButton.vue +7 -11
  138. package/components/lists/FSHeaderButton.vue +4 -4
  139. package/components/lists/FSHiddenButton.vue +3 -5
  140. package/components/lists/FSLoadDataTable.vue +10 -7
  141. package/components/lists/FSSimpleList.vue +234 -0
  142. package/components/lists/FSSimpleListItem.vue +132 -0
  143. package/components/map/FSMap.vue +83 -33
  144. package/components/map/FSMapFeatureGroup.vue +2 -2
  145. package/components/map/FSMapLayerButton.vue +3 -3
  146. package/components/map/FSMapMarker.vue +11 -7
  147. package/components/map/FSMapMarkerClusterGroup.vue +8 -3
  148. package/components/map/FSMapOverlay.vue +37 -20
  149. package/components/map/FSMapPolygon.vue +5 -5
  150. package/components/map/FSMapTileLayer.vue +2 -2
  151. package/components/map/keys.ts +3 -3
  152. package/components/selects/FSSelectAutoRefresh.vue +9 -9
  153. package/components/selects/FSSelectDashboardVariableType.vue +5 -4
  154. package/components/selects/FSSelectDateSetting.vue +3 -2
  155. package/components/selects/FSSelectDays.vue +9 -9
  156. package/components/selects/FSSelectListMode.vue +51 -0
  157. package/components/selects/FSSelectMonths.vue +14 -14
  158. package/components/selects/chartSelectors/FSAggregationSelector.vue +52 -0
  159. package/components/selects/chartSelectors/FSAxisTypeSelector.vue +49 -0
  160. package/components/selects/chartSelectors/FSDisplayAsSelector.vue +53 -0
  161. package/components/selects/chartSelectors/FSFilterTypeSelector.vue +54 -0
  162. package/components/selects/chartSelectors/FSHeatmapRuleSelector.vue +54 -0
  163. package/components/selects/chartSelectors/FSOperationOnSelector.vue +53 -0
  164. package/components/selects/chartSelectors/FSPlanningTypeSelector.vue +53 -0
  165. package/components/selects/chartSelectors/FSPlotPerSelector.vue +52 -0
  166. package/components/selects/chartSelectors/FSSelectEntityType.vue +59 -0
  167. package/components/selects/chartSelectors/FSSerieTypeSelector.vue +53 -0
  168. package/components/tiles/FSAlertTileUI.vue +90 -0
  169. package/components/tiles/FSChartTileUI.vue +111 -0
  170. package/components/tiles/FSCommentTileUI.vue +174 -0
  171. package/components/tiles/FSDeviceOrganisationTileUI.vue +6 -0
  172. package/components/tiles/FSGroupTileUI.vue +2 -2
  173. package/components/tiles/FSLoadTile.vue +2 -0
  174. package/components/tiles/FSLocationTileUI.vue +192 -0
  175. package/components/tiles/FSModelTileUI.vue +18 -0
  176. package/components/tiles/FSSimpleTileUI.vue +9 -4
  177. package/components/tiles/FSTile.vue +93 -74
  178. package/components/tiles/FSUserOrganisationTileUI.vue +1 -1
  179. package/components/toggleSets/FSToggleSetPosition.vue +2 -2
  180. package/components/views/FSBaseView.vue +64 -0
  181. package/components/views/FSEntityView.vue +12 -140
  182. package/components/views/FSSimpleView.vue +29 -0
  183. package/components/views/desktop/FSBaseDefaultDesktopView.vue +135 -0
  184. package/components/views/desktop/FSBaseDesktopView.vue +53 -0
  185. package/components/views/desktop/FSBaseEntityDesktopView.vue +209 -0
  186. package/components/views/mobile/FSBaseDefaultMobileView.vue +133 -0
  187. package/components/views/mobile/FSBaseEntityMobileView.vue +199 -0
  188. package/components/views/mobile/FSBaseMobileView.vue +53 -0
  189. package/composables/useBreakpoints.ts +39 -3
  190. package/composables/useColors.ts +3 -2
  191. package/composables/useMagicFieldProvider.ts +1 -0
  192. package/composables/useSlots.ts +2 -1
  193. package/models/agenda.ts +9 -0
  194. package/models/deviceAlerts.ts +1 -1
  195. package/models/deviceConnectivities.ts +1 -1
  196. package/models/index.ts +1 -0
  197. package/models/magicFields.ts +1 -0
  198. package/models/map.ts +2 -2
  199. package/models/rules.ts +8 -5
  200. package/models/tables.ts +5 -2
  201. package/models/variableNode.ts +8 -5
  202. package/package.json +5 -5
  203. package/styles/components/fs_agenda.scss +36 -0
  204. package/styles/components/fs_agenda_event.scss +41 -0
  205. package/styles/components/fs_agenda_hours_col.scss +4 -0
  206. package/styles/components/fs_agenda_hours_row.scss +5 -0
  207. package/styles/components/fs_agenda_time_line_marker.scss +19 -0
  208. package/styles/components/fs_autocomplete_field.scss +0 -13
  209. package/styles/components/fs_breadcrumbs.scss +18 -36
  210. package/styles/components/fs_button.scss +7 -5
  211. package/styles/components/fs_chip.scss +8 -6
  212. package/styles/components/fs_clickable.scss +18 -23
  213. package/styles/components/fs_clock.scss +0 -10
  214. package/styles/components/fs_color_field.scss +1 -4
  215. package/styles/components/fs_data_iterator_item.scss +12 -10
  216. package/styles/components/fs_data_table.scss +6 -9
  217. package/styles/components/fs_dialog.scss +7 -17
  218. package/styles/components/fs_dialog_menu.scss +4 -2
  219. package/styles/components/fs_edit_image.scss +8 -0
  220. package/styles/components/fs_fade_out.scss +10 -2
  221. package/styles/components/fs_filter_button.scss +1 -6
  222. package/styles/components/fs_gradient_field.scss +11 -11
  223. package/styles/components/fs_hidden_button.scss +2 -7
  224. package/styles/components/fs_image_card.scss +6 -4
  225. package/styles/components/fs_magic_config_field.scss +1 -2
  226. package/styles/components/fs_map.scss +11 -7
  227. package/styles/components/fs_meta_field.scss +3 -5
  228. package/styles/components/fs_option_group.scss +15 -5
  229. package/styles/components/fs_password_field.scss +4 -2
  230. package/styles/components/fs_progress_bar.scss +14 -0
  231. package/styles/components/fs_radio.scss +0 -11
  232. package/styles/components/fs_rich_text_field.scss +1 -9
  233. package/styles/components/fs_select_date_settings.scss +3 -0
  234. package/styles/components/fs_select_field.scss +4 -13
  235. package/styles/components/fs_slide_group.scss +7 -0
  236. package/styles/components/fs_span.scss +13 -4
  237. package/styles/components/fs_switch.scss +1 -0
  238. package/styles/components/fs_tabs.scss +19 -33
  239. package/styles/components/fs_tag.scss +8 -22
  240. package/styles/components/fs_text_area.scss +13 -17
  241. package/styles/components/fs_tile.scss +21 -15
  242. package/styles/components/fs_window.scss +7 -0
  243. package/styles/components/fs_wrap_group.scss +7 -0
  244. package/styles/components/index.scss +6 -4
  245. package/styles/globals/index.scss +1 -5
  246. package/styles/globals/overrides.scss +28 -61
  247. package/styles/globals/scrollbars.scss +10 -0
  248. package/styles/globals/text_fonts.scss +18 -66
  249. package/tools/alertsTools.ts +69 -0
  250. package/tools/chartsTools.ts +427 -0
  251. package/tools/index.ts +4 -0
  252. package/tools/reportsTools.ts +38 -0
  253. package/tools/timeRangeTools.ts +125 -0
  254. package/utils/filter.ts +18 -0
  255. package/utils/index.ts +2 -0
  256. package/utils/leafletMarkers.ts +4 -4
  257. package/utils/operations.ts +69 -0
  258. package/utils/sort.ts +2 -2
  259. package/utils/statuses.ts +1 -1
  260. package/utils/time.ts +17 -17
  261. package/components/fields/FSTimeSlotField.vue +0 -250
  262. package/components/views/FSEntityHeader.vue +0 -350
  263. package/components/views/FSListHeader.vue +0 -83
  264. package/components/views/FSListView.vue +0 -83
  265. package/components/views/FSSkeletonView.vue +0 -100
  266. package/styles/components/fs_icon_field.scss +0 -12
  267. package/styles/components/fs_tag_field.scss +0 -8
  268. package/styles/components/fs_time_field.scss +0 -12
  269. package/styles/components/fs_timeslot_field.scss +0 -12
  270. package/styles/globals/breakpoints.scss +0 -20
  271. package/styles/globals/fixes.scss +0 -5
@@ -0,0 +1,427 @@
1
+ import { AxisType, ColorSets, SerieType, ChartType, TimeUnit, ChartOrigin, AggregationType, DisplayAs, FilterType, HeatmapRule, OperationOn, PlanningType, PlotPer } from "@dative-gpi/foundation-shared-domain/enums";
2
+
3
+ import { getEnumEntries } from "@dative-gpi/foundation-shared-domain/tools";
4
+ import { useTranslations as useTranslationsProvider } from "@dative-gpi/bones-ui/composables";
5
+ import { ColorEnum, type ColorBase } from "../models";
6
+
7
+ const { $tr } = useTranslationsProvider();
8
+
9
+ export const chartOriginLabel = (type: ChartOrigin): string => {
10
+ switch (type) {
11
+ case ChartOrigin.None: return $tr("ui.common.none", "None");
12
+ case ChartOrigin.Organisation: return $tr("ui.common.custom", "Custom");
13
+ case ChartOrigin.OrganisationType: return $tr("ui.common.shared", "Shared");
14
+ }
15
+ };
16
+
17
+ export const chartOriginColor = (type: ChartOrigin): ColorBase => {
18
+ switch (type) {
19
+ case ChartOrigin.None: return ColorEnum.Error;
20
+ case ChartOrigin.Organisation: return ColorEnum.Primary;
21
+ case ChartOrigin.OrganisationType: return ColorEnum.Warning;
22
+ }
23
+ };
24
+
25
+ export const chartTypeLabel = (value: ChartType): string => {
26
+ switch (value) {
27
+ case ChartType.Gauge: return $tr("ui.chart-type.gauge", "Gauge");
28
+ case ChartType.Heatmap: return $tr("ui.chart-type.heatmap", "Heatmap");
29
+ case ChartType.Pie: return $tr("ui.chart-type.pie", "Pie");
30
+ case ChartType.ScoreCard: return $tr("ui.chart-type.score-card", "Score card");
31
+ case ChartType.Slider: return $tr("ui.chart-type.slider", "Slider");
32
+ case ChartType.Table: return $tr("ui.chart-type.table", "Table");
33
+ case ChartType.XY: return $tr("ui.chart-type.xy", "XY");
34
+ default: return $tr("ui.common.none", "None");
35
+ }
36
+ }
37
+
38
+ export const colorSetLabel = (value: ColorSets | number): string => {
39
+ switch (value) {
40
+ case ColorSets.Default: return $tr("ui.color-sets.am-charts", "Am Charts");
41
+ case ColorSets.Grafana: return $tr("ui.color-sets.grafana", "Grafana");
42
+ case ColorSets.Armytage: return $tr("ui.color-sets.armytage", "High contrast (26 colors)");
43
+ case ColorSets.Hash: return $tr("ui.color-sets.hash", "Hash");
44
+ case ColorSets.Kelly: return $tr("ui.color-sets.kelly", "High contrast (22 colors)");
45
+ case ColorSets.ZeileisHornikMurrell: return $tr("ui.color-sets.zeileis", "Colorblind accessible");
46
+ default: return $tr("ui.common.none", "None");
47
+ }
48
+ }
49
+
50
+
51
+ export const chartIcon = (value: ChartType): string => {
52
+ switch (value) {
53
+ case ChartType.Gauge: return "mdi-gauge";
54
+ case ChartType.Heatmap: return "mdi-blur-linear";
55
+ case ChartType.Pie: return "mdi-chart-pie";
56
+ case ChartType.ScoreCard: return "mdi-counter";
57
+ case ChartType.Slider: return "mdi-ruler";
58
+ case ChartType.Table: return "mdi-table";
59
+ case ChartType.XY: return "mdi-chart-line";
60
+ default: return $tr("ui.common.none", "None");
61
+ }
62
+ }
63
+
64
+ export const serieTypeIcon = (serieType: SerieType): string => {
65
+ switch (serieType) {
66
+ case SerieType.Lines: return "mdi-chart-line";
67
+ case SerieType.Area: return "mdi-chart-areaspline";
68
+ case SerieType.Range: return "mdi-chart-line-stacked";
69
+ case SerieType.Histogram: return "mdi-chart-histogram";
70
+ case SerieType.Operation: return "mdi-division";
71
+ case SerieType.Planning: return "mdi-chart-timeline";
72
+ case SerieType.ScatterPlot: return "mdi-chart-scatter-plot";
73
+ case SerieType.Top: return "mdi-podium-gold";
74
+ case SerieType.Bars: return "mdi-chart-bar";
75
+ case SerieType.StackedBars: return "mdi-chart-bar-stacked";
76
+ case SerieType.Pie: return "mdi-chart-pie";
77
+ case SerieType.Heatmap: return "mdi-blur-linear";
78
+ case SerieType.Slider: return "mdi-blur-linear";
79
+ case SerieType.Gauge: return "mdi-gauge";
80
+ case SerieType.ScoreCard: return "mdi-counter";
81
+ case SerieType.Table: return "mdi-table";
82
+ default: return "";
83
+ }
84
+ }
85
+
86
+ export const aggregationTypeLabel = (aggregationType: AggregationType): string => {
87
+ switch (aggregationType) {
88
+ case AggregationType.Sum: return $tr("ui.aggregation-type.sum", "Sum");
89
+ case AggregationType.Cardinal: return $tr("ui.aggregation-type.cardinal", "Cardinal");
90
+ case AggregationType.Mean: return $tr("ui.aggregation-type.mean", "Mean");
91
+ case AggregationType.Median: return $tr("ui.aggregation-type.median", "Median");
92
+ case AggregationType.First: return $tr("ui.aggregation-type.first", "First");
93
+ case AggregationType.Last: return $tr("ui.aggregation.last", "Last");
94
+ case AggregationType.Difference: return $tr("ui.aggregation-type.difference", "Difference");
95
+ case AggregationType.Minimum: return $tr("ui.common.minimum", "Minimum");
96
+ case AggregationType.Maximum: return $tr("ui.common.maximum", "Maximum");
97
+ case AggregationType.Range: return $tr("ui.aggregation-type.range", "Range");
98
+ default: return $tr("ui.common.none", "None");
99
+ }
100
+ };
101
+
102
+ export const axisTypeLabel = (axisType: AxisType | number): string => {
103
+ switch (axisType) {
104
+ case AxisType.Date: return $tr("ui.common.date", "Date");
105
+ case AxisType.Value: return $tr("ui.common.value", "Value");
106
+ case AxisType.Category: return $tr("ui.common.category", "Category");
107
+ default: return $tr("ui.common.none", "None");
108
+ }
109
+ };
110
+
111
+ export const displayAsLabel = (display: DisplayAs | number): string => {
112
+ switch (display) {
113
+ case DisplayAs.Bars: return $tr("ui.common.bars", "Bars");
114
+ case DisplayAs.Lines: return $tr("ui.common.lines", "Lines");
115
+ case DisplayAs.Points: return $tr("ui.common.points", "Points");
116
+ default: return $tr("ui.common.none", "None");
117
+ }
118
+ };
119
+
120
+ export const filterTypeLabel = (filterType: FilterType | number): string => {
121
+ switch (filterType) {
122
+ case FilterType.Contains: return $tr("ui.common.contains", "contains");
123
+ case FilterType.Different: return "≠";
124
+ case FilterType.EndsWith: return $tr("ui.filter-type.ends-with", "ends with");
125
+ case FilterType.Equal: return "=";
126
+ case FilterType.Less: return "<";
127
+ case FilterType.LessOrEqual: return "≤";
128
+ case FilterType.More: return ">";
129
+ case FilterType.MoreOrEqual: return "≥";
130
+ case FilterType.StartsWith: return $tr("ui.filter-type.starts-with", "start with");
131
+ default: return $tr("ui.common.none", "None");
132
+ }
133
+ };
134
+
135
+ export const heatmapRuleLabel = (heatMap: HeatmapRule | number): string => {
136
+ switch (heatMap) {
137
+ case HeatmapRule.Gradient: return $tr("ui.common.gradient", "Gradient");
138
+ case HeatmapRule.Ranges: return $tr("ui.common.ranges", "Ranges");
139
+ case HeatmapRule.Fixed: return $tr("ui.common.fixed", "Fixed");
140
+ default: return $tr("ui.common.none", "None");
141
+ }
142
+ };
143
+
144
+ export const operationOnLabel = (operationOn: OperationOn | number): string => {
145
+ switch (operationOn) {
146
+ case OperationOn.SameEntity: return $tr("ui.operation-on.same-entity", "Same entity");
147
+ case OperationOn.SameGroup: return $tr("ui.operation-on.same-group", "Same group");
148
+ case OperationOn.SameGroupAndEntity: return $tr("ui.operation-on.same-group-entity", "Same group and entity");
149
+ default: return $tr("ui.common.none", "None");
150
+ }
151
+ };
152
+
153
+ export const planningTypeLabel = (planningType: PlanningType | number): string => {
154
+ switch (planningType) {
155
+ case PlanningType.UntilNext: return $tr("ui.planning-type.until-next", "Until next");
156
+ case PlanningType.ElapsedTime: return $tr("ui.planning-type.elapsed-time", "Elapsed time");
157
+ case PlanningType.SinglePoint: return $tr("ui.planning-type.single-point", "Single point");
158
+ default: return $tr("ui.common.none", "None");
159
+ }
160
+ };
161
+
162
+ export const plotPerLabel = (plotper: PlotPer | number): string => {
163
+ switch (plotper) {
164
+ case PlotPer.SinglePlot: return $tr("ui.plot-per.single-slot", "Single slot");
165
+ case PlotPer.Model: return $tr("ui.common.model", "Model");
166
+ case PlotPer.Group: return $tr("ui.common.group", "Group");
167
+ case PlotPer.Location: return $tr("ui.common.location", "Location");
168
+ case PlotPer.Device: return $tr("ui.common.device", "Device");
169
+ default: return $tr("ui.common.none", "None");
170
+ }
171
+ };
172
+
173
+ export const serieTypeLabel = (serieType: SerieType): string => {
174
+ switch (serieType) {
175
+ case SerieType.Lines: return $tr("ui.common.lines", "Lines");
176
+ case SerieType.Area: return $tr("ui.common.area", "Area");
177
+ case SerieType.Range: return $tr("ui.common.range", "Range");
178
+ case SerieType.Histogram: return $tr("ui.common.histogram", "Histogram");
179
+ case SerieType.Operation: return $tr("ui.common.operation", "Operation");
180
+ case SerieType.Planning: return $tr("ui.common.planning", "Planning");
181
+ case SerieType.ScatterPlot: return $tr("ui.common.scatter-plot", "Scatter plot");
182
+ case SerieType.Top: return $tr("ui.serie-type.top", "Top");
183
+ case SerieType.Bars: return $tr("ui.common.bars", "Bars");
184
+ case SerieType.StackedBars: return $tr("ui.common.stacked-bars", "Stacked bars");
185
+ case SerieType.Pie: return $tr("ui.common.pie", "Pie");
186
+ case SerieType.Heatmap: return $tr('ui.common.heatmap', 'Heatmap');
187
+ case SerieType.Slider: return $tr("ui.common.slider", "Slider");
188
+ case SerieType.Gauge: return $tr("ui.common.gauge", "Gauge");
189
+ case SerieType.ScoreCard: return $tr("ui.common.score-card", "Score card");
190
+ case SerieType.Table: return $tr("ui.serie-type.table", "Table");
191
+ default: return "";
192
+ }
193
+ };
194
+
195
+ export const showModifiers = (serieType: SerieType) => {
196
+ switch (serieType) {
197
+ case SerieType.Lines:
198
+ return { showData: true, showFirst: true, firstLabel: $tr('ui.common.group-by', 'Group by') };
199
+ case SerieType.Area:
200
+ return { showData: true, showFirst: true, firstLabel: $tr('ui.common.group-by', 'Group by') };
201
+ case SerieType.Range:
202
+ return { showData: true, showFirst: true, firstLabel: $tr('ui.common.group-by', 'Group by') };
203
+ case SerieType.Histogram:
204
+ return { showData: true, showFirst: true, firstLabel: $tr('ui.common.group-by', 'Group by') };
205
+ case SerieType.Operation:
206
+ return { showData: true, showFirst: true, firstLabel: $tr('ui.common.group-by', 'Group by') };
207
+ case SerieType.Planning:
208
+ return {
209
+ showData: true, showY: true, showFirst: true, showSecond: true,
210
+ ylabel: $tr('ui.common.y-axis-categories', 'Y Axis categories'),
211
+ firstLabel: $tr('ui.common.group-by', 'Group by'),
212
+ secondLabel: $tr('ui.common.elapsed-time-by', 'Elapsed time by'),
213
+ };
214
+ case SerieType.ScatterPlot:
215
+ return {
216
+ showX: true, showY: true, showFirst: true, showSecond: true,
217
+ xlabel: $tr('ui.common.x-axis-data', 'X axis data'),
218
+ ylabel: $tr('ui.common.y-axis-data', 'Y axis data'),
219
+ firstLabel: $tr('ui.common.group-by', 'Group by'),
220
+ secondLabel: $tr('ui.common.size-by', 'Size by')
221
+ };
222
+ case SerieType.Top:
223
+ return {
224
+ showData: true, showY: true, showFirst: true,
225
+ ylabel: $tr('ui.common.y-axis-categories', 'Y Axis categories'),
226
+ firstLabel: $tr('ui.common.group-by', 'Group by')
227
+ };
228
+ case SerieType.Bars:
229
+ return { showData: true, showFirst: true, firstLabel: $tr('ui.common.group-by', 'Group by') };
230
+ case SerieType.StackedBars:
231
+ return {
232
+ showData: true, showFirst: true, showSecond: true,
233
+ firstLabel: $tr('ui.common.group-by', 'Group by'),
234
+ secondLabel: $tr('ui.common.stack-by', 'Stack by')
235
+ };
236
+ case SerieType.Pie:
237
+ return { showData: true, showFirst: true, firstLabel: $tr('ui.common.group-by', 'Group by') };
238
+ case SerieType.Heatmap:
239
+ return {
240
+ showData: true, showX: true, showY: true,
241
+ xlabel: $tr('ui.common.x-axis-categories', 'X Axis categories'),
242
+ ylabel: $tr('ui.common.y-axis-categories', 'Y Axis categories')
243
+ };
244
+ case SerieType.Slider:
245
+ return { showData: true, showFirst: true, firstLabel: $tr('ui.common.group-by', 'Group by') };
246
+ case SerieType.Gauge:
247
+ return { showData: true, showFirst: true, firstLabel: $tr('ui.common.group-by', 'Group by') };
248
+ case SerieType.ScoreCard:
249
+ return { showData: true, showFirst: true, firstLabel: $tr('ui.common.group-by', 'Group by') };
250
+ case SerieType.Table:
251
+ return { showData: true };
252
+ default:
253
+ return {};
254
+ }
255
+ }
256
+
257
+ export const chartTypeFromSerieType = (serieType: SerieType): ChartType => {
258
+
259
+ switch (serieType) {
260
+ case SerieType.Lines:
261
+ case SerieType.Area:
262
+ case SerieType.Range:
263
+ case SerieType.Histogram:
264
+ case SerieType.Operation:
265
+ case SerieType.Planning:
266
+ case SerieType.ScatterPlot:
267
+ case SerieType.Top:
268
+ case SerieType.Bars:
269
+ case SerieType.StackedBars:
270
+ return ChartType.XY;
271
+ case SerieType.Pie:
272
+ return ChartType.Pie;
273
+ case SerieType.Heatmap:
274
+ return ChartType.Heatmap;
275
+ case SerieType.Slider:
276
+ return ChartType.Slider;
277
+ case SerieType.Gauge:
278
+ return ChartType.Gauge;
279
+ case SerieType.ScoreCard:
280
+ return ChartType.ScoreCard;
281
+ case SerieType.Table:
282
+ return ChartType.Table;
283
+ default:
284
+ return ChartType.None;
285
+ }
286
+ }
287
+
288
+ export const xAxisTypeFromSerieType = (serieType: SerieType): AxisType[] => {
289
+
290
+ switch (serieType) {
291
+ case SerieType.Lines:
292
+ case SerieType.Area:
293
+ case SerieType.Range:
294
+ case SerieType.Histogram:
295
+ case SerieType.Operation:
296
+ case SerieType.Planning:
297
+ return [AxisType.Date];
298
+
299
+ case SerieType.ScatterPlot:
300
+ return [AxisType.Category, AxisType.Value];
301
+
302
+ case SerieType.Top:
303
+ return [AxisType.Value];
304
+
305
+ case SerieType.Bars:
306
+ case SerieType.StackedBars:
307
+ return [AxisType.Category];
308
+
309
+ case SerieType.Heatmap:
310
+ return [AxisType.Date, AxisType.Category];
311
+
312
+ case SerieType.Slider:
313
+ return [AxisType.Value];
314
+
315
+ case SerieType.Gauge:
316
+ case SerieType.ScoreCard:
317
+ case SerieType.Table:
318
+ case SerieType.Pie:
319
+ return [];
320
+ default:
321
+ return [];
322
+ }
323
+ }
324
+
325
+ export const yAxisTypeFromSerieType = (serieType: SerieType): AxisType[] => {
326
+
327
+ switch (serieType) {
328
+ case SerieType.Lines:
329
+ case SerieType.Area:
330
+ case SerieType.Range:
331
+ case SerieType.Histogram:
332
+ case SerieType.Operation:
333
+ return [AxisType.Value];
334
+
335
+ case SerieType.ScatterPlot:
336
+ return [AxisType.Category, AxisType.Value];
337
+
338
+ case SerieType.Bars:
339
+ case SerieType.StackedBars:
340
+ return [AxisType.Value];
341
+
342
+ case SerieType.Top:
343
+ return [AxisType.Category];
344
+
345
+ case SerieType.Planning:
346
+ return [AxisType.Category];
347
+
348
+ case SerieType.Heatmap:
349
+ return [AxisType.Category];
350
+
351
+ case SerieType.Slider:
352
+ return [AxisType.Value];
353
+
354
+ case SerieType.Gauge:
355
+ case SerieType.ScoreCard:
356
+ case SerieType.Table:
357
+ case SerieType.Pie:
358
+ return [];
359
+ default:
360
+ return [];
361
+ }
362
+ }
363
+
364
+ export const hasAxis = (chartType: ChartType) => {
365
+ switch (chartType) {
366
+ case ChartType.XY:
367
+ case ChartType.Heatmap:
368
+ return true;
369
+ default:
370
+ return false;
371
+ }
372
+ }
373
+
374
+
375
+ export const getAllowedSeries = (chartType: ChartType, xAxisType: AxisType, yAxisType: AxisType) => {
376
+
377
+ const items = getEnumEntries(SerieType).map(e => {
378
+ return {
379
+ value: e.value as SerieType,
380
+ text: serieTypeLabel(e.value),
381
+ icon: serieTypeIcon(e.value),
382
+ chartType: chartTypeFromSerieType(e.value),
383
+ xAxis: xAxisTypeFromSerieType(e.value),
384
+ yAxis: yAxisTypeFromSerieType(e.value)
385
+ }
386
+ });
387
+
388
+ const filteredItems = () => {
389
+ switch (chartType) {
390
+ case ChartType.XY: {
391
+ return items.filter(i => i.chartType === ChartType.XY && i.xAxis.includes(xAxisType) && i.yAxis.includes(yAxisType));
392
+ }
393
+ case ChartType.Pie:
394
+ case ChartType.Heatmap:
395
+ case ChartType.Gauge:
396
+ case ChartType.Slider:
397
+ case ChartType.ScoreCard:
398
+ case ChartType.Table: {
399
+ return items.filter(i => i.chartType === chartType);
400
+ }
401
+ default: {
402
+ return [];
403
+ }
404
+ }
405
+ }
406
+
407
+ return filteredItems();
408
+ }
409
+
410
+ export const timeMillisecond = (value: number | null | undefined, unit: TimeUnit | undefined): number => {
411
+ if (value === null || value === undefined || unit === undefined) {
412
+ return 0;
413
+ }
414
+ switch (unit) {
415
+ case TimeUnit.None: return 0;
416
+ case TimeUnit.Millisecond: return value;
417
+ case TimeUnit.Second: return value * 1000;
418
+ case TimeUnit.Minute: return value * 60000;
419
+ case TimeUnit.Hour: return value * 3600000;
420
+ case TimeUnit.Day: return value * 86400000;
421
+ case TimeUnit.Week: return value * 604800000;
422
+ case TimeUnit.Month: return value * 2628000000;
423
+ case TimeUnit.Year: return value * 31536000000;
424
+ default: return 0;
425
+ }
426
+ }
427
+
package/tools/index.ts ADDED
@@ -0,0 +1,4 @@
1
+ export * from "./alertsTools";
2
+ export * from "./chartsTools";
3
+ export * from "./reportsTools";
4
+ export * from "./timeRangeTools";
@@ -0,0 +1,38 @@
1
+ import { useTranslations as useTranslationsProvider } from "@dative-gpi/bones-ui/composables";
2
+ import { ColorEnum } from "../models";
3
+ import { JobHangfireState } from "@dative-gpi/foundation-shared-domain/enums";
4
+
5
+ const { $tr } = useTranslationsProvider();
6
+
7
+ export const getColorByState = (state: number | JobHangfireState | undefined) => {
8
+ switch (state) {
9
+ case JobHangfireState.Succeeded:
10
+ return ColorEnum.Success;
11
+ case JobHangfireState.Failed:
12
+ return ColorEnum.Error;
13
+ default:
14
+ return ColorEnum.Primary;
15
+ }
16
+ };
17
+
18
+ export const getIconByState = (state: number | JobHangfireState | undefined) => {
19
+ switch (state) {
20
+ case JobHangfireState.Succeeded:
21
+ return 'mdi-check-circle-outline';
22
+ case JobHangfireState.Failed:
23
+ return 'mdi-alert-circle-outline';
24
+ default:
25
+ return 'mdi-alert-circle-outline';
26
+ }
27
+ };
28
+
29
+ export const getLabelByState = (state: number | JobHangfireState | undefined) => {
30
+ switch (state) {
31
+ case JobHangfireState.Succeeded:
32
+ return $tr('ui.common.success', 'Success');
33
+ case JobHangfireState.Failed:
34
+ return $tr('ui.common.error', 'Error');
35
+ default:
36
+ return $tr('ui.common.executed', 'Executed');
37
+ }
38
+ };
@@ -0,0 +1,125 @@
1
+ import { DateType, Days } from "@dative-gpi/foundation-shared-domain/enums";
2
+ import { useAppTimeZone } from "@dative-gpi/foundation-shared-services/composables";
3
+
4
+ import { useTranslations as useTranslationsProvider } from "@dative-gpi/bones-ui/composables";
5
+
6
+ const { $tr } = useTranslationsProvider();
7
+
8
+ const { getUserOffset } = useAppTimeZone();
9
+
10
+
11
+ export const applyOffset = (r: DateTimeRange, negative: boolean) => {
12
+ const range: DateTimeRange = {
13
+ startDay: r.startDay,
14
+ startHour: r.startHour,
15
+ startMinute: r.startMinute,
16
+ endDay: r.endDay,
17
+ endHour: r.endHour,
18
+ endMinute: r.endMinute,
19
+ variant: r.variant
20
+ };
21
+
22
+ if (r.variant == DateType.UTC) {
23
+ let innerStartHour = 0;
24
+ let innerEndHour = 0;
25
+
26
+ if (negative) {
27
+ innerStartHour = r.startHour - getUserOffset() / 1000 / 60 / 60;
28
+ innerEndHour = r.endHour - getUserOffset() / 1000 / 60 / 60;
29
+ }
30
+ else {
31
+ innerStartHour = r.startHour + getUserOffset() / 1000 / 60 / 60;
32
+ innerEndHour = r.endHour + getUserOffset() / 1000 / 60 / 60;
33
+ }
34
+
35
+ if (![Days.AllDays].includes(r.startDay)) {
36
+ if (innerStartHour > 23) {
37
+ range.startDay = (r.startDay + 1) % 7;
38
+ range.startHour = innerStartHour - 24;
39
+ }
40
+ else if (innerStartHour < 0) {
41
+ range.startDay = (r.startDay + 6) % 7;
42
+ range.startHour = innerStartHour + 24;
43
+ }
44
+ else {
45
+ range.startHour = innerStartHour;
46
+ }
47
+
48
+ if (innerEndHour > 23) {
49
+ range.endDay = (r.endDay + 1) % 7;
50
+ range.endHour = innerEndHour - 24;
51
+ }
52
+ else if (innerEndHour < 0) {
53
+ range.endDay = (r.endDay + 6) % 7;
54
+ range.endHour = innerEndHour + 24;
55
+ }
56
+ else {
57
+ range.endHour = innerEndHour;
58
+ }
59
+ }
60
+ else {
61
+ if (innerStartHour > 23) {
62
+ range.startHour = innerStartHour - 24;
63
+ }
64
+ else if (innerStartHour < 0) {
65
+ range.startHour = innerStartHour + 24;
66
+ }
67
+ else {
68
+ range.startHour = innerStartHour;
69
+ }
70
+
71
+ if (innerEndHour > 23) {
72
+ range.endHour = innerEndHour - 24;
73
+ }
74
+ else if (innerEndHour < 0) {
75
+ range.endHour = innerEndHour + 24;
76
+ }
77
+ else {
78
+ range.endHour = innerEndHour;
79
+ }
80
+ }
81
+ return {
82
+ startDay: range.startDay,
83
+ startHour: range.startHour,
84
+ startMinute: r.startMinute,
85
+ endDay: range.endDay,
86
+ endHour: range.endHour,
87
+ endMinute: range.endMinute,
88
+ variant: range.variant
89
+ };
90
+ }
91
+ else {
92
+ return r;
93
+ }
94
+ }
95
+
96
+ export interface DateTimeRange {
97
+ startDay: Days;
98
+ startHour: number;
99
+ startMinute: number;
100
+ endDay: Days;
101
+ endHour: number;
102
+ endMinute: number;
103
+ variant: DateType;
104
+ }
105
+
106
+ export const dayLabel = (day: Days | number): string => {
107
+ switch (day) {
108
+ case Days.Monday:
109
+ return $tr("ui.common.monday", "Monday");
110
+ case Days.Tuesday:
111
+ return $tr("ui.common.tuesday", "Tuesday");
112
+ case Days.Wednesday:
113
+ return $tr("ui.common.wednesday", "Wednesday");
114
+ case Days.Thursday:
115
+ return $tr("ui.common.thursday", "Thursday");
116
+ case Days.Friday:
117
+ return $tr("ui.common.friday", "Friday");
118
+ case Days.Saturday:
119
+ return $tr("ui.common.saturday", "Saturday");
120
+ case Days.Sunday:
121
+ return $tr("ui.common.sunday", "Sunday");
122
+ default:
123
+ return $tr("ui.common.all-days", "All days");
124
+ }
125
+ }
@@ -0,0 +1,18 @@
1
+ export const containsSearchTerm = (obj: any, searchTerm: string): boolean => {
2
+ if (obj == null) {
3
+ return false;
4
+ }
5
+ if (typeof obj === 'object') {
6
+ return Object.values(obj).some(value => containsSearchTerm(value, searchTerm));
7
+ }
8
+ if (Array.isArray(obj)) {
9
+ return obj.some(element => containsSearchTerm(element, searchTerm));
10
+ }
11
+ return String(obj).toLowerCase().includes(searchTerm);
12
+ };
13
+
14
+ export const filterItems = <T>(items: T[], filter: string): T[] => {
15
+ const searchTerm = filter.toLowerCase();
16
+
17
+ return items.filter(item => containsSearchTerm(item, searchTerm));
18
+ };
package/utils/index.ts CHANGED
@@ -2,11 +2,13 @@ export * from "./badge";
2
2
  export * from "./color";
3
3
  export * from "./css";
4
4
  export * from "./error";
5
+ export * from "./filter";
5
6
  export * from "./gradient";
6
7
  export * from "./icons";
7
8
  export * from "./leafletMarkers"
8
9
  export * from "./levenshtein";
9
10
  export * from "./lexical";
11
+ export * from "./operations";
10
12
  export * from "./sort";
11
13
  export * from "./statuses";
12
14
  export * from "./time";
@@ -1,6 +1,6 @@
1
- export const locationMarkerHtml = (icon: string, color: string) => {
1
+ export const locationMarkerHtml = (icon: string, color: string, label: string = '') => {
2
2
  const iconHtml = `
3
- <div style="--fs-map-location-pin-color-alpha:${color}50;--fs-map-location-pin-color: ${color}">
3
+ <div title="${label}" style="--fs-map-location-pin-color-alpha:${color}50;--fs-map-location-pin-color: ${color}">
4
4
  <i class="${icon} mdi notranslate v-theme--DefaultTheme fs-icon" aria-hidden="true" style="--fs-icon-font-size: 22px;" />
5
5
  </div>`;
6
6
 
@@ -22,8 +22,8 @@ export const gpsMarkerHtml = () => {
22
22
  return iconHtml;
23
23
  }
24
24
 
25
- export const pinMarkerHtml = (color: string) => {
26
- const iconHtml = `<div style="--fs-map-point-pin-color:${color}" class="fs-map-point-pin" />`;
25
+ export const pinMarkerHtml = (color: string, label: string = "") => {
26
+ const iconHtml = `<div title="${label}" style="--fs-map-point-pin-color:${color}" class="fs-map-point-pin" />`;
27
27
 
28
28
  return iconHtml;
29
29
  }