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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (297) hide show
  1. package/assets/images/map/snow.png +0 -0
  2. package/components/FSAccordionPanel.vue +40 -21
  3. package/components/FSBreadcrumbs.vue +21 -12
  4. package/components/FSButton.vue +16 -16
  5. package/components/FSCalendar.vue +50 -12
  6. package/components/FSCalendarTwin.vue +95 -43
  7. package/components/FSCard.vue +61 -9
  8. package/components/FSCardPlaceholder.vue +8 -5
  9. package/components/FSCheckbox.vue +5 -4
  10. package/components/FSChip.vue +73 -45
  11. package/components/FSChipGroup.vue +69 -0
  12. package/components/FSClickable.vue +11 -9
  13. package/components/FSClock.vue +30 -12
  14. package/components/FSCol.vue +11 -5
  15. package/components/FSColorIcon.vue +23 -5
  16. package/components/FSDialog.vue +2 -1
  17. package/components/FSDialogContent.vue +12 -11
  18. package/components/FSDialogForm.vue +22 -2
  19. package/components/FSDialogFormBody.vue +50 -31
  20. package/components/FSDialogMenu.vue +17 -8
  21. package/components/FSDialogMultiFormBody.vue +79 -56
  22. package/components/FSDialogRemove.vue +7 -8
  23. package/components/FSDialogSubmit.vue +20 -11
  24. package/components/FSEditImage.vue +1 -1
  25. package/components/FSEditImageUI.vue +20 -10
  26. package/components/FSFadeOut.vue +53 -21
  27. package/components/FSForm.vue +10 -8
  28. package/components/FSGrid.vue +1 -1
  29. package/components/FSIcon.vue +4 -3
  30. package/components/FSIconCard.vue +68 -12
  31. package/components/FSImage.vue +9 -2
  32. package/components/FSImageUI.vue +8 -15
  33. package/components/FSInformationsMenu.vue +142 -0
  34. package/components/FSInstantPicker.vue +269 -0
  35. package/components/FSLink.vue +25 -9
  36. package/components/FSLoader.vue +28 -10
  37. package/components/FSMenu.vue +47 -0
  38. package/components/FSOptionGroup.vue +57 -9
  39. package/components/FSOptionItem.vue +4 -4
  40. package/components/FSPagination.vue +1 -1
  41. package/components/FSPlayButtons.vue +72 -0
  42. package/components/FSProgressBar.vue +94 -0
  43. package/components/FSRadio.vue +5 -4
  44. package/components/FSRadioGroup.vue +3 -3
  45. package/components/FSRouterLink.vue +42 -0
  46. package/components/FSSlideGroup.vue +19 -5
  47. package/components/FSSlider.vue +6 -5
  48. package/components/FSSpan.vue +12 -7
  49. package/components/FSSwitch.vue +47 -21
  50. package/components/FSTab.vue +15 -13
  51. package/components/FSTabs.vue +32 -7
  52. package/components/FSTag.vue +16 -5
  53. package/components/FSTagGroup.vue +4 -4
  54. package/components/FSText.vue +11 -7
  55. package/components/FSToggleSet.vue +7 -7
  56. package/components/FSWindow.vue +122 -5
  57. package/components/FSWrapGroup.vue +13 -1
  58. package/components/agenda/FSAgenda.vue +50 -37
  59. package/components/agenda/FSAgendaDialogCalendar.vue +2 -2
  60. package/components/agenda/FSAgendaHeader.vue +35 -10
  61. package/components/agenda/FSAgendaHorizontalEvent.vue +18 -6
  62. package/components/agenda/FSAgendaHoursRow.vue +48 -8
  63. package/components/agenda/FSAgendaVerticalEvent.vue +1 -1
  64. package/components/agenda/FSDayAgenda.vue +1 -2
  65. package/components/agenda/FSMonthAgenda.vue +3 -9
  66. package/components/agenda/FSSelectAgendaMode.vue +2 -2
  67. package/components/agenda/FSWeekAgenda.vue +7 -13
  68. package/components/autocompletes/FSAutoCompleteAddress.vue +25 -20
  69. package/components/autocompletes/FSAutocompleteLanguage.vue +7 -1
  70. package/components/autocompletes/FSAutocompleteTimeZone.vue +7 -1
  71. package/components/buttons/FSButtonAdd.vue +1 -1
  72. package/components/buttons/FSButtonAddLabel.vue +1 -1
  73. package/components/buttons/FSButtonCancel.vue +1 -1
  74. package/components/buttons/FSButtonCancelLabel.vue +1 -1
  75. package/components/buttons/FSButtonCheckbox.vue +4 -4
  76. package/components/buttons/FSButtonCopy.vue +1 -1
  77. package/components/buttons/FSButtonCopyLabel.vue +1 -1
  78. package/components/buttons/FSButtonDuplicate.vue +1 -1
  79. package/components/buttons/FSButtonDuplicateLabel.vue +1 -1
  80. package/components/buttons/FSButtonEdit.vue +1 -1
  81. package/components/buttons/FSButtonEditLabel.vue +1 -1
  82. package/components/buttons/FSButtonFile.vue +1 -1
  83. package/components/buttons/FSButtonFileLabel.vue +1 -1
  84. package/components/buttons/FSButtonNext.vue +1 -1
  85. package/components/buttons/FSButtonNextLabel.vue +1 -1
  86. package/components/buttons/FSButtonPrevious.vue +1 -1
  87. package/components/buttons/FSButtonPreviousLabel.vue +1 -1
  88. package/components/buttons/FSButtonRedo.vue +1 -1
  89. package/components/buttons/FSButtonRedoLabel.vue +1 -1
  90. package/components/buttons/FSButtonRemove.vue +1 -1
  91. package/components/buttons/FSButtonRemoveLabel.vue +1 -1
  92. package/components/buttons/FSButtonSave.vue +1 -1
  93. package/components/buttons/FSButtonSaveLabel.vue +1 -1
  94. package/components/buttons/FSButtonSearch.vue +1 -1
  95. package/components/buttons/FSButtonSearchLabel.vue +1 -1
  96. package/components/buttons/FSButtonUndo.vue +1 -1
  97. package/components/buttons/FSButtonUndoLabel.vue +1 -1
  98. package/components/buttons/FSButtonUpdate.vue +1 -1
  99. package/components/buttons/FSButtonUpdateLabel.vue +1 -1
  100. package/components/buttons/FSButtonValidate.vue +1 -1
  101. package/components/buttons/FSButtonValidateLabel.vue +1 -1
  102. package/components/calendar/FSSimpleCalendar.vue +145 -0
  103. package/components/calendar/FSSimpleCalendarHeader.vue +60 -0
  104. package/components/calendar/FSSimpleMonthSelector.vue +138 -0
  105. package/components/deviceOrganisations/FSConnectivity.vue +16 -4
  106. package/components/deviceOrganisations/FSConnectivityCard.vue +17 -45
  107. package/components/deviceOrganisations/FSStatus.vue +16 -4
  108. package/components/deviceOrganisations/FSStatusCard.vue +33 -59
  109. package/components/deviceOrganisations/FSStatusRichCard.vue +171 -0
  110. package/components/deviceOrganisations/FSStatusesCarousel.vue +1 -0
  111. package/components/deviceOrganisations/FSStatusesRow.vue +8 -2
  112. package/components/deviceOrganisations/FSWorstAlert.vue +37 -42
  113. package/components/deviceOrganisations/FSWorstAlertCard.vue +35 -84
  114. package/components/fields/FSAutocompleteField.vue +85 -82
  115. package/components/fields/FSAutocompleteTag.vue +1 -1
  116. package/components/fields/FSBaseField.vue +54 -30
  117. package/components/fields/FSClosableSearchField.vue +83 -0
  118. package/components/fields/FSColorField.vue +48 -44
  119. package/components/fields/FSCommentField.vue +28 -16
  120. package/components/fields/FSDateField.vue +13 -10
  121. package/components/fields/FSDateRangeField.vue +6 -5
  122. package/components/fields/FSDateTimeField.vue +14 -11
  123. package/components/fields/FSDateTimeRangeDialog.vue +160 -0
  124. package/components/fields/FSDateTimeRangeField.vue +23 -115
  125. package/components/fields/FSEntityFieldUI.vue +36 -19
  126. package/components/fields/FSGradientField.vue +5 -5
  127. package/components/fields/FSIconField.vue +16 -9
  128. package/components/fields/FSMagicConfigField.vue +15 -7
  129. package/components/fields/FSMagicField.vue +7 -2
  130. package/components/fields/FSNumberField.vue +9 -4
  131. package/components/fields/FSPasswordField.vue +7 -7
  132. package/components/fields/FSRichTextField.vue +78 -58
  133. package/components/fields/FSSearchField.vue +9 -115
  134. package/components/fields/FSSelectField.vue +69 -71
  135. package/components/fields/FSTagField.vue +10 -10
  136. package/components/fields/FSTermField.vue +72 -47
  137. package/components/fields/FSTextArea.vue +17 -11
  138. package/components/fields/FSTextField.vue +15 -10
  139. package/components/fields/FSTimeField.vue +14 -10
  140. package/components/fields/FSTimeRangeField.vue +310 -0
  141. package/components/fields/FSTimeStepField.vue +5 -5
  142. package/components/fields/FSTranslateField.vue +10 -10
  143. package/components/fields/FSTranslateRichTextField.vue +41 -20
  144. package/components/fields/FSTranslateTextArea.vue +10 -10
  145. package/components/fields/FSTreeViewField.vue +15 -13
  146. package/components/fields/periodicField/FSPeriodicDailyField.vue +7 -7
  147. package/components/fields/periodicField/FSPeriodicField.vue +15 -15
  148. package/components/fields/periodicField/FSPeriodicMonthlyField.vue +16 -16
  149. package/components/fields/periodicField/FSPeriodicWeeklyField.vue +28 -18
  150. package/components/fields/periodicField/FSPeriodicYearlyField.vue +12 -12
  151. package/components/lists/FSDataIteratorItem.vue +23 -67
  152. package/components/lists/FSDataTableUI.vue +220 -137
  153. package/components/lists/FSDraggable.vue +2 -2
  154. package/components/lists/FSFilterButton.vue +14 -16
  155. package/components/lists/FSHeaderButton.vue +11 -9
  156. package/components/lists/FSHiddenButton.vue +9 -9
  157. package/components/lists/FSLoadDataTable.vue +10 -7
  158. package/components/lists/FSSimpleList.vue +96 -102
  159. package/components/lists/FSSimpleListItem.vue +131 -0
  160. package/components/map/FSMap.vue +146 -158
  161. package/components/map/FSMapFeatureGroup.vue +7 -1
  162. package/components/map/FSMapLayerButton.vue +4 -3
  163. package/components/map/FSMapMarker.vue +70 -48
  164. package/components/map/FSMapMarkerClusterGroup.vue +32 -7
  165. package/components/map/FSMapOverlay.vue +44 -24
  166. package/components/map/FSMapPolygon.vue +16 -4
  167. package/components/map/FSMapTileLayer.vue +26 -9
  168. package/components/map/layers.ts +0 -0
  169. package/components/selects/FSSelectAutoRefresh.vue +8 -8
  170. package/components/selects/FSSelectDashboardVariableType.vue +4 -3
  171. package/components/selects/FSSelectDateSetting.vue +2 -2
  172. package/components/selects/FSSelectDays.vue +8 -8
  173. package/components/selects/FSSelectListMode.vue +2 -2
  174. package/components/selects/FSSelectMapLayer.vue +68 -0
  175. package/components/selects/FSSelectMonths.vue +13 -13
  176. package/components/selects/chartSelectors/FSAggregationSelector.vue +52 -0
  177. package/components/selects/chartSelectors/FSAxisTypeSelector.vue +49 -0
  178. package/components/selects/chartSelectors/FSDisplayAsSelector.vue +53 -0
  179. package/components/selects/chartSelectors/FSFilterTypeSelector.vue +54 -0
  180. package/components/selects/chartSelectors/FSHeatmapRuleSelector.vue +54 -0
  181. package/components/selects/chartSelectors/FSOperationOnSelector.vue +53 -0
  182. package/components/selects/chartSelectors/FSPlanningTypeSelector.vue +53 -0
  183. package/components/selects/chartSelectors/FSPlotPerSelector.vue +52 -0
  184. package/components/selects/chartSelectors/FSSelectEntityType.vue +59 -0
  185. package/components/selects/chartSelectors/FSSerieTypeSelector.vue +53 -0
  186. package/components/tiles/FSAlertTileUI.vue +90 -0
  187. package/components/tiles/FSChartTileUI.vue +61 -52
  188. package/components/tiles/FSCommentTileUI.vue +38 -13
  189. package/components/tiles/FSDashboardOrganisationTypeTileUI.vue +14 -2
  190. package/components/tiles/FSDashboardShallowTileUI.vue +14 -2
  191. package/components/tiles/FSDeviceOrganisationTileUI.vue +6 -6
  192. package/components/tiles/FSGroupTileUI.vue +58 -110
  193. package/components/tiles/FSGroupingTileUI.vue +115 -0
  194. package/components/tiles/FSLoadTile.vue +16 -10
  195. package/components/tiles/FSLocationTileUI.vue +63 -55
  196. package/components/tiles/FSModelTileUI.vue +5 -46
  197. package/components/tiles/FSServiceAccountOrganisationTileUI.vue +0 -6
  198. package/components/tiles/FSSimpleTileUI.vue +34 -29
  199. package/components/tiles/FSTile.vue +46 -39
  200. package/components/tiles/FSUserOrganisationTileUI.vue +1 -7
  201. package/components/toggleSets/FSToggleSetPosition.vue +1 -1
  202. package/components/views/FSBaseView.vue +64 -0
  203. package/components/views/FSEntityView.vue +12 -140
  204. package/components/views/FSSimpleView.vue +29 -0
  205. package/components/views/desktop/FSBaseDefaultDesktopView.vue +135 -0
  206. package/components/views/desktop/FSBaseDesktopView.vue +53 -0
  207. package/components/views/desktop/FSBaseEntityDesktopView.vue +211 -0
  208. package/components/views/mobile/FSBaseDefaultMobileView.vue +133 -0
  209. package/components/views/mobile/FSBaseEntityMobileView.vue +206 -0
  210. package/components/views/mobile/FSBaseMobileView.vue +53 -0
  211. package/composables/index.ts +1 -0
  212. package/composables/useAddress.ts +40 -8
  213. package/composables/useBreakpoints.ts +40 -4
  214. package/composables/useColors.ts +16 -7
  215. package/composables/useMagicFieldProvider.ts +1 -0
  216. package/composables/useMapLayers.ts +62 -0
  217. package/composables/useSlots.ts +2 -1
  218. package/models/colors.ts +2 -1
  219. package/models/deviceAlerts.ts +1 -0
  220. package/models/magicFields.ts +1 -0
  221. package/models/map.ts +12 -10
  222. package/models/rules.ts +6 -3
  223. package/models/tables.ts +5 -2
  224. package/models/variableNode.ts +8 -5
  225. package/package.json +5 -5
  226. package/styles/components/fs_agenda.scss +4 -0
  227. package/styles/components/fs_agenda_event.scss +1 -1
  228. package/styles/components/fs_agenda_hours_row.scss +0 -8
  229. package/styles/components/fs_autocomplete_field.scss +0 -13
  230. package/styles/components/fs_breadcrumbs.scss +18 -36
  231. package/styles/components/fs_button.scss +7 -5
  232. package/styles/components/fs_calendar.scss +1 -0
  233. package/styles/components/fs_card.scss +9 -0
  234. package/styles/components/fs_chip.scss +13 -7
  235. package/styles/components/fs_clickable.scss +16 -23
  236. package/styles/components/fs_clock.scss +0 -10
  237. package/styles/components/fs_col.scss +1 -1
  238. package/styles/components/fs_color_field.scss +1 -4
  239. package/styles/components/fs_data_table.scss +6 -9
  240. package/styles/components/fs_dialog.scss +4 -10
  241. package/styles/components/fs_dialog_menu.scss +4 -2
  242. package/styles/components/fs_draggable.scss +0 -5
  243. package/styles/components/fs_edit_image.scss +8 -0
  244. package/styles/components/fs_fade_out.scss +10 -2
  245. package/styles/components/fs_filter_button.scss +1 -6
  246. package/styles/components/fs_hidden_button.scss +2 -7
  247. package/styles/components/fs_image_card.scss +6 -4
  248. package/styles/components/fs_magic_config_field.scss +1 -2
  249. package/styles/components/fs_map.scss +57 -17
  250. package/styles/components/fs_meta_field.scss +3 -5
  251. package/styles/components/fs_option_group.scss +15 -5
  252. package/styles/components/fs_password_field.scss +4 -2
  253. package/styles/components/fs_progress_bar.scss +14 -0
  254. package/styles/components/fs_radio.scss +0 -11
  255. package/styles/components/fs_rich_text_field.scss +1 -10
  256. package/styles/components/fs_select_field.scss +4 -13
  257. package/styles/components/fs_slide_group.scss +7 -0
  258. package/styles/components/fs_span.scss +13 -5
  259. package/styles/components/fs_status_rich_card.scss +6 -0
  260. package/styles/components/fs_switch.scss +1 -0
  261. package/styles/components/fs_tabs.scss +19 -33
  262. package/styles/components/fs_tag.scss +8 -22
  263. package/styles/components/fs_text_area.scss +2 -21
  264. package/styles/components/fs_tile.scss +0 -19
  265. package/styles/components/fs_window.scss +3 -1
  266. package/styles/components/fs_wrap_group.scss +7 -0
  267. package/styles/components/index.scss +2 -6
  268. package/styles/globals/index.scss +1 -5
  269. package/styles/globals/overrides.scss +28 -61
  270. package/styles/globals/scrollbars.scss +8 -0
  271. package/styles/globals/text_fonts.scss +18 -66
  272. package/styles/globals/touchscreen.scss +2 -2
  273. package/tools/alertsTools.ts +87 -12
  274. package/tools/chartsTools.ts +143 -16
  275. package/tools/index.ts +3 -1
  276. package/tools/reportsTools.ts +38 -0
  277. package/tools/timeRangeTools.ts +125 -0
  278. package/utils/badge.ts +9 -5
  279. package/utils/filter.ts +7 -4
  280. package/utils/index.ts +1 -0
  281. package/utils/leafletMarkers.ts +4 -4
  282. package/utils/operations.ts +108 -0
  283. package/utils/sort.ts +2 -2
  284. package/utils/time.ts +16 -16
  285. package/components/fields/FSTimeSlotField.vue +0 -250
  286. package/components/views/FSEntityHeader.vue +0 -350
  287. package/components/views/FSListHeader.vue +0 -83
  288. package/components/views/FSListView.vue +0 -83
  289. package/components/views/FSSkeletonView.vue +0 -100
  290. package/styles/components/fs_data_iterator_item.scss +0 -33
  291. package/styles/components/fs_icon_field.scss +0 -12
  292. package/styles/components/fs_search_field.scss +0 -3
  293. package/styles/components/fs_tag_field.scss +0 -8
  294. package/styles/components/fs_time_field.scss +0 -12
  295. package/styles/components/fs_timeslot_field.scss +0 -12
  296. package/styles/globals/breakpoints.scss +0 -20
  297. package/styles/globals/fixes.scss +0 -5
@@ -20,7 +20,7 @@
20
20
  :description="$props.description"
21
21
  :hideHeader="$props.hideHeader"
22
22
  :clearable="$props.clearable"
23
- :editable="$props.editable"
23
+ :disabled="$props.disabled"
24
24
  :required="$props.required"
25
25
  :validateOn="validateOn"
26
26
  :label="$props.label"
@@ -64,7 +64,7 @@
64
64
  name="clear"
65
65
  >
66
66
  <FSButton
67
- v-if="$props.clearable && $props.editable && !!$props.modelValue"
67
+ v-if="$props.clearable && !$props.disabled && !!$props.modelValue"
68
68
  icon="mdi-close"
69
69
  variant="icon"
70
70
  :color="ColorEnum.Dark"
@@ -79,7 +79,7 @@
79
79
  <FSButton
80
80
  icon="mdi-chevron-down"
81
81
  variant="icon"
82
- :editable="$props.editable"
82
+ :disabled="$props.disabled"
83
83
  :color="ColorEnum.Dark"
84
84
  @click="openMobileOverlay"
85
85
  />
@@ -122,6 +122,7 @@
122
122
  </FSCard>
123
123
  </FSSlideGroup>
124
124
  <FSDialogMenu
125
+ padding="16px"
125
126
  v-model="dialog"
126
127
  >
127
128
  <template
@@ -135,69 +136,52 @@
135
136
  >
136
137
  <FSRow
137
138
  v-for="(item, index) in $props.items"
139
+ align="center-left"
140
+ height="36px"
141
+ :wrap="false"
138
142
  :key="index"
143
+ @click="$props.multiple ?
144
+ onCheckboxChange(item[$props.itemValue!]) :
145
+ onRadioChange(item[$props.itemValue!])
146
+ "
139
147
  >
140
- <FSCheckbox
141
- v-if="$props.multiple"
142
- :label="item[$props.itemTitle!]"
143
- :editable="$props.editable"
144
- :modelValue="$props.modelValue?.includes(item[$props.itemValue!])"
145
- @update:modelValue="() => onCheckboxChange(item[$props.itemValue!])"
146
- >
147
- <template
148
- #label="{ font }"
149
- >
150
- <FSRow
151
- align="center-left"
152
- :wrap="false"
153
- >
154
- <slot
155
- name="item-prepend"
156
- v-bind="{ item }"
157
- />
158
- <FSSpan
159
- :font="font"
160
- >
161
- {{ item[$props.itemTitle!] }}
162
- </FSSpan>
163
- </FSRow>
164
- </template>
165
- </FSCheckbox>
166
- <FSRadio
167
- v-else
168
- :selected="$props.modelValue === item[$props.itemValue!]"
169
- :label="item[$props.itemTitle!]"
170
- :editable="$props.editable"
171
- :item="item"
172
- :modelValue="item[$props.itemValue!]"
173
- @update:modelValue="() => onRadioChange(item[$props.itemValue!])"
148
+ <FSRow
149
+ style="min-width: 0;"
150
+ :wrap="false"
174
151
  >
175
- <template
176
- #label="{ font }"
152
+ <slot
153
+ name="item-prepend"
154
+ v-bind="{ item }"
155
+ />
156
+ <FSSpan
157
+ :font="selectedItems.includes(item) ? 'text-button' : 'text-body'"
177
158
  >
178
- <FSRow
179
- align="center-left"
180
- :wrap="false"
181
- >
182
- <slot
183
- name="item-prepend"
184
- v-bind="{ item }"
185
- />
186
- <FSSpan
187
- :font="font"
188
- >
189
- {{ item[$props.itemTitle!] }}
190
- </FSSpan>
191
- </FSRow>
192
- </template>
193
- </FSRadio>
159
+ {{ item[$props.itemTitle!] }}
160
+ </FSSpan>
161
+ </FSRow>
194
162
  <FSRow
195
163
  align="center-right"
164
+ width="hug"
165
+ :wrap="false"
196
166
  >
197
167
  <slot
198
168
  name="item-append"
199
169
  v-bind="{ item }"
200
170
  />
171
+ <FSCheckbox
172
+ v-if="$props.multiple"
173
+ :disabled="$props.disabled"
174
+ :modelValue="$props.modelValue?.includes(item[$props.itemValue!])"
175
+ @update:modelValue="onCheckboxChange(item[$props.itemValue!])"
176
+ />
177
+ <FSRadio
178
+ v-else
179
+ :selected="$props.modelValue === item[$props.itemValue!]"
180
+ :disabled="$props.disabled"
181
+ :item="item"
182
+ :modelValue="item[$props.itemValue!]"
183
+ @update:modelValue="onRadioChange(item[$props.itemValue!])"
184
+ />
201
185
  </FSRow>
202
186
  </FSRow>
203
187
  </FSCol>
@@ -207,7 +191,7 @@
207
191
  padding="4px 3px"
208
192
  >
209
193
  <FSSpan>
210
- {{ $tr("ui.select-field.no-data", "No data") }}
194
+ {{ $tr("ui.common.no-data", "No data") }}
211
195
  </FSSpan>
212
196
  </FSRow>
213
197
  </template>
@@ -215,16 +199,17 @@
215
199
  </FSCol>
216
200
  <FSBaseField
217
201
  v-else
202
+ :style="style"
218
203
  :description="$props.description"
219
204
  :hideHeader="$props.hideHeader"
220
205
  :required="$props.required"
221
- :editable="$props.editable"
206
+ :disabled="$props.disabled"
222
207
  :label="$props.label"
223
208
  :messages="messages"
224
209
  >
225
210
  <FSToggleSet
226
211
  v-if="$props.toggleSet"
227
- :editable="$props.editable"
212
+ :disabled="$props.disabled"
228
213
  :multiple="$props.multiple"
229
214
  :required="$props.required"
230
215
  :values="$props.items"
@@ -249,10 +234,11 @@
249
234
  <v-select
250
235
  class="fs-select-field"
251
236
  variant="outlined"
252
- :clearable="$props.clearable && $props.editable && !!$props.modelValue"
237
+ :clearable="$props.clearable && !$props.disabled && !!$props.modelValue"
253
238
  :itemTitle="$props.itemTitle"
254
239
  :itemValue="$props.itemValue"
255
- :readonly="!$props.editable"
240
+ :disabled="$props.disabled"
241
+ :readonly="$props.readonly"
256
242
  :multiple="$props.multiple"
257
243
  :validateOn="validateOn"
258
244
  :persistentClear="true"
@@ -262,7 +248,6 @@
262
248
  :rules="$props.rules"
263
249
  :hideDetails="true"
264
250
  :menuIcon="null"
265
- :style="style"
266
251
  :modelValue="$props.modelValue"
267
252
  @update:modelValue="onSingleChange"
268
253
  v-bind="$attrs"
@@ -363,7 +348,7 @@
363
348
  name="clear"
364
349
  >
365
350
  <FSButton
366
- v-if="$props.clearable && $props.editable && !!$props.modelValue"
351
+ v-if="$props.clearable && $props.disabled && !!$props.modelValue"
367
352
  icon="mdi-close"
368
353
  variant="icon"
369
354
  :color="ColorEnum.Dark"
@@ -381,7 +366,7 @@
381
366
  <FSButton
382
367
  icon="mdi-chevron-down"
383
368
  variant="icon"
384
- :editable="$props.editable"
369
+ :disabled="$props.disabled"
385
370
  :color="ColorEnum.Dark"
386
371
  />
387
372
  </slot>
@@ -394,13 +379,14 @@
394
379
  padding="15px"
395
380
  >
396
381
  <FSSpan>
397
- {{ $tr("ui.select-field.no-data", "No data") }}
382
+ {{ $tr("ui.common.no-data", "No data") }}
398
383
  </FSSpan>
399
384
  </FSRow>
400
385
  </template>
401
386
  </v-select>
402
387
  <FSSlideGroup
403
388
  v-if="$props.multiple && Array.isArray($props.modelValue)"
389
+ class="fs-select-field-multiple-slide-group"
404
390
  >
405
391
  <FSCard
406
392
  v-for="(item, index) in $props.items.filter((item: any) => $props.modelValue.includes(item[$props.itemValue!]))"
@@ -428,6 +414,7 @@
428
414
  <FSButton
429
415
  icon="mdi-close"
430
416
  variant="icon"
417
+ :disabled="$props.disabled"
431
418
  :color="ColorEnum.Dark"
432
419
  @click="() => onCheckboxChange(item[$props.itemValue!])"
433
420
  />
@@ -542,10 +529,15 @@ export default defineComponent({
542
529
  required: false,
543
530
  default: true
544
531
  },
545
- editable: {
532
+ disabled: {
546
533
  type: Boolean,
547
534
  required: false,
548
- default: true
535
+ default: false
536
+ },
537
+ readonly: {
538
+ type: Boolean,
539
+ required: false,
540
+ default: false
549
541
  },
550
542
  loading: {
551
543
  type: Boolean,
@@ -560,8 +552,8 @@ export default defineComponent({
560
552
  },
561
553
  emits: ["update:modelValue"],
562
554
  setup(props, { emit }) {
555
+ const { fontStyles, isExtraSmall, isMobileSized } = useBreakpoints();
563
556
  const { validateOn, getMessages } = useRules();
564
- const { isExtraSmall } = useBreakpoints();
565
557
  const { getColors } = useColors();
566
558
  const { slots } = useSlots();
567
559
 
@@ -576,12 +568,15 @@ export default defineComponent({
576
568
  const dialog = ref(false);
577
569
 
578
570
  const style = computed((): StyleValue => {
579
- if (!props.editable) {
571
+ if (props.disabled) {
580
572
  return {
581
573
  "--fs-select-field-cursor" : "default",
582
574
  "--fs-select-field-border-color" : lights.base,
583
575
  "--fs-select-field-color" : lights.dark,
584
- "--fs-select-field-active-border-color": lights.base
576
+ "--fs-select-field-active-border-color": lights.base,
577
+ "--fs-select-field-multiple-opacity" : "var(--v-disabled-opacity)",
578
+ "--fs-base-field-input-height" : isMobileSized.value ? "34px" : "38px",
579
+ ...fontStyles.value
585
580
  };
586
581
  }
587
582
  return {
@@ -590,7 +585,10 @@ export default defineComponent({
590
585
  "--fs-select-field-border-color" : lights.dark,
591
586
  "--fs-select-field-color" : darks.base,
592
587
  "--fs-select-field-active-border-color": darks.dark,
593
- "--fs-select-field-error-border-color" : errors.base
588
+ "--fs-select-field-error-border-color" : errors.base,
589
+ "--fs-select-field-multiple-opacity" : "1",
590
+ "--fs-base-field-input-height" : isMobileSized.value ? "34px" : "38px",
591
+ ...fontStyles.value
594
592
  };
595
593
  });
596
594
 
@@ -658,7 +656,7 @@ export default defineComponent({
658
656
  });
659
657
 
660
658
  const openMobileOverlay = () => {
661
- if (!props.editable) {
659
+ if (props.disabled) {
662
660
  return;
663
661
  }
664
662
  dialog.value = true;
@@ -5,7 +5,7 @@
5
5
  :description="$props.description"
6
6
  :hideHeader="$props.hideHeader"
7
7
  :required="$props.required"
8
- :editable="$props.editable"
8
+ :disabled="$props.disabled"
9
9
  :rules="$props.rules"
10
10
  :messages="messages"
11
11
  :validateOn="validateOn"
@@ -29,7 +29,7 @@
29
29
  <FSButton
30
30
  variant="icon"
31
31
  icon="mdi-tag-outline"
32
- :editable="$props.editable"
32
+ :disabled="$props.disabled"
33
33
  :color="ColorEnum.Dark"
34
34
  @click="onAdd"
35
35
  />
@@ -40,7 +40,7 @@
40
40
  </FSTextField>
41
41
  <FSTagGroup
42
42
  :tagVariant="$props.tagVariant"
43
- :editable="$props.editable"
43
+ :showRemove="!$props.disabled"
44
44
  :tags="$props.modelValue"
45
45
  :color="$props.tagColor"
46
46
  @remove="onRemove"
@@ -49,7 +49,7 @@
49
49
  </template>
50
50
 
51
51
  <script lang="ts">
52
- import { computed, defineComponent, type PropType, ref } from "vue";
52
+ import { computed, defineComponent, type PropType, ref, type StyleValue } from "vue";
53
53
 
54
54
  import { useColors, useRules, useSlots } from "@dative-gpi/foundation-shared-components/composables";
55
55
  import { type ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-components/models";
@@ -91,7 +91,7 @@ export default defineComponent({
91
91
  tagColor: {
92
92
  type: String as PropType<ColorBase>,
93
93
  required: false,
94
- default: ColorEnum.Primary
94
+ default: ColorEnum.Light
95
95
  },
96
96
  hideHeader: {
97
97
  type: Boolean,
@@ -108,10 +108,10 @@ export default defineComponent({
108
108
  required: false,
109
109
  default: () => []
110
110
  },
111
- editable: {
111
+ disabled: {
112
112
  type: Boolean,
113
113
  required: false,
114
- default: true
114
+ default: false
115
115
  }
116
116
  },
117
117
  emits: ["update:modelValue"],
@@ -129,7 +129,7 @@ export default defineComponent({
129
129
  const innerValue = ref("");
130
130
 
131
131
  const style = computed((): StyleValue => {
132
- if (!props.editable) {
132
+ if (props.disabled) {
133
133
  return {
134
134
  "--fs-tag-field-color": lights.dark
135
135
  };
@@ -145,7 +145,7 @@ export default defineComponent({
145
145
  const onAdd = (event: Event): void => {
146
146
  event.stopImmediatePropagation();
147
147
  event.preventDefault();
148
- if (!props.editable) {
148
+ if (props.disabled) {
149
149
  return;
150
150
  }
151
151
  const tags = props.modelValue ?? [];
@@ -157,7 +157,7 @@ export default defineComponent({
157
157
  }
158
158
 
159
159
  const onRemove = (label: string): void => {
160
- if (!props.editable) {
160
+ if (props.disabled) {
161
161
  return;
162
162
  }
163
163
  const tags = props.modelValue ?? [];
@@ -3,7 +3,7 @@
3
3
  :description="$props.description"
4
4
  :hideHeader="$props.hideHeader"
5
5
  :required="$props.required"
6
- :editable="$props.editable"
6
+ :disabled="$props.disabled"
7
7
  :label="$props.label"
8
8
  :messages="messages"
9
9
  >
@@ -14,18 +14,21 @@
14
14
  :wrap="false"
15
15
  >
16
16
  <FSSelectDateSetting
17
+ minWidth="180px"
17
18
  :lastPeriod="$props.lastPeriod"
18
- :editable="$props.editable"
19
+ :disabled="$props.disabled"
19
20
  :variant="$props.variant"
20
21
  :hideHeader="true"
21
22
  :modelValue="innerDateSetting"
22
23
  @update:modelValue="innerDateSettingChange"
23
24
  />
24
25
  <FSNumberField
26
+ minWidth="60px"
25
27
  v-if="pastSettings.includes(innerDateSetting)"
26
28
  :rules="[NumberRules.required(), NumberRules.min(0)]"
27
- :editable="$props.editable"
29
+ :disabled="$props.disabled"
28
30
  :hideHeader="true"
31
+ :clearable="false"
29
32
  :modelValue="innerDateValue"
30
33
  @update:modelValue="innerDateValueChange"
31
34
  />
@@ -41,8 +44,9 @@
41
44
  </FSIcon>
42
45
  <FSTextField
43
46
  :rules="[TextRules.required(), DateRules.validateExpression($props.variant)]"
44
- :editable="$props.editable"
47
+ :disabled="$props.disabled"
45
48
  :hideHeader="true"
49
+ :clearable="false"
46
50
  :modelValue="innerStartDate"
47
51
  @update:modelValue="innerStartDateChange"
48
52
  />
@@ -56,28 +60,38 @@
56
60
  </FSIcon>
57
61
  <FSTextField
58
62
  :rules="[TextRules.required(), DateRules.validateExpression($props.variant)]"
59
- :editable="$props.editable"
63
+ :disabled="$props.disabled"
60
64
  :hideHeader="true"
65
+ :clearable="false"
61
66
  :modelValue="innerEndDate"
62
67
  @update:modelValue="innerEndDateChange"
63
68
  />
64
69
  </FSRow>
65
70
  </template>
66
- <FSDateTimeRangeField
71
+ <template
67
72
  v-else-if="innerDateSetting === DateSetting.Pick"
68
- :rules="[DateRules.required()]"
69
- :editable="$props.editable"
70
- :hideHeader="true"
71
- :modelValue="actualValue"
72
- @update:modelValue="onPickDates"
73
- />
73
+ >
74
+ <FSDateTimeRangeField
75
+ :width="['350px', '310px']"
76
+ :disabled="$props.disabled"
77
+ :hideHeader="true"
78
+ :clearable="false"
79
+ :modelValue="actualValue"
80
+ @update:modelValue="onPickDates"
81
+ />
82
+ <FSDateTimeRangeDialog
83
+ :dialog="dateTimeRangeDialog"
84
+ @cancel="onCancelPickDates"
85
+ @update:modelValue="onPickDates"
86
+ />
87
+ </template>
74
88
  </FSRow>
75
89
  </FSForm>
76
90
  </FSBaseField>
77
91
  </template>
78
92
 
79
93
  <script lang="ts">
80
- import { computed, defineComponent, type PropType, ref, watch } from "vue";
94
+ import { computed, defineComponent, onMounted, type PropType, ref, watch } from "vue";
81
95
  import _ from "lodash";
82
96
 
83
97
  import { DateRules, NumberRules, TextRules } from "@dative-gpi/foundation-shared-components/models";
@@ -86,6 +100,7 @@ import { useRules } from "@dative-gpi/foundation-shared-components/composables";
86
100
  import { DateSetting } from "@dative-gpi/foundation-shared-domain/enums";
87
101
 
88
102
  import FSSelectDateSetting from "../selects/FSSelectDateSetting.vue";
103
+ import FSDateTimeRangeDialog from './FSDateTimeRangeDialog.vue';
89
104
  import FSDateTimeRangeField from "./FSDateTimeRangeField.vue";
90
105
  import FSNumberField from "./FSNumberField.vue";
91
106
  import FSBaseField from "./FSBaseField.vue";
@@ -97,6 +112,7 @@ import FSRow from "../FSRow.vue";
97
112
  export default defineComponent({
98
113
  name: "FSTermField",
99
114
  components: {
115
+ FSDateTimeRangeDialog,
100
116
  FSDateTimeRangeField,
101
117
  FSSelectDateSetting,
102
118
  FSNumberField,
@@ -155,21 +171,22 @@ export default defineComponent({
155
171
  required: false,
156
172
  default: null
157
173
  },
158
- editable: {
174
+ disabled: {
159
175
  type: Boolean,
160
176
  required: false,
161
- default: true
177
+ default: false
162
178
  }
163
179
  },
164
- emits: ["update:startDate", "update:endDate"],
180
+ emits: ["update", "update:startDate", "update:endDate"],
165
181
  setup(props, { emit }) {
166
- const { parseForPicker, epochToISO, todayToPicker, yesterdayToPicker } = useDateFormat();
182
+ const { parseForPicker, epochToISO } = useDateFormat();
167
183
  const { getMessages } = useRules();
168
184
 
169
185
  const innerDateSetting = ref<DateSetting>(DateSetting.PastDays);
170
186
  const innerDateValue = ref<number>(1);
171
187
  const innerStartDate = ref<string>("now - 1d");
172
188
  const innerEndDate = ref<string>("now");
189
+ const dateTimeRangeDialog = ref(false);
173
190
 
174
191
  const valid = ref<boolean>(false);
175
192
 
@@ -182,8 +199,8 @@ export default defineComponent({
182
199
  });
183
200
 
184
201
  const actualValue = computed(() => {
185
- const dates = [parseForPicker(innerStartDate.value), parseForPicker(innerEndDate.value)]
186
- if(dates.some(d => d == null)) {
202
+ const dates = [parseForPicker(innerStartDate.value), parseForPicker(innerEndDate.value)];
203
+ if (dates.some(d => d == null)) {
187
204
  return null;
188
205
  }
189
206
  return dates as [number, number];
@@ -202,6 +219,7 @@ export default defineComponent({
202
219
  innerStartDate.value = value;
203
220
  if (valid.value) {
204
221
  emit("update:startDate", value);
222
+ emit("update", { startDate: innerStartDate.value, endDate: props.endDate });
205
223
  }
206
224
  };
207
225
 
@@ -215,6 +233,7 @@ export default defineComponent({
215
233
  innerEndDate.value = value;
216
234
  if (valid.value) {
217
235
  emit("update:endDate", value);
236
+ emit("update", { startDate: props.startDate, endDate: innerEndDate.value });
218
237
  }
219
238
  };
220
239
 
@@ -344,12 +363,12 @@ export default defineComponent({
344
363
  }
345
364
  break;
346
365
  case DateSetting.Pick:
347
- innerEndDate.value = todayToPicker();
348
- innerStartDate.value = yesterdayToPicker();
349
- break;
366
+ dateTimeRangeDialog.value = true;
367
+ return;
350
368
  }
351
369
  emit("update:startDate", innerStartDate.value);
352
370
  emit("update:endDate", innerEndDate.value);
371
+ emit("update", { startDate: innerStartDate.value, endDate: innerEndDate.value });
353
372
  };
354
373
 
355
374
  const innerDateValueChange = (value: number) => {
@@ -413,34 +432,35 @@ export default defineComponent({
413
432
  }
414
433
  emit("update:startDate", innerStartDate.value);
415
434
  emit("update:endDate", innerEndDate.value);
435
+ emit("update", { startDate: innerStartDate.value, endDate: innerEndDate.value });
416
436
  };
417
437
 
418
- const onPickDates = (value: number[] | null) => {
419
- if (!value) {
420
- innerEndDate.value = todayToPicker();
421
- innerStartDate.value = yesterdayToPicker();
422
- if (valid.value) {
423
- emit("update:startDate", innerStartDate.value);
424
- emit("update:endDate", innerEndDate.value);
425
- }
438
+ const onPickDates = (value: number[]) => {
439
+ dateTimeRangeDialog.value = false;
440
+
441
+ if(value.length < 2) {
442
+ return;
426
443
  }
427
- else {
428
- console.log(value[0], value[1]);
429
- if (value && value[0] != null && epochToISO(value[0]) !== innerStartDate.value) {
430
- innerStartDate.value = epochToISO(value[0]);
431
- if (valid.value) {
432
- emit("update:startDate", innerStartDate.value);
433
- }
444
+
445
+ innerStartDate.value = epochToISO(value[0]);
446
+ innerEndDate.value = epochToISO(value[1]);
447
+
448
+ if (valid.value !== false) {
449
+ if(props.startDate !== innerStartDate.value) {
450
+ emit("update:startDate", innerStartDate.value);
434
451
  }
435
- if (value && value[1] != null && epochToISO(value[1]) !== innerEndDate.value) {
436
- innerEndDate.value = epochToISO(value[1]);
437
- if (valid.value) {
438
- emit("update:endDate", innerEndDate.value);
439
- }
452
+ if (props.endDate !== innerEndDate.value) {
453
+ emit("update:endDate", innerEndDate.value);
440
454
  }
455
+ emit("update", { startDate: innerStartDate.value, endDate: innerEndDate.value });
441
456
  }
442
457
  };
443
458
 
459
+ const onCancelPickDates = () => {
460
+ dateTimeRangeDialog.value = false;
461
+ reset();
462
+ };
463
+
444
464
  const reset = (): void => {
445
465
  innerStartDate.value = props.startDate;
446
466
  innerEndDate.value = props.endDate;
@@ -637,16 +657,20 @@ export default defineComponent({
637
657
  innerDateValue.value = 1;
638
658
  };
639
659
 
660
+ // This watcher is called once even if both value are set at the same time
640
661
  watch([() => props.startDate, () => props.endDate], () => {
641
- if (
642
- innerStartDate.value !== props.startDate ||
643
- innerEndDate.value !== props.endDate
644
- ) {
662
+ // Having one of those different from the inner value means something up the chain is updating
663
+ if (props.startDate !== innerStartDate.value || props.endDate !== innerEndDate.value) {
645
664
  reset();
646
665
  }
647
- }, { immediate: true });
666
+ });
667
+
668
+ onMounted((): void => {
669
+ reset();
670
+ });
648
671
 
649
672
  return {
673
+ dateTimeRangeDialog,
650
674
  innerDateSetting,
651
675
  innerDateValue,
652
676
  innerStartDate,
@@ -663,6 +687,7 @@ export default defineComponent({
663
687
  innerDateValueChange,
664
688
  innerStartDateChange,
665
689
  innerEndDateChange,
690
+ onCancelPickDates,
666
691
  parseForPicker,
667
692
  onPickDates
668
693
  };