@dative-gpi/foundation-shared-components 0.0.229 → 0.1.68

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 (228) hide show
  1. package/components/FSAccordionPanel.vue +8 -10
  2. package/components/FSBadge.vue +2 -4
  3. package/components/FSBreadcrumbs.vue +9 -10
  4. package/components/FSButton.vue +81 -31
  5. package/components/FSCalendar.vue +35 -33
  6. package/components/FSCalendarTwin.vue +77 -84
  7. package/components/FSCard.vue +29 -16
  8. package/components/FSCardPlaceholder.vue +1 -2
  9. package/components/FSCheckbox.vue +5 -7
  10. package/components/FSChip.vue +9 -11
  11. package/components/FSClickable.vue +67 -57
  12. package/components/FSClock.vue +4 -4
  13. package/components/FSCol.vue +2 -3
  14. package/components/FSColor.vue +13 -31
  15. package/components/FSColorIcon.vue +25 -9
  16. package/components/FSDialog.vue +1 -2
  17. package/components/FSDialogFormBody.vue +4 -4
  18. package/components/FSDialogMenu.vue +2 -4
  19. package/components/FSDialogMultiFormBody.vue +63 -50
  20. package/components/FSDialogRemove.vue +1 -0
  21. package/components/FSDialogSubmit.vue +5 -7
  22. package/components/FSDivider.vue +7 -9
  23. package/components/FSEditImage.vue +27 -274
  24. package/components/FSEditImageUI.vue +303 -0
  25. package/components/FSErrorToast.vue +3 -4
  26. package/components/FSFadeOut.vue +18 -13
  27. package/components/FSGrid.vue +6 -9
  28. package/components/FSGridMosaic.vue +1 -2
  29. package/components/FSIcon.vue +7 -8
  30. package/components/FSIconCard.vue +23 -30
  31. package/components/FSIconCheck.vue +1 -2
  32. package/components/FSImage.vue +21 -193
  33. package/components/FSImageCard.vue +2 -2
  34. package/components/FSImageUI.vue +212 -0
  35. package/components/FSLabel.vue +18 -20
  36. package/components/FSLink.vue +19 -21
  37. package/components/FSLoader.vue +10 -14
  38. package/components/FSOptionGroup.vue +58 -12
  39. package/components/FSPagination.vue +3 -5
  40. package/components/FSRadio.vue +5 -7
  41. package/components/FSRadioGroup.vue +2 -4
  42. package/components/FSRow.vue +3 -4
  43. package/components/FSSlideGroup.vue +15 -4
  44. package/components/FSSlider.vue +9 -11
  45. package/components/FSSpan.vue +11 -9
  46. package/components/FSSwitch.vue +65 -37
  47. package/components/FSTab.vue +2 -4
  48. package/components/FSTabs.vue +36 -16
  49. package/components/FSTag.vue +23 -14
  50. package/components/FSTagGroup.vue +3 -5
  51. package/components/FSText.vue +8 -12
  52. package/components/FSWindow.vue +11 -5
  53. package/components/FSWrapGroup.vue +15 -4
  54. package/components/agenda/FSAgenda.vue +204 -0
  55. package/components/agenda/FSAgendaDialogCalendar.vue +76 -0
  56. package/components/agenda/FSAgendaHeader.vue +190 -0
  57. package/components/agenda/FSAgendaHorizontalEvent.vue +162 -0
  58. package/components/agenda/FSAgendaHorizontalTimeLineMarker.vue +46 -0
  59. package/components/agenda/FSAgendaHoursCol.vue +103 -0
  60. package/components/agenda/FSAgendaHoursRow.vue +124 -0
  61. package/components/agenda/FSAgendaVerticalEvent.vue +160 -0
  62. package/components/agenda/FSAgendaVerticalTimeLineMarker.vue +46 -0
  63. package/components/agenda/FSDayAgenda.vue +200 -0
  64. package/components/agenda/FSMonthAgenda.vue +257 -0
  65. package/components/agenda/FSSelectAgendaMode.vue +54 -0
  66. package/components/agenda/FSWeekAgenda.vue +328 -0
  67. package/components/autocompletes/FSAutocompleteLanguage.vue +18 -39
  68. package/components/autocompletes/FSAutocompleteTimeZone.vue +20 -38
  69. package/components/buttons/FSButtonCancelMini.vue +1 -0
  70. package/components/buttons/FSButtonCopy.vue +28 -0
  71. package/components/buttons/FSButtonCopyIcon.vue +28 -0
  72. package/components/buttons/FSButtonCopyLabel.vue +27 -0
  73. package/components/buttons/FSButtonCopyMini.vue +28 -0
  74. package/components/buttons/FSButtonDragIcon.vue +27 -0
  75. package/components/buttons/FSButtonDuplicateMini.vue +1 -0
  76. package/components/buttons/FSButtonEditMini.vue +1 -0
  77. package/components/buttons/FSButtonFileMini.vue +1 -0
  78. package/components/buttons/FSButtonNextMini.vue +1 -0
  79. package/components/buttons/FSButtonPreviousMini.vue +1 -0
  80. package/components/buttons/FSButtonRedoMini.vue +1 -0
  81. package/components/buttons/FSButtonRemoveMini.vue +1 -0
  82. package/components/buttons/FSButtonSaveMini.vue +1 -0
  83. package/components/buttons/FSButtonSearchMini.vue +1 -0
  84. package/components/buttons/FSButtonUndoMini.vue +1 -0
  85. package/components/buttons/FSButtonUpdateMini.vue +1 -0
  86. package/components/buttons/FSButtonValidateMini.vue +1 -0
  87. package/components/deviceOrganisations/FSConnectivity.vue +11 -1
  88. package/components/deviceOrganisations/FSConnectivityCard.vue +20 -49
  89. package/components/deviceOrganisations/FSStatus.vue +11 -1
  90. package/components/deviceOrganisations/FSStatusCard.vue +40 -60
  91. package/components/deviceOrganisations/FSStatusesCarousel.vue +1 -0
  92. package/components/deviceOrganisations/FSStatusesRow.vue +10 -5
  93. package/components/deviceOrganisations/FSWorstAlert.vue +19 -13
  94. package/components/deviceOrganisations/FSWorstAlertCard.vue +36 -47
  95. package/components/fields/FSAutocompleteField.vue +501 -323
  96. package/components/fields/FSAutocompleteTag.vue +100 -0
  97. package/components/fields/FSBaseField.vue +26 -16
  98. package/components/fields/FSColorField.vue +63 -55
  99. package/components/fields/FSCommentField.vue +93 -0
  100. package/components/fields/FSDateField.vue +2 -2
  101. package/components/fields/FSDateRangeField.vue +2 -2
  102. package/components/fields/FSDateTimeField.vue +4 -3
  103. package/components/fields/FSDateTimeRangeField.vue +7 -6
  104. package/components/fields/FSEntityFieldUI.vue +271 -0
  105. package/components/fields/FSGradientField.vue +27 -33
  106. package/components/fields/FSIconField.vue +2 -3
  107. package/components/fields/FSMagicConfigField.vue +28 -19
  108. package/components/fields/FSMagicField.vue +25 -17
  109. package/components/fields/FSNumberField.vue +9 -7
  110. package/components/fields/FSPasswordField.vue +2 -3
  111. package/components/fields/FSRichTextField.vue +32 -5
  112. package/components/fields/FSSearchField.vue +2 -2
  113. package/components/fields/FSSelectField.vue +483 -251
  114. package/components/fields/FSTagField.vue +4 -6
  115. package/components/fields/FSTermField.vue +25 -13
  116. package/components/fields/FSTextArea.vue +18 -6
  117. package/components/fields/FSTextField.vue +13 -10
  118. package/components/fields/FSTimeField.vue +1 -1
  119. package/components/fields/FSTimeSlotField.vue +3 -4
  120. package/components/fields/FSTimeStepField.vue +157 -0
  121. package/components/fields/FSTranslateField.vue +3 -2
  122. package/components/fields/FSTranslateRichTextField.vue +4 -3
  123. package/components/fields/FSTranslateTextArea.vue +233 -0
  124. package/components/fields/FSTreeViewField.vue +7 -9
  125. package/components/fields/periodicField/FSPeriodicDailyField.vue +120 -0
  126. package/components/fields/periodicField/FSPeriodicField.vue +131 -0
  127. package/components/fields/periodicField/FSPeriodicMonthlyField.vue +222 -0
  128. package/components/fields/periodicField/FSPeriodicWeeklyField.vue +120 -0
  129. package/components/fields/periodicField/FSPeriodicYearlyField.vue +144 -0
  130. package/components/lists/FSDataIteratorItem.vue +8 -10
  131. package/components/lists/FSDataTableUI.vue +47 -39
  132. package/components/lists/FSFilterButton.vue +20 -22
  133. package/components/lists/FSHiddenButton.vue +10 -12
  134. package/components/lists/FSLoadDataTable.vue +4 -6
  135. package/components/lists/FSSimpleList.vue +229 -0
  136. package/components/map/FSMap.vue +256 -405
  137. package/components/map/FSMapFeatureGroup.vue +51 -0
  138. package/components/map/FSMapLayerButton.vue +6 -3
  139. package/components/map/FSMapMarker.vue +116 -0
  140. package/components/map/FSMapMarkerClusterGroup.vue +72 -0
  141. package/components/map/FSMapOverlay.vue +69 -83
  142. package/components/map/FSMapPolygon.vue +81 -0
  143. package/components/map/FSMapTileLayer.vue +50 -0
  144. package/components/map/keys.ts +4 -0
  145. package/components/selects/FSSelectAutoRefresh.vue +1 -1
  146. package/components/selects/FSSelectDashboardVariableType.vue +1 -1
  147. package/components/selects/FSSelectDateSetting.vue +3 -3
  148. package/components/selects/FSSelectDays.vue +1 -1
  149. package/components/selects/FSSelectListMode.vue +51 -0
  150. package/components/selects/FSSelectMonths.vue +67 -0
  151. package/components/tiles/FSChartTileUI.vue +116 -0
  152. package/components/tiles/FSCommentTileUI.vue +149 -0
  153. package/components/tiles/FSDashboardOrganisationTileUI.vue +6 -8
  154. package/components/tiles/FSDashboardOrganisationTypeTileUI.vue +6 -8
  155. package/components/tiles/FSDashboardShallowTileUI.vue +6 -8
  156. package/components/tiles/FSDeviceOrganisationTileUI.vue +30 -18
  157. package/components/tiles/FSFolderTileUI.vue +6 -6
  158. package/components/tiles/FSGroupTileUI.vue +31 -22
  159. package/components/tiles/FSLoadTile.vue +5 -7
  160. package/components/tiles/FSLocationTileUI.vue +157 -0
  161. package/components/tiles/FSModelTileUI.vue +18 -0
  162. package/components/tiles/FSServiceAccountOrganisationTileUI.vue +142 -0
  163. package/components/tiles/FSSimpleTileUI.vue +57 -36
  164. package/components/tiles/FSTile.vue +115 -55
  165. package/components/tiles/FSUserOrganisationTileUI.vue +25 -35
  166. package/components/toggleSets/FSToggleSetPosition.vue +1 -1
  167. package/components/views/FSEntityHeader.vue +343 -0
  168. package/components/views/FSEntityView.vue +163 -0
  169. package/components/views/FSListHeader.vue +83 -0
  170. package/components/views/FSListView.vue +83 -0
  171. package/components/views/FSSkeletonView.vue +100 -0
  172. package/composables/useAddress.ts +2 -2
  173. package/composables/useColors.ts +15 -5
  174. package/composables/useMagicFieldProvider.ts +7 -6
  175. package/composables/useSlots.ts +51 -28
  176. package/models/agenda.ts +9 -0
  177. package/models/deviceAlerts.ts +1 -1
  178. package/models/deviceConnectivities.ts +1 -1
  179. package/models/index.ts +1 -0
  180. package/models/magicFields.ts +1 -0
  181. package/models/map.ts +2 -2
  182. package/models/rules.ts +10 -5
  183. package/models/tables.ts +3 -1
  184. package/package.json +4 -4
  185. package/styles/components/fs_agenda.scss +32 -0
  186. package/styles/components/fs_agenda_event.scss +41 -0
  187. package/styles/components/fs_agenda_hours_col.scss +4 -0
  188. package/styles/components/fs_agenda_hours_row.scss +13 -0
  189. package/styles/components/fs_agenda_time_line_marker.scss +19 -0
  190. package/styles/components/fs_card.scss +0 -1
  191. package/styles/components/fs_clickable.scss +5 -3
  192. package/styles/components/fs_color_field.scss +1 -0
  193. package/styles/components/fs_data_table.scss +2 -0
  194. package/styles/components/fs_dialog.scss +11 -15
  195. package/styles/components/fs_edit_image.scss +8 -0
  196. package/styles/components/fs_fade_out.scss +2 -1
  197. package/styles/components/fs_filter_button.scss +1 -6
  198. package/styles/components/fs_gradient_field.scss +11 -11
  199. package/styles/components/fs_magic_config_field.scss +2 -2
  200. package/styles/components/fs_map.scss +36 -30
  201. package/styles/components/fs_option_group.scss +15 -5
  202. package/styles/components/fs_radio.scss +11 -0
  203. package/styles/components/fs_rich_text_field.scss +2 -1
  204. package/styles/components/fs_search_field.scss +3 -0
  205. package/styles/components/fs_select_date_settings.scss +3 -0
  206. package/styles/components/fs_slide_group.scss +5 -0
  207. package/styles/components/fs_span.scss +2 -1
  208. package/styles/components/fs_switch.scss +1 -0
  209. package/styles/components/fs_tabs.scss +9 -0
  210. package/styles/components/fs_text_area.scss +15 -1
  211. package/styles/components/fs_tile.scss +22 -6
  212. package/styles/components/fs_window.scss +5 -0
  213. package/styles/components/fs_wrap_group.scss +4 -0
  214. package/styles/components/index.scss +6 -1
  215. package/styles/globals/overrides.scss +22 -19
  216. package/styles/globals/text_fonts.scss +17 -55
  217. package/tools/alertsTools.ts +54 -0
  218. package/tools/chartsTools.ts +300 -0
  219. package/tools/index.ts +2 -0
  220. package/utils/badge.ts +9 -0
  221. package/utils/filter.ts +18 -0
  222. package/utils/index.ts +2 -0
  223. package/utils/leafletMarkers.ts +8 -2
  224. package/utils/statuses.ts +1 -1
  225. package/utils/time.ts +27 -1
  226. package/components/autocompletes/FSAutocompleteTag.vue +0 -138
  227. package/components/map/FSMapEditPointAddressOverlay.vue +0 -164
  228. package/styles/components/fs_map_overlay.scss +0 -38
@@ -0,0 +1,300 @@
1
+ import { AxisType, ColorSets, SerieType, ChartType, TimeUnit } from "@dative-gpi/foundation-shared-domain/enums";
2
+
3
+ import { serieTypeLabel, getEnumEntries } from "@dative-gpi/foundation-core-components/utils";
4
+ import { useTranslations as useTranslationsProvider } from "@dative-gpi/bones-ui/composables";
5
+
6
+ const { $tr } = useTranslationsProvider();
7
+
8
+ export const chartTypeLabel = (value: ChartType): string => {
9
+ switch (value) {
10
+ case ChartType.Gauge: return $tr("ui.common.gauge", "Gauge");
11
+ case ChartType.Heatmap: return $tr("ui.common.heatmap", "Heatmap");
12
+ case ChartType.Pie: return $tr("ui.common.pie", "Pie");
13
+ case ChartType.ScoreCard: return $tr("ui.common.scorecard", "Scorecard");
14
+ case ChartType.Slider: return $tr("ui.common.slider", "Slider");
15
+ case ChartType.Table: return $tr("ui.common.table", "Table");
16
+ case ChartType.XY: return $tr("ui.common.xy", "XY");
17
+ default: return $tr("ui.common.none", "None");
18
+ }
19
+ }
20
+
21
+ export const colorSetLabel = (value: ColorSets | number): string => {
22
+ switch (value) {
23
+ case ColorSets.Default: return $tr("ui.common.am-charts", "Am Charts");
24
+ case ColorSets.Grafana: return $tr("ui.common.grafana", "Grafana");
25
+ case ColorSets.Armytage: return $tr("ui.common.armytage", "Armytage");
26
+ case ColorSets.Hash: return $tr("ui.common.hash", "Hash");
27
+ case ColorSets.Kelly: return $tr("ui.common.material", "Kelly");
28
+ case ColorSets.ZeileisHornikMurrell: return $tr("ui.common.material", "ZeileisHornikMurrell");
29
+ default: return $tr("ui.common.none", "None");
30
+ }
31
+ }
32
+
33
+
34
+ export const chartIcon = (value: ChartType): string => {
35
+ switch (value) {
36
+ case ChartType.Gauge: return "mdi-gauge";
37
+ case ChartType.Heatmap: return "mdi-blur-linear";
38
+ case ChartType.Pie: return "mdi-chart-pie";
39
+ case ChartType.ScoreCard: return "mdi-counter";
40
+ case ChartType.Slider: return "mdi-ruler";
41
+ case ChartType.Table: return "mdi-table";
42
+ case ChartType.XY: return "mdi-chart-line";
43
+ default: return $tr("ui.common.none", "None");
44
+ }
45
+ }
46
+
47
+ export const serieTypeIcon = (serieType: SerieType): string => {
48
+ switch (serieType) {
49
+ case SerieType.Lines: return "mdi-chart-line";
50
+ case SerieType.Area: return "mdi-chart-areaspline";
51
+ case SerieType.Range: return "mdi-chart-line-stacked";
52
+ case SerieType.Histogram: return "mdi-chart-histogram";
53
+ case SerieType.Operation: return "mdi-division";
54
+ case SerieType.Planning: return "mdi-chart-timeline";
55
+ case SerieType.ScatterPlot: return "mdi-chart-scatter-plot";
56
+ case SerieType.Top: return "mdi-podium-gold";
57
+ case SerieType.Bars: return "mdi-chart-bar";
58
+ case SerieType.StackedBars: return "mdi-chart-bar-stacked";
59
+ case SerieType.Pie: return "mdi-chart-pie";
60
+ case SerieType.Heatmap: return "mdi-blur-linear";
61
+ case SerieType.Slider: return "mdi-blur-linear";
62
+ case SerieType.Gauge: return "mdi-gauge";
63
+ case SerieType.ScoreCard: return "mdi-counter";
64
+ case SerieType.Table: return "mdi-table";
65
+ default: return "";
66
+ }
67
+ }
68
+
69
+ export const showModifiers = (serieType: SerieType) => {
70
+ switch (serieType) {
71
+ case SerieType.Lines:
72
+ return { showData: true, showFirst: true, firstLabel: $tr('ui.common.group-by', 'Group by') };
73
+ case SerieType.Area:
74
+ return { showData: true, showFirst: true, firstLabel: $tr('ui.common.group-by', 'Group by') };
75
+ case SerieType.Range:
76
+ return { showData: true, showFirst: true, firstLabel: $tr('ui.common.group-by', 'Group by') };
77
+ case SerieType.Histogram:
78
+ return { showData: true, showFirst: true, firstLabel: $tr('ui.common.group-by', 'Group by') };
79
+ case SerieType.Operation:
80
+ return { showData: true, showFirst: true, firstLabel: $tr('ui.common.group-by', 'Group by') };
81
+ case SerieType.Planning:
82
+ return {
83
+ showData: true, showY: true, showFirst: true, showSecond: true,
84
+ ylabel: $tr('ui.common.y-axis-categories', 'Y Axis categories'),
85
+ firstLabel: $tr('ui.common.group-by', 'Group by'),
86
+ secondLabel: $tr('ui.common.elapsed-time-by', 'Elapsed time by'),
87
+ };
88
+ case SerieType.ScatterPlot:
89
+ return {
90
+ showX: true, showY: true, showFirst: true, showSecond: true,
91
+ xlabel: $tr('ui.common.x-axis-data', 'X axis data'),
92
+ ylabel: $tr('ui.common.y-axis-data', 'Y axis data'),
93
+ firstLabel: $tr('ui.common.group-by', 'Group by'),
94
+ secondLabel: $tr('ui.common.size-by', 'Size by')
95
+ };
96
+ case SerieType.Top:
97
+ return {
98
+ showData: true, showY: true, showFirst: true,
99
+ ylabel: $tr('ui.common.y-axis-categories', 'Y Axis categories'),
100
+ firstLabel: $tr('ui.common.group-by', 'Group by')
101
+ };
102
+ case SerieType.Bars:
103
+ return { showData: true, showFirst: true, firstLabel: $tr('ui.common.group-by', 'Group by') };
104
+ case SerieType.StackedBars:
105
+ return {
106
+ showData: true, showFirst: true, showSecond: true,
107
+ firstLabel: $tr('ui.common.group-by', 'Group by'),
108
+ secondLabel: $tr('ui.common.stack-by', 'Stack by')
109
+ };
110
+ case SerieType.Pie:
111
+ return { showData: true, showFirst: true, firstLabel: $tr('ui.common.group-by', 'Group by') };
112
+ case SerieType.Heatmap:
113
+ return {
114
+ showData: true, showX: true, showY: true,
115
+ xlabel: $tr('ui.common.x-axis-categories', 'X Axis categories'),
116
+ ylabel: $tr('ui.common.y-axis-categories', 'Y Axis categories')
117
+ };
118
+ case SerieType.Slider:
119
+ return { showData: true, showFirst: true, firstLabel: $tr('ui.common.group-by', 'Group by') };
120
+ case SerieType.Gauge:
121
+ return { showData: true, showFirst: true, firstLabel: $tr('ui.common.group-by', 'Group by') };
122
+ case SerieType.ScoreCard:
123
+ return { showData: true, showFirst: true, firstLabel: $tr('ui.common.group-by', 'Group by') };
124
+ case SerieType.Table:
125
+ return { showData: true };
126
+ default:
127
+ return {};
128
+ }
129
+ }
130
+
131
+ export const chartTypeFromSerieType = (serieType: SerieType): ChartType => {
132
+
133
+ switch (serieType) {
134
+ case SerieType.Lines:
135
+ case SerieType.Area:
136
+ case SerieType.Range:
137
+ case SerieType.Histogram:
138
+ case SerieType.Operation:
139
+ case SerieType.Planning:
140
+ case SerieType.ScatterPlot:
141
+ case SerieType.Top:
142
+ case SerieType.Bars:
143
+ case SerieType.StackedBars:
144
+ return ChartType.XY;
145
+ case SerieType.Pie:
146
+ return ChartType.Pie;
147
+ case SerieType.Heatmap:
148
+ return ChartType.Heatmap;
149
+ case SerieType.Slider:
150
+ return ChartType.Slider;
151
+ case SerieType.Gauge:
152
+ return ChartType.Gauge;
153
+ case SerieType.ScoreCard:
154
+ return ChartType.ScoreCard;
155
+ case SerieType.Table:
156
+ return ChartType.Table;
157
+ default:
158
+ return ChartType.None;
159
+ }
160
+ }
161
+
162
+ export const xAxisTypeFromSerieType = (serieType: SerieType): AxisType[] => {
163
+
164
+ switch (serieType) {
165
+ case SerieType.Lines:
166
+ case SerieType.Area:
167
+ case SerieType.Range:
168
+ case SerieType.Histogram:
169
+ case SerieType.Operation:
170
+ case SerieType.Planning:
171
+ return [AxisType.Date];
172
+
173
+ case SerieType.ScatterPlot:
174
+ return [AxisType.Category, AxisType.Value];
175
+
176
+ case SerieType.Top:
177
+ return [AxisType.Value];
178
+
179
+ case SerieType.Bars:
180
+ case SerieType.StackedBars:
181
+ return [AxisType.Category];
182
+
183
+ case SerieType.Heatmap:
184
+ return [AxisType.Date, AxisType.Category];
185
+
186
+ case SerieType.Slider:
187
+ return [AxisType.Value];
188
+
189
+ case SerieType.Gauge:
190
+ case SerieType.ScoreCard:
191
+ case SerieType.Table:
192
+ case SerieType.Pie:
193
+ return [];
194
+ default:
195
+ return [];
196
+ }
197
+ }
198
+
199
+ export const yAxisTypeFromSerieType = (serieType: SerieType): AxisType[] => {
200
+
201
+ switch (serieType) {
202
+ case SerieType.Lines:
203
+ case SerieType.Area:
204
+ case SerieType.Range:
205
+ case SerieType.Histogram:
206
+ case SerieType.Operation:
207
+ return [AxisType.Value];
208
+
209
+ case SerieType.ScatterPlot:
210
+ return [AxisType.Category, AxisType.Value];
211
+
212
+ case SerieType.Bars:
213
+ case SerieType.StackedBars:
214
+ return [AxisType.Value];
215
+
216
+ case SerieType.Top:
217
+ return [AxisType.Category];
218
+
219
+ case SerieType.Planning:
220
+ return [AxisType.Category];
221
+
222
+ case SerieType.Heatmap:
223
+ return [AxisType.Category];
224
+
225
+ case SerieType.Slider:
226
+ return [AxisType.Value];
227
+
228
+ case SerieType.Gauge:
229
+ case SerieType.ScoreCard:
230
+ case SerieType.Table:
231
+ case SerieType.Pie:
232
+ return [];
233
+ default:
234
+ return [];
235
+ }
236
+ }
237
+
238
+ export const hasAxis = (chartType: ChartType) => {
239
+ switch (chartType) {
240
+ case ChartType.XY:
241
+ case ChartType.Heatmap:
242
+ return true;
243
+ default:
244
+ return false;
245
+ }
246
+ }
247
+
248
+
249
+ export const getAllowedSeries = (chartType: ChartType, xAxisType: AxisType, yAxisType: AxisType) => {
250
+
251
+ const items = getEnumEntries(SerieType).map(e => {
252
+ return {
253
+ value: e.value as SerieType,
254
+ text: serieTypeLabel(e.value),
255
+ icon: serieTypeIcon(e.value),
256
+ chartType: chartTypeFromSerieType(e.value),
257
+ xAxis: xAxisTypeFromSerieType(e.value),
258
+ yAxis: yAxisTypeFromSerieType(e.value)
259
+ }
260
+ });
261
+
262
+ const filteredItems = () => {
263
+ switch (chartType) {
264
+ case ChartType.XY: {
265
+ return items.filter(i => i.chartType === ChartType.XY && i.xAxis.includes(xAxisType) && i.yAxis.includes(yAxisType));
266
+ }
267
+ case ChartType.Pie:
268
+ case ChartType.Heatmap:
269
+ case ChartType.Gauge:
270
+ case ChartType.Slider:
271
+ case ChartType.ScoreCard:
272
+ case ChartType.Table: {
273
+ return items.filter(i => i.chartType === chartType);
274
+ }
275
+ default: {
276
+ return [];
277
+ }
278
+ }
279
+ }
280
+
281
+ return filteredItems();
282
+ }
283
+
284
+ export const timeMillisecond = (value: number | null | undefined, unit: TimeUnit | undefined): number => {
285
+ if (value === null || value === undefined || unit === undefined) {
286
+ return 0;
287
+ }
288
+ switch (unit) {
289
+ case TimeUnit.None: return 0;
290
+ case TimeUnit.Millisecond: return value;
291
+ case TimeUnit.Second: return value * 1000;
292
+ case TimeUnit.Minute: return value * 60000;
293
+ case TimeUnit.Hour: return value * 3600000;
294
+ case TimeUnit.Day: return value * 86400000;
295
+ case TimeUnit.Week: return value * 604800000;
296
+ case TimeUnit.Month: return value * 2628000000;
297
+ case TimeUnit.Year: return value * 31536000000;
298
+ default: return 0;
299
+ }
300
+ }
package/tools/index.ts ADDED
@@ -0,0 +1,2 @@
1
+ export * from "./alertsTools";
2
+ export * from "./chartsTools";
package/utils/badge.ts ADDED
@@ -0,0 +1,9 @@
1
+ export const getBadgeFromNumber = (value: number, parenthesis: boolean = false): string => {
2
+ if (value < 1) {
3
+ return "";
4
+ }
5
+ if (value > 99) {
6
+ return `${parenthesis ? '(' : ''}99+${parenthesis ? ')' : ''}`;
7
+ }
8
+ return `${parenthesis ? '(' : ''}${value.toString()}${parenthesis ? ')' : ''}`;
9
+ }
@@ -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
@@ -1,6 +1,8 @@
1
+ export * from "./badge";
1
2
  export * from "./color";
2
3
  export * from "./css";
3
4
  export * from "./error";
5
+ export * from "./filter";
4
6
  export * from "./gradient";
5
7
  export * from "./icons";
6
8
  export * from "./leafletMarkers"
@@ -1,6 +1,6 @@
1
1
  export const locationMarkerHtml = (icon: string, color: string) => {
2
2
  const iconHtml = `
3
- <div style="--fs-map-mylocation-pin-color-alpha:${color}50;--fs-map-location-pin-color: ${color}">
3
+ <div 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
 
@@ -16,8 +16,14 @@ export const clusterMarkerHtml = (label: string) => {
16
16
  return iconHtml;
17
17
  }
18
18
 
19
- export const myLocationMarkerHtml = () => {
19
+ export const gpsMarkerHtml = () => {
20
20
  const iconHtml = `<div class="fs-map-mylocation-pin" />`;
21
21
 
22
+ return iconHtml;
23
+ }
24
+
25
+ export const pinMarkerHtml = (color: string) => {
26
+ const iconHtml = `<div style="--fs-map-point-pin-color:${color}" class="fs-map-point-pin" />`;
27
+
22
28
  return iconHtml;
23
29
  }
package/utils/statuses.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { useTranslations as useTranslationsProvider } from "@dative-gpi/bones-ui/composables";
2
- import { ConnectivityStatus } from "@dative-gpi/foundation-shared-domain/models";
2
+ import { ConnectivityStatus } from "@dative-gpi/foundation-shared-domain/enums";
3
3
 
4
4
  const { $tr } = useTranslationsProvider();
5
5
 
package/utils/time.ts CHANGED
@@ -1,7 +1,33 @@
1
1
  import { useTranslations as useTranslationsProvider } from "@dative-gpi/bones-ui/composables";
2
2
 
3
+ import { TimeUnit } from "@dative-gpi/foundation-shared-domain/enums"
4
+
3
5
  const { $tr } = useTranslationsProvider();
4
6
 
7
+ export const timeSteps = [
8
+ { id: TimeUnit.Second, label: $tr("ui.time-step.second.singular", "Second"), plural: $tr("ui.time-step.second.plural", "Seconds") },
9
+ { id: TimeUnit.Minute, label: $tr("ui.time-step.minute.singular", "Minute"), plural: $tr("ui.time-step.minute.plural", "Minutes") },
10
+ { id: TimeUnit.Hour, label: $tr("ui.time-step.hour.singular", "Hour"), plural: $tr("ui.time-step.hour.plural", "Hours") },
11
+ { id: TimeUnit.Day, label: $tr("ui.time-step.day.singular", "Day"), plural: $tr("ui.time-step.day.plural", "Days") },
12
+ { id: TimeUnit.Week, label: $tr("ui.time-step.week.singular", "Week"), plural: $tr("ui.time-step.week.plural", "Weeks") },
13
+ { id: TimeUnit.Month, label: $tr("ui.time-step.month.singular", "Month"), plural: $tr("ui.time-step.month.plural", "Months") },
14
+ { id: TimeUnit.Year, label: $tr("ui.time-step.year.singular", "Year"), plural: $tr("ui.time-step.year.plural", "Years") },
15
+ ];
16
+
17
+ export const timeStepToString = (value: { value: number, unit: TimeUnit } | null): string => {
18
+ if (!value) {
19
+ return "";
20
+ }
21
+
22
+ const unit = timeSteps.find(step => step.id === value.unit);
23
+ if (!unit) {
24
+ return "";
25
+ }
26
+
27
+ return `${value.value} ${value.value === 1 ? unit.label.toLowerCase() : unit.plural.toLowerCase()}`;
28
+ };
29
+
30
+ // TODO : remove everything below this line
5
31
  export const timeScale: any[] = [
6
32
  { id: 1, label: $tr("ui.time-field.second.singular", "Second"), plural: $tr("ui.time-field.second.plural", "Seconds") },
7
33
  { id: 60, label: $tr("ui.time-field.minute.singular", "Minute"), plural: $tr("ui.time-field.minute.plural", "Minutes") },
@@ -26,4 +52,4 @@ export const getTimeBestString = (value: number): string => {
26
52
  const unit = getTimeScaleIndex(value);
27
53
  const figure = value / timeScale[unit].id;
28
54
  return `${figure} ${figure === 1 ? timeScale[unit].label.toLowerCase() : timeScale[unit].plural.toLowerCase()}`;
29
- }
55
+ };
@@ -1,138 +0,0 @@
1
- <template>
2
- <FSCol>
3
- <FSAutocompleteField
4
- v-if="variant=='standard'"
5
- :label="label"
6
- :items="innerItems"
7
- :multiple="true"
8
- :modelValue="modelValue?.map(m=>m.id)"
9
- @update:modelValue="onUpdateModelValue"
10
- @keydown="onKeydown"
11
- v-binds="$attrs"
12
- >
13
- <template
14
- #autocomplete-chip
15
- >
16
- </template>
17
- </FSAutocompleteField>
18
- <FSAutocompleteField
19
- v-else
20
- :label="label"
21
- :items="innerItems"
22
- :multiple="true"
23
- :modelValue="modelValue?.map(m=>m.id)"
24
- :showSearch="true"
25
- @update:modelValue="onUpdateModelValue"
26
- @add:item="onAddItem"
27
- @keydown="onKeydown"
28
- v-binds="$attrs"
29
- >
30
- <template
31
- #autocomplete-chip
32
- >
33
- </template>
34
- </FSAutocompleteField>
35
- <FSTagGroup
36
- v-if="modelValue != null"
37
- :tags="modelValue?.map((v) => v.label) ?? []"
38
- @remove="onRemoveValue($event)"
39
- />
40
- </FSCol>
41
- </template>
42
-
43
- <script lang="ts">
44
- import type { PropType } from "vue";
45
- import { computed, defineComponent, ref, watch } from "vue";
46
-
47
- import { uuidv4 } from '@dative-gpi/bones-ui';
48
-
49
- import FSAutocompleteField from "../fields/FSAutocompleteField.vue";
50
- import FSTagGroup from "../FSTagGroup.vue";
51
-
52
- export default defineComponent({
53
- components: {
54
- FSAutocompleteField,
55
- FSTagGroup,
56
- },
57
- props:{
58
- modelValue: {
59
- type: Array as PropType<{id : string, label : string, isCustom: boolean}[] | null>,
60
- required: false,
61
- default: () => []
62
- },
63
- items: {
64
- type: Array as PropType<{id : string, label : string, isCustom: boolean}[]>,
65
- required: false,
66
- default: () => []
67
- },
68
- label : {
69
- type: String,
70
- required: false
71
- },
72
- variant: {
73
- type: String as PropType<'standard' | 'tagged'>,
74
- required: false,
75
- default : 'standard'
76
- },
77
- },
78
- emits: ["update:modelValue"],
79
- setup(props, {emit}) {
80
-
81
- const tagValues = ref<{id : string, label : string, isCustom : boolean}[]>([]);
82
-
83
- const innerItems = computed(()=>{
84
-
85
- if(props.variant === 'standard'){
86
- return props.items
87
- }
88
- else{
89
- return props.items.concat(tagValues.value);
90
- }
91
- });
92
-
93
- const onUpdateModelValue = (value: string[] | null) => {
94
- emit('update:modelValue', value?.map((v) => innerItems.value.find((i) => i.id === v)));
95
- }
96
-
97
- const onRemoveValue = (value: string) => {
98
- const idValue = innerItems.value.find((v) => v.label === value)?.id;
99
- if (idValue) {
100
- if(tagValues.value.map((v) => v.label).includes(value)){
101
- tagValues.value = tagValues.value.filter((v) => v.label !== value);
102
- }
103
- emit('update:modelValue', [...props.modelValue?.filter((v) => v.id !== idValue) ?? []]);
104
- }
105
- }
106
-
107
- const onAddItem = (value: string) => {
108
- if (innerItems.value.map((v) => v.label).includes(value)) {
109
- return;
110
- }
111
- let item = {id: uuidv4(), label: value, isCustom: true};
112
- tagValues.value.push(item);
113
- emit('update:modelValue', [...props.modelValue?? [],item]);
114
- }
115
-
116
- const onKeydown = (event: KeyboardEvent) => {
117
- if (event.key === 'Backspace') {
118
- emit('update:modelValue', [...props.modelValue ?? []]);
119
- }
120
- };
121
-
122
- watch(() => props.modelValue, (newValue) => {
123
- if (newValue) {
124
- tagValues.value = props.modelValue?.filter(m=>m.isCustom) ?? [];
125
- }
126
- }, {immediate: true});
127
-
128
-
129
- return {
130
- innerItems,
131
- onUpdateModelValue,
132
- onAddItem,
133
- onRemoveValue,
134
- onKeydown
135
- }
136
- }
137
- })
138
- </script>