@dative-gpi/foundation-shared-components 1.0.26 → 1.0.28-remove-deprecated2

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 (265) hide show
  1. package/components/FSBreadcrumbs.vue +1 -0
  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 +20 -12
  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 +51 -32
  15. package/components/FSDialogMultiFormBody.vue +79 -56
  16. package/components/FSDialogRemove.vue +7 -7
  17. package/components/FSDialogSubmit.vue +20 -11
  18. package/components/FSEditImage.vue +1 -1
  19. package/components/FSEditImageUI.vue +20 -10
  20. package/components/FSFadeOut.vue +44 -18
  21. package/components/FSForm.vue +10 -8
  22. package/components/FSGrid.vue +1 -1
  23. package/components/FSIcon.vue +2 -1
  24. package/components/FSIconCard.vue +21 -4
  25. package/components/FSImage.vue +12 -4
  26. package/components/FSImageUI.vue +8 -15
  27. package/components/FSLink.vue +25 -9
  28. package/components/FSLoader.vue +28 -11
  29. package/components/FSOptionGroup.vue +51 -3
  30. package/components/FSRouterLink.vue +42 -0
  31. package/components/FSSlideGroup.vue +19 -5
  32. package/components/FSSpan.vue +9 -2
  33. package/components/FSSwitch.vue +57 -27
  34. package/components/FSTab.vue +15 -13
  35. package/components/FSTabs.vue +32 -7
  36. package/components/FSTag.vue +14 -3
  37. package/components/FSTagGroup.vue +1 -1
  38. package/components/FSText.vue +4 -2
  39. package/components/FSWindow.vue +128 -4
  40. package/components/FSWrapGroup.vue +13 -1
  41. package/components/agenda/FSAgenda.vue +223 -0
  42. package/components/agenda/FSAgendaDialogCalendar.vue +76 -0
  43. package/components/agenda/FSAgendaHeader.vue +215 -0
  44. package/components/agenda/FSAgendaHorizontalEvent.vue +174 -0
  45. package/components/agenda/FSAgendaHorizontalTimeLineMarker.vue +46 -0
  46. package/components/agenda/FSAgendaHoursCol.vue +103 -0
  47. package/components/agenda/FSAgendaHoursRow.vue +164 -0
  48. package/components/agenda/FSAgendaVerticalEvent.vue +160 -0
  49. package/components/agenda/FSAgendaVerticalTimeLineMarker.vue +46 -0
  50. package/components/agenda/FSDayAgenda.vue +199 -0
  51. package/components/agenda/FSMonthAgenda.vue +252 -0
  52. package/components/agenda/FSSelectAgendaMode.vue +54 -0
  53. package/components/agenda/FSWeekAgenda.vue +323 -0
  54. package/components/autocompletes/FSAutoCompleteAddress.vue +22 -20
  55. package/components/autocompletes/FSAutocompleteLanguage.vue +24 -39
  56. package/components/autocompletes/FSAutocompleteTimeZone.vue +26 -38
  57. package/components/buttons/FSButtonAdd.vue +1 -1
  58. package/components/buttons/FSButtonAddLabel.vue +1 -1
  59. package/components/buttons/FSButtonCancel.vue +1 -1
  60. package/components/buttons/FSButtonCancelLabel.vue +1 -1
  61. package/components/buttons/FSButtonCopy.vue +28 -0
  62. package/components/buttons/FSButtonCopyIcon.vue +28 -0
  63. package/components/buttons/FSButtonCopyLabel.vue +27 -0
  64. package/components/buttons/FSButtonCopyMini.vue +28 -0
  65. package/components/buttons/FSButtonDragIcon.vue +27 -0
  66. package/components/buttons/FSButtonDuplicate.vue +1 -1
  67. package/components/buttons/FSButtonDuplicateLabel.vue +1 -1
  68. package/components/buttons/FSButtonEdit.vue +1 -1
  69. package/components/buttons/FSButtonEditLabel.vue +1 -1
  70. package/components/buttons/FSButtonFile.vue +1 -1
  71. package/components/buttons/FSButtonFileLabel.vue +1 -1
  72. package/components/buttons/FSButtonNext.vue +1 -1
  73. package/components/buttons/FSButtonNextLabel.vue +1 -1
  74. package/components/buttons/FSButtonPrevious.vue +1 -1
  75. package/components/buttons/FSButtonPreviousLabel.vue +1 -1
  76. package/components/buttons/FSButtonRedo.vue +1 -1
  77. package/components/buttons/FSButtonRedoLabel.vue +1 -1
  78. package/components/buttons/FSButtonRemove.vue +1 -1
  79. package/components/buttons/FSButtonRemoveLabel.vue +1 -1
  80. package/components/buttons/FSButtonSave.vue +1 -1
  81. package/components/buttons/FSButtonSaveLabel.vue +1 -1
  82. package/components/buttons/FSButtonSearch.vue +1 -1
  83. package/components/buttons/FSButtonSearchLabel.vue +1 -1
  84. package/components/buttons/FSButtonUndo.vue +1 -1
  85. package/components/buttons/FSButtonUndoLabel.vue +1 -1
  86. package/components/buttons/FSButtonUpdate.vue +1 -1
  87. package/components/buttons/FSButtonUpdateLabel.vue +1 -1
  88. package/components/buttons/FSButtonValidate.vue +1 -1
  89. package/components/buttons/FSButtonValidateLabel.vue +1 -1
  90. package/components/calendar/FSSimpleCalendar.vue +145 -0
  91. package/components/calendar/FSSimpleCalendarHeader.vue +60 -0
  92. package/components/calendar/FSSimpleMonthSelector.vue +138 -0
  93. package/components/deviceOrganisations/FSConnectivity.vue +11 -1
  94. package/components/deviceOrganisations/FSConnectivityCard.vue +19 -47
  95. package/components/deviceOrganisations/FSStatus.vue +11 -1
  96. package/components/deviceOrganisations/FSStatusCard.vue +35 -61
  97. package/components/deviceOrganisations/FSStatusesCarousel.vue +1 -0
  98. package/components/deviceOrganisations/FSStatusesRow.vue +9 -3
  99. package/components/deviceOrganisations/FSWorstAlert.vue +30 -37
  100. package/components/deviceOrganisations/FSWorstAlertCard.vue +36 -85
  101. package/components/fields/FSAutocompleteField.vue +516 -341
  102. package/components/fields/FSAutocompleteTag.vue +100 -0
  103. package/components/fields/FSBaseField.vue +44 -27
  104. package/components/fields/FSColorField.vue +42 -39
  105. package/components/fields/FSCommentField.vue +105 -0
  106. package/components/fields/FSDateField.vue +2 -2
  107. package/components/fields/FSDateRangeField.vue +3 -2
  108. package/components/fields/FSDateTimeField.vue +4 -3
  109. package/components/fields/FSDateTimeRangeField.vue +8 -6
  110. package/components/fields/FSEntityFieldUI.vue +271 -0
  111. package/components/fields/FSGradientField.vue +27 -33
  112. package/components/fields/FSIconField.vue +0 -1
  113. package/components/fields/FSMagicConfigField.vue +34 -19
  114. package/components/fields/FSMagicField.vue +9 -4
  115. package/components/fields/FSNumberField.vue +13 -6
  116. package/components/fields/FSRichTextField.vue +102 -52
  117. package/components/fields/FSSearchField.vue +9 -115
  118. package/components/fields/FSSelectField.vue +489 -252
  119. package/components/fields/FSTagField.vue +1 -1
  120. package/components/fields/FSTermField.vue +33 -11
  121. package/components/fields/FSTextArea.vue +26 -7
  122. package/components/fields/FSTextField.vue +19 -10
  123. package/components/fields/FSTimeRangeField.vue +304 -0
  124. package/components/fields/FSTimeStepField.vue +3 -3
  125. package/components/fields/FSTranslateField.vue +4 -3
  126. package/components/fields/FSTranslateRichTextField.vue +15 -10
  127. package/components/fields/FSTranslateTextArea.vue +233 -0
  128. package/components/fields/FSTreeViewField.vue +3 -3
  129. package/components/fields/periodicField/FSPeriodicDailyField.vue +120 -0
  130. package/components/fields/periodicField/FSPeriodicField.vue +131 -0
  131. package/components/fields/periodicField/FSPeriodicMonthlyField.vue +222 -0
  132. package/components/fields/periodicField/FSPeriodicWeeklyField.vue +120 -0
  133. package/components/fields/periodicField/FSPeriodicYearlyField.vue +144 -0
  134. package/components/lists/FSDataTableUI.vue +148 -89
  135. package/components/lists/FSDraggable.vue +2 -2
  136. package/components/lists/FSFilterButton.vue +23 -28
  137. package/components/lists/FSHeaderButton.vue +4 -4
  138. package/components/lists/FSHiddenButton.vue +11 -15
  139. package/components/lists/FSLoadDataTable.vue +10 -7
  140. package/components/lists/FSSimpleList.vue +234 -0
  141. package/components/lists/FSSimpleListItem.vue +132 -0
  142. package/components/map/FSMap.vue +280 -399
  143. package/components/map/FSMapFeatureGroup.vue +51 -0
  144. package/components/map/FSMapLayerButton.vue +5 -5
  145. package/components/map/FSMapMarker.vue +120 -0
  146. package/components/map/FSMapMarkerClusterGroup.vue +72 -0
  147. package/components/map/FSMapOverlay.vue +70 -82
  148. package/components/map/FSMapPolygon.vue +81 -0
  149. package/components/map/FSMapTileLayer.vue +50 -0
  150. package/components/map/keys.ts +4 -0
  151. package/components/selects/FSSelectAutoRefresh.vue +9 -9
  152. package/components/selects/FSSelectDashboardVariableType.vue +5 -4
  153. package/components/selects/FSSelectDateSetting.vue +3 -2
  154. package/components/selects/FSSelectDays.vue +9 -9
  155. package/components/selects/FSSelectListMode.vue +51 -0
  156. package/components/selects/FSSelectMonths.vue +67 -0
  157. package/components/selects/chartSelectors/FSAggregationSelector.vue +52 -0
  158. package/components/selects/chartSelectors/FSAxisTypeSelector.vue +49 -0
  159. package/components/selects/chartSelectors/FSDisplayAsSelector.vue +53 -0
  160. package/components/selects/chartSelectors/FSFilterTypeSelector.vue +54 -0
  161. package/components/selects/chartSelectors/FSHeatmapRuleSelector.vue +54 -0
  162. package/components/selects/chartSelectors/FSOperationOnSelector.vue +53 -0
  163. package/components/selects/chartSelectors/FSPlanningTypeSelector.vue +53 -0
  164. package/components/selects/chartSelectors/FSPlotPerSelector.vue +52 -0
  165. package/components/selects/chartSelectors/FSSelectEntityType.vue +59 -0
  166. package/components/selects/chartSelectors/FSSerieTypeSelector.vue +53 -0
  167. package/components/tiles/FSAlertTileUI.vue +90 -0
  168. package/components/tiles/FSChartTile.vue +73 -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 +134 -0
  184. package/components/views/desktop/FSBaseDesktopView.vue +53 -0
  185. package/components/views/desktop/FSBaseEntityDesktopView.vue +208 -0
  186. package/components/views/mobile/FSBaseDefaultMobileView.vue +132 -0
  187. package/components/views/mobile/FSBaseEntityMobileView.vue +198 -0
  188. package/components/views/mobile/FSBaseMobileView.vue +53 -0
  189. package/composables/useAddress.ts +2 -2
  190. package/composables/useBreakpoints.ts +39 -3
  191. package/composables/useColors.ts +3 -2
  192. package/composables/useMagicFieldProvider.ts +1 -0
  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 +5 -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 +6 -12
  210. package/styles/components/fs_card.scss +0 -1
  211. package/styles/components/fs_clickable.scss +7 -14
  212. package/styles/components/fs_clock.scss +0 -10
  213. package/styles/components/fs_color_field.scss +1 -4
  214. package/styles/components/fs_data_table.scss +6 -9
  215. package/styles/components/fs_dialog.scss +7 -17
  216. package/styles/components/fs_edit_image.scss +8 -0
  217. package/styles/components/fs_fade_out.scss +11 -2
  218. package/styles/components/fs_filter_button.scss +1 -6
  219. package/styles/components/fs_gradient_field.scss +11 -11
  220. package/styles/components/fs_hidden_button.scss +2 -7
  221. package/styles/components/fs_image_card.scss +1 -1
  222. package/styles/components/fs_magic_config_field.scss +1 -2
  223. package/styles/components/fs_map.scss +36 -30
  224. package/styles/components/fs_meta_field.scss +3 -5
  225. package/styles/components/fs_option_group.scss +15 -5
  226. package/styles/components/fs_rich_text_field.scss +1 -9
  227. package/styles/components/fs_select_date_settings.scss +3 -0
  228. package/styles/components/fs_select_field.scss +0 -13
  229. package/styles/components/fs_slide_group.scss +7 -0
  230. package/styles/components/fs_span.scss +2 -1
  231. package/styles/components/fs_switch.scss +1 -0
  232. package/styles/components/fs_tabs.scss +10 -24
  233. package/styles/components/fs_tag.scss +3 -19
  234. package/styles/components/fs_text_area.scss +13 -17
  235. package/styles/components/fs_tile.scss +21 -15
  236. package/styles/components/fs_window.scss +7 -0
  237. package/styles/components/fs_wrap_group.scss +7 -0
  238. package/styles/components/index.scss +5 -5
  239. package/styles/globals/index.scss +1 -5
  240. package/styles/globals/overrides.scss +17 -57
  241. package/styles/globals/text_fonts.scss +18 -66
  242. package/tools/alertsTools.ts +69 -0
  243. package/tools/chartsTools.ts +427 -0
  244. package/tools/index.ts +3 -0
  245. package/tools/timeRangeTools.ts +125 -0
  246. package/utils/filter.ts +18 -0
  247. package/utils/index.ts +1 -0
  248. package/utils/leafletMarkers.ts +9 -3
  249. package/utils/sort.ts +2 -2
  250. package/utils/statuses.ts +1 -1
  251. package/utils/time.ts +17 -17
  252. package/components/autocompletes/FSAutocompleteTag.vue +0 -138
  253. package/components/fields/FSTimeSlotField.vue +0 -250
  254. package/components/map/FSMapEditPointAddressOverlay.vue +0 -164
  255. package/components/views/FSEntityHeader.vue +0 -350
  256. package/components/views/FSListHeader.vue +0 -83
  257. package/components/views/FSListView.vue +0 -83
  258. package/components/views/FSSkeletonView.vue +0 -100
  259. package/styles/components/fs_icon_field.scss +0 -12
  260. package/styles/components/fs_map_overlay.scss +0 -38
  261. package/styles/components/fs_tag_field.scss +0 -8
  262. package/styles/components/fs_time_field.scss +0 -12
  263. package/styles/components/fs_timeslot_field.scss +0 -12
  264. package/styles/globals/breakpoints.scss +0 -20
  265. package/styles/globals/fixes.scss +0 -5
@@ -0,0 +1,271 @@
1
+ <template>
2
+ <FSBaseField
3
+ :description="$props.description"
4
+ :hideHeader="$props.hideHeader"
5
+ :required="$props.required"
6
+ :editable="$props.editable"
7
+ :label="$props.label"
8
+ :messages="messages"
9
+ >
10
+ <FSCol
11
+ gap="12px"
12
+ >
13
+ <FSRow
14
+ :wrap="false"
15
+ >
16
+ <FSSelectField
17
+ :hideHeader="true"
18
+ :modelValue="$props.entityType"
19
+ @update:modelValue="$emit('update:entityType', $event)"
20
+ :items="actualEntityTypes"
21
+ :clearable="false"
22
+ />
23
+ <template
24
+ v-if="itemsCount > 0"
25
+ >
26
+ <FSButton
27
+ :label="$tr('ui.common.edit', 'Edit')"
28
+ icon="mdi-pencil"
29
+ @click="$emit('click:select')"
30
+ />
31
+ </template>
32
+ <template
33
+ v-else
34
+ >
35
+ <FSButton
36
+ :label="$tr('ui.common.select', 'Select')"
37
+ icon="mdi-plus-circle-multiple-outline"
38
+ @click="$emit('click:select')"
39
+ />
40
+ </template>
41
+ </FSRow>
42
+ <FSRow
43
+ v-if="$props.showCount"
44
+ >
45
+ <template
46
+ v-if="itemsCount > 0"
47
+ >
48
+ <FSColor
49
+ :color="ColorEnum.Primary"
50
+ :border="false"
51
+ width="100%"
52
+ >
53
+ <FSRow
54
+ padding="4px"
55
+ align="center-center"
56
+ >
57
+ <FSIcon
58
+ :icon="entityIcon"
59
+ />
60
+ <FSSpan
61
+ font="text-overline"
62
+ >
63
+ {{ $tr('entity-field.selected', '{0} selected(s)', itemsCount) }}
64
+ </FSSpan>
65
+ </FSRow>
66
+ </FSColor>
67
+ </template>
68
+
69
+ <template
70
+ v-else
71
+ >
72
+ <FSColor
73
+ :color="ColorEnum.Light"
74
+ :border="false"
75
+ width="100%"
76
+ >
77
+ <FSRow
78
+ padding="4px"
79
+ align="center-center"
80
+ >
81
+ <FSIcon
82
+ :icon="entityIcon"
83
+ />
84
+ <FSSpan
85
+ font="text-overline"
86
+ >
87
+ {{ $tr('entity-field.no-entity-selected', 'No entity selected') }}
88
+ </FSSpan>
89
+ </FSRow>
90
+ </FSColor>
91
+ </template>
92
+ </FSRow>
93
+
94
+ <FSFadeOut
95
+ v-if="$props.showEntities && itemsCount > 0"
96
+ :maxHeight="$props.listMaxHeight"
97
+ width="100%"
98
+ >
99
+ <slot
100
+ name="items"
101
+ />
102
+ </FSFadeOut>
103
+ </FSCol>
104
+ </FSBaseField>
105
+ </template>
106
+
107
+
108
+ <script lang="ts">
109
+ import { computed, defineComponent, type PropType } from "vue";
110
+
111
+ import { EntityType } from "@dative-gpi/foundation-shared-domain/enums";
112
+ import { ColorEnum } from "../../models";
113
+ import { useTranslations } from "@dative-gpi/bones-ui";
114
+
115
+ import FSRow from "../FSRow.vue";
116
+ import FSCol from "../FSCol.vue";
117
+ import FSBaseField from "./FSBaseField.vue";
118
+ import FSSelectField from "./FSSelectField.vue";
119
+ import FSButton from "../FSButton.vue";
120
+ import FSIcon from "../FSIcon.vue";
121
+ import FSColor from "../FSColor.vue";
122
+
123
+ export default defineComponent({
124
+ name: "FSEntityFieldUI",
125
+ components: {
126
+ FSBaseField,
127
+ FSSelectField,
128
+ FSButton,
129
+ FSIcon,
130
+ FSColor,
131
+ FSRow,
132
+ FSCol
133
+ },
134
+ props: {
135
+ label: {
136
+ type: String as PropType<string | null>,
137
+ required: false,
138
+ default: null
139
+ },
140
+ description: {
141
+ type: String as PropType<string | null>,
142
+ required: false,
143
+ default: null
144
+ },
145
+ itemsCount: {
146
+ type: Number,
147
+ required: false,
148
+ default: 0
149
+ },
150
+ hideHeader: {
151
+ type: Boolean,
152
+ required: false,
153
+ default: false
154
+ },
155
+ required: {
156
+ type: Boolean,
157
+ required: false,
158
+ default: false
159
+ },
160
+ rules: {
161
+ type: Array as PropType<any[]>,
162
+ required: false,
163
+ default: () => []
164
+ },
165
+ messages: {
166
+ type: Array as PropType<string[]>,
167
+ required: false,
168
+ default: null
169
+ },
170
+ editable: {
171
+ type: Boolean,
172
+ required: false,
173
+ default: true
174
+ },
175
+ entityType: {
176
+ type: Number as PropType<EntityType>,
177
+ required: true
178
+ },
179
+ allowedEntityTypes: {
180
+ type: Array as PropType<EntityType[]>,
181
+ required: false,
182
+ default: () => []
183
+ },
184
+ showEntities: {
185
+ type: Boolean,
186
+ required: false,
187
+ default: true
188
+ },
189
+ showCount: {
190
+ type: Boolean,
191
+ required: false,
192
+ default: true
193
+ },
194
+ listMaxHeight: {
195
+ type: String as PropType<string | null>,
196
+ required: false,
197
+ default: "220px"
198
+ }
199
+ },
200
+ emits: ["update:entityType", "click:select"],
201
+ setup(props) {
202
+ const { $tr } = useTranslations();
203
+
204
+ const actualEntityTypes = computed(() => {
205
+ const items = [
206
+ {
207
+ id: EntityType.Model,
208
+ label: $tr("ui.common.models", "Models")
209
+ },
210
+ {
211
+ id: EntityType.Group,
212
+ label: $tr("ui.common.groups", "Groups")
213
+ },
214
+ {
215
+ id: EntityType.Location,
216
+ label: $tr("ui.common.locations", "Locations")
217
+ },
218
+ {
219
+ id: EntityType.Device,
220
+ label: $tr("ui.common.devices", "Devices")
221
+ },
222
+ {
223
+ id: EntityType.User,
224
+ label: $tr("ui.common.users", "Users")
225
+ },
226
+ {
227
+ id: EntityType.Dashboard,
228
+ label: $tr("ui.common.dashboards", "Dashboards")
229
+ },
230
+ {
231
+ id: EntityType.Folder,
232
+ label: $tr("ui.common.folders", "Folders")
233
+ }
234
+ ];
235
+
236
+ if(props.allowedEntityTypes.length) {
237
+ return items.filter(item => props.allowedEntityTypes.includes(item.id));
238
+ } else {
239
+ return items;
240
+ }
241
+ });
242
+
243
+ const entityIcon = computed(() => {
244
+ switch(props.entityType) {
245
+ case EntityType.Model:
246
+ return "mdi-cube";
247
+ case EntityType.Group:
248
+ return "mdi-account-group";
249
+ case EntityType.Location:
250
+ return "mdi-map-marker";
251
+ case EntityType.Device:
252
+ return "mdi-cellphone";
253
+ case EntityType.User:
254
+ return "mdi-account";
255
+ case EntityType.Dashboard:
256
+ return "mdi-view-dashboard";
257
+ case EntityType.Folder:
258
+ return "mdi-folder";
259
+ default:
260
+ return "mdi-cube";
261
+ }
262
+ });
263
+
264
+ return {
265
+ ColorEnum,
266
+ entityIcon,
267
+ actualEntityTypes
268
+ };
269
+ }
270
+ });
271
+ </script>
@@ -21,44 +21,25 @@
21
21
  />
22
22
  </FSRow>
23
23
  <FSSelectField
24
- class="fs-gradient-select-field"
25
- :clearable="false"
24
+ class="fs-gradient-field-select"
26
25
  :editable="$props.editable"
26
+ :clearable="false"
27
27
  :items="items"
28
- :modelValue="JSON.stringify($props.modelValue)"
29
- @update:modelValue="$emit('update:modelValue', presetGradients[$event])"
28
+ modelValue="custom"
29
+ @update:modelValue="$emit('update:modelValue', allGradients[$event])"
30
30
  >
31
31
  <template
32
- v-slot:selection="{ item }"
32
+ #item-prepend="{ item }"
33
33
  >
34
34
  <FSRow
35
35
  class="fs-gradient-field-preview"
36
- height="fill"
36
+ align="center-center"
37
+ height="12px"
37
38
  width="100%"
38
- :style="{ '--fs-gradient-field-background': `linear-gradient(to right, ${encodeGradientCssColors(JSON.parse(item.value))})` }"
39
- >
40
- <span />
41
- </FSRow>
42
- </template>
43
- <template
44
- v-slot:item="{ item, props }"
45
- >
46
- <v-list-item
47
- v-bind="props"
48
- >
49
- <template
50
- #title
51
- >
52
- <FSRow
53
- class="fs-gradient-field-preview"
54
- height="fill"
55
- width="100%"
56
- :style="{ '--fs-gradient-field-background': `linear-gradient(to right, ${encodeGradientCssColors(presetGradients[item.value])})` }"
57
- >
58
- <span />
59
- </FSRow>
60
- </template>
61
- </v-list-item>
39
+ :style="{
40
+ '--fs-gradient-field-background': `linear-gradient(to right, ${encodeGradientCssColors(allGradients[item.id])})`
41
+ }"
42
+ />
62
43
  </template>
63
44
  </FSSelectField>
64
45
  </FSBaseField>
@@ -66,7 +47,7 @@
66
47
  </template>
67
48
 
68
49
  <script lang="ts">
69
- import { type PropType, defineComponent } from "vue";
50
+ import { type PropType, defineComponent, computed } from "vue";
70
51
 
71
52
  import { groupedGradients } from "../../utils";
72
53
  import { useColors } from "../../composables";
@@ -127,14 +108,27 @@ export default defineComponent({
127
108
  const { getColors } = useColors();
128
109
 
129
110
  const presetGradients = groupedGradients[props.colorCount];
130
- const items = Object.keys(presetGradients)
111
+
112
+ const allGradients = computed<Record<string, string[]>>(() => {
113
+ return {
114
+ 'custom': [
115
+ ...props.modelValue
116
+ ],
117
+ ...presetGradients
118
+ }
119
+ });
120
+
121
+ const items = Object.keys(allGradients.value).map((key) => ({
122
+ id: key,
123
+ label: null
124
+ }));
131
125
 
132
126
  const encodeGradientCssColors = (colors: string[]) => {
133
127
  return colors.map((color) => getColors(color).base).join(", ");
134
128
  };
135
129
 
136
130
  return {
137
- presetGradients,
131
+ allGradients,
138
132
  items,
139
133
  encodeGradientCssColors
140
134
  };
@@ -28,7 +28,6 @@
28
28
  </template>
29
29
  </FSTextField>
30
30
  <FSToggleSet
31
- class="fs-icon-field-set"
32
31
  ref="toggleSetRef"
33
32
  variant="slide"
34
33
  :buttonColor="$props.buttonColor"
@@ -1,9 +1,11 @@
1
1
  <template>
2
- <FSRow>
2
+ <FSRow
3
+ class="fs-magic-config-field"
4
+ >
3
5
  <component
4
6
  class="fs-magic-config-field-value"
5
7
  :is="get($props.type)"
6
- :label="$tr('ui.magic-config-field.value', 'Value')"
8
+ :label="$tr('ui.common.value', 'Value')"
7
9
  :editable="$props.editable"
8
10
  :required="true"
9
11
  :rules="rules"
@@ -14,7 +16,7 @@
14
16
  gap="24px"
15
17
  >
16
18
  <FSTranslateField
17
- :label="$tr('ui.magic-config-field.label', 'Label')"
19
+ :label="$tr('ui.common.label', 'Label')"
18
20
  :editable="$props.editable"
19
21
  :modelValue="$props.labelDefault"
20
22
  :translations="$props.translations"
@@ -40,7 +42,7 @@
40
42
  <script lang="ts">
41
43
  import { computed, defineComponent, type PropType } from "vue";
42
44
 
43
- import { DateRules, IconRules, NumberRules, TextRules, TimeRules, TimeStepRules } from "../../models";
45
+ import { DateRules, IconRules, NumberRules, TextRules, TimeRules, TimeStepRules, AutocompleteRules } from "../../models";
44
46
  import { useMagicFieldProvider } from "../../composables";
45
47
  import { MagicFieldType } from "../../models/magicFields";
46
48
 
@@ -68,7 +70,7 @@ export default defineComponent({
68
70
  required: false,
69
71
  default: null
70
72
  },
71
- value: {
73
+ modelValue: {
72
74
  type: String as PropType<string | null>,
73
75
  required: false,
74
76
  default: null
@@ -84,7 +86,7 @@ export default defineComponent({
84
86
  default: true
85
87
  }
86
88
  },
87
- emits: ["click:remove", "click:add", "update:value", "update:labelDefault", "update:translations"],
89
+ emits: ["click:remove", "click:add", "update:modelValue", "update:labelDefault", "update:translations"],
88
90
  setup(props, { emit }) {
89
91
  const { get } = useMagicFieldProvider();
90
92
 
@@ -102,43 +104,56 @@ export default defineComponent({
102
104
  return [TimeRules.required()];
103
105
  case MagicFieldType.TimeStepField:
104
106
  return [TimeStepRules.required()];
107
+ case MagicFieldType.PlotPerField:
108
+ return [AutocompleteRules.required()];
105
109
  }
106
110
  return [];
107
111
  });
108
112
 
109
113
  const valueToInput = computed((): any => {
114
+ if (!props.modelValue) {
115
+ return null;
116
+ }
117
+
110
118
  switch (props.type) {
111
119
  case MagicFieldType.NumberField:
112
120
  case MagicFieldType.DateTimeField:
113
121
  case MagicFieldType.TimeField:
114
- if (props.value == null || isNaN(parseFloat(props.value))) {
122
+ if (isNaN(parseFloat(props.modelValue))) {
115
123
  return null;
116
124
  }
117
- return parseFloat(props.value);
125
+ return parseFloat(props.modelValue);
118
126
  case MagicFieldType.Switch:
119
- if (props.value == null) {
120
- return null;
121
- }
122
- return props.value === "true";
127
+ return props.modelValue === "true";
128
+ case MagicFieldType.TimeStepField:
129
+ return JSON.parse(props.modelValue);
130
+ case MagicFieldType.PlotPerField:
131
+ return parseInt(props.modelValue);
123
132
  default:
124
- return props.value;
133
+ return props.modelValue;
125
134
  }
126
135
  });
127
136
 
128
137
  const inputToValue = (value: any) => {
138
+ if (!value) {
139
+ emit("update:modelValue", null);
140
+ }
141
+
129
142
  switch (props.type) {
130
143
  case MagicFieldType.NumberField:
131
144
  case MagicFieldType.Switch:
132
145
  case MagicFieldType.DateTimeField:
133
146
  case MagicFieldType.TimeField:
134
- if (value == null) {
135
- emit("update:value", null);
136
- break;
137
- }
138
- emit("update:value", value.toString());
147
+ emit("update:modelValue", value.toString());
148
+ break;
149
+ case MagicFieldType.TimeStepField:
150
+ emit("update:modelValue", JSON.stringify(value));
151
+ break;
152
+ case MagicFieldType.PlotPerField:
153
+ emit("update:modelValue", value.toString());
139
154
  break;
140
155
  default:
141
- emit("update:value", value);
156
+ emit("update:modelValue", value);
142
157
  break;
143
158
  }
144
159
  };
@@ -62,7 +62,7 @@ import { computed, defineComponent, type PropType } from "vue";
62
62
 
63
63
  import { useTranslations as useTranslationsProvider } from "@dative-gpi/bones-ui/composables";
64
64
 
65
- import { useAppTimeZone } from "@dative-gpi/foundation-shared-services/composables";
65
+ import { useDateFormat } from "@dative-gpi/foundation-shared-services/composables";
66
66
 
67
67
  import { useMagicFieldProvider } from "../../composables";
68
68
  import { MagicFieldType } from "../../models/magicFields";
@@ -105,7 +105,7 @@ export default defineComponent({
105
105
  },
106
106
  emits: ["update:modelValue"],
107
107
  setup(props, { emit }) {
108
- const { epochToShortTimeFormat } = useAppTimeZone();
108
+ const { epochToShortTimeFormat } = useDateFormat();
109
109
  const { $tr } = useTranslationsProvider();
110
110
  const { get } = useMagicFieldProvider();
111
111
 
@@ -131,6 +131,8 @@ export default defineComponent({
131
131
  return props.modelValue === "true";
132
132
  case MagicFieldType.TimeStepField:
133
133
  return JSON.parse(props.modelValue);
134
+ case MagicFieldType.PlotPerField:
135
+ return parseInt(props.modelValue);
134
136
  default:
135
137
  return props.modelValue;
136
138
  }
@@ -146,9 +148,9 @@ export default defineComponent({
146
148
  return value.toString();
147
149
  case MagicFieldType.Switch:
148
150
  if (value) {
149
- return $tr("ui.magic-field.true", "True");
151
+ return $tr("magic-field.true", "True");
150
152
  }
151
- return $tr("ui.magic-field.false", "False");
153
+ return $tr("magic-field.false", "False");
152
154
  case MagicFieldType.DateTimeField:
153
155
  return epochToShortTimeFormat(parseFloat(value));
154
156
  case MagicFieldType.TimeField:
@@ -175,6 +177,9 @@ export default defineComponent({
175
177
  case MagicFieldType.TimeStepField:
176
178
  emit("update:modelValue", JSON.stringify(value));
177
179
  break;
180
+ case MagicFieldType.PlotPerField:
181
+ emit("update:modelValue", value.toString());
182
+ break;
178
183
  default:
179
184
  emit("update:modelValue", value);
180
185
  break;
@@ -1,6 +1,7 @@
1
1
  <template>
2
2
  <FSTextField
3
3
  class="fs-number-field"
4
+ minWidth="80px"
4
5
  :editable="$props.editable"
5
6
  :modelValue="$props.modelValue?.toString()"
6
7
  @update:modelValue="onUpdate"
@@ -42,14 +43,20 @@ export default defineComponent({
42
43
  },
43
44
  emits: ["update:modelValue"],
44
45
  setup(_, { emit }) {
45
- const onUpdate = (value: string) => {
46
- const match = /([0-9 ]*[,.]?)?[0-9]+/.exec(value);
47
- if (match && !isNaN(parseFloat(match[0].replace(",", ".").replace(" ", "")))) {
48
- emit("update:modelValue", parseFloat(match[0].replace(",", ".").replace(" ", "")));
46
+ const onUpdate = (value: string | null | undefined) => {
47
+ if (value === "-") {
48
+ return;
49
+ }
50
+ if(value === null || value === undefined) {
51
+ emit("update:modelValue", null);
52
+ return;
49
53
  }
50
- else {
51
- emit("update:modelValue", 0);
54
+ const match = /[-]?([0-9 ]*[,.]?)?[0-9]*/.exec(value);
55
+ if (match != null && !isNaN(parseFloat(match[0].replace(",", ".").replace(" ", "")))) {
56
+ emit("update:modelValue", parseFloat(match[0].replace(",", ".").replace(" ", "")));
57
+ return;
52
58
  }
59
+ emit("update:modelValue", 0);
53
60
  };
54
61
 
55
62
  return {